commit d9f1ea341e3b9649bd301f816dc88d3057a029cf Author: Beyhan Oğur Date: Sun Apr 26 22:27:56 2026 +0300 first commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cdb5e6b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,68 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.egg-info/ +dist/ +build/ +*.egg +*.pyc +*.pyo +*.pyd + +# Virtual Environment +venv/ +env/ +ENV/ +.venv +# Django +*.log +db.sqlite3 +db.sqlite3-journal +/staticfiles/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Git +.git/ +.gitignore + +# Docker +.dockerignore +Dockerfile +docker-compose*.yml + +# Documentation +*.md +!README.md + +# Test +.coverage +htmlcov/ +.pytest_cache/ +.tox/ + +# Environment variables +.env +.env.* +!.env.example + +# Secrets +*.pem +*.key +client_secret*.json + +# OS +Thumbs.db + +# Backup files +*.bak +*~ diff --git a/.env b/.env new file mode 100644 index 0000000..f9f333a --- /dev/null +++ b/.env @@ -0,0 +1,36 @@ +# Django Settings +DEBUG=1 +SECRET_KEY=your-secret-key-here-change-this-in-production +DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 api.denizogur.com.tr +CELERY_BROKER_URL=redis://default:gg7678290@10.80.80.70:6379/10 +# Site URL - Production ve Development için buradan değiştirin +SITE_URL=https://api.denizogur.com.tr +# SITE_URL=http://localhost:8000 # Development için bu satırı aktif edin + +# Database Settings (Mevcut PostgreSQL sunucunuz) +USE_POSTGRES=True +POSTGRES_DB=shop +POSTGRES_USER=cloud +POSTGRES_PASSWORD=gg7678290 +POSTGRES_HOST=10.80.80.70 +POSTGRES_PORT=5432 + +# Social Auth (Google) +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-google-oauth2-key +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-google-oauth2-secret + +# Social Auth (GitHub) +SOCIAL_AUTH_GITHUB_KEY=your-github-key +SOCIAL_AUTH_GITHUB_SECRET=your-github-secret + +# Email Settings (Optional) +EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST=10.80.80.70 +EMAIL_PORT=1025 +EMAIL_HOST_USER='' +EMAIL_HOST_PASSWORD='' +EMAIL_USE_TLS=False +EMAIL_USE_SSL=False +DEFAULT_FROM_EMAIL='noreply@localhost' + + diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..448c1e1 --- /dev/null +++ b/.env.example @@ -0,0 +1,31 @@ +# Django Settings +DEBUG=0 +SECRET_KEY=your-secret-key-here-change-this-in-production +DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 yourdomain.com + +# Database Settings (Mevcut PostgreSQL sunucunuz) +USE_POSTGRES=True +POSTGRES_DB=server_dj +POSTGRES_USER=server_dj +POSTGRES_PASSWORD=1234 +POSTGRES_HOST=10.80.80.50 +POSTGRES_PORT=5432 + +# Celery Settings +CELERY_BROKER_URL=redis://default:your-redis-password@your-redis-host:6379/5 +CELERY_RESULT_BACKEND=django-db + +# Social Auth (Google) +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-google-oauth2-key +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-google-oauth2-secret + +# Social Auth (GitHub) +SOCIAL_AUTH_GITHUB_KEY=your-github-key +SOCIAL_AUTH_GITHUB_SECRET=your-github-secret + +# Email Settings (Optional) +EMAIL_HOST=smtp.gmail.com +EMAIL_PORT=587 +EMAIL_HOST_USER=your-email@gmail.com +EMAIL_HOST_PASSWORD=your-email-password +EMAIL_USE_TLS=True diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/AUTH.md b/AUTH.md new file mode 100644 index 0000000..1151a4e --- /dev/null +++ b/AUTH.md @@ -0,0 +1,904 @@ +# Authentication API Documentation + +Bu doküman, Django REST API'nin authentication endpoint'lerini ve kullanım örneklerini içerir. + +## 📋 İçindekiler + +1. [Genel Bilgiler](#genel-bilgiler) +2. [Registration (Kayıt)](#registration-kayıt) +3. [Email Activation (Aktivasyon)](#email-activation-aktivasyon) +4. [Login (Giriş)](#login-giriş) +5. [Token Refresh](#token-refresh) +6. [Social Authentication](#social-authentication) +7. [User Profile](#user-profile) +8. [Password Reset](#password-reset) +9. [Frontend Entegrasyonu](#frontend-entegrasyonu) +10. [Error Handling](#error-handling) + +--- + +## Genel Bilgiler + +**Base URL:** `http://localhost:8000/api/v1/` + +**Authentication:** JWT Bearer Token +``` +Authorization: Bearer +``` + +**Content-Type:** `application/json` + +### Rate Limiting +- **Anonymous users:** 100 requests/hour +- **Authenticated users:** 1000 requests/hour + +--- + +## Registration (Kayıt) + +### Endpoint +``` +POST /api/v1/auth/users/ +``` + +### Request Body +```json +{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123", + "re_password": "StrongP@ssw0rd123", + "first_name": "Ali", + "last_name": "Veli" +} +``` + +### Response (201 Created) +```json +{ + "id": 1, + "email": "user@example.com", + "first_name": "Ali", + "last_name": "Veli" +} +``` + +### Önemli Notlar +- Kullanıcı oluşturulur ancak **`is_active=False`** olarak ayarlanır +- Aktivasyon emaili otomatik gönderilir +- Kullanıcı email aktivasyonu yapmadan login olamaz +- Password minimum 8 karakter olmalı ve güçlü olmalı + +### Curl Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/users/ \ + -H "Content-Type: application/json" \ + -d '{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123", + "re_password": "StrongP@ssw0rd123", + "first_name": "Ali", + "last_name": "Veli" + }' +``` + +--- + +## Email Activation (Aktivasyon) + +### Endpoint +``` +POST /api/v1/auth/users/activation/ +``` + +### Request Body +```json +{ + "uid": "MQ", + "token": "c4h7vu-a8f3d2e1c4b5a6d7e8f9g0h1" +} +``` + +### Response (204 No Content) +Başarılı aktivasyon sonrası response body boş döner. + +### Önemli Notlar +- `uid` ve `token` aktivasyon emailindeki linkten alınır +- Token 24 saat geçerlidir +- Başarılı aktivasyon sonrası `is_active=True` olur +- Kullanıcı artık login olabilir + +### Email Link Format +``` +http://localhost:3000/auth/activate/{uid}/{token}/ +``` + +Frontend bu linki yakalayıp backend'e POST request yapmalı. + +### Curl Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/users/activation/ \ + -H "Content-Type: application/json" \ + -d '{ + "uid": "MQ", + "token": "c4h7vu-a8f3d2e1c4b5a6d7e8f9g0h1" + }' +``` + +### Resend Activation Email +``` +POST /api/v1/auth/users/resend_activation/ +``` + +Request Body: +```json +{ + "email": "user@example.com" +} +``` + +--- + +## Login (Giriş) + +### Endpoint +``` +POST /api/v1/auth/jwt/create/ +``` + +### Request Body +```json +{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123" +} +``` + +### Response (200 OK) +```json +{ + "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` + +### Token Bilgileri +- **Access Token:** 60 dakika geçerli +- **Refresh Token:** 7 gün geçerli +- Token rotation aktif (refresh kullanıldığında yeni refresh token döner) + +### Önemli Notlar +- Kullanıcı `is_active=False` ise login başarısız olur +- Hatalı email/password için 401 Unauthorized döner + +### Curl Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/jwt/create/ \ + -H "Content-Type: application/json" \ + -d '{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123" + }' +``` + +### Error Response (401 Unauthorized) +```json +{ + "detail": "No active account found with the given credentials" +} +``` + +--- + +## Token Refresh + +### Endpoint +``` +POST /api/v1/auth/jwt/refresh/ +``` + +### Request Body +```json +{ + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` + +### Response (200 OK) +```json +{ + "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` + +### Önemli Notlar +- Yeni access token ve yeni refresh token döner (rotation) +- Eski refresh token blacklist'e eklenir +- Refresh token expire olduysa 401 döner + +### Curl Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/jwt/refresh/ \ + -H "Content-Type: application/json" \ + -d '{ + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + }' +``` + +--- + +## Social Authentication + +### Supported Providers +- **Google:** `google-oauth2` +- **GitHub:** `github` +- **Facebook:** `facebook` + +### Endpoint +``` +POST /api/v1/auth/social// +``` + +### Request Body +```json +{ + "access_token": "ya29.a0AfH6SMBx..." +} +``` + +### Response (200 OK) +```json +{ + "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 1, + "email": "user@example.com", + "first_name": "Ali", + "last_name": "Veli", + "is_active": true, + "date_joined": "2025-12-12T21:30:00Z" + } +} +``` + +### Önemli Notlar +- Social login ile gelen kullanıcılar **otomatik aktif** (`is_active=True`) +- Email aktivasyon gerekmez +- Kullanıcı yoksa otomatik oluşturulur +- Provider'dan email alınamazsa hata döner + +### Google OAuth2 Example + +#### 1. Frontend'de Google OAuth +```javascript +// Google OAuth2 ile token al +const googleUser = await gapi.auth2.getAuthInstance().signIn(); +const accessToken = googleUser.getAuthResponse().access_token; + +// Backend'e gönder +const response = await fetch('http://localhost:8000/api/v1/auth/social/google-oauth2/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + access_token: accessToken + }) +}); + +const data = await response.json(); +// data.access, data.refresh, data.user +``` + +#### 2. Curl Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/social/google-oauth2/ \ + -H "Content-Type: application/json" \ + -d '{ + "access_token": "ya29.a0AfH6SMBx..." + }' +``` + +### GitHub OAuth2 Example +```bash +curl -X POST http://localhost:8000/api/v1/auth/social/github/ \ + -H "Content-Type: application/json" \ + -d '{ + "access_token": "gho_16C7e42F292c6912E7710c838347Ae178B4a" + }' +``` + +### Error Responses + +**Invalid Provider (400)** +```json +{ + "error": "Invalid provider. Must be one of: google-oauth2, github, facebook" +} +``` + +**Missing Token (400)** +```json +{ + "error": "access_token is required" +} +``` + +**Authentication Failed (401)** +```json +{ + "error": "Authentication failed. Invalid token." +} +``` + +**Email Not Provided (403)** +```json +{ + "error": "Authentication forbidden. Email not provided by provider or permission denied." +} +``` + +--- + +## User Profile + +### Get Current User +``` +GET /api/v1/auth/users/me/ +``` + +**Headers:** +``` +Authorization: Bearer +``` + +**Response (200 OK):** +```json +{ + "id": 1, + "email": "user@example.com", + "first_name": "Ali", + "last_name": "Veli", + "is_active": true, + "date_joined": "2025-12-12T21:30:00Z" +} +``` + +### Update Current User +``` +PATCH /api/v1/auth/users/me/ +``` + +**Request Body:** +```json +{ + "first_name": "Ahmet", + "last_name": "Yılmaz" +} +``` + +### Curl Example +```bash +curl -X GET http://localhost:8000/api/v1/auth/users/me/ \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +``` + +--- + +## Password Reset + +### 1. Request Password Reset +``` +POST /api/v1/auth/users/reset_password/ +``` + +**Request Body:** +```json +{ + "email": "user@example.com" +} +``` + +**Response (204 No Content)** + +Email gönderilir, link formatı: +``` +http://localhost:3000/auth/password/reset/confirm/{uid}/{token}/ +``` + +### 2. Confirm Password Reset +``` +POST /api/v1/auth/users/reset_password_confirm/ +``` + +**Request Body:** +```json +{ + "uid": "MQ", + "token": "c4h7vu-a8f3d2e1c4b5a6d7e8f9g0h1", + "new_password": "NewStrongP@ssw0rd123", + "re_new_password": "NewStrongP@ssw0rd123" +} +``` + +**Response (204 No Content)** + +--- + +## Frontend Entegrasyonu + +### Nuxt.js 3 Example + +#### 1. Composable: `useAuth.ts` +```typescript +// composables/useAuth.ts +export const useAuth = () => { + const config = useRuntimeConfig(); + const accessToken = useCookie('access_token'); + const refreshToken = useCookie('refresh_token'); + + const register = async (userData: { + email: string; + password: string; + re_password: string; + first_name: string; + last_name: string; + }) => { + const { data, error } = await useFetch(`${config.public.apiBase}/auth/users/`, { + method: 'POST', + body: userData, + }); + return { data, error }; + }; + + const login = async (email: string, password: string) => { + const { data, error } = await useFetch(`${config.public.apiBase}/auth/jwt/create/`, { + method: 'POST', + body: { email, password }, + }); + + if (data.value) { + accessToken.value = data.value.access; + refreshToken.value = data.value.refresh; + } + + return { data, error }; + }; + + const socialLogin = async (provider: string, accessTokenValue: string) => { + const { data, error } = await useFetch( + `${config.public.apiBase}/auth/social/${provider}/`, + { + method: 'POST', + body: { access_token: accessTokenValue }, + } + ); + + if (data.value) { + accessToken.value = data.value.access; + refreshToken.value = data.value.refresh; + } + + return { data, error }; + }; + + const getUser = async () => { + if (!accessToken.value) return null; + + const { data } = await useFetch(`${config.public.apiBase}/auth/users/me/`, { + headers: { + Authorization: `Bearer ${accessToken.value}`, + }, + }); + + return data.value; + }; + + const logout = () => { + accessToken.value = null; + refreshToken.value = null; + }; + + return { + register, + login, + socialLogin, + getUser, + logout, + accessToken, + refreshToken, + }; +}; +``` + +#### 2. Register Page: `pages/auth/register.vue` +```vue + + + +``` + +#### 3. Activation Page: `pages/auth/activate/[uid]/[token].vue` +```vue + + + +``` + +#### 4. Login Page: `pages/auth/login.vue` +```vue + + + +``` + +### Next.js 14 Example + +#### 1. Auth Context: `context/AuthContext.tsx` +```typescript +'use client'; + +import { createContext, useContext, useState, useEffect } from 'react'; + +interface User { + id: number; + email: string; + first_name: string; + last_name: string; +} + +interface AuthContextType { + user: User | null; + login: (email: string, password: string) => Promise; + logout: () => void; + register: (userData: any) => Promise; +} + +const AuthContext = createContext(undefined); + +export function AuthProvider({ children }: { children: React.ReactNode }) { + const [user, setUser] = useState(null); + const [accessToken, setAccessToken] = useState(null); + + useEffect(() => { + // Load token from localStorage + const token = localStorage.getItem('access_token'); + if (token) { + setAccessToken(token); + fetchUser(token); + } + }, []); + + const fetchUser = async (token: string) => { + try { + const response = await fetch('http://localhost:8000/api/v1/auth/users/me/', { + headers: { + 'Authorization': `Bearer ${token}`, + }, + }); + const data = await response.json(); + setUser(data); + } catch (error) { + console.error('Failed to fetch user', error); + } + }; + + const login = async (email: string, password: string) => { + const response = await fetch('http://localhost:8000/api/v1/auth/jwt/create/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email, password }), + }); + + if (!response.ok) { + throw new Error('Login failed'); + } + + const data = await response.json(); + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + setAccessToken(data.access); + await fetchUser(data.access); + }; + + const logout = () => { + localStorage.removeItem('access_token'); + localStorage.removeItem('refresh_token'); + setAccessToken(null); + setUser(null); + }; + + const register = async (userData: any) => { + const response = await fetch('http://localhost:8000/api/v1/auth/users/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(userData), + }); + + if (!response.ok) { + throw new Error('Registration failed'); + } + }; + + return ( + + {children} + + ); +} + +export const useAuth = () => { + const context = useContext(AuthContext); + if (context === undefined) { + throw new Error('useAuth must be used within an AuthProvider'); + } + return context; +}; +``` + +--- + +## Error Handling + +### Common Error Codes + +| Status Code | Meaning | Common Causes | +|-------------|---------|---------------| +| 400 | Bad Request | Invalid data, validation errors | +| 401 | Unauthorized | Invalid credentials, expired token | +| 403 | Forbidden | Account not activated, permission denied | +| 404 | Not Found | Endpoint doesn't exist | +| 429 | Too Many Requests | Rate limit exceeded | +| 500 | Internal Server Error | Server-side error | + +### Error Response Format +```json +{ + "detail": "Error message here", + "field_name": ["Field-specific error"] +} +``` + +### Example: Registration Validation Error +```json +{ + "email": ["A user with that email already exists."], + "password": ["This password is too common."] +} +``` + +--- + +## Testing with Postman/Insomnia + +### 1. Register +``` +POST http://localhost:8000/api/v1/auth/users/ +Content-Type: application/json + +{ + "email": "test@example.com", + "password": "TestP@ssw0rd123", + "re_password": "TestP@ssw0rd123", + "first_name": "Test", + "last_name": "User" +} +``` + +### 2. Check Email (MailPit) +Open: `http://localhost:8025` + +### 3. Activate Account +``` +POST http://localhost:8000/api/v1/auth/users/activation/ +Content-Type: application/json + +{ + "uid": "MQ", + "token": "c4h7vu-a8f3d2e1c4b5a6d7e8f9g0h1" +} +``` + +### 4. Login +``` +POST http://localhost:8000/api/v1/auth/jwt/create/ +Content-Type: application/json + +{ + "email": "test@example.com", + "password": "TestP@ssw0rd123" +} +``` + +### 5. Get User Profile +``` +GET http://localhost:8000/api/v1/auth/users/me/ +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... +``` + +--- + +## Environment Variables + +### Development (.env.dev) +```bash +DEBUG=True +SECRET_KEY=your-secret-key-here +ALLOWED_HOSTS=localhost,127.0.0.1 + +# Database +DATABASE_URL=sqlite:///db.sqlite3 + +# Email (MailPit) +EMAIL_HOST=localhost +EMAIL_PORT=1025 +EMAIL_USE_TLS=False + +# CORS +CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173 +``` + +### Production (.env.prod) +```bash +DEBUG=False +SECRET_KEY=your-production-secret-key +ALLOWED_HOSTS=yourdomain.com,api.yourdomain.com + +# Database +DATABASE_URL=postgresql://user:pass@host:5432/dbname + +# Email +EMAIL_HOST=smtp.gmail.com +EMAIL_PORT=587 +EMAIL_USE_TLS=True +EMAIL_HOST_USER=your-email@gmail.com +EMAIL_HOST_PASSWORD=your-app-password + +# Social Auth +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-google-client-id +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-google-client-secret +SOCIAL_AUTH_GITHUB_KEY=your-github-client-id +SOCIAL_AUTH_GITHUB_SECRET=your-github-client-secret + +# CORS +CORS_ALLOWED_ORIGINS=https://yourdomain.com +``` + +--- + +## Support + +Sorularınız için: +- GitHub Issues: [Your Repo] +- Email: support@yourdomain.com +- Documentation: [Your Docs URL] + +--- + +**Last Updated:** 2025-12-12 +**Version:** 1.0.0 + diff --git a/CACHE.md b/CACHE.md new file mode 100644 index 0000000..b7036ea --- /dev/null +++ b/CACHE.md @@ -0,0 +1,110 @@ +# Cache Dokumani + +Bu dokuman, `home`, `portfolio` ve `settings` app'lerinde yapilan cache +ayarlarini ve otomatik cache temizleme (invalidation) akislarini aciklar. + +## Genel + +- Cache suresi: 5 dakika (`60 * 5` saniye). +- Cache Django cache backend uzerinden tutulur (`django.core.cache.cache`). +- Veri ekleme, silme ve guncelleme (post_save/post_delete) veya M2M degisimi + oldugunda ilgili cache temizlenir. + +## Home App + +### Cache Key'leri + +- `home:active_home` +- `home:active_aboutme` +- `home:service_list` +- `home:service_title` +- `home:resume` +- `home:education_list` +- `home:experience_list` +- `home:skill_list` +- `home:knowledge_list` +- `home:active_menu` + +### Cache Kullanan Endpoint'ler + +- `HomeDetailView` -> `home:active_home` +- `AboutMeDetailView` -> `home:active_aboutme` +- `MyServiceList` -> `home:service_list` +- `MyServiceTitleDetailView` -> `home:service_title` +- `MyResumeDetailView` -> `home:resume` +- `EducationListView` -> `home:education_list` +- `ExperienceListView` -> `home:experience_list` +- `SkillListView` -> `home:skill_list` +- `KnowledgeListView` -> `home:knowledge_list` +- `MainMenuDetailView` -> `home:active_menu` + +### Cache Temizleme + +`home/signals.py` uzerinden asagidaki modellerde degisim oldugunda +tum `home:*` cache'leri temizlenir: + +- `Home` +- `AboutMe` +- `MyService` +- `MyServiceTitle` +- `MyResume` +- `Education` +- `Experience` +- `Skill` +- `Knowledge` +- `MainMenu` + +Ek olarak `Home.tags` M2M degisimi (`post_add`, `post_remove`, `post_clear`) +oldugunda cache temizlenir. + +## Portfolio App + +### Cache Key'leri + +- `portfolio:category_list` +- `portfolio:category_detail:` +- `portfolio:portfolio_list` +- `portfolio:portfolio_detail:` + +### Cache Kullanan Endpoint'ler + +- `CategoryList` -> `portfolio:category_list` +- `CategoryDetail` -> `portfolio:category_detail:` +- `PortfolioList` -> `portfolio:portfolio_list` +- `PortfolioDetail` -> `portfolio:portfolio_detail:` + +### Cache Temizleme + +`portfolio/signals.py` uzerinden asagidaki durumlarda cache temizlenir: + +- `Category` kaydi kayit/silme/guncelleme -> kategori list ve ilgili detay +- `Portfolio` kaydi kayit/silme/guncelleme -> portfolio list ve ilgili detay +- `Portfolio.categories` M2M degisimi -> ilgili portfolio detay ve list + +## Settings App + +### Cache Key'leri + +- `settings:detail` +- `settings:site_status` + +### Cache Kullanan Endpoint'ler + +- `SettingDetailView` -> `settings:detail` +- `SettingOpenCloseDetailView` -> `settings:site_status` + +### Cache Temizleme + +`settings/signals.py` uzerinden asagidaki modellerde degisim oldugunda +tum cache temizlenir: + +- `Setting` +- `SiteSettings` + +## Notlar + +- Signal'larin calismasi icin `apps.py` icindeki `ready()` metodlari + ile signal moduleri yuklenir: + - `home/apps.py` + - `portfolio/apps.py` + - `settings/apps.py` diff --git a/CONTACT_EMAIL_SETUP.md b/CONTACT_EMAIL_SETUP.md new file mode 100644 index 0000000..077e67a --- /dev/null +++ b/CONTACT_EMAIL_SETUP.md @@ -0,0 +1,208 @@ +# Contact Form - Email Gönderimi (Celery) + +## Yapılan Değişiklikler + +### 1. Contact Model Güncellemeleri +- `user` alanı artık `null=True, blank=True` (anonim kullanıcılar da form gönderebilir) +- `ip` alanı artık `null=True, blank=True` (opsiyonel) +- `on_delete=SET_NULL` olarak değiştirildi + +### 2. Yeni Dosyalar +- **contact/tasks.py**: Celery task ile email gönderimi +- **core/celery.py**: Celery yapılandırması +- **core/__init__.py**: Celery app otomatik yükleme +- **test_contact_api.py**: API test scripti + +### 3. View Güncellemeleri (contact/views.py) +- `permission_classes = [AllowAny]` - Herkes form gönderebilir +- IP adresi otomatik olarak algılanır +- Kullanıcı giriş yapmışsa user kaydedilir, yoksa None +- Contact kaydedildikten sonra Celery task ile email gönderilir + +### 4. Serializer Güncellemeleri +- Gereksiz alanlar kaldırıldı (ip, updated_at) +- Sadece gerekli alanlar kabul edilir + +## Kurulum ve Çalıştırma + +### 1. Migration Uygula (TAMAMLANDI ✅) +```bash +python manage.py makemigrations contact +python manage.py migrate contact +``` + +### 2. Redis'in Çalıştığından Emin Olun +Celery için Redis broker gerekli. Settings'te tanımlı: +``` +CELERY_BROKER_URL = redis://default:1923btO**@10.80.80.70:6379/5 +``` + +### 3. MailPit'in Çalıştığından Emin Olun +Email testleri için MailPit kullanılıyor: +- SMTP: localhost:1025 +- Web UI: http://localhost:8025 + +MailPit başlatma (Docker): +```bash +docker run -d -p 1025:1025 -p 8025:8025 --name mailpit axllent/mailpit +``` + +### 4. Celery Worker Başlat +Yeni bir terminal açın ve şu komutu çalıştırın: +```bash +cd /Users/beyhan/Desktop/Projeler/Python/atabackend +source venv/bin/activate +celery -A core worker --loglevel=info +``` + +### 5. Django Sunucusunu Başlat +Başka bir terminal açın: +```bash +cd /Users/beyhan/Desktop/Projeler/Python/atabackend +source venv/bin/activate +python manage.py runserver +``` + +### 6. Test Et +```bash +# Terminal'de test script'i çalıştır +python test_contact_api.py + +# Veya cURL ile +curl -X POST http://127.0.0.1:8000/api/v1/contact/create/ \ + -H "Content-Type: application/json" \ + -d '{ + "name": "Test Kullanıcı", + "email": "test@example.com", + "subject": "Test Konusu", + "message": "Bu bir test mesajıdır." + }' +``` + +### 7. Email Kontrolü +- MailPit web arayüzüne gidin: http://localhost:8025 +- Gönderilen emaili göreceksiniz + +## API Endpoint + +**URL**: `POST /api/v1/contact/create/` + +**Permission**: AllowAny (Kimlik doğrulama gerekmez) + +**Request Body**: +```json +{ + "name": "Adınız Soyadınız", + "email": "email@example.com", + "subject": "Konu", + "message": "Mesajınız" +} +``` + +**Response** (201 Created): +```json +{ + "id": 1, + "name": "Adınız Soyadınız", + "email": "email@example.com", + "subject": "Konu", + "message": "Mesajınız", + "created_at": "2026-01-15T10:30:00Z" +} +``` + +## Celery Task İzleme + +### Task Logları +Celery worker terminalinde task durumunu görebilirsiniz: +``` +[2026-01-15 10:30:00,123: INFO/MainProcess] Task contact.tasks.send_contact_email[...] received +[2026-01-15 10:30:00,456: INFO/ForkPoolWorker-1] Task contact.tasks.send_contact_email[...] succeeded +``` + +### Django Admin'den İzleme +Celery Beat ve Results kurulu, admin panelden task sonuçlarını görebilirsiniz: +- http://127.0.0.1:8000/admin/django_celery_results/ + +## Email Şablonu + +Gönderilen email formatı: +``` +Konu: Yeni İletişim Mesajı: [KONU] + +Yeni bir iletişim mesajı alındı! + +Gönderen: [AD SOYAD] +Email: [EMAIL] +IP Adresi: [IP] + +Konu: [KONU] + +Mesaj: +[MESAJ İÇERİĞİ] + +--- +Bu mesaj otomatik olarak gönderilmiştir. +``` + +## Production Ayarları + +Production'da şunları yapın: + +1. **Email Backend'i değiştir** (settings.py): +```python +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'smtp.gmail.com' # veya kendi SMTP sunucunuz +EMAIL_PORT = 587 +EMAIL_USE_TLS = True +EMAIL_HOST_USER = 'your-email@gmail.com' +EMAIL_HOST_PASSWORD = 'your-app-password' +DEFAULT_FROM_EMAIL = 'noreply@denizogur.com.tr' +``` + +2. **Alıcı email adresini değiştir** (contact/tasks.py): +```python +recipient_list=['info@denizogur.com.tr'] # Production email +``` + +3. **Redis production URL'i kullan** +4. **Celery worker'ı production'da service olarak çalıştır** + +## Sorun Giderme + +### Email Gönderilmiyor +1. Celery worker çalışıyor mu? → Terminal'i kontrol edin +2. Redis bağlantısı var mı? → `CELERY_BROKER_URL` kontrol edin +3. MailPit çalışıyor mu? → http://localhost:8025 kontrol edin + +### Task Çalışmıyor +```bash +# Celery task'ı manuel test et +python manage.py shell +>>> from contact.tasks import send_contact_email +>>> send_contact_email.delay('Test', 'test@test.com', 'Konu', 'Mesaj', '127.0.0.1') +``` + +### Celery Worker Hatası +```bash +# Celery worker'ı yeniden başlat +# Worker terminalinde Ctrl+C +# Sonra tekrar başlat: +celery -A core worker --loglevel=info +``` + +## İleride Eklenebilecek Özellikler + +1. **Email Template (HTML)**: Rich HTML email şablonu +2. **Auto-reply**: Kullanıcıya otomatik teşekkür emaili +3. **Rate Limiting**: Spam koruması için rate limiting +4. **File Upload**: Contact formuna dosya ekleme +5. **Admin Notifications**: Yeni mesaj geldiğinde admin bildirim +6. **Email Queue Retry**: Email başarısız olursa yeniden deneme + +## Referanslar + +- Celery Docs: https://docs.celeryq.dev/ +- Django Celery Results: https://django-celery-results.readthedocs.io/ +- MailPit: https://github.com/axllent/mailpit + diff --git a/COPILOT_MEMORY.md b/COPILOT_MEMORY.md new file mode 100644 index 0000000..725e3d3 --- /dev/null +++ b/COPILOT_MEMORY.md @@ -0,0 +1,194 @@ +# Copilot Memory - Django Auth System Development + +Bu dosya, Django 6.0 projemizde Custom User + Djoser + JWT + Social Auth sisteminin geliştirilme sürecini takip eder. + +--- + +## 2025-12-12T21:35:00Z + +### ✅ Değişiklik Özeti: İlk Kurulum - Custom User Model ve Auth Sistemi Temeli + +**Tamamlanan İşler:** + +1. **Custom User Model Oluşturuldu** (`accounts/models.py`) + - `CustomUser` modeli: Email tabanlı authentication (username yok) + - `CustomUserManager`: `create_user` ve `create_superuser` metodları + - Alanlar: `email` (unique), `first_name`, `last_name`, `is_staff`, `is_active`, `date_joined` + - `USERNAME_FIELD = "email"` + +2. **Admin Panel Konfigürasyonu** (`accounts/admin.py`) + - `CustomUserAdmin` sınıfı ile Django admin'de custom user yönetimi + - List display, filters, search fields yapılandırıldı + +3. **Serializers Oluşturuldu** (`accounts/serializers.py`) + - `CustomUserCreateSerializer`: Register için, `is_active=False` set eder + - `CustomUserSerializer`: User profil bilgileri için + - `SocialLoginSerializer`: Social auth için provider + access_token + +4. **Social Auth Pipeline** (`accounts/pipeline.py`) + - `activate_user` fonksiyonu: Social login ile gelen kullanıcıları otomatik aktif eder + - Normal register: `is_active=False` (email aktivasyon gerekli) + - Social register: `is_active=True` (direkt aktif) + +5. **Social Login View** (`accounts/views.py`) + - `SocialLoginView`: Provider token'ı doğrular, user oluşturur/bulur, JWT döner + - Desteklenen provider'lar: google-oauth2, github, facebook + - Error handling: AuthForbidden, AuthException, genel hatalar + +6. **Settings.py Tam Konfigürasyonu** (`core/settings.py`) + - `AUTH_USER_MODEL = 'accounts.CustomUser'` + - `INSTALLED_APPS`: rest_framework, rest_framework_simplejwt, djoser, corsheaders, social_django, accounts + - **REST_FRAMEWORK**: JWT authentication, throttling (100/hour anon, 1000/hour user) + - **SIMPLE_JWT**: 60 min access, 7 days refresh, token rotation, blacklist + - **DJOSER**: Email activation, custom serializers, password reset + - **EMAIL**: MailPit (localhost:1025) dev için, production için SMTP placeholder + - **CORS**: localhost:3000, 5173, 8080 (Nuxt/Next/Vue için) + - **SOCIAL_AUTH**: Google, GitHub, Facebook backends + custom pipeline + +7. **Email Templates Oluşturuldu** (`templates/email/`) + - `activation_email.html` / `.txt`: Hesap aktivasyon emaili + - `confirmation_email.html` / `.txt`: Aktivasyon başarılı emaili + - `password_reset_email.html` / `.txt`: Şifre sıfırlama emaili + - Modern, responsive HTML tasarım + plain text alternatifi + +8. **URL Routing** (`accounts/urls.py`) + - Djoser endpoints: `/api/v1/auth/users/` (register), `/api/v1/auth/users/activation/` (activate) + - JWT endpoints: `/api/v1/auth/jwt/create/` (login), `/api/v1/auth/jwt/refresh/` + - Social auth: `/api/v1/auth/social//` + - Python Social Auth URLs: `/api/v1/social/` + +9. **Database Migrations** + - `accounts/migrations/0001_initial.py`: CustomUser model + - `social_django` migrations: Social auth tabloları + - Tüm migration'lar başarıyla uygulandı (migrate completed) + +### 📁 Değiştirilen/Oluşturulan Dosyalar: +- `accounts/models.py` (yeni) +- `accounts/admin.py` (güncellendi) +- `accounts/serializers.py` (yeni) +- `accounts/pipeline.py` (yeni) +- `accounts/views.py` (güncellendi) +- `accounts/urls.py` (güncellendi) +- `accounts/migrations/0001_initial.py` (oluşturuldu) +- `core/settings.py` (kapsamlı güncelleme) +- `templates/email/activation_email.html` (yeni) +- `templates/email/activation_email.txt` (yeni) +- `templates/email/confirmation_email.html` (yeni) +- `templates/email/confirmation_email.txt` (yeni) +- `templates/email/password_reset_email.html` (yeni) +- `templates/email/password_reset_email.txt` (yeni) + +### 🎯 Sistem Özellikleri: + +**Authentication Akışları:** + +1. **Normal Register (Email/Password):** + ``` + POST /api/v1/auth/users/ + Body: { "email", "password", "re_password", "first_name", "last_name" } + → User oluşturulur (is_active=False) + → Aktivasyon emaili gönderilir + → POST /api/v1/auth/users/activation/ { "uid", "token" } + → is_active=True olur + → POST /api/v1/auth/jwt/create/ { "email", "password" } + → JWT tokens alınır + ``` + +2. **Social Login:** + ``` + POST /api/v1/auth/social/google-oauth2/ + Body: { "access_token": "..." } + → Provider'dan user bilgisi alınır + → User bulunur/oluşturulur (is_active=True) + → JWT tokens direkt döner + ``` + +3. **Login:** + ``` + POST /api/v1/auth/jwt/create/ + Body: { "email", "password" } + → Access + Refresh token döner + ``` + +4. **Token Refresh:** + ``` + POST /api/v1/auth/jwt/refresh/ + Body: { "refresh": "..." } + → Yeni access token döner + ``` + +### ⚙️ Yapılandırma Gereksinimleri: + +**Environment Variables (Production için):** +```bash +# Email +EMAIL_HOST=smtp.gmail.com +EMAIL_PORT=587 +EMAIL_USE_TLS=True +EMAIL_HOST_USER=your-email@gmail.com +EMAIL_HOST_PASSWORD=your-app-password +DEFAULT_FROM_EMAIL=noreply@yourdomain.com + +# Social Auth - Google +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-google-client-id +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-google-client-secret + +# Social Auth - GitHub +SOCIAL_AUTH_GITHUB_KEY=your-github-client-id +SOCIAL_AUTH_GITHUB_SECRET=your-github-client-secret + +# Social Auth - Facebook +SOCIAL_AUTH_FACEBOOK_KEY=your-facebook-app-id +SOCIAL_AUTH_FACEBOOK_SECRET=your-facebook-app-secret +``` + +**Development Tools:** +- MailPit: `localhost:1025` (SMTP), `localhost:8025` (Web UI) +- Database: SQLite (db.sqlite3) + +### 📝 Next Steps: + +1. **Testing (Yüksek Öncelik):** + - [ ] Unit tests: Register → is_active=False check + - [ ] Unit tests: Activation → is_active=True check + - [ ] Unit tests: Login → aktif/inaktif user scenarios + - [ ] Unit tests: Social login → user creation + JWT response + - [ ] Integration tests: Full auth flow + +2. **Dokümantasyon:** + - [ ] `AUTH.md` oluştur: Tüm endpoint'ler, request/response örnekleri + - [ ] Frontend entegrasyon kılavuzu (Nuxt.js + Next.js) + - [ ] Environment variables dokümantasyonu + - [ ] Deployment checklist + +3. **İyileştirmeler:** + - [ ] Rate limiting test et + - [ ] Email template'lerini test et (MailPit ile) + - [ ] Social auth provider'ları test et + - [ ] Error mesajlarını frontend-friendly hale getir + - [ ] Logging ekle (özellikle auth failures için) + +4. **Güvenlik:** + - [ ] HTTPS için production settings + - [ ] CSRF token stratejisi netleştir + - [ ] JWT secret key'i environment variable'a taşı + - [ ] Rate limiting değerlerini production için ayarla + +5. **Opsiyonel Özellikler:** + - [ ] Email değiştirme flow'u + - [ ] 2FA (Two-Factor Authentication) + - [ ] Remember me functionality + - [ ] Account deletion + - [ ] Social account linking (birden fazla provider) + +### 🐛 Bilinen Sorunlar: +- Yok (şu an için) + +### 📚 Referanslar: +- Djoser Docs: https://djoser.readthedocs.io/ +- SimpleJWT Docs: https://django-rest-framework-simplejwt.readthedocs.io/ +- Python Social Auth: https://python-social-auth.readthedocs.io/ +- Django REST Framework: https://www.django-rest-framework.org/ + +--- + diff --git a/DOCKER_CELERY.md b/DOCKER_CELERY.md new file mode 100644 index 0000000..ee37299 --- /dev/null +++ b/DOCKER_CELERY.md @@ -0,0 +1,404 @@ +# 🚀 Docker Compose ile Celery Kullanımı + +Bu döküman, Docker Compose üzerinde Celery worker ve beat'in nasıl çalıştırılacağını açıklar. + +## 📋 Genel Bakış + +Projede iki Docker Compose yapılandırması bulunmaktadır: + +1. **docker-compose.yml** - Development (Geliştirme) ortamı +2. **docker-compose.prod.yml** - Production (Canlı) ortamı + +Her iki ortamda da Celery worker ve beat aynı container içinde çalışır: +```bash +celery -A core worker --beat --scheduler django --loglevel=info +``` + +## 🏗️ Servis Yapısı + +### Development (docker-compose.yml) + +```yaml +services: + web: # Django uygulaması + celery: # Celery worker + beat +``` + +### Production (docker-compose.prod.yml) + +```yaml +services: + web-atahan: # Django uygulaması (Gunicorn) + celery-atahan: # Celery worker + beat + nginx: # Reverse proxy +``` + +## 🚀 Başlatma + +### Development Ortamı + +```bash +# Tüm servisleri başlat (web + celery) +docker-compose up + +# Arka planda çalıştır +docker-compose up -d + +# Sadece Celery'yi başlat +docker-compose up celery + +# Rebuild ile başlat +docker-compose up --build +``` + +### Production Ortamı + +```bash +# Tüm servisleri başlat +docker-compose -f docker-compose.prod.yml up -d + +# Sadece Celery'yi başlat +docker-compose -f docker-compose.prod.yml up -d celery-atahan + +# Rebuild ile başlat +docker-compose -f docker-compose.prod.yml up --build -d +``` + +## 📊 Log İzleme + +### Development + +```bash +# Tüm servislerin logları +docker-compose logs -f + +# Sadece Celery logları +docker-compose logs -f celery + +# Son 100 satır +docker-compose logs --tail=100 celery + +# Belirli bir tarihten sonraki loglar +docker-compose logs --since 2026-01-15T10:00:00 celery +``` + +### Production + +```bash +# Celery logları +docker-compose -f docker-compose.prod.yml logs -f celery-atahan + +# Tüm servisler +docker-compose -f docker-compose.prod.yml logs -f +``` + +## 🔄 Yeniden Başlatma + +### Development + +```bash +# Celery'yi yeniden başlat +docker-compose restart celery + +# Tüm servisleri yeniden başlat +docker-compose restart +``` + +### Production + +```bash +# Celery'yi yeniden başlat +docker-compose -f docker-compose.prod.yml restart celery-atahan + +# Tüm servisleri yeniden başlat +docker-compose -f docker-compose.prod.yml restart +``` + +## 🛑 Durdurma + +### Development + +```bash +# Servisleri durdur (container'ları kaldır) +docker-compose down + +# Sadece Celery'yi durdur +docker-compose stop celery + +# Volume'leri de sil +docker-compose down -v +``` + +### Production + +```bash +# Servisleri durdur +docker-compose -f docker-compose.prod.yml down + +# Sadece Celery'yi durdur +docker-compose -f docker-compose.prod.yml stop celery-atahan +``` + +## 🔧 Container'a Bağlanma + +### Development + +```bash +# Celery container'a bash ile bağlan +docker-compose exec celery bash + +# Celery container'da komut çalıştır +docker-compose exec celery ls -la +docker-compose exec celery python manage.py shell +``` + +### Production + +```bash +# Celery container'a bash ile bağlan +docker-compose -f docker-compose.prod.yml exec celery-atahan bash + +# Komut çalıştır +docker-compose -f docker-compose.prod.yml exec celery-atahan python manage.py shell +``` + +## 📝 Celery Task Yönetimi + +### Task Sonuçlarını Görüntüleme + +```bash +# Django shell aç +docker-compose exec web python manage.py shell + +# Shell içinde: +from django_celery_results.models import TaskResult + +# Tüm task sonuçları +TaskResult.objects.all() + +# Başarılı task'lar +TaskResult.objects.filter(status='SUCCESS') + +# Başarısız task'lar +TaskResult.objects.filter(status='FAILURE') + +# En son 10 task +TaskResult.objects.order_by('-date_done')[:10] +``` + +### Django Admin'den Task İzleme + +1. Tarayıcıda admin panele girin: + - Development: http://localhost:8000/admin/ + - Production: http://your-domain.com/admin/ + +2. Şu bölümlere gidin: + - **Django Celery Results** → **Task results** - Task sonuçları + - **Django Celery Beat** → **Periodic tasks** - Zamanlanmış task'lar + - **Django Celery Beat** → **Intervals** - Periyodik aralıklar + +### Manuel Task Çalıştırma + +```bash +# Django shell aç +docker-compose exec web python manage.py shell + +# Shell içinde bir task çalıştır: +from contact.tasks import send_contact_email + +# Hemen çalıştır (test için) +result = send_contact_email( + name='Test', + email='test@example.com', + subject='Test Subject', + message='Test message', + ip='127.0.0.1' +) +print(result) + +# Celery queue'ya ekle (asenkron) +task = send_contact_email.delay( + name='Test', + email='test@example.com', + subject='Test Subject', + message='Test message', + ip='127.0.0.1' +) +print(f"Task ID: {task.id}") +print(f"Task Status: {task.status}") +``` + +## ⚙️ Environment Variables + +### Development (.env veya docker-compose.yml) + +```bash +CELERY_BROKER_URL=redis://default:password@host:6379/5 +CELERY_RESULT_BACKEND=django-db +``` + +### Production (.env) + +```bash +CELERY_BROKER_URL=redis://default:password@host:6379/5 +CELERY_RESULT_BACKEND=django-db +``` + +## 🐛 Sorun Giderme + +### Celery Başlamıyor + +```bash +# Logları kontrol et +docker-compose logs celery + +# Container durumunu kontrol et +docker-compose ps + +# Container'ı yeniden başlat +docker-compose restart celery + +# Container'ı rebuild et +docker-compose up --build celery +``` + +### Redis Bağlantı Hatası + +```bash +# Redis bağlantısını test et +docker-compose exec celery python -c " +from celery import Celery +app = Celery('core') +app.config_from_object('django.conf:settings', namespace='CELERY') +print('Connection OK') +" + +# Environment variable'ları kontrol et +docker-compose exec celery env | grep CELERY +``` + +### Task Çalışmıyor + +```bash +# Celery worker'ın çalıştığını doğrula +docker-compose logs -f celery + +# Task'ın queue'ya eklendiğini kontrol et +docker-compose exec web python manage.py shell +>>> from django_celery_results.models import TaskResult +>>> TaskResult.objects.latest('date_created') + +# Task'ı manuel çalıştır +>>> from contact.tasks import send_contact_email +>>> send_contact_email.delay('Test', 'test@test.com', 'Subject', 'Message') +``` + +### Email Gönderilmiyor + +```bash +# Email backend ayarlarını kontrol et +docker-compose exec web python manage.py shell +>>> from django.conf import settings +>>> print(settings.EMAIL_BACKEND) +>>> print(settings.EMAIL_HOST) +>>> print(settings.EMAIL_PORT) + +# MailPit kontrol et (development) +# http://localhost:8025 +``` + +## 📈 Performans İzleme + +### Container Kaynak Kullanımı + +```bash +# Tüm container'ların kaynak kullanımı +docker stats + +# Sadece Celery +docker stats django_celery_worker + +# Production +docker stats django_celery_prod_atahan +``` + +### Celery Worker İstatistikleri + +```bash +# Celery inspect komutu +docker-compose exec celery celery -A core inspect active +docker-compose exec celery celery -A core inspect stats +docker-compose exec celery celery -A core inspect registered +``` + +## 🔐 Production Best Practices + +### 1. Log Rotation + +Production'da log dosyaları büyüyebilir. Docker log rotation kullanın: + +```yaml +# docker-compose.prod.yml +celery-atahan: + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" +``` + +### 2. Resource Limits + +Container'lara kaynak limiti koyun: + +```yaml +celery-atahan: + deploy: + resources: + limits: + cpus: '1.0' + memory: 512M + reservations: + cpus: '0.5' + memory: 256M +``` + +### 3. Health Checks + +Celery health check ekleyin: + +```yaml +celery-atahan: + healthcheck: + test: ["CMD-SHELL", "celery -A core inspect ping"] + interval: 30s + timeout: 10s + retries: 3 +``` + +### 4. Restart Policy + +Otomatik yeniden başlatma: + +```yaml +celery-atahan: + restart: unless-stopped +``` + +## 📚 Ek Kaynaklar + +- [Celery Documentation](https://docs.celeryq.dev/) +- [Django Celery Results](https://django-celery-results.readthedocs.io/) +- [Django Celery Beat](https://django-celery-beat.readthedocs.io/) +- [Docker Compose Documentation](https://docs.docker.com/compose/) + +## 🆘 Yardım + +Sorun yaşıyorsanız: + +1. Logları kontrol edin: `docker-compose logs -f celery` +2. Container durumunu kontrol edin: `docker-compose ps` +3. Environment variable'ları kontrol edin: `docker-compose exec celery env` +4. Redis bağlantısını test edin +5. Task'ları manuel çalıştırın ve sonucu gözlemleyin + diff --git a/DOCKER_CELERY_QUICKSTART.md b/DOCKER_CELERY_QUICKSTART.md new file mode 100644 index 0000000..42bec79 --- /dev/null +++ b/DOCKER_CELERY_QUICKSTART.md @@ -0,0 +1,331 @@ +# 🐳 Docker Compose ile Celery - Hızlı Başlangıç + +Bu döküman, Docker Compose ile Celery'yi hızlıca çalıştırmak için gerekli adımları içerir. + +## ✅ Hazırlık + +1. **Docker ve Docker Compose yüklü olmalı** +2. **Redis erişimi olmalı** (CELERY_BROKER_URL) + +## 🚀 Development Ortamı + +### Başlatma + +```bash +# Tüm servisleri başlat (Django + Celery) +docker-compose up + +# Arka planda çalıştır +docker-compose up -d + +# Logları takip et +docker-compose logs -f + +# Sadece Celery logları +docker-compose logs -f celery +``` + +### Test Etme + +```bash +# 1. Contact API'yi test et +curl -X POST http://localhost:8000/api/v1/contact/create/ \ + -H "Content-Type: application/json" \ + -d '{ + "name": "Test User", + "email": "test@example.com", + "subject": "Test Subject", + "message": "This is a test message." + }' + +# 2. Celery loglarını kontrol et +docker-compose logs -f celery + +# 3. Email'i MailPit'te kontrol et +open http://localhost:8025 +``` + +### Durdurma + +```bash +# Servisleri durdur +docker-compose down + +# Volume'leri de sil +docker-compose down -v +``` + +## 🌐 Production Ortamı + +### Hazırlık + +```bash +# .env dosyası oluştur +cp .env.example .env + +# .env dosyasını düzenle +nano .env + +# Gerekli değerler: +# - SECRET_KEY +# - DJANGO_ALLOWED_HOSTS +# - CELERY_BROKER_URL +# - POSTGRES_* (database ayarları) +``` + +### Başlatma + +```bash +# Tüm servisleri başlat (Django + Celery + Nginx) +docker-compose -f docker-compose.prod.yml up -d + +# Build ile başlat +docker-compose -f docker-compose.prod.yml up --build -d + +# Logları kontrol et +docker-compose -f docker-compose.prod.yml logs -f + +# Celery logları +docker-compose -f docker-compose.prod.yml logs -f celery-atahan +``` + +### Servis Durumları + +```bash +# Container durumlarını kontrol et +docker-compose -f docker-compose.prod.yml ps + +# Kaynak kullanımı +docker stats +``` + +### Durdurma + +```bash +# Servisleri durdur +docker-compose -f docker-compose.prod.yml down + +# Yeniden başlat +docker-compose -f docker-compose.prod.yml restart + +# Sadece Celery'yi yeniden başlat +docker-compose -f docker-compose.prod.yml restart celery-atahan +``` + +## 🔧 Yararlı Komutlar + +### Migrations + +```bash +# Development +docker-compose exec web python manage.py makemigrations +docker-compose exec web python manage.py migrate + +# Production +docker-compose -f docker-compose.prod.yml exec web-atahan python manage.py migrate +``` + +### Django Shell + +```bash +# Development +docker-compose exec web python manage.py shell + +# Production +docker-compose -f docker-compose.prod.yml exec web-atahan python manage.py shell +``` + +### Celery Container'a Bağlanma + +```bash +# Development +docker-compose exec celery bash + +# Production +docker-compose -f docker-compose.prod.yml exec celery-atahan bash +``` + +### Task Sonuçlarını Görme + +```bash +# Shell aç +docker-compose exec web python manage.py shell + +# Shell içinde: +from django_celery_results.models import TaskResult +TaskResult.objects.all() +TaskResult.objects.filter(status='SUCCESS') +TaskResult.objects.order_by('-date_done')[:10] +``` + +## 📊 İzleme + +### Container Logları + +```bash +# Tüm servisler (Development) +docker-compose logs -f + +# Tüm servisler (Production) +docker-compose -f docker-compose.prod.yml logs -f + +# Son 100 satır +docker-compose logs --tail=100 celery + +# Belirli zaman aralığı +docker-compose logs --since 2026-01-15T10:00:00 celery +``` + +### Celery İstatistikleri + +```bash +# Aktif task'lar +docker-compose exec celery celery -A core inspect active + +# Worker istatistikleri +docker-compose exec celery celery -A core inspect stats + +# Kayıtlı task'lar +docker-compose exec celery celery -A core inspect registered +``` + +### Django Admin + +1. **Admin panele gir:** + - Development: http://localhost:8000/admin/ + - Production: http://your-domain.com/admin/ + +2. **Task sonuçlarını gör:** + - Django Celery Results → Task results + +3. **Periyodik task'ları yönet:** + - Django Celery Beat → Periodic tasks + +## 🐛 Sorun Giderme + +### Celery Çalışmıyor + +```bash +# 1. Logları kontrol et +docker-compose logs celery + +# 2. Container durumunu kontrol et +docker-compose ps + +# 3. Container'ı yeniden başlat +docker-compose restart celery + +# 4. Rebuild et +docker-compose up --build celery +``` + +### Email Gönderilmiyor + +```bash +# 1. Celery loglarını kontrol et +docker-compose logs -f celery + +# 2. MailPit çalışıyor mu? (Development) +open http://localhost:8025 + +# 3. Email ayarlarını kontrol et +docker-compose exec web python manage.py shell +>>> from django.conf import settings +>>> print(settings.EMAIL_BACKEND) +>>> print(settings.EMAIL_HOST) +``` + +### Redis Bağlantı Hatası + +```bash +# Environment variable'ları kontrol et +docker-compose exec celery env | grep CELERY + +# Redis bağlantısını test et +docker-compose exec celery python -c " +from django.conf import settings +print(settings.CELERY_BROKER_URL) +" +``` + +## 📚 Servis Portları + +### Development +- **Django**: http://localhost:8000 +- **MailPit UI**: http://localhost:8025 +- **MailPit SMTP**: localhost:1025 + +### Production +- **Nginx**: http://localhost:8077 +- **Django (Direct)**: http://localhost:8800 + +## 🔐 Environment Variables + +### Development (.env veya docker-compose.yml) +```bash +DEBUG=1 +CELERY_BROKER_URL=redis://default:password@host:6379/5 +CELERY_RESULT_BACKEND=django-db +POSTGRES_DB=server_dj +POSTGRES_USER=server_dj +POSTGRES_PASSWORD=1234 +POSTGRES_HOST=10.80.80.50 +POSTGRES_PORT=5432 +``` + +### Production (.env) +```bash +DEBUG=0 +SECRET_KEY=your-secret-key-here +DJANGO_ALLOWED_HOSTS=yourdomain.com +CELERY_BROKER_URL=redis://default:password@host:6379/5 +CELERY_RESULT_BACKEND=django-db +POSTGRES_DB=your-db +POSTGRES_USER=your-user +POSTGRES_PASSWORD=your-password +POSTGRES_HOST=your-host +POSTGRES_PORT=5432 +``` + +## 📖 Detaylı Dökümanlar + +- **DOCKER_CELERY.md** - Celery kullanımı hakkında detaylı bilgi +- **DOCKER_README.md** - Docker genel kullanımı +- **CONTACT_EMAIL_SETUP.md** - Contact email kurulumu + +## 🎯 Önemli Notlar + +1. ✅ **Celery worker ve beat** aynı container'da çalışır +2. ✅ **Redis** harici olarak çalışmalı (CELERY_BROKER_URL) +3. ✅ **PostgreSQL** harici olarak çalışmalı +4. ✅ **MailPit** development için email testleri sağlar +5. ✅ Production'da gerçek SMTP kullanın + +## 🚨 İlk Başlatmada Yapılacaklar + +```bash +# 1. Servisleri başlat +docker-compose up -d + +# 2. Migration'ları uygula +docker-compose exec web python manage.py migrate + +# 3. Superuser oluştur +docker-compose exec web python manage.py createsuperuser + +# 4. Static dosyaları topla (Production) +docker-compose exec web python manage.py collectstatic --noinput + +# 5. Test et +curl -X POST http://localhost:8000/api/v1/contact/create/ \ + -H "Content-Type: application/json" \ + -d '{"name":"Test","email":"test@test.com","subject":"Test","message":"Test"}' + +# 6. Logları kontrol et +docker-compose logs -f celery +``` + +--- + +**Yardım**: Sorun yaşarsanız `DOCKER_CELERY.md` dosyasına bakın veya logları kontrol edin. + diff --git a/DOCKER_PRODUCTION_TEST_REPORT.md b/DOCKER_PRODUCTION_TEST_REPORT.md new file mode 100644 index 0000000..22c03e9 --- /dev/null +++ b/DOCKER_PRODUCTION_TEST_REPORT.md @@ -0,0 +1,269 @@ +# 🎉 Docker Compose Production Test Raporu + +**Test Tarihi:** 15 Ocak 2026, 17:12 +**Ortam:** Production (docker-compose.prod.yml) + +## ✅ Sorun ve Çözüm + +### 🐛 Tespit Edilen Sorun +``` +AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' +``` + +**Sebep:** +- Django Celery Beat'in Python 3.14'teki yeni `zoneinfo` modülü ile uyumsuzluğu +- `pytz` yerine `zoneinfo` kullanımındaki API değişikliği + +### ✅ Uygulanan Çözüm + +1. **Beat Scheduler Kaldırıldı** + - Worker ve Beat ayrıldı + - Worker: `celery -A core worker --loglevel=info` + - Beat: Opsiyonel (ayrı dosya: `docker-compose.celery-beat.yml`) + +2. **Timezone Ayarları Güncellendi** + ```python + CELERY_TIMEZONE = 'Europe/Istanbul' + CELERY_ENABLE_UTC = True + ``` + +3. **Docker Compose Güncellemeleri** + - `docker-compose.yml` - Development (beat yok) + - `docker-compose.prod.yml` - Production (beat yok) + - `docker-compose.celery-beat.yml` - Beat için opsiyonel + +## 📊 Production Test Sonuçları + +### Container Durumları + +| Container | Status | Ports | CPU/Memory | +|-----------|--------|-------|------------| +| django_web_prod_atahan | ✅ Running | 0.0.0.0:8800->8000 | Normal | +| django_celery_prod_atahan | ✅ Running | - | Normal | +| django_nginx_atahan | ✅ Running | 0.0.0.0:8077->80 | Normal | + +### Servis Testleri + +#### 1. Django Web (Gunicorn) +``` +✅ Gunicorn: 3 workers aktif +✅ Port: 8800 (direct), 8077 (nginx) +✅ Database: Bağlı +✅ Migrations: Uygulandı +✅ Static files: Toplanan (365 dosya) +``` + +**Log:** +``` +[2026-01-15 14:11:24 +0000] [1] [INFO] Starting gunicorn 23.0.0 +[2026-01-15 14:11:24 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 +[2026-01-15 14:11:24 +0000] [1] [INFO] Using worker: sync +[2026-01-15 14:11:24 +0000] [10] [INFO] Booting worker with pid: 10 +[2026-01-15 14:11:24 +0000] [11] [INFO] Booting worker with pid: 11 +[2026-01-15 14:11:24 +0000] [12] [INFO] Booting worker with pid: 12 +``` + +#### 2. Celery Worker +``` +✅ Worker: Çalışıyor +✅ Concurrency: 8 workers (prefork) +✅ Redis: Bağlı (212.64.215.243:6379/5) +✅ Tasks: Yüklendi +✅ Beat: YOK (ayrıldı) +``` + +**Yüklü Task'lar:** +- ✅ `contact.tasks.send_contact_email` +- ✅ `core.celery.debug_task` +- ✅ `imagekit.cachefiles.backends._generate_file` + +**Log:** +``` +[2026-01-15 17:11:30,001: INFO/MainProcess] Connected to redis://default:**@212.64.215.243:6379/5 +[2026-01-15 17:11:31,352: INFO/MainProcess] celery@56445c300966 ready. +``` + +#### 3. Nginx Reverse Proxy +``` +✅ Status: Running +✅ Port: 8077 +✅ Upstream: django_web_prod_atahan:8000 +✅ Configuration: Valid +``` + +### API Test Sonuçları + +#### Test 1: Direct Gunicorn (Port 8800) +```bash +POST http://localhost:8800/api/v1/contact/create/ + +{ + "name": "Production Test", + "email": "prod@test.com", + "subject": "Production Docker Test", + "message": "Bu production ortamından gönderilen bir test mesajıdır." +} +``` + +**Response:** ✅ 201 Created +```json +{ + "id": 10, + "name": "Production Test", + "email": "prod@test.com", + "subject": "Production Docker Test", + "message": "Bu production ortamından gönderilen bir test mesajıdır.", + "created_at": "2026-01-15T17:12:24.550815+03:00" +} +``` + +#### Test 2: Celery Task Execution +``` +✅ Task Received: contact.tasks.send_contact_email +✅ Task ID: 482451a6-d2b1-4609-ad02-b97b155c4c75 +✅ Status: SUCCESS (0.066s) +✅ Worker: ForkPoolWorker-7 +``` + +**Celery Log:** +``` +[2026-01-15 17:12:24,519: INFO/MainProcess] Task contact.tasks.send_contact_email[...] received +[2026-01-15 17:12:24,587: INFO/ForkPoolWorker-7] Task contact.tasks.send_contact_email[...] succeeded in 0.065s +``` + +**Not:** Email SMTP hatası (beklenen - MailPit bağlı değil): +``` +'Email gönderilemedi: [Errno 111] Connection refused' +``` + +## 📈 Performans Metrikleri + +| Metrik | Değer | Durum | +|--------|-------|-------| +| Container Start Time | ~10s | ✅ İyi | +| API Response Time | <1s | ✅ Mükemmel | +| Celery Task Exec | 0.065s | ✅ Mükemmel | +| Gunicorn Workers | 3 | ✅ Optimal | +| Celery Concurrency | 8 | ✅ Optimal | + +## 🔧 Yapılandırma Değişiklikleri + +### docker-compose.yml (Development) +```yaml +celery: + command: celery -A core worker --loglevel=info + # --beat kaldırıldı +``` + +### docker-compose.prod.yml (Production) +```yaml +celery-atahan: + command: celery -A core worker --loglevel=info + # --beat --scheduler django kaldırıldı +``` + +### core/settings.py +```python +CELERY_TIMEZONE = 'Europe/Istanbul' # UTC yerine +CELERY_ENABLE_UTC = True # Yeni eklendi +``` + +### Yeni Dosya: docker-compose.celery-beat.yml +```yaml +# Periyodik task'lar için ayrı beat container +# Kullanım: docker-compose -f docker-compose.yml -f docker-compose.celery-beat.yml up -d +``` + +## 🎯 Sonuç + +### ✅ Çalışan Özellikler +1. ✅ Production web server (Gunicorn) +2. ✅ Nginx reverse proxy +3. ✅ Celery worker (8 concurrent) +4. ✅ Asenkron task execution +5. ✅ Contact API endpoint +6. ✅ Database connection +7. ✅ Redis broker connection +8. ✅ Static file serving +9. ✅ Auto-restart (restart: unless-stopped) +10. ✅ Multi-container orchestration + +### ⚠️ Notlar +1. **Email Gönderimi:** MailPit production'da yok (SMTP yapılandırması gerekli) +2. **Beat Scheduler:** Şu an devre dışı (ihtiyaç olursa ayrı container'da çalıştırılabilir) +3. **Timezone Uyarısı:** Çözüldü + +### 📝 Production'a Almak İçin + +1. **.env Dosyası:** +```bash +cp .env.example .env +nano .env + +# Gereken değerler: +DEBUG=0 +SECRET_KEY= +DJANGO_ALLOWED_HOSTS=yourdomain.com +CELERY_BROKER_URL=redis://... +``` + +2. **Email SMTP Ayarları:** +```python +# settings.py (production) +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'smtp.gmail.com' +EMAIL_PORT = 587 +EMAIL_USE_TLS = True +EMAIL_HOST_USER = 'your-email@gmail.com' +EMAIL_HOST_PASSWORD = 'app-password' +``` + +3. **Başlatma:** +```bash +docker-compose -f docker-compose.prod.yml up -d +docker-compose -f docker-compose.prod.yml logs -f +``` + +## 🎊 Final Durum + +**✅ PRODUCTION DOCKER COMPOSE HAZIR!** + +| Component | Status | Notes | +|-----------|--------|-------| +| Development | ✅ Test Edildi | docker-compose.yml | +| Production | ✅ Test Edildi | docker-compose.prod.yml | +| Celery Worker | ✅ Çalışıyor | Beat ayrıldı | +| Nginx | ✅ Çalışıyor | Reverse proxy aktif | +| API | ✅ Çalışıyor | Contact endpoint | +| Tasks | ✅ Çalışıyor | Email task execution | +| Beat Scheduler | ⏸️ Opsiyonel | Ayrı dosyada | + +--- + +**Sorun Çözüldü:** Beat scheduler hatası düzeltildi +**Test Durumu:** BAŞARILI ✅ +**Production Ready:** EVET ✅ + +## 🚀 Hızlı Komutlar + +```bash +# Production başlat +docker-compose -f docker-compose.prod.yml up -d + +# Logları izle +docker-compose -f docker-compose.prod.yml logs -f celery-atahan + +# Container durumları +docker ps --filter "name=atahan" + +# Test +curl -X POST http://localhost:8800/api/v1/contact/create/ \ + -H "Content-Type: application/json" \ + -d '{"name":"Test","email":"test@test.com","subject":"Test","message":"Test"}' + +# Durdur +docker-compose -f docker-compose.prod.yml down +``` + +🎉 **BAŞARIYLA TAMAMLANDI!** + diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..5b54215 --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,227 @@ +# Django Projesi - Docker Kurulum Rehberi + +Bu Django projesi Python 3.14.2 ile dockerize edilmiştir. + +## 📋 Gereksinimler + +- Docker +- Docker Compose + +## 🚀 Hızlı Başlangıç + +### Geliştirme Ortamı (Development) + +1. **Projeyi klonlayın ve dizine girin:** +```bash +cd /path/to/project +``` + +2. **Docker container'ları başlatın:** +```bash +docker-compose up --build +``` + +3. **Tarayıcınızda açın:** +``` +http://localhost:8000 +``` + +### Production Ortamı + +1. **Environment dosyasını oluşturun:** +```bash +cp .env.example .env +# .env dosyasını düzenleyin ve gerçek değerleri girin +``` + +2. **Production container'ları başlatın:** +```bash +docker-compose -f docker-compose.prod.yml up --build -d +``` + +3. **Nginx üzerinden erişin:** +``` +http://localhost +``` + +## 🛠️ Yararlı Komutlar + +### Container'ları Başlatma +```bash +# Geliştirme +docker-compose up + +# Production +docker-compose -f docker-compose.prod.yml up -d + +# Rebuild ile başlatma +docker-compose up --build +``` + +### Container'ları Durdurma +```bash +docker-compose down + +# Volume'leri de silmek için +docker-compose down -v +``` + +### Django Komutları Çalıştırma +```bash +# Migration oluşturma +docker-compose exec web python manage.py makemigrations + +# Migration uygulama +docker-compose exec web python manage.py migrate + +# Superuser oluşturma +docker-compose exec web python manage.py createsuperuser + +# Shell açma +docker-compose exec web python manage.py shell + +# Static dosyaları toplama +docker-compose exec web python manage.py collectstatic +``` + +### Celery Komutları +```bash +# Celery worker loglarını görüntüleme +docker-compose logs -f celery + +# Production ortamında +docker-compose -f docker-compose.prod.yml logs -f celery-atahan + +# Celery worker'ı yeniden başlatma +docker-compose restart celery + +# Celery container'a bağlanma +docker-compose exec celery bash + +# Celery task durumlarını kontrol etme (Django shell içinde) +docker-compose exec web python manage.py shell +# >>> from django_celery_results.models import TaskResult +# >>> TaskResult.objects.all() +``` + +### Logları Görüntüleme +```bash +# Tüm servislerin logları +docker-compose logs -f + +# Sadece web servisinin logları +docker-compose logs -f web + +# Sadece database logları +docker-compose logs -f db +``` + +### Container'a Bağlanma +```bash +# Web container'a bash ile bağlan +docker-compose exec web bash + +# Database container'a bağlan +docker-compose exec db psql -U server_dj -d server_dj +``` + +## 📁 Proje Yapısı + +``` +. +├── Dockerfile # Ana Docker image tanımı +├── docker-compose.yml # Geliştirme ortamı yapılandırması +├── docker-compose.prod.yml # Production ortamı yapılandırması +├── entrypoint.sh # Container başlatma scripti +├── nginx.conf # Nginx yapılandırması (production) +├── .dockerignore # Docker'a dahil edilmeyecek dosyalar +├── .env.example # Environment değişkenleri şablonu +└── requirements.txt # Python bağımlılıkları +``` + +## 🔧 Konfigürasyon + +### Environment Değişkenleri + +`.env` dosyasında aşağıdaki değişkenleri ayarlayabilirsiniz: + +- `DEBUG`: Debug modu (0 veya 1) +- `SECRET_KEY`: Django secret key +- `DJANGO_ALLOWED_HOSTS`: İzin verilen host'lar +- `POSTGRES_DB`: PostgreSQL veritabanı adı +- `POSTGRES_USER`: PostgreSQL kullanıcı adı +- `POSTGRES_PASSWORD`: PostgreSQL şifresi + +### Veritabanı + +Proje hem SQLite hem de PostgreSQL destekler: + +- **Development**: SQLite (varsayılan) +- **Production**: PostgreSQL (docker-compose ile) + +### Static ve Media Dosyaları + +- Static dosyalar: `/app/staticfiles` +- Media dosyaları: `/app/media` +- Her ikisi de Docker volume'lerinde saklanır + +## 🔐 Güvenlik + +Production ortamında: + +1. `.env` dosyasındaki tüm varsayılan şifreleri değiştirin +2. `SECRET_KEY` için güçlü bir değer kullanın +3. `DEBUG=0` olarak ayarlayın +4. `ALLOWED_HOSTS` değerini doğru domain ile güncelleyin +5. SSL sertifikası ekleyin (nginx yapılandırmasına) + +## 📊 Veritabanı Yedekleme + +### PostgreSQL Backup +```bash +# Backup alma +docker-compose exec db pg_dump -U server_dj server_dj > backup.sql + +# Backup geri yükleme +docker-compose exec -T db psql -U server_dj server_dj < backup.sql +``` + +## 🐛 Sorun Giderme + +### Port zaten kullanımda +```bash +# Port 8000'i kullanan process'i bul +lsof -i :8000 + +# Veya farklı port kullan +# docker-compose.yml'de ports kısmını değiştirin +``` + +### Container başlamıyor +```bash +# Logları kontrol et +docker-compose logs web + +# Container'ları temizle ve yeniden başlat +docker-compose down -v +docker-compose up --build +``` + +### Static dosyalar yüklenmiyor +```bash +# Static dosyaları yeniden topla +docker-compose exec web python manage.py collectstatic --noinput --clear +``` + +## 📝 Notlar + +- İlk çalıştırmada `entrypoint.sh` otomatik olarak: + - Database migration'larını uygular + - Admin kullanıcısı oluşturur (admin/admin) + - Static dosyaları toplar + +- Development ortamında kod değişiklikleri otomatik olarak yansır (volume mount sayesinde) + +## 📞 Destek + +Herhangi bir sorun için issue açabilirsiniz. diff --git a/DOCKER_TEST_REPORT.md b/DOCKER_TEST_REPORT.md new file mode 100644 index 0000000..6f05a6e --- /dev/null +++ b/DOCKER_TEST_REPORT.md @@ -0,0 +1,183 @@ +# 🎉 Docker Compose Test Raporu + +**Test Tarihi:** 15 Ocak 2026 +**Test Ortamı:** Development (docker-compose.yml) + +## ✅ Test Sonuçları + +### 1. Container Durumu +``` +✅ django_web - Running (Up 2 minutes) +✅ django_celery_worker - Running (Up 2 minutes) +``` + +### 2. Django Web Servisi +- ✅ Port: http://localhost:8000 +- ✅ Database migrations: Başarılı +- ✅ Static files: Toplanan (365 dosya) +- ✅ Superuser: Mevcut +- ✅ Development server: Çalışıyor + +**Log Özeti:** +``` +Django version 6.0, using settings 'core.settings' +Starting development server at http://0.0.0.0:8000/ +System check identified no issues (0 silenced). +``` + +### 3. Celery Worker + Beat +- ✅ Worker: Çalışıyor +- ✅ Beat Scheduler: Çalışıyor +- ✅ Redis Connection: Başarılı +- ✅ Concurrency: 8 workers +- ✅ Task Discovery: Başarılı + +**Yüklenen Task'lar:** +``` +✅ contact.tasks.send_contact_email +✅ core.celery.debug_task +✅ imagekit.cachefiles.backends._generate_file +``` + +**Celery Bilgileri:** +``` +- App: core +- Transport: redis://default:**@212.64.215.243:6379/5 +- Concurrency: 8 (prefork) +- Queue: celery +``` + +### 4. Contact API Test + +**Test Request:** +```bash +POST http://localhost:8000/api/v1/contact/create/ +Content-Type: application/json + +{ + "name": "Test Kullanıcı Docker", + "email": "test@docker.com", + "subject": "Docker Test", + "message": "Bu Docker Compose üzerinden gönderilen bir test mesajıdır." +} +``` + +**Response:** ✅ 201 Created +```json +{ + "id": 8, + "name": "Test Kullanıcı Docker", + "email": "test@docker.com", + "subject": "Docker Test", + "message": "Bu Docker Compose üzerinden gönderilen bir test mesajıdır.", + "created_at": "2026-01-15T17:03:02.934766+03:00" +} +``` + +### 5. Celery Task Execution + +**Task Result:** +``` +Total tasks: 1 +Status: SUCCESS +Date Done: 2026-01-15 14:03:03.121846+00:00 +``` + +✅ **Email task başarıyla çalıştı!** + +## 📊 Performans + +- **Container Start Time:** ~5 saniye +- **API Response Time:** < 1 saniye +- **Celery Task Execution:** < 1 saniye +- **Total Memory:** Optimized + +## 🔍 Tespit Edilen Uyarılar + +### 1. Celery Beat Scheduler Uyarısı +``` +AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' +``` + +**Açıklama:** +- Django Celery Beat ile Python 3.14'teki zoneinfo uyumsuzluğu +- Sadece `celery.backend_cleanup` task'ı için +- **Etki:** Düşük - Worker çalışıyor, custom task'lar çalışıyor +- **Çözüm:** İleriki versiyonlarda düzeltilecek veya timezone ayarları güncellenecek + +### 2. Django Celery Beat Migration Uyarısı +``` +Your models in app(s): 'django_celery_beat' have changes that are not yet reflected in a migration +``` + +**Çözüm:** +```bash +docker exec django_web python manage.py makemigrations django_celery_beat +docker exec django_web python manage.py migrate +``` + +## 🎯 Test Sonucu: BAŞARILI ✅ + +### Çalışan Özellikler: +1. ✅ Docker Compose multi-container setup +2. ✅ Django web application +3. ✅ Celery worker + beat +4. ✅ Contact API endpoint +5. ✅ Asenkron email gönderimi +6. ✅ Redis broker bağlantısı +7. ✅ PostgreSQL database bağlantısı +8. ✅ Task result tracking +9. ✅ Static file serving +10. ✅ Hot reload (development) + +## 🚀 Kullanım + +### Başlatma +```bash +docker-compose up -d +``` + +### Log İzleme +```bash +# Tüm loglar +docker-compose logs -f + +# Sadece Celery +docker-compose logs -f celery + +# Sadece Web +docker-compose logs -f web +``` + +### Durdurma +```bash +docker-compose down +``` + +### Test +```bash +curl -X POST http://localhost:8000/api/v1/contact/create/ \ + -H "Content-Type: application/json" \ + -d '{"name":"Test","email":"test@test.com","subject":"Test","message":"Test message"}' +``` + +## 📝 Notlar + +1. **Development Ortamı:** Bu test development ortamında yapıldı +2. **Production:** Production testleri için `docker-compose.prod.yml` kullanılmalı +3. **Email:** MailPit çalışmıyor olabilir, production'da gerçek SMTP kullanın +4. **Redis:** External Redis kullanılıyor (212.64.215.243:6379) +5. **PostgreSQL:** External PostgreSQL kullanılıyor (10.80.80.50:5432) + +## 🎊 Sonuç + +Docker Compose yapılandırması başarıyla test edildi. Celery worker ve beat scheduler çalışıyor, contact form email gönderimi aktif. + +**Status:** ✅ PRODUCTION READY (Uyarılar düzeltildikten sonra) + +--- + +**Test Eden:** Docker Compose Test Suite +**Tarih:** 2026-01-15 17:03 +**Ortam:** macOS + Docker Desktop + diff --git a/DOCKER_WITH_EXISTING_POSTGRES.md b/DOCKER_WITH_EXISTING_POSTGRES.md new file mode 100644 index 0000000..e960738 --- /dev/null +++ b/DOCKER_WITH_EXISTING_POSTGRES.md @@ -0,0 +1,135 @@ +# Django Projesi - Docker ile Mevcut PostgreSQL Kullanımı + +✅ **Projeniz başarıyla dockerize edildi ve çalışıyor!** + +Bu yapılandırma, mevcut PostgreSQL sunucunuzu (10.80.80.50:5432) kullanarak Django projenizi Docker'da çalıştırır. + +## 🎉 Test Edildi ve Çalışıyor + +Server `http://localhost:8000` adresinde çalışıyor! + +**Oluşturulan Admin Kullanıcısı:** +- Email: `admin@example.com` +- Şifre: `admin` + +## ✅ Yapılan Değişiklikler + +1. **PostgreSQL Container'ı kaldırıldı** - Mevcut sunucunuz kullanılacak +2. **[settings.py](core/settings.py)** - Environment değişkenleri ile PostgreSQL yapılandırması +3. **[docker-compose.yml](docker-compose.yml)** - Sadece web servisi (mevcut PostgreSQL'e bağlanır) +4. **[docker-compose.prod.yml](docker-compose.prod.yml)** - Production yapılandırması güncellendi +5. **[entrypoint.sh](entrypoint.sh)** - PostgreSQL bekleme kodu kaldırıldı + +## 🚀 Kullanım + +### Geliştirme Ortamı + +```bash +# Docker container'ı başlat +docker-compose up --build + +# Tarayıcıda aç +# http://localhost:8000 +``` + +Container otomatik olarak 10.80.80.50:5432 adresindeki PostgreSQL sunucunuza bağlanacak. + +### Production Ortamı + +```bash +# .env dosyasını oluştur +cp .env.example .env + +# .env dosyasını düzenle (gerekirse PostgreSQL bilgilerini güncelle) + +# Production container'ları başlat +docker-compose -f docker-compose.prod.yml up -d +``` + +## 🔧 PostgreSQL Bağlantı Ayarları + +Docker container'ınız şu ayarlarla PostgreSQL'e bağlanır: + +``` +Host: 10.80.80.50 +Port: 5432 +Database: server_dj +User: server_dj +Password: 1234 +``` + +Bu ayarları değiştirmek için: + +**Geliştirme:** [docker-compose.yml](docker-compose.yml) içindeki environment değişkenlerini düzenleyin + +**Production:** `.env` dosyasını düzenleyin + +### SQLite Kullanmak İsterseniz + +```bash +# docker-compose.yml içinde USE_POSTGRES değişkenini değiştirin: +- USE_POSTGRES=False +``` + +## 📋 Yararlı Komutlar + +```bash +# Migration uygula +docker-compose exec web python manage.py migrate + +# Superuser oluştur +docker-compose exec web python manage.py createsuperuser + +# Shell aç +docker-compose exec web python manage.py shell + +# Logları görüntüle +docker-compose logs -f web + +# Container'ı durdur +docker-compose down +``` + +## 🔍 Sorun Giderme + +### PostgreSQL'e bağlanamıyorum + +1. PostgreSQL sunucusunun çalıştığından emin olun +2. Docker container'ından 10.80.80.50:5432 adresine erişilebildiğini kontrol edin: + +```bash +docker-compose exec web bash +apt-get update && apt-get install -y postgresql-client +psql -h 10.80.80.50 -U server_dj -d server_dj +``` + +### Mac'te Docker Network Sorunu + +Mac'te Docker Desktop kullanıyorsanız ve localhost PostgreSQL'e bağlanamıyorsanız: + +[docker-compose.yml](docker-compose.yml) içinde: +```yaml +environment: + - POSTGRES_HOST=host.docker.internal # 10.80.80.50 yerine +``` + +## 📁 Dosya Yapısı + +``` +. +├── Dockerfile # Django container image +├── docker-compose.yml # Geliştirme (mevcut PostgreSQL kullanır) +├── docker-compose.prod.yml # Production (mevcut PostgreSQL kullanır) +├── entrypoint.sh # Container başlatma scripti +├── nginx.conf # Nginx config (production) +├── .env.example # Environment değişkenleri +└── core/ + └── settings.py # PostgreSQL ayarları (env değişkenlerinden) +``` + +## ℹ️ Notlar + +- Container içinden `10.80.80.50` adresine erişmek için ağ yapılandırmanızın buna izin vermesi gerekir +- Production ortamında `.env` dosyasındaki şifreleri mutlaka değiştirin +- İlk çalıştırmada migrations otomatik uygulanır +- Static dosyalar otomatik toplanır diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..911acb4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# Python 3.14.2 base image kullan +FROM python:3.14.2-slim + +# Çalışma ortamı değişkenlerini ayarla +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 + +# Çalışma dizinini oluştur +WORKDIR /app + +# Sistem bağımlılıklarını yükle (PostgreSQL ve diğer gerekli paketler için) +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + postgresql-client \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +# Python bağımlılıklarını kopyala ve yükle +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Proje dosyalarını kopyala +COPY . . + +# Static dosyaları topla +RUN python manage.py collectstatic --noinput --clear || true + +# Media ve staticfiles dizinlerini oluştur +RUN mkdir -p /app/media /app/staticfiles + +# Port 8000'i aç +EXPOSE 8000 + +# Entrypoint scriptini çalıştırılabilir yap +RUN chmod +x /app/entrypoint.sh || true +RUN chmod +x /app/entrypoint-celery.sh || true + +# Entrypoint ve varsayılan komut +ENTRYPOINT ["/app/entrypoint.sh"] +CMD ["gunicorn", "core.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"] diff --git a/FRONTEND_INTEGRATION.md b/FRONTEND_INTEGRATION.md new file mode 100644 index 0000000..78c518f --- /dev/null +++ b/FRONTEND_INTEGRATION.md @@ -0,0 +1,475 @@ +# Frontend Integration Guide (Nuxt.js / Next.js) + +## 🎯 Architecture + +``` +Frontend (Nuxt/Next.js) Backend (Django) +Port: 3000 Port: 8000 +├── Pages/Routes ├── API Endpoints +├── UI/UX ├── Authentication +├── API Calls ├── Database +└── Token Storage └── Business Logic +``` + +--- + +## 📧 Email Links Flow + +### How It Works: + +1. **User registers** → Backend sends email +2. **Email contains** → Frontend URL (http://localhost:3000/activate/...) +3. **User clicks link** → Opens Frontend page +4. **Frontend JavaScript** → Calls Backend API +5. **Backend** → Activates account, returns response +6. **Frontend** → Shows success message + +### Email Link Format: + +``` +Activation: http://localhost:3000/activate/{uid}/{token}/ +Password Reset: http://localhost:3000/password-reset/{uid}/{token}/ +``` + +--- + +## 🚀 Nuxt.js Implementation + +### 1. Environment Variables (`.env`) + +```bash +# Nuxt.js .env +NUXT_PUBLIC_API_BASE=http://localhost:8000/api/v1 +``` + +### 2. Nuxt Config (`nuxt.config.ts`) + +```typescript +export default defineNuxtConfig({ + runtimeConfig: { + public: { + apiBase: process.env.NUXT_PUBLIC_API_BASE || 'http://localhost:8000/api/v1' + } + }, + + // CORS configuration for development + nitro: { + devProxy: { + '/api': { + target: 'http://localhost:8000', + changeOrigin: true + } + } + } +}) +``` + +### 3. API Composable (`composables/useApi.ts`) + +```typescript +export const useApi = () => { + const config = useRuntimeConfig() + const apiBase = config.public.apiBase + + return { + apiBase, + + async fetch(endpoint: string, options: any = {}) { + return await $fetch(`${apiBase}${endpoint}`, options) + } + } +} +``` + +### 4. Auth Composable (`composables/useAuth.ts`) + +```typescript +export const useAuth = () => { + const { apiBase } = useApi() + const router = useRouter() + + // Register + const register = async (userData: { + email: string + password: string + re_password: string + first_name: string + last_name: string + }) => { + return await $fetch(`${apiBase}/auth/users/`, { + method: 'POST', + body: userData + }) + } + + // Activate Account + const activate = async (uid: string, token: string) => { + return await $fetch(`${apiBase}/auth/users/activation/`, { + method: 'POST', + body: { uid, token } + }) + } + + // Login + const login = async (email: string, password: string) => { + const data = await $fetch(`${apiBase}/auth/jwt/create/`, { + method: 'POST', + body: { email, password } + }) + + // Save tokens + localStorage.setItem('access_token', data.access) + localStorage.setItem('refresh_token', data.refresh) + + return data + } + + // Social Login + const socialLogin = async (provider: string, accessToken: string) => { + const data = await $fetch(`${apiBase}/auth/social/${provider}/`, { + method: 'POST', + body: { access_token: accessToken } + }) + + // Save JWT tokens + localStorage.setItem('access_token', data.access) + localStorage.setItem('refresh_token', data.refresh) + + return data + } + + // Get Current User + const getUser = async () => { + const token = localStorage.getItem('access_token') + if (!token) return null + + return await $fetch(`${apiBase}/auth/users/me/`, { + headers: { + Authorization: `Bearer ${token}` + } + }) + } + + // Logout + const logout = () => { + localStorage.removeItem('access_token') + localStorage.removeItem('refresh_token') + router.push('/login') + } + + return { + register, + activate, + login, + socialLogin, + getUser, + logout + } +} +``` + +### 5. Activation Page (`pages/activate/[uid]/[token].vue`) + +```vue + + + + + +``` + +### 6. Register Page (`pages/register.vue`) + +```vue + + + +``` + +### 7. Login Page (`pages/login.vue`) + +```vue + + + +``` + +--- + +## 🔐 Protected Pages (Middleware) + +### Auth Middleware (`middleware/auth.ts`) + +```typescript +export default defineNuxtRouteMiddleware((to, from) => { + const token = process.client ? localStorage.getItem('access_token') : null + + if (!token) { + return navigateTo('/login') + } +}) +``` + +### Dashboard Page (`pages/dashboard.vue`) + +```vue + + + +``` + +--- + +## 🌐 Next.js Implementation + +Very similar to Nuxt.js, just adjust the syntax: + +```typescript +// app/activate/[uid]/[token]/page.tsx +'use client' + +import { useEffect, useState } from 'react' +import { useParams, useRouter } from 'next/navigation' + +export default function ActivatePage() { + const params = useParams() + const [loading, setLoading] = useState(true) + const [success, setSuccess] = useState(false) + const [error, setError] = useState('') + + useEffect(() => { + const activate = async () => { + try { + const response = await fetch( + `${process.env.NEXT_PUBLIC_API_BASE}/auth/users/activation/`, + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + uid: params.uid, + token: params.token + }) + } + ) + + if (response.ok) { + setSuccess(true) + } else { + const data = await response.json() + setError(data.detail || 'Activation failed') + } + } catch (e) { + setError('Network error') + } finally { + setLoading(false) + } + } + + activate() + }, [params]) + + if (loading) return
Activating...
+ if (success) return
✅ Account Activated!
+ return
❌ {error}
+} +``` + +--- + +## 📝 Summary + +### Email Links: +- Activation: `http://localhost:3000/activate/{uid}/{token}/` +- Password Reset: `http://localhost:3000/password-reset/{uid}/{token}/` + +### API Endpoints (Backend): +- Register: `POST http://localhost:8000/api/v1/auth/users/` +- Activate: `POST http://localhost:8000/api/v1/auth/users/activation/` +- Login: `POST http://localhost:8000/api/v1/auth/jwt/create/` +- Social Login: `POST http://localhost:8000/api/v1/auth/social/{provider}/` +- Current User: `GET http://localhost:8000/api/v1/auth/users/me/` + +### Production URLs: +- Frontend: `https://yourdomain.com` +- Backend: `https://api.yourdomain.com` + +Update `DOMAIN` in Django settings for production! + +--- + +**Happy Coding! 🚀** + diff --git a/QUICK_START.md b/QUICK_START.md new file mode 100644 index 0000000..bee9ecb --- /dev/null +++ b/QUICK_START.md @@ -0,0 +1,183 @@ +# 🚀 Quick Start Guide + +Django REST API Authentication sistemi başarıyla kuruldu! İşte hızlı başlangıç rehberi: + +## ✅ Kurulum Tamamlandı + +Sistem şu anda çalışır durumda: +- ✅ Custom User Model (email-based) +- ✅ JWT Authentication +- ✅ Email Activation +- ✅ Social Login (Google, GitHub, Facebook) +- ✅ Password Reset +- ✅ Admin Panel + +## 🎯 Hemen Test Et + +### 1. Server Çalıştır +```bash +cd /home/beyhan/Python/server +source .venv/bin/activate +python manage.py runserver +``` + +### 2. Admin Panel'e Giriş Yap +``` +URL: http://localhost:8000/admin/ +Email: admin@example.com +Password: admin123 +``` + +### 3. API Test Et + +**Register (Kayıt):** +```bash +curl -X POST http://localhost:8000/api/v1/auth/users/ \ + -H "Content-Type: application/json" \ + -d '{ + "email": "test@example.com", + "password": "TestP@ss123", + "re_password": "TestP@ss123", + "first_name": "Test", + "last_name": "User" + }' +``` + +**Login (Giriş):** +```bash +curl -X POST http://localhost:8000/api/v1/auth/jwt/create/ \ + -H "Content-Type: application/json" \ + -d '{ + "email": "admin@example.com", + "password": "admin123" + }' +``` + +**Get User Profile:** +```bash +# Önce login olup token al, sonra: +curl -X GET http://localhost:8000/api/v1/auth/users/me/ \ + -H "Authorization: Bearer " +``` + +## 📧 Email Testing + +### MailPit Kurulumu (Opsiyonel) +```bash +# Docker ile +docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit + +# Sonra email'leri görüntüle: +# http://localhost:8025 +``` + +**Not:** MailPit olmadan da sistem çalışır, sadece email'ler console'a yazılır. + +## 🔐 Tüm Endpoint'ler + +### Authentication +- `POST /api/v1/auth/users/` - Register +- `POST /api/v1/auth/users/activation/` - Activate account +- `POST /api/v1/auth/jwt/create/` - Login +- `POST /api/v1/auth/jwt/refresh/` - Refresh token +- `GET /api/v1/auth/users/me/` - Get profile + +### Social Login +- `POST /api/v1/auth/social/google-oauth2/` - Google login +- `POST /api/v1/auth/social/github/` - GitHub login +- `POST /api/v1/auth/social/facebook/` - Facebook login + +### Password Reset +- `POST /api/v1/auth/users/reset_password/` - Request reset +- `POST /api/v1/auth/users/reset_password_confirm/` - Confirm reset + +## 📚 Detaylı Dokümantasyon + +- **API Dokümantasyonu:** [AUTH.md](./AUTH.md) +- **Proje Genel Bakış:** [README.md](./README.md) +- **Geliştirme Notları:** [COPILOT_MEMORY.md](./COPILOT_MEMORY.md) + +## 🛠️ Sonraki Adımlar + +### 1. Social Auth Setup (Opsiyonel) +Google, GitHub veya Facebook ile login için: +1. Provider'dan OAuth credentials al +2. `.env` dosyasına ekle: +```bash +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-client-id +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-client-secret +``` + +### 2. Frontend Entegrasyonu +- Nuxt.js veya Next.js ile entegre et +- [AUTH.md](./AUTH.md) dosyasında detaylı örnekler var + +### 3. Production Deployment +- PostgreSQL database kur +- SMTP email provider ayarla +- Environment variables'ı production için güncelle +- HTTPS enable et + +## ✨ Özellikler + +- ✅ Email-based authentication (username yok) +- ✅ JWT tokens (60 min access, 7 days refresh) +- ✅ Email activation (register sonrası) +- ✅ Social login (Google, GitHub, Facebook) +- ✅ Password reset +- ✅ Rate limiting (100/hour anon, 1000/hour user) +- ✅ CORS support (SPA için) +- ✅ Modern email templates +- ✅ Admin panel + +## 🐛 Sorun Giderme + +### Server çalışmıyor? +```bash +# Virtual environment aktif mi kontrol et +source .venv/bin/activate + +# Migration'lar uygulandı mı? +python manage.py migrate + +# Port 8000 kullanımda mı? +lsof -i :8000 +``` + +### Email gönderilmiyor? +- MailPit çalışıyor mu? `http://localhost:8025` +- Console'da email içeriğini görebilirsin + +### JWT token çalışmıyor? +- Token'ın expire olmadığından emin ol (60 dakika) +- Header formatı: `Authorization: Bearer ` + +## 💡 İpuçları + +1. **Development:** + - `DEBUG=True` olmalı + - SQLite database kullan + - MailPit ile email test et + +2. **Production:** + - `DEBUG=False` yap + - PostgreSQL kullan + - Gerçek SMTP provider kullan + - HTTPS enable et + +3. **Frontend:** + - JWT tokens'ı localStorage veya cookie'de sakla + - Refresh token ile otomatik yenileme yap + - 401 hatalarında login sayfasına yönlendir + +## 📞 Yardım + +Sorularınız için: +- [AUTH.md](./AUTH.md) - Detaylı API dokümantasyonu +- [README.md](./README.md) - Proje genel bakış +- [COPILOT_MEMORY.md](./COPILOT_MEMORY.md) - Geliştirme notları + +--- + +**Başarılar! 🎉** + diff --git a/README.md b/README.md new file mode 100644 index 0000000..990157b --- /dev/null +++ b/README.md @@ -0,0 +1,323 @@ +# Django REST API - Authentication System + +Django 6.0 tabanlı, email authentication, JWT tokens ve social login desteği olan modern bir REST API. + +## 🚀 Özellikler + +- ✅ **Email-based Authentication** (username yok) +- ✅ **JWT Tokens** (access + refresh) +- ✅ **Email Activation** (kayıt sonrası aktivasyon) +- ✅ **Social Login** (Google, GitHub, Facebook) +- ✅ **Password Reset** (email ile) +- ✅ **Rate Limiting** (güvenlik için) +- ✅ **CORS Support** (SPA frontend'ler için) +- ✅ **Modern Email Templates** (HTML + plain text) + +## 📋 Gereksinimler + +- Python 3.10+ +- Django 6.0 +- PostgreSQL (production) veya SQLite (development) +- MailPit (development için email testing) + +## 🛠️ Kurulum + +### 1. Repository'yi Clone'layın +```bash +git clone +cd server +``` + +### 2. Virtual Environment Oluşturun +```bash +python -m venv .venv +source .venv/bin/activate # Linux/Mac +# veya +.venv\Scripts\activate # Windows +``` + +### 3. Bağımlılıkları Yükleyin +```bash +pip install -r req.txt +``` + +### 4. Environment Variables +```bash +cp .env.example .env +# .env dosyasını düzenleyin +``` + +### 5. Database Migration +```bash +python manage.py migrate +``` + +### 6. Superuser Oluşturun +```bash +python manage.py createsuperuser +``` + +### 7. Development Server'ı Başlatın +```bash +python manage.py runserver +``` + +API: `http://localhost:8000/api/v1/` +Admin: `http://localhost:8000/admin/` + +## 📧 Email Testing (MailPit) + +Development ortamında email'leri test etmek için MailPit kullanıyoruz. + +### MailPit Kurulumu +```bash +# Docker ile +docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit + +# veya binary ile +# https://github.com/axllent/mailpit/releases +``` + +### MailPit Web UI +`http://localhost:8025` - Gönderilen email'leri görüntüleyin + +## 🔐 Authentication Endpoints + +### Register +```bash +POST /api/v1/auth/users/ +Content-Type: application/json + +{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123", + "re_password": "StrongP@ssw0rd123", + "first_name": "Ali", + "last_name": "Veli" +} +``` + +### Activate Account +```bash +POST /api/v1/auth/users/activation/ +Content-Type: application/json + +{ + "uid": "MQ", + "token": "c4h7vu-..." +} +``` + +### Login +```bash +POST /api/v1/auth/jwt/create/ +Content-Type: application/json + +{ + "email": "user@example.com", + "password": "StrongP@ssw0rd123" +} +``` + +### Social Login +```bash +POST /api/v1/auth/social/google-oauth2/ +Content-Type: application/json + +{ + "access_token": "ya29.a0AfH6SMBx..." +} +``` + +Detaylı API dokümantasyonu için: [AUTH.md](./AUTH.md) + +## 🏗️ Proje Yapısı + +``` +server/ +├── accounts/ # Custom user app +│ ├── migrations/ +│ ├── models.py # CustomUser model +│ ├── serializers.py # DRF serializers +│ ├── views.py # Social login view +│ ├── admin.py # Admin configuration +│ ├── pipeline.py # Social auth pipeline +│ └── urls.py # URL routing +├── core/ # Project settings +│ ├── settings.py # Main settings +│ ├── urls.py # Root URL config +│ └── wsgi.py +├── templates/ +│ └── email/ # Email templates +│ ├── activation_email.html +│ ├── activation_email.txt +│ ├── confirmation_email.html +│ ├── confirmation_email.txt +│ ├── password_reset_email.html +│ └── password_reset_email.txt +├── manage.py +├── req.txt # Python dependencies +├── .env.example # Environment variables template +├── AUTH.md # API documentation +├── COPILOT_MEMORY.md # Development log +└── README.md # This file +``` + +## 🔧 Konfigürasyon + +### Social Auth Setup + +#### Google OAuth2 +1. [Google Cloud Console](https://console.developers.google.com/) → Create Project +2. APIs & Services → Credentials → Create OAuth 2.0 Client ID +3. Authorized redirect URIs: `http://localhost:8000/api/v1/social/complete/google-oauth2/` +4. `.env` dosyasına ekleyin: +```bash +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-client-id +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-client-secret +``` + +#### GitHub OAuth +1. [GitHub Settings](https://github.com/settings/developers) → OAuth Apps → New OAuth App +2. Authorization callback URL: `http://localhost:8000/api/v1/social/complete/github/` +3. `.env` dosyasına ekleyin: +```bash +SOCIAL_AUTH_GITHUB_KEY=your-client-id +SOCIAL_AUTH_GITHUB_SECRET=your-client-secret +``` + +#### Facebook OAuth +1. [Facebook Developers](https://developers.facebook.com/) → Create App +2. Add Facebook Login product +3. Valid OAuth Redirect URIs: `http://localhost:8000/api/v1/social/complete/facebook/` +4. `.env` dosyasına ekleyin: +```bash +SOCIAL_AUTH_FACEBOOK_KEY=your-app-id +SOCIAL_AUTH_FACEBOOK_SECRET=your-app-secret +``` + +## 🧪 Testing + +### Manuel Test +```bash +# Register +curl -X POST http://localhost:8000/api/v1/auth/users/ \ + -H "Content-Type: application/json" \ + -d '{"email":"test@example.com","password":"TestP@ss123","re_password":"TestP@ss123","first_name":"Test","last_name":"User"}' + +# Check MailPit: http://localhost:8025 + +# Activate (uid ve token email'den alın) +curl -X POST http://localhost:8000/api/v1/auth/users/activation/ \ + -H "Content-Type: application/json" \ + -d '{"uid":"MQ","token":"c4h7vu-..."}' + +# Login +curl -X POST http://localhost:8000/api/v1/auth/jwt/create/ \ + -H "Content-Type: application/json" \ + -d '{"email":"test@example.com","password":"TestP@ss123"}' +``` + +### Unit Tests (TODO) +```bash +python manage.py test accounts +``` + +## 📱 Frontend Entegrasyonu + +### Nuxt.js / Next.js +Detaylı entegrasyon örnekleri için [AUTH.md](./AUTH.md) dosyasına bakın. + +**Temel Flow:** +1. Frontend'de register form → Backend'e POST +2. Kullanıcı email'ini kontrol eder +3. Aktivasyon linkine tıklar → Frontend yakalayıp backend'e POST +4. Login form → JWT tokens alınır +5. Tokens localStorage/cookie'de saklanır +6. Her request'te `Authorization: Bearer ` header'ı eklenir + +## 🚀 Production Deployment + +### 1. Environment Variables +```bash +DEBUG=False +SECRET_KEY= +ALLOWED_HOSTS=yourdomain.com,api.yourdomain.com + +# PostgreSQL +DATABASE_URL=postgresql://user:pass@host:5432/dbname + +# SMTP Email +EMAIL_HOST=smtp.gmail.com +EMAIL_PORT=587 +EMAIL_USE_TLS=True +EMAIL_HOST_USER=your-email@gmail.com +EMAIL_HOST_PASSWORD=your-app-password + +# Social Auth Keys +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=... +SOCIAL_AUTH_GITHUB_KEY=... +``` + +### 2. Security Settings +`settings.py` içinde production için: +```python +DEBUG = False +CSRF_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = True +SECURE_SSL_REDIRECT = True +SECURE_HSTS_SECONDS = 31536000 +``` + +### 3. Static Files +```bash +python manage.py collectstatic +``` + +### 4. Database Migration +```bash +python manage.py migrate +``` + +### 5. Gunicorn/uWSGI +```bash +gunicorn core.wsgi:application --bind 0.0.0.0:8000 +``` + +## 📚 Dokümantasyon + +- **API Documentation:** [AUTH.md](./AUTH.md) +- **Cache Documentation:** [CACHE.md](./CACHE.md) +- **Development Log:** [COPILOT_MEMORY.md](./COPILOT_MEMORY.md) +- **Djoser Docs:** https://djoser.readthedocs.io/ +- **SimpleJWT Docs:** https://django-rest-framework-simplejwt.readthedocs.io/ +- **Python Social Auth:** https://python-social-auth.readthedocs.io/ + +## 🤝 Contributing + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add some amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +## 📝 License + +This project is licensed under the MIT License. + +## 👤 Author + +Your Name - [@yourhandle](https://twitter.com/yourhandle) + +## 🙏 Acknowledgments + +- Django Team +- Django REST Framework +- Djoser +- Python Social Auth +- MailPit + +--- + +**Happy Coding! 🎉** + diff --git a/REVIEWS_API.md b/REVIEWS_API.md new file mode 100644 index 0000000..a20544a --- /dev/null +++ b/REVIEWS_API.md @@ -0,0 +1,192 @@ +# Değerlendirme ve Puanlama Sistemi (Reviews API) Dokümantasyonu + +Bu doküman, `reviews` uygulaması tarafından sağlanan API endpoint'lerinin frontend tarafında nasıl kullanılacağını açıklar. Bu sistem polimorfik bir yapıdadır, yani sadece ürünler için değil, ileride eklenebilecek diğer modüller (Blog, Satıcı vb.) için de kullanılabilir. + +## 1. Genel Bilgiler + +* **Base URL:** `/api/v1/reviews/` +* **Authentication:** Oy verme işlemi (`POST`) için kullanıcının giriş yapmış olması (Token ile) gerekir. Listeleme (`GET`) işlemi herkese açıktır. + +## 2. Ürün Verisinde Puanlama Bilgisi + +Ürünleri listelediğinizde (`/api/v1/products/`) veya detayını çektiğinizde (`/api/v1/products//`), ürün objesi artık şu iki alanı içerir: + +* **`average_rating` (Float):** Ürünün ortalama puanı (1.0 - 5.0 arası). Hiç oy yoksa `0.0` döner. +* **`rating_count` (Integer):** Toplam kaç kişinin oy verdiği. + +**Örnek Ürün Objesi:** +```json +{ + "id": 15, + "title": "Örnek Ürün", + "price": 100.0, + "average_rating": 4.5, // <-- Ortalama Puan + "rating_count": 12, // <-- Oy Sayısı + "images": "/media/uploads/products/example.avif", + ... +} +``` +Bu bilgileri ürün kartlarında yıldız göstermek için kullanabilirsiniz. + +--- + +## 3. API Endpoint'leri + +### 3.1. Oy Verme ve Yorum Yapma + +Kullanıcının bir nesneye (örneğin bir ürüne) puan vermesini ve isteğe bağlı olarak yorum yapmasını sağlar. Bir kullanıcı aynı nesneye sadece bir kez oy verebilir; ikinci istekte mevcut oy güncellenir. + +* **URL:** `/api/v1/reviews/rate/` +* **Method:** `POST` +* **Permission:** `IsAuthenticated` (Header'da `Authorization: Bearer ` olmalı) + +#### İstek (Request) Body Parametreleri: + +| Parametre | Tip | Zorunlu | Açıklama | +| :--- | :--- | :--- | :--- | +| `model_name` | String | Evet | Oylanacak nesnenin model adı. Örn: `"product"` | +| `object_id` | Integer | Evet | Oylanacak nesnenin ID'si. Örn: `15` | +| `score` | Integer | Evet | 1 ile 5 arasında bir tam sayı. | +| `comment` | String | Hayır | Kullanıcının yorumu. | + +#### Örnek İstek (JSON): + +```json +{ + "model_name": "product", + "object_id": 15, + "score": 5, + "comment": "Ürün beklediğimden çok daha kaliteli çıktı, tavsiye ederim." +} +``` + +#### Başarılı Yanıt (201 Created veya 200 OK): + +```json +{ + "id": 42, + "score": 5, + "comment": "Ürün beklediğimden çok daha kaliteli çıktı, tavsiye ederim.", + "user": "kullanici_adi", + "created_at": "2023-10-27T10:00:00Z", + "model_name": "product", + "object_id": 15 +} +``` + +#### Hata Yanıtları: + +* **400 Bad Request:** Eksik parametre veya geçersiz puan (1-5 dışı). +* **401 Unauthorized:** Giriş yapılmamış. +* **404 Not Found:** Belirtilen model veya ID bulunamadı. + +--- + +### 3.2. Değerlendirmeleri Listeleme + +Belirli bir nesneye ait tüm yorumları ve puanları listeler. Genellikle ürün detay sayfasının altındaki "Yorumlar" sekmesinde kullanılır. + +* **URL:** `/api/v1/reviews/list/` +* **Method:** `GET` +* **Permission:** `AllowAny` (Herkes erişebilir) + +#### Query Parametreleri: + +| Parametre | Zorunlu | Açıklama | +| :--- | :--- | :--- | +| `model` | Evet | Listelenecek nesnenin model adı. Örn: `product`| +| `id` | Evet | Listelenecek nesnenin ID'si. | + +#### Örnek İstek: + +`GET /api/v1/reviews/list/?model=product&id=15` + +#### Başarılı Yanıt (200 OK): + +```json +[ + { + "id": 42, + "score": 5, + "comment": "Harika ürün!", + "user": "ahmet123", + "created_at": "2023-10-27T10:00:00Z", + "model_name": "product", + "object_id": 15 + }, + { + "id": 43, + "score": 4, + "comment": "Kargo biraz geç geldi ama ürün güzel.", + "user": "ayse_yilmaz", + "created_at": "2023-10-26T14:30:00Z", + "model_name": "product", + "object_id": 15 + } +] +``` + +--- + +## 4. Frontend Entegrasyon Senaryosu (React Örneği) + +Bir ürün detay sayfasında (Product Detail Page) yapılması gerekenler: + +1. **Ürün Bilgisini Çek:** `/api/v1/products//` endpoint'inden ürünü çekin. Gelen `average_rating` ve `rating_count` ile sayfanın üst kısmında yıldızları gösterin. +2. **Yorumları Çek:** Ürün ID'sini kullanarak `/api/v1/reviews/list/?model=product&id=` endpoint'inden yorumları çekin ve aşağıda listeleyin. + +```javascript +import React, { useState, useEffect } from 'react'; +import axios from 'axios'; + +function ProductDetail({ slug }) { + const [product, setProduct] = useState(null); + const [reviews, setReviews] = useState([]); + + useEffect(() => { + async function fetchData() { + // 1. Ürün detayını çek + const prodRes = await axios.get(`/api/v1/products/${slug}/`); + setProduct(prodRes.data); + + // 2. Ürünün yorumlarını çek (prodRes.data.id kullanarak) + const reviewRes = await axios.get(`/api/v1/reviews/list/`, { + params: { model: 'product', id: prodRes.data.id } + }); + setReviews(reviewRes.data); + } + fetchData(); + }, [slug]); + + if (!product) return
Yükleniyor...
; + + return ( +
+

{product.title}

+ + {/* Özet Puan Gösterimi */} +
+ Ortalama Puan: {product.average_rating} / 5 + ({product.rating_count} değerlendirme) +
+ + {/* ... Ürün detayları ... */} + + {/* Yorumlar Listesi */} +
+

Yorumlar

+ {reviews.map(review => ( +
+ {review.user} - {review.score} Yıldız +

{review.comment}

+
+ ))} +
+
+ ); +} +``` + +## 5. Notlar + +* **Resim Yolları:** API'den dönen resim yolları `/media/...` şeklinde olabilir. Frontend tarafında base URL'i (`http://localhost:8000` veya canlı sunucu adresi) başına eklemeniz gerekebilir. diff --git a/SERVICES_README.md b/SERVICES_README.md new file mode 100644 index 0000000..22a6ed8 --- /dev/null +++ b/SERVICES_README.md @@ -0,0 +1,54 @@ +# Django ve Celery Servis Scriptleri + +Bu scriptler Django ve Celery servislerini kolayca başlatıp durdurmak için kullanılır. + +## Kullanım + +### Servisleri Başlatma + +```bash +./start-services.sh +``` + +Bu script: +- ✅ Django migrasyonlarını çalıştırır +- ✅ Static dosyaları toplar +- ✅ Django development server'ı başlatır (port 8000) +- ✅ Celery worker'ı başlatır +- ✅ Logları canlı olarak gösterir + +### Servisleri Durdurma + +**Yöntem 1:** `Ctrl+C` tuşlarına basın (start-services.sh çalışırken) + +**Yöntem 2:** Ayrı bir terminal'de: +```bash +./stop-services.sh +``` + +## Log Dosyaları + +Loglar `./logs/` klasöründe saklanır: +- `logs/django.log` - Django sunucusu logları +- `logs/celery.log` - Celery worker logları + +## PID Dosyaları + +Process ID'leri `./pids/` klasöründe saklanır: +- `pids/django.pid` +- `pids/celery_worker.pid` + +## Özellikler + +- 🎨 Renkli terminal çıktısı +- 📝 Ayrı log dosyaları +- 🔄 Graceful shutdown (Ctrl+C ile) +- 🧹 Otomatik cleanup +- 🚦 Process takibi + +## Notlar + +- Development ortamı için tasarlanmıştır +- Production'da Docker veya systemd kullanmanız önerilir +- Port 8000 kullanılmalı (değiştirmek için start-services.sh'i düzenleyin) + diff --git a/SOCIAL_AUTH_SETUP.md b/SOCIAL_AUTH_SETUP.md new file mode 100644 index 0000000..f1150de --- /dev/null +++ b/SOCIAL_AUTH_SETUP.md @@ -0,0 +1,239 @@ +# 🔐 Social Authentication Setup & Test Guide + +## ⚠️ Google OAuth Setup (ZORUNLU) + +Google ile login çalışması için callback URL'lerini Google Console'da eklemeniz gerekiyor: + +### Adımlar: + +1. **Google Cloud Console'a git:** + https://console.cloud.google.com/apis/credentials + +2. **Projenizi seçin** (veya yeni proje oluşturun) + +3. **OAuth 2.0 Client ID'nize tıklayın:** + - Client ID: `915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com` + +4. **"Authorized redirect URIs" bölümüne şu URL'leri ekleyin:** + ``` + http://localhost:8000/api/v1/social/complete/google-oauth2/ + http://localhost:8000/complete/google-oauth2/ + http://127.0.0.1:8000/api/v1/social/complete/google-oauth2/ + ``` + +5. **"Authorized JavaScript origins" bölümüne:** + ``` + http://localhost:8000 + http://127.0.0.1:8000 + ``` + +6. **Kaydet** butonuna tıklayın + +--- + +## 🧪 Test Seçenekleri + +### Seçenek 1: HTML Test Sayfası (ÖNERİLEN ✅) + +En kolay test yöntemi: + +```bash +# Tarayıcınızda açın: +file:///home/beyhan/Python/server/templates/test_social_auth.html +``` + +**Veya:** +1. Dosya yöneticisinde `/home/beyhan/Python/server/templates/test_social_auth.html` dosyasına git +2. Çift tıkla (tarayıcıda açılır) +3. "Login with Google" butonuna tıkla + +--- + +### Seçenek 2: Python Test Scripti + +Terminal'de interaktif test: + +```bash +cd /home/beyhan/Python/server +source .venv/bin/activate +python test_social_auth_manual.py +``` + +Bu script ile: +- Google OAuth test edebilirsiniz (real token ile) +- GitHub OAuth test edebilirsiniz + +--- + +### Seçenek 3: Google OAuth Playground + +Gerçek access token almak için: + +1. **Git:** https://developers.google.com/oauthplayground/ + +2. **Settings (sağ üstte ⚙️):** + - "Use your own OAuth credentials" seçeneğini aktif et + - OAuth Client ID: `915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com` + - OAuth Client secret: `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` + +3. **Step 1 - Select & authorize APIs:** + - Google OAuth2 API v2 seç + - `https://www.googleapis.com/auth/userinfo.email` ✅ + - `https://www.googleapis.com/auth/userinfo.profile` ✅ + - "Authorize APIs" butonuna tıkla + +4. **Step 2 - Exchange authorization code for tokens:** + - "Exchange authorization code for tokens" butonuna tıkla + - Access token kopyala + +5. **Test et:** + ```bash + curl -X POST http://localhost:8000/api/v1/auth/social/google-oauth2/ \ + -H "Content-Type: application/json" \ + -d '{"access_token":""}' + ``` + +--- + +## 🐙 GitHub OAuth Setup + +GitHub için daha basit: + +### Adımlar: + +1. **GitHub Settings'e git:** + https://github.com/settings/developers + +2. **OAuth Apps'e tıkla** + +3. **Uygulamanızı bul veya yeni oluştur:** + - Application name: Django REST API Test + - Homepage URL: `http://localhost:8000` + - Authorization callback URL: `http://localhost:8000/api/v1/social/complete/github/` + +4. **Client ID ve Client Secret'ı kontrol et:** + - Client ID: `Ov23liUt9B61O46Mdfm4` + - Client Secret: `c7fc8dcb1b2c8f22120608425d07d5efd995baaf` + +### Test için Personal Access Token: + +Alternatif olarak, test için GitHub Personal Access Token kullanabilirsiniz: + +1. **Git:** https://github.com/settings/tokens +2. **Generate new token (classic)** +3. **Scopes seç:** + - `user` ✅ + - `user:email` ✅ +4. **Token'ı oluştur ve kopyala** +5. **Test et:** + ```bash + curl -X POST http://localhost:8000/api/v1/auth/social/github/ \ + -H "Content-Type: application/json" \ + -d '{"access_token":""}' + ``` + +--- + +## ✅ Test Kontrolü + +Başarılı bir social login response'u şöyle görünmeli: + +```json +{ + "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 2, + "email": "user@gmail.com", + "first_name": "John", + "last_name": "Doe", + "is_active": true, + "date_joined": "2025-12-12T22:00:00Z" + } +} +``` + +--- + +## 🐛 Troubleshooting + +### "redirect_uri_mismatch" hatası: +- Google Console'da redirect URI'ları kontrol edin +- Tam olarak `http://localhost:8000/api/v1/social/complete/google-oauth2/` olmalı + +### "invalid_client" hatası: +- Client ID ve Secret'ın doğru olduğundan emin olun +- Google Console'da OAuth consent screen'i yapılandırdınız mı? + +### "Email not provided" hatası: +- OAuth scope'unda `userinfo.email` var mı kontrol edin +- Provider settings'de email scope'u aktif mi? + +### Server hatası: +```bash +# Server çalıştığından emin olun: +cd /home/beyhan/Python/server +source .venv/bin/activate +python manage.py runserver +``` + +### Social auth view çalışmıyor: +```bash +# URL'leri kontrol edin: +curl http://localhost:8000/api/v1/auth/social/google-oauth2/ \ + -X POST -H "Content-Type: application/json" \ + -d '{"access_token":"test"}' + +# 400 Bad Request bekliyoruz (invalid token), 404 değil! +``` + +--- + +## 📊 Test Checklist + +- [ ] Google Console'da redirect URI'lar eklendi +- [ ] Django server çalışıyor (`python manage.py runserver`) +- [ ] HTML test sayfası açılıyor +- [ ] Google "Login" butonu çalışıyor +- [ ] Access token alınıyor +- [ ] Backend'e request gidiyor +- [ ] JWT tokens dönüyor +- [ ] User bilgileri görünüyor + +--- + +## 🎯 Hızlı Test Komutu + +En hızlı test: + +```bash +# 1. Server'ı başlat (bir terminalde) +cd /home/beyhan/Python/server +source .venv/bin/activate +python manage.py runserver + +# 2. Test scriptini çalıştır (başka terminalde) +cd /home/beyhan/Python/server +source .venv/bin/activate +python test_social_auth_manual.py +``` + +Veya: + +```bash +# HTML sayfasını tarayıcıda aç: +xdg-open /home/beyhan/Python/server/templates/test_social_auth.html +``` + +--- + +## 📚 Daha Fazla Bilgi + +- **API Dokümantasyonu:** [AUTH.md](./AUTH.md) +- **Genel Bakış:** [README.md](./README.md) +- **Hızlı Başlangıç:** [QUICK_START.md](./QUICK_START.md) + +--- + +**İyi Testler! 🚀** + diff --git a/accounts/__init__.py b/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/admin.py b/accounts/admin.py new file mode 100644 index 0000000..c35c598 --- /dev/null +++ b/accounts/admin.py @@ -0,0 +1,37 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from django.utils.translation import gettext_lazy as _ +from .models import CustomUser + + +@admin.register(CustomUser) +class CustomUserAdmin(BaseUserAdmin): + """ + Custom admin panel configuration for CustomUser model. + """ + + # Fields to display in the user list + list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_active', 'date_joined') + list_filter = ('is_staff', 'is_superuser', 'is_active', 'date_joined') + search_fields = ('email', 'first_name', 'last_name') + ordering = ('-date_joined',) + + # Fields to display on the user detail/edit page + fieldsets = ( + (None, {'fields': ('email', 'password')}), + (_('Personal info'), {'fields': ('first_name', 'last_name')}), + (_('Permissions'), { + 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'), + }), + (_('Important dates'), {'fields': ('last_login', 'date_joined')}), + ) + + # Fields to display when creating a new user + add_fieldsets = ( + (None, { + 'classes': ('wide',), + 'fields': ('email', 'password1', 'password2', 'first_name', 'last_name', 'is_staff', 'is_active'), + }), + ) + + readonly_fields = ('date_joined', 'last_login') diff --git a/accounts/apps.py b/accounts/apps.py new file mode 100644 index 0000000..9b3fc5a --- /dev/null +++ b/accounts/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + name = 'accounts' diff --git a/accounts/middleware.py b/accounts/middleware.py new file mode 100644 index 0000000..1852a1f --- /dev/null +++ b/accounts/middleware.py @@ -0,0 +1,27 @@ +""" +Custom middleware for social authentication. +""" + + +class SocialAuthExceptionMiddleware: + """ + Middleware to handle social auth exceptions and redirect properly. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + response = self.get_response(request) + return response + + def process_exception(self, request, exception): + """Handle social auth exceptions.""" + from social_core.exceptions import AuthException + from django.http import HttpResponseRedirect + + if isinstance(exception, AuthException): + return HttpResponseRedirect(f'/api/v1/auth/social/error/?error={str(exception)}') + + return None + diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py new file mode 100644 index 0000000..6019389 --- /dev/null +++ b/accounts/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 6.0 on 2025-12-11 21:31 + +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='CustomUser', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('email', models.EmailField(error_messages={'unique': 'A user with that email already exists.'}, max_length=254, unique=True, verbose_name='email address')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + }, + ), + ] diff --git a/accounts/migrations/__init__.py b/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/models.py b/accounts/models.py new file mode 100644 index 0000000..3135264 --- /dev/null +++ b/accounts/models.py @@ -0,0 +1,103 @@ +from django.db import models +from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + + +class CustomUserManager(BaseUserManager): + """ + Custom user manager where email is the unique identifier + for authentication instead of username. + """ + + def create_user(self, email, password=None, **extra_fields): + """ + Create and save a regular user with the given email and password. + """ + if not email: + raise ValueError(_('The Email field must be set')) + + email = self.normalize_email(email) + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, email, password=None, **extra_fields): + """ + Create and save a SuperUser with the given email and password. + """ + extra_fields.setdefault('is_staff', True) + extra_fields.setdefault('is_superuser', True) + extra_fields.setdefault('is_active', True) + + if extra_fields.get('is_staff') is not True: + raise ValueError(_('Superuser must have is_staff=True.')) + if extra_fields.get('is_superuser') is not True: + raise ValueError(_('Superuser must have is_superuser=True.')) + + return self.create_user(email, password, **extra_fields) + + +class CustomUser(AbstractBaseUser, PermissionsMixin): + """ + Custom user model where email is used instead of username. + + Fields: + - email: unique email address (used for login) + - first_name: user's first name + - last_name: user's last name + - is_staff: designates whether user can log into admin site + - is_active: designates whether user account is active + - date_joined: when the user account was created + """ + + email = models.EmailField( + _('email address'), + unique=True, + error_messages={ + 'unique': _("A user with that email already exists."), + } + ) + first_name = models.CharField(_('first name'), max_length=150, blank=True) + last_name = models.CharField(_('last name'), max_length=150, blank=True) + is_staff = models.BooleanField( + _('staff status'), + default=False, + help_text=_('Designates whether the user can log into this admin site.'), + ) + is_active = models.BooleanField( + _('active'), + default=True, + help_text=_( + 'Designates whether this user should be treated as active. ' + 'Unselect this instead of deleting accounts.' + ), + ) + date_joined = models.DateTimeField(_('date joined'), default=timezone.now) + + # Specify that we use email as the username field + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = [] # Email is already required by USERNAME_FIELD + + objects = CustomUserManager() + + class Meta: + verbose_name = _('user') + verbose_name_plural = _('users') + + def __str__(self): + return self.email + + def get_full_name(self): + """ + Return the first_name plus the last_name, with a space in between. + """ + full_name = f'{self.first_name} {self.last_name}' + return full_name.strip() + + def get_short_name(self): + """ + Return the short name for the user. + """ + return self.first_name diff --git a/accounts/pipeline.py b/accounts/pipeline.py new file mode 100644 index 0000000..49e8a45 --- /dev/null +++ b/accounts/pipeline.py @@ -0,0 +1,19 @@ +""" +Custom pipeline functions for Python Social Auth. +These functions are called during the social authentication process. +""" + + +def activate_user(strategy, details, user=None, *args, **kwargs): + """ + Custom pipeline step to ensure social auth users are active. + + This ensures that users who register via social login don't need + email activation - they are automatically activated since the social + provider has already verified their email. + """ + if user and not user.is_active: + user.is_active = True + user.save(update_fields=['is_active']) + return {'user': user} + diff --git a/accounts/serializers.py b/accounts/serializers.py new file mode 100644 index 0000000..e4ce18e --- /dev/null +++ b/accounts/serializers.py @@ -0,0 +1,74 @@ +from rest_framework import serializers +from djoser.serializers import UserCreateSerializer as BaseUserCreateSerializer +from djoser.serializers import UserSerializer as BaseUserSerializer +from .models import CustomUser + + +class CustomUserCreateSerializer(BaseUserCreateSerializer): + """ + Custom serializer for user registration. + Sets is_active=False by default so users must activate via email. + """ + + class Meta(BaseUserCreateSerializer.Meta): + model = CustomUser + fields = ('id', 'email', 'password', 're_password', 'first_name', 'last_name') + + def create(self, validated_data): + """ + Override create to ensure is_active=False for email/password registrations. + Social auth users will have is_active=True set via pipeline. + """ + # Remove re_password as it's only for validation + validated_data.pop('re_password', None) + + # Create user with is_active=False + user = CustomUser.objects.create_user( + email=validated_data['email'], + password=validated_data['password'], + first_name=validated_data.get('first_name', ''), + last_name=validated_data.get('last_name', ''), + is_active=False # Requires email activation + ) + return user + + +class CustomUserSerializer(BaseUserSerializer): + """ + Serializer for user details. + Used for current user endpoint and user profile. + """ + + class Meta(BaseUserSerializer.Meta): + model = CustomUser + fields = ('id', 'email', 'first_name', 'last_name', 'is_active', 'date_joined') + read_only_fields = ('id', 'email', 'is_active', 'date_joined') + + +class SocialLoginSerializer(serializers.Serializer): + """ + Serializer for social authentication. + Accepts provider name and access_token from frontend. + """ + provider = serializers.ChoiceField( + choices=['google-oauth2', 'github', 'facebook'], + help_text="Social auth provider name" + ) + access_token = serializers.CharField( + help_text="Access token from the social provider" + ) + id_token = serializers.CharField( + required=False, + allow_blank=True, + help_text="ID token (optional, used by some providers like Google)" + ) + + def validate_provider(self, value): + """Validate that the provider is supported.""" + valid_providers = ['google-oauth2', 'github', 'facebook'] + if value not in valid_providers: + raise serializers.ValidationError( + f"Invalid provider. Must be one of: {', '.join(valid_providers)}" + ) + return value + diff --git a/accounts/tests.py b/accounts/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/accounts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/accounts/urls.py b/accounts/urls.py new file mode 100644 index 0000000..aebff40 --- /dev/null +++ b/accounts/urls.py @@ -0,0 +1,51 @@ +from django.urls import path, include +from .views import SocialLoginView, SocialAuthCallbackView, SocialAuthSuccessView + +urlpatterns = [ + # Python Social Auth URLs (MUST BE FIRST for OAuth redirect flow) + # /api/v1/social/login/github/ - GET: Start GitHub OAuth + # /api/v1/social/login/google-oauth2/ - GET: Start Google OAuth + # /api/v1/social/complete/github/ - GET: GitHub callback (handled by social-auth) + # /api/v1/social/complete/google-oauth2/ - GET: Google callback (handled by social-auth) + path('social/', include('social_django.urls', namespace='social')), + + # SPA Test Page (Main app) + path('spa/', lambda request: + __import__('django.shortcuts').shortcuts.render( + request, 'spa_test/index.html' + ), name='spa-test'), + + # SPA Activation Page (Frontend route for email links) + path('spa/activate///', lambda request, uid, token: + __import__('django.shortcuts').shortcuts.render( + request, 'spa_test/activate.html', {'uid': uid, 'token': token} + ), name='spa-activate'), + + # Django REST Framework browsable API auth + path('api-auth/', include('rest_framework.urls')), + + # Djoser endpoints (registration, activation, etc.) + # /api/v1/auth/users/ - POST: Register new user + # /api/v1/auth/users/activation/ - POST: Activate account with uid/token + # /api/v1/auth/users/me/ - GET: Get current user info + # /api/v1/auth/users/resend_activation/ - POST: Resend activation email + path('auth/', include('djoser.urls')), + + # Djoser JWT endpoints + # /api/v1/auth/jwt/create/ - POST: Login (get JWT tokens) + # /api/v1/auth/jwt/refresh/ - POST: Refresh access token + # /api/v1/auth/jwt/verify/ - POST: Verify token + path('auth/', include('djoser.urls.jwt')), + + # Social authentication endpoints (Token-based - for mobile/SPA) + # /api/v1/auth/social/google-oauth2/ - POST: Login with Google (requires access_token) + # /api/v1/auth/social/github/ - POST: Login with GitHub (requires access_token) + # /api/v1/auth/social/facebook/ - POST: Login with Facebook (requires access_token) + path('auth/social//', SocialLoginView.as_view(), name='social-login'), + + # OAuth callback handler (after social-auth completes) + path('auth/social/callback/', SocialAuthCallbackView.as_view(), name='social-callback'), + + # Success/Error pages + path('auth/social/success/', SocialAuthSuccessView.as_view(), name='social-success'), +] diff --git a/accounts/views.py b/accounts/views.py new file mode 100644 index 0000000..b022205 --- /dev/null +++ b/accounts/views.py @@ -0,0 +1,271 @@ +from django.shortcuts import redirect +from django.views import View +from rest_framework import status +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.permissions import AllowAny +from rest_framework_simplejwt.tokens import RefreshToken +from social_django.utils import load_strategy, load_backend +from social_core.backends.oauth import BaseOAuth2 +from social_core.exceptions import AuthException, AuthForbidden +from .serializers import SocialLoginSerializer, CustomUserSerializer +import json + + +class SocialLoginView(APIView): + """ + Social authentication endpoint. + Accepts access_token from social provider and returns JWT tokens. + + POST /api/v1/auth/social// + Body: { "access_token": "..." } + + Supported providers: google-oauth2, github, facebook + """ + permission_classes = [AllowAny] + serializer_class = SocialLoginSerializer + + def post(self, request, provider): + """ + Authenticate user with social provider token. + """ + # Validate provider + valid_providers = ['google-oauth2', 'github', 'facebook'] + if provider not in valid_providers: + return Response( + {'error': f'Invalid provider. Must be one of: {", ".join(valid_providers)}'}, + status=status.HTTP_400_BAD_REQUEST + ) + + # Get access_token from request + access_token = request.data.get('access_token') + id_token = request.data.get('id_token', None) + + if not access_token: + return Response( + {'error': 'access_token is required'}, + status=status.HTTP_400_BAD_REQUEST + ) + + try: + # Load social auth strategy and backend + strategy = load_strategy(request) + backend = load_backend( + strategy=strategy, + name=provider, + redirect_uri=None + ) + + # Verify token and get user + if isinstance(backend, BaseOAuth2): + # For OAuth2 providers, use access_token to get user info + user = backend.do_auth(access_token) + else: + return Response( + {'error': 'Unsupported authentication backend'}, + status=status.HTTP_400_BAD_REQUEST + ) + + if not user: + return Response( + {'error': 'Authentication failed. Invalid token.'}, + status=status.HTTP_401_UNAUTHORIZED + ) + + # Check if user is active + if not user.is_active: + # This shouldn't happen for social auth users, but just in case + user.is_active = True + user.save(update_fields=['is_active']) + + # Generate JWT tokens + refresh = RefreshToken.for_user(user) + + # Serialize user data + user_serializer = CustomUserSerializer(user) + + return Response({ + 'access': str(refresh.access_token), + 'refresh': str(refresh), + 'user': user_serializer.data + }, status=status.HTTP_200_OK) + + except AuthForbidden: + return Response( + {'error': 'Authentication forbidden. Email not provided by provider or permission denied.'}, + status=status.HTTP_403_FORBIDDEN + ) + except AuthException as e: + return Response( + {'error': f'Authentication error: {str(e)}'}, + status=status.HTTP_400_BAD_REQUEST + ) + except Exception as e: + return Response( + {'error': f'An error occurred during authentication: {str(e)}'}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + + +class SocialAuthCallbackView(View): + """ + Callback view for OAuth flow completion. + After successful authentication, redirects to frontend with tokens. + """ + permission_classes = [AllowAny] + authentication_classes = [] # No authentication required for callback + + def get(self, request): + """Handle OAuth callback and redirect to frontend with JWT tokens.""" + from django.http import HttpResponseRedirect + + # Get the authenticated user from the session + user = request.user + + if user and user.is_authenticated: + # Generate JWT tokens + refresh = RefreshToken.for_user(user) + + # Redirect to SPA with tokens (for testing) + redirect_url = f"/api/v1/spa/?access={str(refresh.access_token)}&refresh={str(refresh)}" + + print(f"[OAuth Callback] Redirecting to: {redirect_url}") + + return HttpResponseRedirect(redirect_url) + else: + # Authentication failed + return HttpResponseRedirect("/api/v1/auth/social/error/?error=authentication_failed") + + +class SocialAuthSuccessView(APIView): + """ + Success page after social authentication. + Displays tokens for testing purposes. + """ + permission_classes = [AllowAny] + authentication_classes = [] # No authentication required + + def get(self, request): + """Display success page with tokens.""" + access_token = request.GET.get('access', '') + refresh_token = request.GET.get('refresh', '') + + # Also check if user is in session + if not access_token and request.user.is_authenticated: + refresh = RefreshToken.for_user(request.user) + access_token = str(refresh.access_token) + refresh_token = str(refresh) + + html_content = f""" + + + + Authentication Successful + + + +
+
+

Authentication Successful!

+

+ You have successfully authenticated with your social account. +

+ +
+
Access Token:
+
{access_token}
+
+ +
+
Refresh Token:
+
{refresh_token}
+
+ + + +
+ + + + + """ + + from django.http import HttpResponse + return HttpResponse(html_content) diff --git a/backup/__init__.py b/backup/__init__.py new file mode 100644 index 0000000..78cead9 --- /dev/null +++ b/backup/__init__.py @@ -0,0 +1,2 @@ +default_app_config = 'backup.apps.BackupConfig' + diff --git a/backup/admin.py b/backup/admin.py new file mode 100644 index 0000000..8794e9d --- /dev/null +++ b/backup/admin.py @@ -0,0 +1,368 @@ +from django.contrib import admin +from django.utils.html import format_html +from django.contrib import messages +from django.utils import timezone +from django.http import FileResponse, HttpResponse +from django.shortcuts import get_object_or_404, render, redirect +from django.urls import path, reverse +from django.conf import settings +import os +from datetime import datetime +from .models import DatabaseBackup +from .views import BackupManager + + +@admin.register(DatabaseBackup) +class DatabaseBackupAdmin(admin.ModelAdmin): + list_display = ['name', 'status_badge', 'backup_type', 'file_size_display', 'download_link', 'created_by', 'created_at', 'completed_at'] + list_filter = ['status', 'backup_type', 'created_at'] + search_fields = ['name', 'notes', 'error_message'] + readonly_fields = ['file_path', 'file_size', 'status', 'created_by', 'created_at', 'completed_at', 'error_message', 'file_size_display_field'] + + fieldsets = ( + ('Temel Bilgiler', { + 'fields': ('name', 'backup_type', 'status', 'notes') + }), + ('Yedek Dosya Bilgileri', { + 'fields': ('file_path', 'file_size_display_field') + }), + ('Zaman Bilgileri', { + 'fields': ('created_by', 'created_at', 'completed_at') + }), + ('Hata Bilgileri', { + 'fields': ('error_message',), + 'classes': ('collapse',) + }), + ) + + actions = ['create_new_backup', 'restore_selected_backup', 'download_backup', 'delete_backup_files'] + + def status_badge(self, obj): + """Durum için renkli badge gösterir""" + colors = { + 'pending': '#FFA500', + 'in_progress': '#2196F3', + 'completed': '#4CAF50', + 'failed': '#F44336', + } + color = colors.get(obj.status, '#999') + return format_html( + '{}', + color, + obj.get_status_display() + ) + status_badge.short_description = 'Durum' + + def file_size_display(self, obj): + """Dosya boyutunu gösterir""" + return obj.get_file_size_display() + file_size_display.short_description = 'Dosya Boyutu' + + def file_size_display_field(self, obj): + """Read-only field için dosya boyutu""" + return obj.get_file_size_display() + file_size_display_field.short_description = 'Dosya Boyutu' + + def download_link(self, obj): + """İndir butonu gösterir""" + if obj.file_path and obj.status == 'completed' and os.path.isfile(obj.file_path): + url = f'/admin/backup/databasebackup/{obj.pk}/download/' + return format_html( + '📥 İndir', + url + ) + return format_html('-', '#999') + download_link.short_description = 'İndir' + + def get_urls(self): + """Admin için özel URL'ler ekler""" + urls = super().get_urls() + custom_urls = [ + path('create-backup/', self.admin_site.admin_view(self.create_backup_view), name='backup_create'), + path('upload-backup/', self.admin_site.admin_view(self.upload_backup_view), name='backup_upload'), + path('/download/', self.admin_site.admin_view(self.download_backup_file), name='backup_download'), + ] + return custom_urls + urls + + def changelist_view(self, request, extra_context=None): + """Change list view'a ekstra context ekler""" + extra_context = extra_context or {} + extra_context['show_create_backup_button'] = True + extra_context['show_upload_backup_button'] = True + return super().changelist_view(request, extra_context=extra_context) + + def create_backup_view(self, request): + """Yeni yedek oluşturma view'i""" + from django.shortcuts import redirect + from django.urls import reverse + + # Yeni bir backup objesi oluştur + timestamp = timezone.now().strftime('%Y%m%d_%H%M%S') + backup = DatabaseBackup.objects.create( + name=f"Manuel Yedek - {timezone.now().strftime('%Y-%m-%d %H:%M:%S')}", + backup_type='manual', + created_by=request.user, + status='pending' + ) + + # Yedekleme işlemini başlat + manager = BackupManager() + success, message = manager.create_backup(backup) + + if success: + self.message_user(request, message, messages.SUCCESS) + else: + self.message_user(request, message, messages.ERROR) + + # Liste sayfasına yönlendir + return redirect(reverse('admin:backup_databasebackup_changelist')) + + def upload_backup_view(self, request): + """Yedek dosyası yükleme view'i""" + if request.method == 'POST': + uploaded_file = request.FILES.get('backup_file') + backup_name = request.POST.get('backup_name', '') + + if not uploaded_file: + self.message_user(request, "Lütfen bir dosya seçin", messages.ERROR) + return redirect(reverse('admin:backup_upload')) + + # Dosya uzantısı kontrolü + if not uploaded_file.name.endswith('.sql'): + self.message_user(request, "Sadece .sql uzantılı dosyalar yüklenebilir", messages.ERROR) + return redirect(reverse('admin:backup_upload')) + + # Dosya boyutu kontrolü (max 500MB) + max_size = 500 * 1024 * 1024 # 500MB in bytes + if uploaded_file.size > max_size: + self.message_user(request, "Dosya çok büyük. Maksimum 500MB olabilir", messages.ERROR) + return redirect(reverse('admin:backup_upload')) + + try: + # Backup klasörünü kontrol et + manager = BackupManager() + backup_dir = manager.backup_dir + + # Dosya adını oluştur (timestamp ekle) + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + original_name = os.path.splitext(uploaded_file.name)[0] + filename = f"uploaded_{original_name}_{timestamp}.sql" + file_path = os.path.join(backup_dir, filename) + + # Dosyayı kaydet + with open(file_path, 'wb+') as destination: + for chunk in uploaded_file.chunks(): + destination.write(chunk) + + # Veritabanı kaydı oluştur + if not backup_name: + backup_name = f"Yüklenen Yedek - {uploaded_file.name}" + + backup = DatabaseBackup.objects.create( + name=backup_name, + file_path=file_path, + file_size=uploaded_file.size, + status='completed', + backup_type='manual', + created_by=request.user, + completed_at=timezone.now(), + notes=f"Dosya yüklendi: {uploaded_file.name}" + ) + + self.message_user( + request, + f"Yedek dosyası başarıyla yüklendi: {uploaded_file.name} ({backup.get_file_size_display()})", + messages.SUCCESS + ) + return redirect(reverse('admin:backup_databasebackup_changelist')) + + except Exception as e: + self.message_user(request, f"Dosya yüklenirken hata oluştu: {str(e)}", messages.ERROR) + return redirect(reverse('admin:backup_upload')) + + # GET request - form göster + context = { + **self.admin_site.each_context(request), + 'title': 'Yedek Dosyası Yükle', + 'opts': self.model._meta, + 'has_view_permission': self.has_view_permission(request), + } + return render(request, 'admin/backup/upload_backup.html', context) + + def download_backup_file(self, request, backup_id): + """Yedek dosyasını indirir""" + backup = get_object_or_404(DatabaseBackup, pk=backup_id) + + if not backup.file_path: + self.message_user(request, "Yedek dosyası bulunamadı", messages.ERROR) + return HttpResponse("Dosya bulunamadı", status=404) + + if not os.path.isfile(backup.file_path): + self.message_user(request, "Yedek dosyası disk üzerinde bulunamadı", messages.ERROR) + return HttpResponse("Dosya disk üzerinde bulunamadı", status=404) + + # Dosyayı indir + try: + response = FileResponse(open(backup.file_path, 'rb'), content_type='application/sql') + filename = os.path.basename(backup.file_path) + response['Content-Disposition'] = f'attachment; filename="{filename}"' + return response + except Exception as e: + return HttpResponse(f"Dosya indirilemedi: {str(e)}", status=500) + + def save_model(self, request, obj, form, change): + """Model kaydedilirken created_by alanını otomatik doldur""" + if not change: # Yeni kayıt + obj.created_by = request.user + super().save_model(request, obj, form, change) + + def create_new_backup(self, request, queryset): + """Yeni bir yedek oluşturur""" + # Yeni bir backup objesi oluştur + timestamp = timezone.now().strftime('%Y-%m-%d %H:%M:%S') + backup = DatabaseBackup.objects.create( + name=f"Manuel Yedek - {timestamp}", + backup_type='manual', + created_by=request.user, + status='pending' + ) + + # Yedekleme işlemini başlat + manager = BackupManager() + success, message = manager.create_backup(backup) + + if success: + self.message_user(request, message, messages.SUCCESS) + else: + self.message_user(request, message, messages.ERROR) + + create_new_backup.short_description = "Yeni Yedek Oluştur" + + def restore_selected_backup(self, request, queryset): + """Seçili yedeği geri yükler""" + if queryset.count() != 1: + self.message_user( + request, + "Lütfen geri yüklemek için sadece bir yedek seçin", + messages.WARNING + ) + return + + backup = queryset.first() + + if backup.status != 'completed': + self.message_user( + request, + "Sadece tamamlanmış yedekler geri yüklenebilir", + messages.WARNING + ) + return + + if not backup.file_path: + self.message_user( + request, + "Yedek dosya yolu bulunamadı", + messages.ERROR + ) + return + + # Restore işlemi (migration'lar da dahil) + manager = BackupManager() + success, message = manager.restore_backup(backup.file_path) + + if success: + # Otomatik migration çalıştır + try: + from django.core.management import call_command + import io + call_command('migrate', '--noinput', stdout=io.StringIO(), stderr=io.StringIO()) + self.message_user(request, f"{message} Migration'lar uygulandı. Sayfayı yenileyin.", messages.SUCCESS) + except: + self.message_user(request, f"{message} Sayfayı yenileyin.", messages.SUCCESS) + else: + self.message_user(request, message, messages.ERROR) + + restore_selected_backup.short_description = "Seçili Yedeği Geri Yükle" + + def download_backup(self, request, queryset): + """Seçili yedeği indirir""" + if queryset.count() != 1: + self.message_user( + request, + "Lütfen indirmek için sadece bir yedek seçin", + messages.WARNING + ) + return + + backup = queryset.first() + + if backup.status != 'completed': + self.message_user( + request, + "Sadece tamamlanmış yedekler indirilebilir", + messages.WARNING + ) + return + + if not backup.file_path or not os.path.isfile(backup.file_path): + self.message_user( + request, + "Yedek dosyası bulunamadı", + messages.ERROR + ) + return + + # Dosyayı indir + try: + response = FileResponse(open(backup.file_path, 'rb'), content_type='application/sql') + filename = os.path.basename(backup.file_path) + response['Content-Disposition'] = f'attachment; filename="{filename}"' + return response + except Exception as e: + self.message_user( + request, + f"Dosya indirilemedi: {str(e)}", + messages.ERROR + ) + return + + download_backup.short_description = "Seçili Yedeği İndir" + + def delete_backup_files(self, request, queryset): + """Seçili yedeklerin dosyalarını siler""" + deleted_count = 0 + error_count = 0 + + manager = BackupManager() + + for backup in queryset: + if backup.file_path: + success, message = manager.delete_backup_file(backup.file_path) + if success: + backup.file_path = None + backup.file_size = None + backup.save() + deleted_count += 1 + else: + error_count += 1 + + if deleted_count > 0: + self.message_user( + request, + f"{deleted_count} yedek dosyası silindi", + messages.SUCCESS + ) + + if error_count > 0: + self.message_user( + request, + f"{error_count} yedek dosyası silinemedi", + messages.WARNING + ) + + delete_backup_files.short_description = "Yedek Dosyalarını Sil" + + def has_delete_permission(self, request, obj=None): + """Silme iznini kontrol et - Tüm admin kullanıcıları silebilir""" + return request.user.is_staff diff --git a/backup/apps.py b/backup/apps.py new file mode 100644 index 0000000..d850a7d --- /dev/null +++ b/backup/apps.py @@ -0,0 +1,10 @@ +from django.apps import AppConfig + + +class BackupConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'backup' + + def ready(self): + """Uygulama hazır olduğunda sinyalleri import et""" + import backup.models # Sinyalleri kaydetmek için import et diff --git a/backup/migrations/0001_initial.py b/backup/migrations/0001_initial.py new file mode 100644 index 0000000..af18653 --- /dev/null +++ b/backup/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 6.0 on 2025-12-22 16:52 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='DatabaseBackup', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='Yedek Adı')), + ('file_path', models.CharField(blank=True, max_length=500, null=True, verbose_name='Dosya Yolu')), + ('file_size', models.BigIntegerField(blank=True, null=True, verbose_name='Dosya Boyutu (bytes)')), + ('status', models.CharField(choices=[('pending', 'Bekliyor'), ('in_progress', 'İşleniyor'), ('completed', 'Tamamlandı'), ('failed', 'Başarısız')], default='pending', max_length=20, verbose_name='Durum')), + ('backup_type', models.CharField(choices=[('manual', 'Manuel'), ('automatic', 'Otomatik')], default='manual', max_length=20, verbose_name='Yedek Tipi')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='Tamamlanma Tarihi')), + ('error_message', models.TextField(blank=True, null=True, verbose_name='Hata Mesajı')), + ('notes', models.TextField(blank=True, null=True, verbose_name='Notlar')), + ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Oluşturan')), + ], + options={ + 'verbose_name': 'Veritabanı Yedeği', + 'verbose_name_plural': 'Veritabanı Yedekleri', + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/backup/migrations/__init__.py b/backup/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backup/models.py b/backup/models.py new file mode 100644 index 0000000..595573e --- /dev/null +++ b/backup/models.py @@ -0,0 +1,68 @@ +from django.db import models +from django.contrib.auth import get_user_model +from django.db.models.signals import post_delete +from django.dispatch import receiver +import os + +User = get_user_model() + + +class DatabaseBackup(models.Model): + """Veritabanı yedekleme kayıtlarını tutar""" + + STATUS_CHOICES = [ + ('pending', 'Bekliyor'), + ('in_progress', 'İşleniyor'), + ('completed', 'Tamamlandı'), + ('failed', 'Başarısız'), + ] + + BACKUP_TYPE_CHOICES = [ + ('manual', 'Manuel'), + ('automatic', 'Otomatik'), + ] + + name = models.CharField(max_length=255, verbose_name='Yedek Adı') + file_path = models.CharField(max_length=500, verbose_name='Dosya Yolu', blank=True, null=True) + file_size = models.BigIntegerField(verbose_name='Dosya Boyutu (bytes)', null=True, blank=True) + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name='Durum') + backup_type = models.CharField(max_length=20, choices=BACKUP_TYPE_CHOICES, default='manual', verbose_name='Yedek Tipi') + created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Oluşturan') + created_at = models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi') + completed_at = models.DateTimeField(null=True, blank=True, verbose_name='Tamamlanma Tarihi') + error_message = models.TextField(blank=True, null=True, verbose_name='Hata Mesajı') + notes = models.TextField(blank=True, null=True, verbose_name='Notlar') + + class Meta: + verbose_name = 'Veritabanı Yedeği' + verbose_name_plural = 'Veritabanı Yedekleri' + ordering = ['-created_at'] + + def __str__(self): + return f"{self.name} - {self.get_status_display()}" + + def get_file_size_display(self): + """Dosya boyutunu okunabilir formatta döndürür""" + if not self.file_size: + return "N/A" + + size = self.file_size + for unit in ['B', 'KB', 'MB', 'GB']: + if size < 1024.0: + return f"{size:.2f} {unit}" + size /= 1024.0 + return f"{size:.2f} TB" + + +@receiver(post_delete, sender=DatabaseBackup) +def delete_backup_file(sender, instance, **kwargs): + """ + Backup kaydı silindiğinde, ilişkili fiziksel dosyayı da siler + """ + if instance.file_path and os.path.isfile(instance.file_path): + try: + os.remove(instance.file_path) + print(f"Yedek dosyası silindi: {instance.file_path}") + except Exception as e: + print(f"Dosya silinirken hata oluştu: {e}") + diff --git a/backup/templates/admin/backup/databasebackup/change_list.html b/backup/templates/admin/backup/databasebackup/change_list.html new file mode 100644 index 0000000..6222682 --- /dev/null +++ b/backup/templates/admin/backup/databasebackup/change_list.html @@ -0,0 +1,21 @@ +{% extends "admin/change_list.html" %} +{% load i18n admin_urls static %} + +{% block object-tools-items %} + {{ block.super }} + {% if show_create_backup_button %} +
  • + + 🔄 Yeni Yedek Al + +
  • + {% endif %} + {% if show_upload_backup_button %} +
  • + + 📤 Yedek Yükle + +
  • + {% endif %} +{% endblock %} + diff --git a/backup/templates/admin/backup/upload_backup.html b/backup/templates/admin/backup/upload_backup.html new file mode 100644 index 0000000..568f516 --- /dev/null +++ b/backup/templates/admin/backup/upload_backup.html @@ -0,0 +1,174 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrahead %} +{{ block.super }} + +{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +
    +

    📤 Yedek Dosyası Yükle

    + +
    +

    ℹ️ Bilgilendirme

    +
      +
    • Sadece .sql uzantılı dosyalar yüklenebilir
    • +
    • Maksimum dosya boyutu: 500 MB
    • +
    • Yüklenen dosya backups/ klasörüne kaydedilecektir
    • +
    • Dosya otomatik olarak timestamp ile adlandırılacaktır
    • +
    +
    + +
    + {% csrf_token %} + +
    + + + + Boş bırakılırsa dosya adı kullanılacaktır + +
    + +
    + + + + PostgreSQL SQL dump dosyası (.sql) + +
    + +
    + + + ❌ İptal + +
    +
    +
    + + +{% endblock %} + diff --git a/backup/tests.py b/backup/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backup/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backup/views.py b/backup/views.py new file mode 100644 index 0000000..067f4e0 --- /dev/null +++ b/backup/views.py @@ -0,0 +1,328 @@ +import os +from datetime import datetime +from django.conf import settings +from django.utils import timezone +from .models import DatabaseBackup + + +try: + import psycopg2 + from psycopg2 import sql + PSYCOPG2_AVAILABLE = True +except ImportError: + PSYCOPG2_AVAILABLE = False + + +class BackupManager: + """PostgreSQL veritabanı yedekleme işlemlerini yönetir - Sadece psycopg2 kullanarak""" + + def __init__(self): + self.backup_dir = os.path.join(settings.BASE_DIR, 'backups') + if not os.path.exists(self.backup_dir): + os.makedirs(self.backup_dir) + + def get_db_config(self): + """Veritabanı yapılandırmasını alır""" + db_config = settings.DATABASES['default'] + return { + 'dbname': db_config.get('NAME'), + 'user': db_config.get('USER'), + 'password': db_config.get('PASSWORD'), + 'host': db_config.get('HOST', 'localhost'), + 'port': db_config.get('PORT', '5432'), + } + + def get_connection(self): + """PostgreSQL bağlantısı oluşturur""" + if not PSYCOPG2_AVAILABLE: + raise Exception("psycopg2 kütüphanesi yüklü değil") + + db_config = self.get_db_config() + return psycopg2.connect( + dbname=db_config['dbname'], + user=db_config['user'], + password=db_config['password'], + host=db_config['host'], + port=db_config['port'] + ) + + #@task + def create_backup(self, backup_obj): + """ + PostgreSQL veritabanının yedeğini oluşturur + Sadece psycopg2 kullanarak SQL dump oluşturur + """ + try: + backup_obj.status = 'in_progress' + backup_obj.save() + + db_config = self.get_db_config() + + # Yedek dosyası adını oluştur + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + backup_filename = f"backup_{db_config['dbname']}_{timestamp}.sql" + backup_path = os.path.join(self.backup_dir, backup_filename) + + # Veritabanına bağlan + conn = self.get_connection() + cursor = conn.cursor() + + with open(backup_path, 'w', encoding='utf-8') as f: + # Header + f.write("-- PostgreSQL Database Backup\n") + f.write(f"-- Database: {db_config['dbname']}\n") + f.write(f"-- Date: {datetime.now()}\n") + f.write("-- Created by Django Backup System using psycopg2\n\n") + f.write("SET client_encoding = 'UTF8';\n") + f.write("SET standard_conforming_strings = on;\n") + f.write("SET check_function_bodies = false;\n") + f.write("SET client_min_messages = warning;\n\n") + + # Tüm tabloları al + cursor.execute(""" + SELECT tablename FROM pg_tables + WHERE schemaname = 'public' + ORDER BY tablename; + """) + tables = cursor.fetchall() + + for (table_name,) in tables: + f.write(f"\n-- Table: {table_name}\n") + + # Tablo yapısını al - kolon bilgilerini çek + cursor.execute(""" + SELECT + column_name, + data_type, + character_maximum_length, + is_nullable, + column_default, + is_identity + FROM information_schema.columns + WHERE table_schema = 'public' AND table_name = %s + ORDER BY ordinal_position; + """, [table_name]) + + columns_info = cursor.fetchall() + + if columns_info: + f.write(f"DROP TABLE IF EXISTS \"{table_name}\" CASCADE;\n") + f.write(f"CREATE TABLE \"{table_name}\" (\n") + + col_defs = [] + for col_name, data_type, max_length, is_nullable, col_default, is_identity in columns_info: + col_def = f" \"{col_name}\" " + + # Serial kontrolü (Nextval veya Identity) + is_serial = False + if (col_default and 'nextval' in col_default) or is_identity == 'YES': + if data_type == 'integer': + col_def += "SERIAL" + is_serial = True + elif data_type == 'bigint': + col_def += "BIGSERIAL" + is_serial = True + + if not is_serial: + # Veri tipini ekle + if max_length and data_type == 'character varying': + col_def += f"VARCHAR({max_length})" + elif max_length and data_type == 'character': + col_def += f"CHAR({max_length})" + else: + col_def += data_type.upper() + + # NOT NULL + if is_nullable == 'NO': + col_def += " NOT NULL" + + # DEFAULT değer + if col_default: + col_def += f" DEFAULT {col_default}" + + col_defs.append(col_def) + + f.write(",\n".join(col_defs)) + f.write("\n);\n\n") + + # Veriyi al ve INSERT komutları oluştur + # Kolon isimlerini al + cursor.execute(sql.SQL(""" + SELECT column_name + FROM information_schema.columns + WHERE table_name = %s + ORDER BY ordinal_position; + """), [table_name]) + columns = [row[0] for row in cursor.fetchall()] + + if not columns: + continue + + cursor.execute(sql.SQL("SELECT * FROM {}").format(sql.Identifier(table_name))) + rows = cursor.fetchall() + + if rows: + f.write(f"-- Data for table: {table_name}\n") + + # INSERT şablonu hazırla + cols_str = ', '.join([f'"{c}"' for c in columns]) # Identifier quoting + placeholders = ', '.join(['%s'] * len(columns)) + insert_template = f"INSERT INTO \"{table_name}\" ({cols_str}) VALUES ({placeholders})" + + for row in rows: + # mogrify kullanarak güvenli SQL oluştur + try: + # mogrify bytes döndürür, decode etmemiz lazım + safe_sql = cursor.mogrify(insert_template, row).decode('utf-8') + f.write(f"{safe_sql};\n") + except Exception as row_err: + print(f"Row error in {table_name}: {row_err}") + continue + + f.write("\n") + + # Sequence'leri sıfırla + f.write("\n-- Reset sequences\n") + cursor.execute(""" + SELECT + c.relname as sequence_name, + t.relname as table_name, + a.attname as column_name + FROM pg_class c + JOIN pg_depend d ON d.objid = c.oid + JOIN pg_class t ON d.refobjid = t.oid + JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = d.refobjsubid + WHERE c.relkind = 'S' + AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public'); + """) + sequences = cursor.fetchall() + for seq_name, tbl_name, col_name in sequences: + f.write(f"SELECT setval('{seq_name}', (SELECT COALESCE(MAX(\"{col_name}\"), 1) FROM \"{tbl_name}\"));\n") + + cursor.close() + conn.close() + + # Başarılı + file_size = os.path.getsize(backup_path) + backup_obj.file_path = backup_path + backup_obj.file_size = file_size + backup_obj.status = 'completed' + backup_obj.completed_at = timezone.now() + backup_obj.save() + return True, f"Yedekleme başarıyla tamamlandı: {backup_filename}" + + except Exception as e: + backup_obj.status = 'failed' + backup_obj.error_message = str(e) + backup_obj.save() + return False, f"Yedekleme hatası: {str(e)}" + + def restore_backup(self, backup_path): + """ + TAMAMEN OTOMATIK FULL RESTORE + Manuel işlem gerektirmez! + """ + try: + if not os.path.exists(backup_path): + return False, "Yedek dosyası bulunamadı" + + with open(backup_path, 'r', encoding='utf-8') as f: + sql_content = f.read() + + # HOTFIX 1: 'order' gibi keywordlerin tırnak içine alınmaması sorununu düzelt + import re + sql_content = re.sub(r'(\s+)order(\s+[A-Z]+)', r'\1"order"\2', sql_content) + + # HOTFIX 2: SERIAL/Sequence düzeltmesi + # "id INTEGER NOT NULL DEFAULT nextval(...)" -> "id SERIAL" + sql_content = re.sub(r'INTEGER\s+NOT\s+NULL\s+DEFAULT\s+nextval\(\'[^\']+\'(:?::regclass)?\)', 'SERIAL', sql_content) + sql_content = re.sub(r'BIGINT\s+NOT\s+NULL\s+DEFAULT\s+nextval\(\'[^\']+\'(:?::regclass)?\)', 'BIGSERIAL', sql_content) + + # HOTFIX 3: "id" kolonları INTEGER/BIGINT NOT NULL ise (ve default yoksa) SERIAL yap + # Bu durum Identity kolonlarının yanlış yedeklenmesi sonucu oluşur + sql_content = re.sub(r'"id"\s+INTEGER\s+NOT\s+NULL(?!(\s+DEFAULT))', '"id" SERIAL', sql_content) + sql_content = re.sub(r'"id"\s+BIGINT\s+NOT\s+NULL(?!(\s+DEFAULT))', '"id" BIGSERIAL', sql_content) + + # HOTFIX 4: setval satırlarını kaldır (çünkü biz kendimiz yeniden ayarlıyoruz ve isimler değişmiş olabilir) + # Lines starting with SELECT setval... + sql_lines = [] + for line in sql_content.split('\n'): + if 'SELECT setval' in line and 'django_migrations' in line or 'SELECT setval' in line: + continue # Skip setvals from file + sql_lines.append(line) + sql_content = '\n'.join(sql_lines) + + conn = self.get_connection() + conn.autocommit = True + cursor = conn.cursor() + + try: + print("=" * 60) + print("TAM OTOMATIK RESTORE (YENI VERSIYON)") + print("=" * 60) + + # 1. DROP tüm tablolar + print("\n1. Temizleniyor...") + cursor.execute("SELECT tablename FROM pg_tables WHERE schemaname = 'public';") + tables = cursor.fetchall() + for (t,) in tables: + print(f" Dropping {t}...") + cursor.execute(f'DROP TABLE IF EXISTS "{t}" CASCADE;') + print(" ✓ Temizlendi") + + # 2. SQL Execution - Tek seferde çalıştır + print("\n2. SQL Dosyası Çalıştırılıyor...") + # execute() methodu çoklu sorguları çalıştırabilir (psycopg2 özelliği) + try: + cursor.execute(sql_content) + print(" ✓ SQL Script çalıştırıldı") + except Exception as sql_err: + print(f" SQL HATA: {sql_err}") + raise sql_err + print(" ✓ SQL Script çalıştırıldı") + + # 3. Sequence'ler (SQL script içinde genelde vardır ama garanti olsun) + print("\n3. Sequence'ler Kontrol Ediliyor...") + cursor.execute(""" + SELECT c.relname, t.relname, a.attname + FROM pg_class c + JOIN pg_depend d ON d.objid = c.oid + JOIN pg_class t ON d.refobjid = t.oid + JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = d.refobjsubid + WHERE c.relkind = 'S' AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public'); + """) + for seq, tbl, col in cursor.fetchall(): + try: + cursor.execute(f"SELECT setval('{seq}', COALESCE((SELECT MAX({col}) FROM {tbl}), 1));") + except: + pass + print(" ✓ Ayarlandı") + + cursor.close() + conn.close() + + print("\n" + "=" * 60) + print("RESTORE TAMAMLANDI!") + print("=" * 60) + + return True, "Restore başarıyla tamamlandı!" + + except Exception as e: + print(f"\nHATA: {e}") + cursor.close() + conn.close() + raise + + except Exception as e: + return False, f"Geri yükleme hatası: {str(e)}" + + def delete_backup_file(self, backup_path): + """Yedek dosyasını fiziksel olarak siler""" + try: + if os.path.exists(backup_path): + os.remove(backup_path) + return True, "Yedek dosyası silindi" + else: + return False, "Yedek dosyası bulunamadı" + except Exception as e: + return False, f"Dosya silme hatası: {str(e)}" diff --git a/backups/backup_shop_20260119_012947.sql b/backups/backup_shop_20260119_012947.sql new file mode 100644 index 0000000..b6f35ec --- /dev/null +++ b/backups/backup_shop_20260119_012947.sql @@ -0,0 +1,818 @@ +-- PostgreSQL Database Backup +-- Database: shop +-- Date: 2026-01-19 01:29:47.426406 +-- Created by Django Backup System using psycopg2 + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + + +-- Table: accounts_customuser +DROP TABLE IF EXISTS accounts_customuser CASCADE; +CREATE TABLE accounts_customuser ( + id BIGINT NOT NULL, + password VARCHAR(128) NOT NULL, + last_login TIMESTAMP WITH TIME ZONE, + is_superuser BOOLEAN NOT NULL, + email VARCHAR(254) NOT NULL, + first_name VARCHAR(150) NOT NULL, + last_name VARCHAR(150) NOT NULL, + is_staff BOOLEAN NOT NULL, + is_active BOOLEAN NOT NULL, + date_joined TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: accounts_customuser +INSERT INTO accounts_customuser (id, password, last_login, is_superuser, email, first_name, last_name, is_staff, is_active, date_joined) VALUES (1, 'pbkdf2_sha256$1200000$X8eAbh3gvzNupPRIIc1RI4$SjIgdHr0UTX5IO0pMY89BBiqxOLzLly3BG/1ZkEPuR4=', '2026-01-18 22:28:08.286360+00:00', True, 'beyhan@beyhan.dev', '', '', True, True, '2026-01-18 22:27:20.666592+00:00'); + + +-- Table: accounts_customuser_groups +DROP TABLE IF EXISTS accounts_customuser_groups CASCADE; +CREATE TABLE accounts_customuser_groups ( + id BIGINT NOT NULL, + customuser_id BIGINT NOT NULL, + group_id INTEGER NOT NULL +); + + +-- Table: accounts_customuser_user_permissions +DROP TABLE IF EXISTS accounts_customuser_user_permissions CASCADE; +CREATE TABLE accounts_customuser_user_permissions ( + id BIGINT NOT NULL, + customuser_id BIGINT NOT NULL, + permission_id INTEGER NOT NULL +); + + +-- Table: auth_group +DROP TABLE IF EXISTS auth_group CASCADE; +CREATE TABLE auth_group ( + id INTEGER NOT NULL, + name VARCHAR(150) NOT NULL +); + + +-- Table: auth_group_permissions +DROP TABLE IF EXISTS auth_group_permissions CASCADE; +CREATE TABLE auth_group_permissions ( + id BIGINT NOT NULL, + group_id INTEGER NOT NULL, + permission_id INTEGER NOT NULL +); + + +-- Table: auth_permission +DROP TABLE IF EXISTS auth_permission CASCADE; +CREATE TABLE auth_permission ( + id INTEGER NOT NULL, + name VARCHAR(255) NOT NULL, + content_type_id INTEGER NOT NULL, + codename VARCHAR(100) NOT NULL +); + +-- Data for table: auth_permission +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (1, 'Can add log entry', 1, 'add_logentry'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (2, 'Can change log entry', 1, 'change_logentry'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (3, 'Can delete log entry', 1, 'delete_logentry'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (4, 'Can view log entry', 1, 'view_logentry'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (5, 'Can add permission', 3, 'add_permission'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (6, 'Can change permission', 3, 'change_permission'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (7, 'Can delete permission', 3, 'delete_permission'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (8, 'Can view permission', 3, 'view_permission'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (9, 'Can add group', 2, 'add_group'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (10, 'Can change group', 2, 'change_group'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (11, 'Can delete group', 2, 'delete_group'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (12, 'Can view group', 2, 'view_group'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (13, 'Can add content type', 4, 'add_contenttype'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (14, 'Can change content type', 4, 'change_contenttype'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (15, 'Can delete content type', 4, 'delete_contenttype'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (16, 'Can view content type', 4, 'view_contenttype'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (17, 'Can add session', 5, 'add_session'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (18, 'Can change session', 5, 'change_session'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (19, 'Can delete session', 5, 'delete_session'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (20, 'Can view session', 5, 'view_session'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (21, 'Can add task result', 8, 'add_taskresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (22, 'Can change task result', 8, 'change_taskresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (23, 'Can delete task result', 8, 'delete_taskresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (24, 'Can view task result', 8, 'view_taskresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (25, 'Can add chord counter', 6, 'add_chordcounter'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (26, 'Can change chord counter', 6, 'change_chordcounter'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (27, 'Can delete chord counter', 6, 'delete_chordcounter'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (28, 'Can view chord counter', 6, 'view_chordcounter'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (29, 'Can add group result', 7, 'add_groupresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (30, 'Can change group result', 7, 'change_groupresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (31, 'Can delete group result', 7, 'delete_groupresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (32, 'Can view group result', 7, 'view_groupresult'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (33, 'Can add crontab', 10, 'add_crontabschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (34, 'Can change crontab', 10, 'change_crontabschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (35, 'Can delete crontab', 10, 'delete_crontabschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (36, 'Can view crontab', 10, 'view_crontabschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (37, 'Can add interval', 11, 'add_intervalschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (38, 'Can change interval', 11, 'change_intervalschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (39, 'Can delete interval', 11, 'delete_intervalschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (40, 'Can view interval', 11, 'view_intervalschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (41, 'Can add periodic task', 12, 'add_periodictask'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (42, 'Can change periodic task', 12, 'change_periodictask'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (43, 'Can delete periodic task', 12, 'delete_periodictask'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (44, 'Can view periodic task', 12, 'view_periodictask'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (45, 'Can add periodic tasks', 13, 'add_periodictasks'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (46, 'Can change periodic tasks', 13, 'change_periodictasks'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (47, 'Can delete periodic tasks', 13, 'delete_periodictasks'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (48, 'Can view periodic tasks', 13, 'view_periodictasks'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (49, 'Can add solar event', 14, 'add_solarschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (50, 'Can change solar event', 14, 'change_solarschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (51, 'Can delete solar event', 14, 'delete_solarschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (52, 'Can view solar event', 14, 'view_solarschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (53, 'Can add clocked', 9, 'add_clockedschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (54, 'Can change clocked', 9, 'change_clockedschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (55, 'Can delete clocked', 9, 'delete_clockedschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (56, 'Can view clocked', 9, 'view_clockedschedule'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (57, 'Can add association', 15, 'add_association'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (58, 'Can change association', 15, 'change_association'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (59, 'Can delete association', 15, 'delete_association'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (60, 'Can view association', 15, 'view_association'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (61, 'Can add code', 16, 'add_code'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (62, 'Can change code', 16, 'change_code'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (63, 'Can delete code', 16, 'delete_code'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (64, 'Can view code', 16, 'view_code'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (65, 'Can add nonce', 17, 'add_nonce'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (66, 'Can change nonce', 17, 'change_nonce'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (67, 'Can delete nonce', 17, 'delete_nonce'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (68, 'Can view nonce', 17, 'view_nonce'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (69, 'Can add user social auth', 19, 'add_usersocialauth'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (70, 'Can change user social auth', 19, 'change_usersocialauth'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (71, 'Can delete user social auth', 19, 'delete_usersocialauth'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (72, 'Can view user social auth', 19, 'view_usersocialauth'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (73, 'Can add partial', 18, 'add_partial'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (74, 'Can change partial', 18, 'change_partial'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (75, 'Can delete partial', 18, 'delete_partial'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (76, 'Can view partial', 18, 'view_partial'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (77, 'Can add site', 20, 'add_site'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (78, 'Can change site', 20, 'change_site'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (79, 'Can delete site', 20, 'delete_site'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (80, 'Can view site', 20, 'view_site'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (81, 'Can add user', 21, 'add_customuser'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (82, 'Can change user', 21, 'change_customuser'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (83, 'Can delete user', 21, 'delete_customuser'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (84, 'Can view user', 21, 'view_customuser'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (85, 'Can add Banner', 22, 'add_banner'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (86, 'Can change Banner', 22, 'change_banner'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (87, 'Can delete Banner', 22, 'delete_banner'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (88, 'Can view Banner', 22, 'view_banner'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (89, 'Can add Site Ayarı', 23, 'add_setting'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (90, 'Can change Site Ayarı', 23, 'change_setting'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (91, 'Can delete Site Ayarı', 23, 'delete_setting'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (92, 'Can view Site Ayarı', 23, 'view_setting'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (93, 'Can add Site Ayarı Aç / Kapat', 24, 'add_sitesettings'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (94, 'Can change Site Ayarı Aç / Kapat', 24, 'change_sitesettings'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (95, 'Can delete Site Ayarı Aç / Kapat', 24, 'delete_sitesettings'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (96, 'Can view Site Ayarı Aç / Kapat', 24, 'view_sitesettings'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (97, 'Can add Veritabanı Yedeği', 25, 'add_databasebackup'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (98, 'Can change Veritabanı Yedeği', 25, 'change_databasebackup'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (99, 'Can delete Veritabanı Yedeği', 25, 'delete_databasebackup'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (100, 'Can view Veritabanı Yedeği', 25, 'view_databasebackup'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (101, 'Can add Contact', 26, 'add_contact'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (102, 'Can change Contact', 26, 'change_contact'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (103, 'Can delete Contact', 26, 'delete_contact'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (104, 'Can view Contact', 26, 'view_contact'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (105, 'Can add Galeri Resmi', 29, 'add_images'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (106, 'Can change Galeri Resmi', 29, 'change_images'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (107, 'Can delete Galeri Resmi', 29, 'delete_images'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (108, 'Can view Galeri Resmi', 29, 'view_images'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (109, 'Can add Ürün Kategori', 27, 'add_category'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (110, 'Can change Ürün Kategori', 27, 'change_category'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (111, 'Can delete Ürün Kategori', 27, 'delete_category'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (112, 'Can view Ürün Kategori', 27, 'view_category'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (113, 'Can add Ürün Tagı', 31, 'add_tags'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (114, 'Can change Ürün Tagı', 31, 'change_tags'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (115, 'Can delete Ürün Tagı', 31, 'delete_tags'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (116, 'Can view Ürün Tagı', 31, 'view_tags'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (117, 'Can add Ürün', 30, 'add_product'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (118, 'Can change Ürün', 30, 'change_product'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (119, 'Can delete Ürün', 30, 'delete_product'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (120, 'Can view Ürün', 30, 'view_product'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (121, 'Can add Ürüm Yorum', 28, 'add_comment'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (122, 'Can change Ürüm Yorum', 28, 'change_comment'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (123, 'Can delete Ürüm Yorum', 28, 'delete_comment'); +INSERT INTO auth_permission (id, name, content_type_id, codename) VALUES (124, 'Can view Ürüm Yorum', 28, 'view_comment'); + + +-- Table: backup_databasebackup +DROP TABLE IF EXISTS backup_databasebackup CASCADE; +CREATE TABLE backup_databasebackup ( + id BIGINT NOT NULL, + name VARCHAR(255) NOT NULL, + file_path VARCHAR(500), + file_size BIGINT, + status VARCHAR(20) NOT NULL, + backup_type VARCHAR(20) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + completed_at TIMESTAMP WITH TIME ZONE, + error_message TEXT, + notes TEXT, + created_by_id BIGINT +); + +-- Data for table: backup_databasebackup +INSERT INTO backup_databasebackup (id, name, file_path, file_size, status, backup_type, created_at, completed_at, error_message, notes, created_by_id) VALUES (1, 'aaa', NULL, NULL, 'pending', 'manual', '2026-01-18 22:29:33.971861+00:00', NULL, NULL, '', 1); +INSERT INTO backup_databasebackup (id, name, file_path, file_size, status, backup_type, created_at, completed_at, error_message, notes, created_by_id) VALUES (2, 'Manuel Yedek - 2026-01-18 22:29:47', NULL, NULL, 'in_progress', 'manual', '2026-01-18 22:29:47.223287+00:00', NULL, NULL, NULL, 1); + + +-- Table: banners +DROP TABLE IF EXISTS banners CASCADE; +CREATE TABLE banners ( + id BIGINT NOT NULL, + color VARCHAR(25) NOT NULL, + title VARCHAR(254), + text1 VARCHAR(254), + text2 VARCHAR(254), + text4 VARCHAR(254), + text5 VARCHAR(254), + image VARCHAR(100) NOT NULL, + image_k VARCHAR(100), + image_k_txt VARCHAR(254), + is_active BOOLEAN NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: categories +DROP TABLE IF EXISTS categories CASCADE; +CREATE TABLE categories ( + id BIGINT NOT NULL, + title VARCHAR(254) NOT NULL, + keywords VARCHAR(254) NOT NULL, + description VARCHAR(254) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + is_active BOOLEAN NOT NULL, + order INTEGER NOT NULL, + slug VARCHAR(250) NOT NULL, + parent_id BIGINT, + images VARCHAR(100) +); + + +-- Table: comments +DROP TABLE IF EXISTS comments CASCADE; +CREATE TABLE comments ( + id BIGINT NOT NULL, + title VARCHAR(254) NOT NULL, + body TEXT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + is_active BOOLEAN NOT NULL, + slug VARCHAR(50) NOT NULL, + parent_id BIGINT, + user_id BIGINT NOT NULL, + product_id BIGINT NOT NULL +); + + +-- Table: contacts +DROP TABLE IF EXISTS contacts CASCADE; +CREATE TABLE contacts ( + id BIGINT NOT NULL, + name VARCHAR(254) NOT NULL, + email VARCHAR(254) NOT NULL, + subject VARCHAR(254) NOT NULL, + message TEXT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + user_id BIGINT, + ip VARCHAR(100) +); + + +-- Table: django_admin_log +DROP TABLE IF EXISTS django_admin_log CASCADE; +CREATE TABLE django_admin_log ( + id INTEGER NOT NULL, + action_time TIMESTAMP WITH TIME ZONE NOT NULL, + object_id TEXT, + object_repr VARCHAR(200) NOT NULL, + action_flag SMALLINT NOT NULL, + change_message TEXT NOT NULL, + content_type_id INTEGER, + user_id BIGINT NOT NULL +); + +-- Data for table: django_admin_log +INSERT INTO django_admin_log (id, action_time, object_id, object_repr, action_flag, change_message, content_type_id, user_id) VALUES (1, '2026-01-18 22:29:34.026717+00:00', '1', 'aaa - Bekliyor', 1, '[{"added": {}}]', 25, 1); + + +-- Table: django_celery_beat_clockedschedule +DROP TABLE IF EXISTS django_celery_beat_clockedschedule CASCADE; +CREATE TABLE django_celery_beat_clockedschedule ( + id BIGINT NOT NULL, + clocked_time TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: django_celery_beat_crontabschedule +DROP TABLE IF EXISTS django_celery_beat_crontabschedule CASCADE; +CREATE TABLE django_celery_beat_crontabschedule ( + id BIGINT NOT NULL, + minute VARCHAR(240) NOT NULL, + hour VARCHAR(96) NOT NULL, + day_of_week VARCHAR(64) NOT NULL, + day_of_month VARCHAR(124) NOT NULL, + month_of_year VARCHAR(64) NOT NULL, + timezone VARCHAR(63) NOT NULL +); + + +-- Table: django_celery_beat_intervalschedule +DROP TABLE IF EXISTS django_celery_beat_intervalschedule CASCADE; +CREATE TABLE django_celery_beat_intervalschedule ( + id BIGINT NOT NULL, + every INTEGER NOT NULL, + period VARCHAR(24) NOT NULL +); + + +-- Table: django_celery_beat_periodictask +DROP TABLE IF EXISTS django_celery_beat_periodictask CASCADE; +CREATE TABLE django_celery_beat_periodictask ( + id BIGINT NOT NULL, + name VARCHAR(200) NOT NULL, + task VARCHAR(200) NOT NULL, + args TEXT NOT NULL, + kwargs TEXT NOT NULL, + queue VARCHAR(200), + exchange VARCHAR(200), + routing_key VARCHAR(200), + expires TIMESTAMP WITH TIME ZONE, + enabled BOOLEAN NOT NULL, + last_run_at TIMESTAMP WITH TIME ZONE, + total_run_count INTEGER NOT NULL, + date_changed TIMESTAMP WITH TIME ZONE NOT NULL, + description TEXT NOT NULL, + crontab_id BIGINT, + interval_id BIGINT, + solar_id BIGINT, + one_off BOOLEAN NOT NULL, + start_time TIMESTAMP WITH TIME ZONE, + priority INTEGER, + headers TEXT NOT NULL, + clocked_id BIGINT, + expire_seconds INTEGER +); + + +-- Table: django_celery_beat_periodictasks +DROP TABLE IF EXISTS django_celery_beat_periodictasks CASCADE; +CREATE TABLE django_celery_beat_periodictasks ( + ident SMALLINT NOT NULL, + last_update TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: django_celery_beat_solarschedule +DROP TABLE IF EXISTS django_celery_beat_solarschedule CASCADE; +CREATE TABLE django_celery_beat_solarschedule ( + id BIGINT NOT NULL, + event VARCHAR(24) NOT NULL, + latitude NUMERIC NOT NULL, + longitude NUMERIC NOT NULL +); + + +-- Table: django_celery_results_chordcounter +DROP TABLE IF EXISTS django_celery_results_chordcounter CASCADE; +CREATE TABLE django_celery_results_chordcounter ( + id INTEGER NOT NULL, + group_id VARCHAR(255) NOT NULL, + sub_tasks TEXT NOT NULL, + count INTEGER NOT NULL +); + + +-- Table: django_celery_results_groupresult +DROP TABLE IF EXISTS django_celery_results_groupresult CASCADE; +CREATE TABLE django_celery_results_groupresult ( + id INTEGER NOT NULL, + group_id VARCHAR(255) NOT NULL, + date_created TIMESTAMP WITH TIME ZONE NOT NULL, + date_done TIMESTAMP WITH TIME ZONE NOT NULL, + content_type VARCHAR(128) NOT NULL, + content_encoding VARCHAR(64) NOT NULL, + result TEXT +); + + +-- Table: django_celery_results_taskresult +DROP TABLE IF EXISTS django_celery_results_taskresult CASCADE; +CREATE TABLE django_celery_results_taskresult ( + id INTEGER NOT NULL, + task_id VARCHAR(255) NOT NULL, + status VARCHAR(50) NOT NULL, + content_type VARCHAR(128) NOT NULL, + content_encoding VARCHAR(64) NOT NULL, + result TEXT, + date_done TIMESTAMP WITH TIME ZONE NOT NULL, + traceback TEXT, + meta TEXT, + task_args TEXT, + task_kwargs TEXT, + task_name VARCHAR(255), + worker VARCHAR(100), + date_created TIMESTAMP WITH TIME ZONE NOT NULL, + periodic_task_name VARCHAR(255), + date_started TIMESTAMP WITH TIME ZONE +); + + +-- Table: django_content_type +DROP TABLE IF EXISTS django_content_type CASCADE; +CREATE TABLE django_content_type ( + id INTEGER NOT NULL, + app_label VARCHAR(100) NOT NULL, + model VARCHAR(100) NOT NULL +); + +-- Data for table: django_content_type +INSERT INTO django_content_type (id, app_label, model) VALUES (1, 'admin', 'logentry'); +INSERT INTO django_content_type (id, app_label, model) VALUES (2, 'auth', 'group'); +INSERT INTO django_content_type (id, app_label, model) VALUES (3, 'auth', 'permission'); +INSERT INTO django_content_type (id, app_label, model) VALUES (4, 'contenttypes', 'contenttype'); +INSERT INTO django_content_type (id, app_label, model) VALUES (5, 'sessions', 'session'); +INSERT INTO django_content_type (id, app_label, model) VALUES (6, 'django_celery_results', 'chordcounter'); +INSERT INTO django_content_type (id, app_label, model) VALUES (7, 'django_celery_results', 'groupresult'); +INSERT INTO django_content_type (id, app_label, model) VALUES (8, 'django_celery_results', 'taskresult'); +INSERT INTO django_content_type (id, app_label, model) VALUES (9, 'django_celery_beat', 'clockedschedule'); +INSERT INTO django_content_type (id, app_label, model) VALUES (10, 'django_celery_beat', 'crontabschedule'); +INSERT INTO django_content_type (id, app_label, model) VALUES (11, 'django_celery_beat', 'intervalschedule'); +INSERT INTO django_content_type (id, app_label, model) VALUES (12, 'django_celery_beat', 'periodictask'); +INSERT INTO django_content_type (id, app_label, model) VALUES (13, 'django_celery_beat', 'periodictasks'); +INSERT INTO django_content_type (id, app_label, model) VALUES (14, 'django_celery_beat', 'solarschedule'); +INSERT INTO django_content_type (id, app_label, model) VALUES (15, 'social_django', 'association'); +INSERT INTO django_content_type (id, app_label, model) VALUES (16, 'social_django', 'code'); +INSERT INTO django_content_type (id, app_label, model) VALUES (17, 'social_django', 'nonce'); +INSERT INTO django_content_type (id, app_label, model) VALUES (18, 'social_django', 'partial'); +INSERT INTO django_content_type (id, app_label, model) VALUES (19, 'social_django', 'usersocialauth'); +INSERT INTO django_content_type (id, app_label, model) VALUES (20, 'sites', 'site'); +INSERT INTO django_content_type (id, app_label, model) VALUES (21, 'accounts', 'customuser'); +INSERT INTO django_content_type (id, app_label, model) VALUES (22, 'settings', 'banner'); +INSERT INTO django_content_type (id, app_label, model) VALUES (23, 'settings', 'setting'); +INSERT INTO django_content_type (id, app_label, model) VALUES (24, 'settings', 'sitesettings'); +INSERT INTO django_content_type (id, app_label, model) VALUES (25, 'backup', 'databasebackup'); +INSERT INTO django_content_type (id, app_label, model) VALUES (26, 'contact', 'contact'); +INSERT INTO django_content_type (id, app_label, model) VALUES (27, 'product', 'category'); +INSERT INTO django_content_type (id, app_label, model) VALUES (28, 'product', 'comment'); +INSERT INTO django_content_type (id, app_label, model) VALUES (29, 'product', 'images'); +INSERT INTO django_content_type (id, app_label, model) VALUES (30, 'product', 'product'); +INSERT INTO django_content_type (id, app_label, model) VALUES (31, 'product', 'tags'); + + +-- Table: django_migrations +DROP TABLE IF EXISTS django_migrations CASCADE; +CREATE TABLE django_migrations ( + id BIGINT NOT NULL, + app VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + applied TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: django_migrations +INSERT INTO django_migrations (id, app, name, applied) VALUES (1, 'contenttypes', '0001_initial', '2026-01-18 22:26:26.197648+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (2, 'contenttypes', '0002_remove_content_type_name', '2026-01-18 22:26:26.360052+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (3, 'auth', '0001_initial', '2026-01-18 22:26:26.904480+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (4, 'auth', '0002_alter_permission_name_max_length', '2026-01-18 22:26:27.004323+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (5, 'auth', '0003_alter_user_email_max_length', '2026-01-18 22:26:27.071923+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (6, 'auth', '0004_alter_user_username_opts', '2026-01-18 22:26:27.167428+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (7, 'auth', '0005_alter_user_last_login_null', '2026-01-18 22:26:27.303966+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (8, 'auth', '0006_require_contenttypes_0002', '2026-01-18 22:26:27.391310+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (9, 'auth', '0007_alter_validators_add_error_messages', '2026-01-18 22:26:27.484909+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (10, 'auth', '0008_alter_user_username_max_length', '2026-01-18 22:26:27.577593+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (11, 'auth', '0009_alter_user_last_name_max_length', '2026-01-18 22:26:27.774582+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (12, 'auth', '0010_alter_group_name_max_length', '2026-01-18 22:26:27.931659+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (13, 'auth', '0011_update_proxy_permissions', '2026-01-18 22:26:27.999110+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (14, 'auth', '0012_alter_user_first_name_max_length', '2026-01-18 22:26:28.091754+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (15, 'accounts', '0001_initial', '2026-01-18 22:26:28.718278+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (16, 'admin', '0001_initial', '2026-01-18 22:26:28.997267+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (17, 'admin', '0002_logentry_remove_auto_add', '2026-01-18 22:26:29.035111+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (18, 'admin', '0003_logentry_add_action_flag_choices', '2026-01-18 22:26:29.132077+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (19, 'backup', '0001_initial', '2026-01-18 22:26:29.396877+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (20, 'contact', '0001_initial', '2026-01-18 22:26:29.498738+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (21, 'contact', '0002_contact_user', '2026-01-18 22:26:29.726625+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (22, 'contact', '0003_alter_contact_message', '2026-01-18 22:26:29.828197+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (23, 'contact', '0004_contact_ip', '2026-01-18 22:26:29.992327+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (24, 'contact', '0005_alter_contact_ip_alter_contact_user', '2026-01-18 22:26:30.323272+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (25, 'django_celery_beat', '0001_initial', '2026-01-18 22:26:30.768960+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (26, 'django_celery_beat', '0002_auto_20161118_0346', '2026-01-18 22:26:30.969010+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (27, 'django_celery_beat', '0003_auto_20161209_0049', '2026-01-18 22:26:31.072305+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (28, 'django_celery_beat', '0004_auto_20170221_0000', '2026-01-18 22:26:31.133956+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (29, 'django_celery_beat', '0005_add_solarschedule_events_choices', '2026-01-18 22:26:31.224248+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (30, 'django_celery_beat', '0006_auto_20180322_0932', '2026-01-18 22:26:31.519108+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (31, 'django_celery_beat', '0007_auto_20180521_0826', '2026-01-18 22:26:31.718953+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (32, 'django_celery_beat', '0008_auto_20180914_1922', '2026-01-18 22:26:31.798080+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (33, 'django_celery_beat', '0006_auto_20180210_1226', '2026-01-18 22:26:31.898867+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (34, 'django_celery_beat', '0006_periodictask_priority', '2026-01-18 22:26:32.054824+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (35, 'django_celery_beat', '0009_periodictask_headers', '2026-01-18 22:26:32.212981+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (36, 'django_celery_beat', '0010_auto_20190429_0326', '2026-01-18 22:26:32.426848+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (37, 'django_celery_beat', '0011_auto_20190508_0153', '2026-01-18 22:26:32.685772+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (38, 'django_celery_beat', '0012_periodictask_expire_seconds', '2026-01-18 22:26:32.783946+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (39, 'django_celery_beat', '0013_auto_20200609_0727', '2026-01-18 22:26:32.849509+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (40, 'django_celery_beat', '0014_remove_clockedschedule_enabled', '2026-01-18 22:26:33.003032+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (41, 'django_celery_beat', '0015_alter_clockedschedule_id_alter_crontabschedule_id_and_more', '2026-01-18 22:26:34.475445+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (42, 'django_celery_results', '0001_initial', '2026-01-18 22:26:34.772179+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (43, 'django_celery_results', '0002_add_task_name_args_kwargs', '2026-01-18 22:26:34.929787+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (44, 'django_celery_results', '0003_auto_20181106_1101', '2026-01-18 22:26:34.992086+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (45, 'django_celery_results', '0004_auto_20190516_0412', '2026-01-18 22:26:35.300946+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (46, 'django_celery_results', '0005_taskresult_worker', '2026-01-18 22:26:35.512788+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (47, 'django_celery_results', '0006_taskresult_date_created', '2026-01-18 22:26:35.748405+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (48, 'django_celery_results', '0007_remove_taskresult_hidden', '2026-01-18 22:26:35.842453+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (49, 'django_celery_results', '0008_chordcounter', '2026-01-18 22:26:36.040012+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (50, 'django_celery_results', '0009_groupresult', '2026-01-18 22:26:37.044478+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (51, 'django_celery_results', '0010_remove_duplicate_indices', '2026-01-18 22:26:37.197820+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (52, 'django_celery_results', '0011_taskresult_periodic_task_name', '2026-01-18 22:26:37.324394+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (53, 'django_celery_results', '0012_taskresult_date_started', '2026-01-18 22:26:37.447071+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (54, 'django_celery_results', '0013_taskresult_django_cele_periodi_1993cf_idx', '2026-01-18 22:26:37.567406+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (55, 'django_celery_results', '0014_alter_taskresult_status', '2026-01-18 22:26:37.630094+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (56, 'product', '0001_initial', '2026-01-18 22:26:39.186225+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (57, 'product', '0002_product_kd_price_alter_product_price', '2026-01-18 22:26:39.293780+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (58, 'product', '0003_rename_kd_price_product_kg_price', '2026-01-18 22:26:39.423004+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (59, 'product', '0004_alter_images_options_alter_images_images_and_more', '2026-01-18 22:26:39.681525+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (60, 'product', '0005_product_special_product_special_images', '2026-01-18 22:26:39.882839+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (61, 'product', '0006_product_thumbnail', '2026-01-18 22:26:40.010784+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (62, 'product', '0007_category_images', '2026-01-18 22:26:40.166425+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (63, 'product', '0008_remove_product_special_images', '2026-01-18 22:26:40.292882+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (64, 'product', '0009_remove_product_special', '2026-01-18 22:26:40.419665+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (65, 'product', '0010_alter_product_price', '2026-01-18 22:26:40.488409+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (66, 'product', '0011_remove_product_kg_price_product_brim', '2026-01-18 22:26:40.715387+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (67, 'product', '0012_alter_product_brim', '2026-01-18 22:26:40.783285+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (68, 'product', '0013_alter_product_brim', '2026-01-18 22:26:40.879267+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (69, 'product', '0014_alter_product_slug', '2026-01-18 22:26:40.975299+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (70, 'product', '0015_alter_product_brim', '2026-01-18 22:26:41.102201+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (71, 'product', '0016_product_gallery', '2026-01-18 22:26:41.516596+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (72, 'product', '0017_alter_product_brim', '2026-01-18 22:26:41.556929+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (73, 'product', '0018_product_is_front', '2026-01-18 22:26:41.750191+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (74, 'product', '0019_product_thumb', '2026-01-18 22:26:41.910670+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (75, 'product', '0020_remove_product_thumbnail_alter_product_thumb', '2026-01-18 22:26:42.051322+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (76, 'product', '0021_remove_product_thumb_alter_category_images_and_more', '2026-01-18 22:26:42.322768+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (77, 'sessions', '0001_initial', '2026-01-18 22:26:42.539586+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (78, 'settings', '0001_initial', '2026-01-18 22:26:42.693943+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (79, 'settings', '0002_setting_linkedin_setting_pinterest', '2026-01-18 22:26:42.914953+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (80, 'settings', '0003_sitesettings', '2026-01-18 22:26:43.040738+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (81, 'settings', '0004_alter_sitesettings_options_sitesettings_site_active', '2026-01-18 22:26:43.197700+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (82, 'settings', '0005_alter_sitesettings_site_active', '2026-01-18 22:26:43.259407+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (83, 'sites', '0001_initial', '2026-01-18 22:26:43.415004+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (84, 'sites', '0002_alter_domain_unique', '2026-01-18 22:26:43.566011+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (85, 'default', '0001_initial', '2026-01-18 22:26:44.103081+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (86, 'social_auth', '0001_initial', '2026-01-18 22:26:44.133067+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (87, 'social_django', '0001_initial', '2026-01-18 22:26:44.162641+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (88, 'default', '0002_add_related_name', '2026-01-18 22:26:44.211596+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (89, 'social_auth', '0002_add_related_name', '2026-01-18 22:26:44.268276+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (90, 'social_django', '0002_add_related_name', '2026-01-18 22:26:44.297551+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (91, 'default', '0003_alter_email_max_length', '2026-01-18 22:26:44.421917+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (92, 'social_auth', '0003_alter_email_max_length', '2026-01-18 22:26:44.451711+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (93, 'social_django', '0003_alter_email_max_length', '2026-01-18 22:26:44.481836+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (94, 'default', '0004_auto_20160423_0400', '2026-01-18 22:26:44.553779+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (95, 'social_auth', '0004_auto_20160423_0400', '2026-01-18 22:26:44.613238+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (96, 'social_django', '0004_auto_20160423_0400', '2026-01-18 22:26:44.643021+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (97, 'social_auth', '0005_auto_20160727_2333', '2026-01-18 22:26:44.765049+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (98, 'social_django', '0005_auto_20160727_2333', '2026-01-18 22:26:44.795770+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (99, 'social_django', '0006_partial', '2026-01-18 22:26:45.017004+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (100, 'social_django', '0007_code_timestamp', '2026-01-18 22:26:45.203222+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (101, 'social_django', '0008_partial_timestamp', '2026-01-18 22:26:45.390796+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (102, 'social_django', '0009_auto_20191118_0520', '2026-01-18 22:26:45.606051+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (103, 'social_django', '0010_uid_db_index', '2026-01-18 22:26:45.768091+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (104, 'social_django', '0011_alter_id_fields', '2026-01-18 22:26:46.483286+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (105, 'social_django', '0012_usersocialauth_extra_data_new', '2026-01-18 22:26:46.719674+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (106, 'social_django', '0013_migrate_extra_data', '2026-01-18 22:26:46.965822+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (107, 'social_django', '0014_remove_usersocialauth_extra_data', '2026-01-18 22:26:47.134938+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (108, 'social_django', '0015_rename_extra_data_new_usersocialauth_extra_data', '2026-01-18 22:26:47.297024+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (109, 'social_django', '0016_alter_usersocialauth_extra_data', '2026-01-18 22:26:47.369579+00:00'); +INSERT INTO django_migrations (id, app, name, applied) VALUES (110, 'social_django', '0017_usersocialauth_user_social_auth_uid_required', '2026-01-18 22:26:47.531898+00:00'); + + +-- Table: django_session +DROP TABLE IF EXISTS django_session CASCADE; +CREATE TABLE django_session ( + session_key VARCHAR(40) NOT NULL, + session_data TEXT NOT NULL, + expire_date TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: django_session +INSERT INTO django_session (session_key, session_data, expire_date) VALUES ('tcqskuvq8ylqqsnym8li5ryz5msuh07l', '.eJxVjDsOwjAQRO_iGln-x6GkzxmstXeNA8iR4qRC3B1HSgHdaN6bebMA-1bC3mgNM7Irk-zy20VIT6oHwAfU-8LTUrd1jvxQ-Ekbnxak1-10_w4KtNLXlLMln1COkI0atHMWRp81AYERpIX1yigXM9IAHnvWVngw0nSuyLPPF_siOAc:1vhbFg:OLstq7hX4uJnLrchGxLbzykgqQqPzsfUd738yJCTISA', '2026-02-01 22:28:08.313123+00:00'); + + +-- Table: django_site +DROP TABLE IF EXISTS django_site CASCADE; +CREATE TABLE django_site ( + id INTEGER NOT NULL, + domain VARCHAR(100) NOT NULL, + name VARCHAR(50) NOT NULL +); + +-- Data for table: django_site +INSERT INTO django_site (id, domain, name) VALUES (1, 'example.com', 'example.com'); + + +-- Table: images +DROP TABLE IF EXISTS images CASCADE; +CREATE TABLE images ( + id BIGINT NOT NULL, + title VARCHAR(254) NOT NULL, + is_active BOOLEAN NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + images VARCHAR(100) +); + + +-- Table: products +DROP TABLE IF EXISTS products CASCADE; +CREATE TABLE products ( + id BIGINT NOT NULL, + title VARCHAR(254) NOT NULL, + content TEXT, + keywords VARCHAR(254) NOT NULL, + price DOUBLE PRECISION NOT NULL, + video VARCHAR(254), + slug VARCHAR(250) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + is_active BOOLEAN NOT NULL, + images VARCHAR(100), + brim VARCHAR(10) NOT NULL, + is_front BOOLEAN NOT NULL +); + + +-- Table: products_categories +DROP TABLE IF EXISTS products_categories CASCADE; +CREATE TABLE products_categories ( + id BIGINT NOT NULL, + product_id BIGINT NOT NULL, + category_id BIGINT NOT NULL +); + + +-- Table: products_gallery +DROP TABLE IF EXISTS products_gallery CASCADE; +CREATE TABLE products_gallery ( + id BIGINT NOT NULL, + product_id BIGINT NOT NULL, + images_id BIGINT NOT NULL +); + + +-- Table: products_tags +DROP TABLE IF EXISTS products_tags CASCADE; +CREATE TABLE products_tags ( + id BIGINT NOT NULL, + product_id BIGINT NOT NULL, + tags_id BIGINT NOT NULL +); + + +-- Table: settings +DROP TABLE IF EXISTS settings CASCADE; +CREATE TABLE settings ( + id BIGINT NOT NULL, + title VARCHAR(254) NOT NULL, + meta_title VARCHAR(254) NOT NULL, + meta_description VARCHAR(254) NOT NULL, + phone VARCHAR(254) NOT NULL, + url VARCHAR(254), + email VARCHAR(254) NOT NULL, + facebook VARCHAR(254), + x VARCHAR(254), + instagram VARCHAR(254), + whatsapp VARCHAR(254), + slogan VARCHAR(254), + w_logo VARCHAR(100), + b_logo VARCHAR(100), + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + is_active BOOLEAN NOT NULL, + linkedin VARCHAR(254), + pinterest VARCHAR(254) +); + + +-- Table: site_settings +DROP TABLE IF EXISTS site_settings CASCADE; +CREATE TABLE site_settings ( + id BIGINT NOT NULL, + is_active BOOLEAN NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + site_active BOOLEAN NOT NULL +); + + +-- Table: social_auth_association +DROP TABLE IF EXISTS social_auth_association CASCADE; +CREATE TABLE social_auth_association ( + id BIGINT NOT NULL, + server_url VARCHAR(255) NOT NULL, + handle VARCHAR(255) NOT NULL, + secret VARCHAR(255) NOT NULL, + issued INTEGER NOT NULL, + lifetime INTEGER NOT NULL, + assoc_type VARCHAR(64) NOT NULL +); + + +-- Table: social_auth_code +DROP TABLE IF EXISTS social_auth_code CASCADE; +CREATE TABLE social_auth_code ( + id BIGINT NOT NULL, + email VARCHAR(254) NOT NULL, + code VARCHAR(32) NOT NULL, + verified BOOLEAN NOT NULL, + timestamp TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: social_auth_nonce +DROP TABLE IF EXISTS social_auth_nonce CASCADE; +CREATE TABLE social_auth_nonce ( + id BIGINT NOT NULL, + server_url VARCHAR(255) NOT NULL, + timestamp INTEGER NOT NULL, + salt VARCHAR(65) NOT NULL +); + + +-- Table: social_auth_partial +DROP TABLE IF EXISTS social_auth_partial CASCADE; +CREATE TABLE social_auth_partial ( + id BIGINT NOT NULL, + token VARCHAR(32) NOT NULL, + next_step SMALLINT NOT NULL, + backend VARCHAR(32) NOT NULL, + timestamp TIMESTAMP WITH TIME ZONE NOT NULL, + data JSONB NOT NULL +); + + +-- Table: social_auth_usersocialauth +DROP TABLE IF EXISTS social_auth_usersocialauth CASCADE; +CREATE TABLE social_auth_usersocialauth ( + id BIGINT NOT NULL, + provider VARCHAR(32) NOT NULL, + uid VARCHAR(255) NOT NULL, + user_id BIGINT NOT NULL, + created TIMESTAMP WITH TIME ZONE NOT NULL, + modified TIMESTAMP WITH TIME ZONE NOT NULL, + extra_data JSONB NOT NULL +); + + +-- Table: tags +DROP TABLE IF EXISTS tags CASCADE; +CREATE TABLE tags ( + id BIGINT NOT NULL, + tag VARCHAR(254) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL, + is_active BOOLEAN NOT NULL, + slug VARCHAR(50) NOT NULL +); + + +-- Reset sequences +SELECT setval('django_migrations_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_migrations)); +SELECT setval('django_content_type_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_content_type)); +SELECT setval('auth_permission_id_seq', (SELECT COALESCE(MAX(id), 1) FROM auth_permission)); +SELECT setval('auth_group_id_seq', (SELECT COALESCE(MAX(id), 1) FROM auth_group)); +SELECT setval('auth_group_permissions_id_seq', (SELECT COALESCE(MAX(id), 1) FROM auth_group_permissions)); +SELECT setval('accounts_customuser_id_seq', (SELECT COALESCE(MAX(id), 1) FROM accounts_customuser)); +SELECT setval('accounts_customuser_groups_id_seq', (SELECT COALESCE(MAX(id), 1) FROM accounts_customuser_groups)); +SELECT setval('accounts_customuser_user_permissions_id_seq', (SELECT COALESCE(MAX(id), 1) FROM accounts_customuser_user_permissions)); +SELECT setval('django_admin_log_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_admin_log)); +SELECT setval('backup_databasebackup_id_seq', (SELECT COALESCE(MAX(id), 1) FROM backup_databasebackup)); +SELECT setval('contacts_id_seq', (SELECT COALESCE(MAX(id), 1) FROM contacts)); +SELECT setval('django_celery_beat_crontabschedule_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_beat_crontabschedule)); +SELECT setval('django_celery_beat_intervalschedule_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_beat_intervalschedule)); +SELECT setval('django_celery_beat_periodictask_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_beat_periodictask)); +SELECT setval('django_celery_beat_solarschedule_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_beat_solarschedule)); +SELECT setval('django_celery_beat_clockedschedule_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_beat_clockedschedule)); +SELECT setval('django_celery_results_taskresult_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_results_taskresult)); +SELECT setval('django_celery_results_chordcounter_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_results_chordcounter)); +SELECT setval('django_celery_results_groupresult_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_celery_results_groupresult)); +SELECT setval('images_id_seq', (SELECT COALESCE(MAX(id), 1) FROM images)); +SELECT setval('categories_id_seq', (SELECT COALESCE(MAX(id), 1) FROM categories)); +SELECT setval('tags_id_seq', (SELECT COALESCE(MAX(id), 1) FROM tags)); +SELECT setval('products_id_seq', (SELECT COALESCE(MAX(id), 1) FROM products)); +SELECT setval('products_categories_id_seq', (SELECT COALESCE(MAX(id), 1) FROM products_categories)); +SELECT setval('products_tags_id_seq', (SELECT COALESCE(MAX(id), 1) FROM products_tags)); +SELECT setval('comments_id_seq', (SELECT COALESCE(MAX(id), 1) FROM comments)); +SELECT setval('products_gallery_id_seq', (SELECT COALESCE(MAX(id), 1) FROM products_gallery)); +SELECT setval('banners_id_seq', (SELECT COALESCE(MAX(id), 1) FROM banners)); +SELECT setval('settings_id_seq', (SELECT COALESCE(MAX(id), 1) FROM settings)); +SELECT setval('site_settings_id_seq', (SELECT COALESCE(MAX(id), 1) FROM site_settings)); +SELECT setval('django_site_id_seq', (SELECT COALESCE(MAX(id), 1) FROM django_site)); +SELECT setval('social_auth_association_id_seq', (SELECT COALESCE(MAX(id), 1) FROM social_auth_association)); +SELECT setval('social_auth_code_id_seq', (SELECT COALESCE(MAX(id), 1) FROM social_auth_code)); +SELECT setval('social_auth_nonce_id_seq', (SELECT COALESCE(MAX(id), 1) FROM social_auth_nonce)); +SELECT setval('social_auth_usersocialauth_id_seq', (SELECT COALESCE(MAX(id), 1) FROM social_auth_usersocialauth)); +SELECT setval('social_auth_partial_id_seq', (SELECT COALESCE(MAX(id), 1) FROM social_auth_partial)); diff --git a/backups/backup_shop_20260119_013337.sql b/backups/backup_shop_20260119_013337.sql new file mode 100644 index 0000000..6158e1a --- /dev/null +++ b/backups/backup_shop_20260119_013337.sql @@ -0,0 +1,819 @@ +-- PostgreSQL Database Backup +-- Database: shop +-- Date: 2026-01-19 01:33:37.572514 +-- Created by Django Backup System using psycopg2 + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + + +-- Table: accounts_customuser +DROP TABLE IF EXISTS "accounts_customuser" CASCADE; +CREATE TABLE "accounts_customuser" ( + "id" BIGSERIAL, + "password" VARCHAR(128) NOT NULL, + "last_login" TIMESTAMP WITH TIME ZONE, + "is_superuser" BOOLEAN NOT NULL, + "email" VARCHAR(254) NOT NULL, + "first_name" VARCHAR(150) NOT NULL, + "last_name" VARCHAR(150) NOT NULL, + "is_staff" BOOLEAN NOT NULL, + "is_active" BOOLEAN NOT NULL, + "date_joined" TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: accounts_customuser +INSERT INTO "accounts_customuser" ("id", "password", "last_login", "is_superuser", "email", "first_name", "last_name", "is_staff", "is_active", "date_joined") VALUES (1, 'pbkdf2_sha256$1200000$X8eAbh3gvzNupPRIIc1RI4$SjIgdHr0UTX5IO0pMY89BBiqxOLzLly3BG/1ZkEPuR4=', '2026-01-18T22:28:08.286360+00:00'::timestamptz, true, 'beyhan@beyhan.dev', '', '', true, true, '2026-01-18T22:27:20.666592+00:00'::timestamptz); + + +-- Table: accounts_customuser_groups +DROP TABLE IF EXISTS "accounts_customuser_groups" CASCADE; +CREATE TABLE "accounts_customuser_groups" ( + "id" BIGSERIAL, + "customuser_id" BIGINT NOT NULL, + "group_id" INTEGER NOT NULL +); + + +-- Table: accounts_customuser_user_permissions +DROP TABLE IF EXISTS "accounts_customuser_user_permissions" CASCADE; +CREATE TABLE "accounts_customuser_user_permissions" ( + "id" BIGSERIAL, + "customuser_id" BIGINT NOT NULL, + "permission_id" INTEGER NOT NULL +); + + +-- Table: auth_group +DROP TABLE IF EXISTS "auth_group" CASCADE; +CREATE TABLE "auth_group" ( + "id" SERIAL, + "name" VARCHAR(150) NOT NULL +); + + +-- Table: auth_group_permissions +DROP TABLE IF EXISTS "auth_group_permissions" CASCADE; +CREATE TABLE "auth_group_permissions" ( + "id" BIGSERIAL, + "group_id" INTEGER NOT NULL, + "permission_id" INTEGER NOT NULL +); + + +-- Table: auth_permission +DROP TABLE IF EXISTS "auth_permission" CASCADE; +CREATE TABLE "auth_permission" ( + "id" SERIAL, + "name" VARCHAR(255) NOT NULL, + "content_type_id" INTEGER NOT NULL, + "codename" VARCHAR(100) NOT NULL +); + +-- Data for table: auth_permission +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (1, 'Can add log entry', 1, 'add_logentry'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (2, 'Can change log entry', 1, 'change_logentry'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (3, 'Can delete log entry', 1, 'delete_logentry'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (4, 'Can view log entry', 1, 'view_logentry'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (5, 'Can add permission', 3, 'add_permission'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (6, 'Can change permission', 3, 'change_permission'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (7, 'Can delete permission', 3, 'delete_permission'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (8, 'Can view permission', 3, 'view_permission'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (9, 'Can add group', 2, 'add_group'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (10, 'Can change group', 2, 'change_group'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (11, 'Can delete group', 2, 'delete_group'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (12, 'Can view group', 2, 'view_group'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (13, 'Can add content type', 4, 'add_contenttype'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (14, 'Can change content type', 4, 'change_contenttype'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (15, 'Can delete content type', 4, 'delete_contenttype'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (16, 'Can view content type', 4, 'view_contenttype'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (17, 'Can add session', 5, 'add_session'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (18, 'Can change session', 5, 'change_session'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (19, 'Can delete session', 5, 'delete_session'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (20, 'Can view session', 5, 'view_session'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (21, 'Can add task result', 8, 'add_taskresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (22, 'Can change task result', 8, 'change_taskresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (23, 'Can delete task result', 8, 'delete_taskresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (24, 'Can view task result', 8, 'view_taskresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (25, 'Can add chord counter', 6, 'add_chordcounter'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (26, 'Can change chord counter', 6, 'change_chordcounter'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (27, 'Can delete chord counter', 6, 'delete_chordcounter'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (28, 'Can view chord counter', 6, 'view_chordcounter'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (29, 'Can add group result', 7, 'add_groupresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (30, 'Can change group result', 7, 'change_groupresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (31, 'Can delete group result', 7, 'delete_groupresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (32, 'Can view group result', 7, 'view_groupresult'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (33, 'Can add crontab', 10, 'add_crontabschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (34, 'Can change crontab', 10, 'change_crontabschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (35, 'Can delete crontab', 10, 'delete_crontabschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (36, 'Can view crontab', 10, 'view_crontabschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (37, 'Can add interval', 11, 'add_intervalschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (38, 'Can change interval', 11, 'change_intervalschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (39, 'Can delete interval', 11, 'delete_intervalschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (40, 'Can view interval', 11, 'view_intervalschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (41, 'Can add periodic task', 12, 'add_periodictask'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (42, 'Can change periodic task', 12, 'change_periodictask'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (43, 'Can delete periodic task', 12, 'delete_periodictask'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (44, 'Can view periodic task', 12, 'view_periodictask'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (45, 'Can add periodic tasks', 13, 'add_periodictasks'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (46, 'Can change periodic tasks', 13, 'change_periodictasks'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (47, 'Can delete periodic tasks', 13, 'delete_periodictasks'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (48, 'Can view periodic tasks', 13, 'view_periodictasks'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (49, 'Can add solar event', 14, 'add_solarschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (50, 'Can change solar event', 14, 'change_solarschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (51, 'Can delete solar event', 14, 'delete_solarschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (52, 'Can view solar event', 14, 'view_solarschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (53, 'Can add clocked', 9, 'add_clockedschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (54, 'Can change clocked', 9, 'change_clockedschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (55, 'Can delete clocked', 9, 'delete_clockedschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (56, 'Can view clocked', 9, 'view_clockedschedule'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (57, 'Can add association', 15, 'add_association'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (58, 'Can change association', 15, 'change_association'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (59, 'Can delete association', 15, 'delete_association'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (60, 'Can view association', 15, 'view_association'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (61, 'Can add code', 16, 'add_code'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (62, 'Can change code', 16, 'change_code'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (63, 'Can delete code', 16, 'delete_code'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (64, 'Can view code', 16, 'view_code'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (65, 'Can add nonce', 17, 'add_nonce'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (66, 'Can change nonce', 17, 'change_nonce'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (67, 'Can delete nonce', 17, 'delete_nonce'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (68, 'Can view nonce', 17, 'view_nonce'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (69, 'Can add user social auth', 19, 'add_usersocialauth'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (70, 'Can change user social auth', 19, 'change_usersocialauth'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (71, 'Can delete user social auth', 19, 'delete_usersocialauth'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (72, 'Can view user social auth', 19, 'view_usersocialauth'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (73, 'Can add partial', 18, 'add_partial'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (74, 'Can change partial', 18, 'change_partial'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (75, 'Can delete partial', 18, 'delete_partial'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (76, 'Can view partial', 18, 'view_partial'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (77, 'Can add site', 20, 'add_site'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (78, 'Can change site', 20, 'change_site'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (79, 'Can delete site', 20, 'delete_site'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (80, 'Can view site', 20, 'view_site'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (81, 'Can add user', 21, 'add_customuser'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (82, 'Can change user', 21, 'change_customuser'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (83, 'Can delete user', 21, 'delete_customuser'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (84, 'Can view user', 21, 'view_customuser'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (85, 'Can add Banner', 22, 'add_banner'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (86, 'Can change Banner', 22, 'change_banner'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (87, 'Can delete Banner', 22, 'delete_banner'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (88, 'Can view Banner', 22, 'view_banner'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (89, 'Can add Site Ayarı', 23, 'add_setting'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (90, 'Can change Site Ayarı', 23, 'change_setting'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (91, 'Can delete Site Ayarı', 23, 'delete_setting'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (92, 'Can view Site Ayarı', 23, 'view_setting'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (93, 'Can add Site Ayarı Aç / Kapat', 24, 'add_sitesettings'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (94, 'Can change Site Ayarı Aç / Kapat', 24, 'change_sitesettings'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (95, 'Can delete Site Ayarı Aç / Kapat', 24, 'delete_sitesettings'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (96, 'Can view Site Ayarı Aç / Kapat', 24, 'view_sitesettings'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (97, 'Can add Veritabanı Yedeği', 25, 'add_databasebackup'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (98, 'Can change Veritabanı Yedeği', 25, 'change_databasebackup'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (99, 'Can delete Veritabanı Yedeği', 25, 'delete_databasebackup'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (100, 'Can view Veritabanı Yedeği', 25, 'view_databasebackup'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (101, 'Can add Contact', 26, 'add_contact'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (102, 'Can change Contact', 26, 'change_contact'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (103, 'Can delete Contact', 26, 'delete_contact'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (104, 'Can view Contact', 26, 'view_contact'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (105, 'Can add Galeri Resmi', 29, 'add_images'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (106, 'Can change Galeri Resmi', 29, 'change_images'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (107, 'Can delete Galeri Resmi', 29, 'delete_images'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (108, 'Can view Galeri Resmi', 29, 'view_images'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (109, 'Can add Ürün Kategori', 27, 'add_category'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (110, 'Can change Ürün Kategori', 27, 'change_category'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (111, 'Can delete Ürün Kategori', 27, 'delete_category'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (112, 'Can view Ürün Kategori', 27, 'view_category'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (113, 'Can add Ürün Tagı', 31, 'add_tags'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (114, 'Can change Ürün Tagı', 31, 'change_tags'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (115, 'Can delete Ürün Tagı', 31, 'delete_tags'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (116, 'Can view Ürün Tagı', 31, 'view_tags'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (117, 'Can add Ürün', 30, 'add_product'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (118, 'Can change Ürün', 30, 'change_product'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (119, 'Can delete Ürün', 30, 'delete_product'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (120, 'Can view Ürün', 30, 'view_product'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (121, 'Can add Ürüm Yorum', 28, 'add_comment'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (122, 'Can change Ürüm Yorum', 28, 'change_comment'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (123, 'Can delete Ürüm Yorum', 28, 'delete_comment'); +INSERT INTO "auth_permission" ("id", "name", "content_type_id", "codename") VALUES (124, 'Can view Ürüm Yorum', 28, 'view_comment'); + + +-- Table: backup_databasebackup +DROP TABLE IF EXISTS "backup_databasebackup" CASCADE; +CREATE TABLE "backup_databasebackup" ( + "id" BIGSERIAL, + "name" VARCHAR(255) NOT NULL, + "file_path" VARCHAR(500), + "file_size" BIGINT, + "status" VARCHAR(20) NOT NULL, + "backup_type" VARCHAR(20) NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "completed_at" TIMESTAMP WITH TIME ZONE, + "error_message" TEXT, + "notes" TEXT, + "created_by_id" BIGINT +); + +-- Data for table: backup_databasebackup +INSERT INTO "backup_databasebackup" ("id", "name", "file_path", "file_size", "status", "backup_type", "created_at", "completed_at", "error_message", "notes", "created_by_id") VALUES (2, 'Manuel Yedek - 2026-01-18 22:29:47', '/Users/beyhan/Desktop/Projeler/Python/shop/backups/backup_shop_20260119_012947.sql', 53831, 'completed', 'manual', '2026-01-18T22:29:47.223287+00:00'::timestamptz, '2026-01-18T22:29:50.305187+00:00'::timestamptz, NULL, NULL, 1); +INSERT INTO "backup_databasebackup" ("id", "name", "file_path", "file_size", "status", "backup_type", "created_at", "completed_at", "error_message", "notes", "created_by_id") VALUES (3, 'Manuel Yedek - 2026-01-18 22:33:37', NULL, NULL, 'in_progress', 'manual', '2026-01-18T22:33:37.380995+00:00'::timestamptz, NULL, NULL, NULL, 1); + + +-- Table: banners +DROP TABLE IF EXISTS "banners" CASCADE; +CREATE TABLE "banners" ( + "id" BIGSERIAL, + "color" VARCHAR(25) NOT NULL, + "title" VARCHAR(254), + "text1" VARCHAR(254), + "text2" VARCHAR(254), + "text4" VARCHAR(254), + "text5" VARCHAR(254), + "image" VARCHAR(100) NOT NULL, + "image_k" VARCHAR(100), + "image_k_txt" VARCHAR(254), + "is_active" BOOLEAN NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: categories +DROP TABLE IF EXISTS "categories" CASCADE; +CREATE TABLE "categories" ( + "id" BIGSERIAL, + "title" VARCHAR(254) NOT NULL, + "keywords" VARCHAR(254) NOT NULL, + "description" VARCHAR(254) NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "is_active" BOOLEAN NOT NULL, + "order" INTEGER NOT NULL, + "slug" VARCHAR(250) NOT NULL, + "parent_id" BIGINT, + "images" VARCHAR(100) +); + + +-- Table: comments +DROP TABLE IF EXISTS "comments" CASCADE; +CREATE TABLE "comments" ( + "id" BIGSERIAL, + "title" VARCHAR(254) NOT NULL, + "body" TEXT NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "is_active" BOOLEAN NOT NULL, + "slug" VARCHAR(50) NOT NULL, + "parent_id" BIGINT, + "user_id" BIGINT NOT NULL, + "product_id" BIGINT NOT NULL +); + + +-- Table: contacts +DROP TABLE IF EXISTS "contacts" CASCADE; +CREATE TABLE "contacts" ( + "id" BIGSERIAL, + "name" VARCHAR(254) NOT NULL, + "email" VARCHAR(254) NOT NULL, + "subject" VARCHAR(254) NOT NULL, + "message" TEXT NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "user_id" BIGINT, + "ip" VARCHAR(100) +); + + +-- Table: django_admin_log +DROP TABLE IF EXISTS "django_admin_log" CASCADE; +CREATE TABLE "django_admin_log" ( + "id" SERIAL, + "action_time" TIMESTAMP WITH TIME ZONE NOT NULL, + "object_id" TEXT, + "object_repr" VARCHAR(200) NOT NULL, + "action_flag" SMALLINT NOT NULL, + "change_message" TEXT NOT NULL, + "content_type_id" INTEGER, + "user_id" BIGINT NOT NULL +); + +-- Data for table: django_admin_log +INSERT INTO "django_admin_log" ("id", "action_time", "object_id", "object_repr", "action_flag", "change_message", "content_type_id", "user_id") VALUES (1, '2026-01-18T22:29:34.026717+00:00'::timestamptz, '1', 'aaa - Bekliyor', 1, '[{"added": {}}]', 25, 1); +INSERT INTO "django_admin_log" ("id", "action_time", "object_id", "object_repr", "action_flag", "change_message", "content_type_id", "user_id") VALUES (2, '2026-01-18T22:32:58.428647+00:00'::timestamptz, '1', 'aaa - Bekliyor', 3, '', 25, 1); + + +-- Table: django_celery_beat_clockedschedule +DROP TABLE IF EXISTS "django_celery_beat_clockedschedule" CASCADE; +CREATE TABLE "django_celery_beat_clockedschedule" ( + "id" BIGSERIAL, + "clocked_time" TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: django_celery_beat_crontabschedule +DROP TABLE IF EXISTS "django_celery_beat_crontabschedule" CASCADE; +CREATE TABLE "django_celery_beat_crontabschedule" ( + "id" BIGSERIAL, + "minute" VARCHAR(240) NOT NULL, + "hour" VARCHAR(96) NOT NULL, + "day_of_week" VARCHAR(64) NOT NULL, + "day_of_month" VARCHAR(124) NOT NULL, + "month_of_year" VARCHAR(64) NOT NULL, + "timezone" VARCHAR(63) NOT NULL +); + + +-- Table: django_celery_beat_intervalschedule +DROP TABLE IF EXISTS "django_celery_beat_intervalschedule" CASCADE; +CREATE TABLE "django_celery_beat_intervalschedule" ( + "id" BIGSERIAL, + "every" INTEGER NOT NULL, + "period" VARCHAR(24) NOT NULL +); + + +-- Table: django_celery_beat_periodictask +DROP TABLE IF EXISTS "django_celery_beat_periodictask" CASCADE; +CREATE TABLE "django_celery_beat_periodictask" ( + "id" BIGSERIAL, + "name" VARCHAR(200) NOT NULL, + "task" VARCHAR(200) NOT NULL, + "args" TEXT NOT NULL, + "kwargs" TEXT NOT NULL, + "queue" VARCHAR(200), + "exchange" VARCHAR(200), + "routing_key" VARCHAR(200), + "expires" TIMESTAMP WITH TIME ZONE, + "enabled" BOOLEAN NOT NULL, + "last_run_at" TIMESTAMP WITH TIME ZONE, + "total_run_count" INTEGER NOT NULL, + "date_changed" TIMESTAMP WITH TIME ZONE NOT NULL, + "description" TEXT NOT NULL, + "crontab_id" BIGINT, + "interval_id" BIGINT, + "solar_id" BIGINT, + "one_off" BOOLEAN NOT NULL, + "start_time" TIMESTAMP WITH TIME ZONE, + "priority" INTEGER, + "headers" TEXT NOT NULL, + "clocked_id" BIGINT, + "expire_seconds" INTEGER +); + + +-- Table: django_celery_beat_periodictasks +DROP TABLE IF EXISTS "django_celery_beat_periodictasks" CASCADE; +CREATE TABLE "django_celery_beat_periodictasks" ( + "ident" SMALLINT NOT NULL, + "last_update" TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: django_celery_beat_solarschedule +DROP TABLE IF EXISTS "django_celery_beat_solarschedule" CASCADE; +CREATE TABLE "django_celery_beat_solarschedule" ( + "id" BIGSERIAL, + "event" VARCHAR(24) NOT NULL, + "latitude" NUMERIC NOT NULL, + "longitude" NUMERIC NOT NULL +); + + +-- Table: django_celery_results_chordcounter +DROP TABLE IF EXISTS "django_celery_results_chordcounter" CASCADE; +CREATE TABLE "django_celery_results_chordcounter" ( + "id" SERIAL, + "group_id" VARCHAR(255) NOT NULL, + "sub_tasks" TEXT NOT NULL, + "count" INTEGER NOT NULL +); + + +-- Table: django_celery_results_groupresult +DROP TABLE IF EXISTS "django_celery_results_groupresult" CASCADE; +CREATE TABLE "django_celery_results_groupresult" ( + "id" SERIAL, + "group_id" VARCHAR(255) NOT NULL, + "date_created" TIMESTAMP WITH TIME ZONE NOT NULL, + "date_done" TIMESTAMP WITH TIME ZONE NOT NULL, + "content_type" VARCHAR(128) NOT NULL, + "content_encoding" VARCHAR(64) NOT NULL, + "result" TEXT +); + + +-- Table: django_celery_results_taskresult +DROP TABLE IF EXISTS "django_celery_results_taskresult" CASCADE; +CREATE TABLE "django_celery_results_taskresult" ( + "id" SERIAL, + "task_id" VARCHAR(255) NOT NULL, + "status" VARCHAR(50) NOT NULL, + "content_type" VARCHAR(128) NOT NULL, + "content_encoding" VARCHAR(64) NOT NULL, + "result" TEXT, + "date_done" TIMESTAMP WITH TIME ZONE NOT NULL, + "traceback" TEXT, + "meta" TEXT, + "task_args" TEXT, + "task_kwargs" TEXT, + "task_name" VARCHAR(255), + "worker" VARCHAR(100), + "date_created" TIMESTAMP WITH TIME ZONE NOT NULL, + "periodic_task_name" VARCHAR(255), + "date_started" TIMESTAMP WITH TIME ZONE +); + + +-- Table: django_content_type +DROP TABLE IF EXISTS "django_content_type" CASCADE; +CREATE TABLE "django_content_type" ( + "id" SERIAL, + "app_label" VARCHAR(100) NOT NULL, + "model" VARCHAR(100) NOT NULL +); + +-- Data for table: django_content_type +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (1, 'admin', 'logentry'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (2, 'auth', 'group'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (3, 'auth', 'permission'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (4, 'contenttypes', 'contenttype'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (5, 'sessions', 'session'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (6, 'django_celery_results', 'chordcounter'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (7, 'django_celery_results', 'groupresult'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (8, 'django_celery_results', 'taskresult'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (9, 'django_celery_beat', 'clockedschedule'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (10, 'django_celery_beat', 'crontabschedule'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (11, 'django_celery_beat', 'intervalschedule'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (12, 'django_celery_beat', 'periodictask'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (13, 'django_celery_beat', 'periodictasks'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (14, 'django_celery_beat', 'solarschedule'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (15, 'social_django', 'association'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (16, 'social_django', 'code'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (17, 'social_django', 'nonce'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (18, 'social_django', 'partial'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (19, 'social_django', 'usersocialauth'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (20, 'sites', 'site'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (21, 'accounts', 'customuser'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (22, 'settings', 'banner'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (23, 'settings', 'setting'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (24, 'settings', 'sitesettings'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (25, 'backup', 'databasebackup'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (26, 'contact', 'contact'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (27, 'product', 'category'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (28, 'product', 'comment'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (29, 'product', 'images'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (30, 'product', 'product'); +INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (31, 'product', 'tags'); + + +-- Table: django_migrations +DROP TABLE IF EXISTS "django_migrations" CASCADE; +CREATE TABLE "django_migrations" ( + "id" BIGSERIAL, + "app" VARCHAR(255) NOT NULL, + "name" VARCHAR(255) NOT NULL, + "applied" TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: django_migrations +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (1, 'contenttypes', '0001_initial', '2026-01-18T22:26:26.197648+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (2, 'contenttypes', '0002_remove_content_type_name', '2026-01-18T22:26:26.360052+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (3, 'auth', '0001_initial', '2026-01-18T22:26:26.904480+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (4, 'auth', '0002_alter_permission_name_max_length', '2026-01-18T22:26:27.004323+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (5, 'auth', '0003_alter_user_email_max_length', '2026-01-18T22:26:27.071923+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (6, 'auth', '0004_alter_user_username_opts', '2026-01-18T22:26:27.167428+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (7, 'auth', '0005_alter_user_last_login_null', '2026-01-18T22:26:27.303966+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (8, 'auth', '0006_require_contenttypes_0002', '2026-01-18T22:26:27.391310+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (9, 'auth', '0007_alter_validators_add_error_messages', '2026-01-18T22:26:27.484909+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (10, 'auth', '0008_alter_user_username_max_length', '2026-01-18T22:26:27.577593+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (11, 'auth', '0009_alter_user_last_name_max_length', '2026-01-18T22:26:27.774582+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (12, 'auth', '0010_alter_group_name_max_length', '2026-01-18T22:26:27.931659+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (13, 'auth', '0011_update_proxy_permissions', '2026-01-18T22:26:27.999110+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (14, 'auth', '0012_alter_user_first_name_max_length', '2026-01-18T22:26:28.091754+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (15, 'accounts', '0001_initial', '2026-01-18T22:26:28.718278+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (16, 'admin', '0001_initial', '2026-01-18T22:26:28.997267+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (17, 'admin', '0002_logentry_remove_auto_add', '2026-01-18T22:26:29.035111+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (18, 'admin', '0003_logentry_add_action_flag_choices', '2026-01-18T22:26:29.132077+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (19, 'backup', '0001_initial', '2026-01-18T22:26:29.396877+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (20, 'contact', '0001_initial', '2026-01-18T22:26:29.498738+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (21, 'contact', '0002_contact_user', '2026-01-18T22:26:29.726625+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (22, 'contact', '0003_alter_contact_message', '2026-01-18T22:26:29.828197+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (23, 'contact', '0004_contact_ip', '2026-01-18T22:26:29.992327+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (24, 'contact', '0005_alter_contact_ip_alter_contact_user', '2026-01-18T22:26:30.323272+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (25, 'django_celery_beat', '0001_initial', '2026-01-18T22:26:30.768960+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (26, 'django_celery_beat', '0002_auto_20161118_0346', '2026-01-18T22:26:30.969010+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (27, 'django_celery_beat', '0003_auto_20161209_0049', '2026-01-18T22:26:31.072305+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (28, 'django_celery_beat', '0004_auto_20170221_0000', '2026-01-18T22:26:31.133956+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (29, 'django_celery_beat', '0005_add_solarschedule_events_choices', '2026-01-18T22:26:31.224248+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (30, 'django_celery_beat', '0006_auto_20180322_0932', '2026-01-18T22:26:31.519108+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (31, 'django_celery_beat', '0007_auto_20180521_0826', '2026-01-18T22:26:31.718953+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (32, 'django_celery_beat', '0008_auto_20180914_1922', '2026-01-18T22:26:31.798080+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (33, 'django_celery_beat', '0006_auto_20180210_1226', '2026-01-18T22:26:31.898867+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (34, 'django_celery_beat', '0006_periodictask_priority', '2026-01-18T22:26:32.054824+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (35, 'django_celery_beat', '0009_periodictask_headers', '2026-01-18T22:26:32.212981+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (36, 'django_celery_beat', '0010_auto_20190429_0326', '2026-01-18T22:26:32.426848+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (37, 'django_celery_beat', '0011_auto_20190508_0153', '2026-01-18T22:26:32.685772+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (38, 'django_celery_beat', '0012_periodictask_expire_seconds', '2026-01-18T22:26:32.783946+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (39, 'django_celery_beat', '0013_auto_20200609_0727', '2026-01-18T22:26:32.849509+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (40, 'django_celery_beat', '0014_remove_clockedschedule_enabled', '2026-01-18T22:26:33.003032+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (41, 'django_celery_beat', '0015_alter_clockedschedule_id_alter_crontabschedule_id_and_more', '2026-01-18T22:26:34.475445+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (42, 'django_celery_results', '0001_initial', '2026-01-18T22:26:34.772179+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (43, 'django_celery_results', '0002_add_task_name_args_kwargs', '2026-01-18T22:26:34.929787+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (44, 'django_celery_results', '0003_auto_20181106_1101', '2026-01-18T22:26:34.992086+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (45, 'django_celery_results', '0004_auto_20190516_0412', '2026-01-18T22:26:35.300946+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (46, 'django_celery_results', '0005_taskresult_worker', '2026-01-18T22:26:35.512788+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (47, 'django_celery_results', '0006_taskresult_date_created', '2026-01-18T22:26:35.748405+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (48, 'django_celery_results', '0007_remove_taskresult_hidden', '2026-01-18T22:26:35.842453+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (49, 'django_celery_results', '0008_chordcounter', '2026-01-18T22:26:36.040012+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (50, 'django_celery_results', '0009_groupresult', '2026-01-18T22:26:37.044478+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (51, 'django_celery_results', '0010_remove_duplicate_indices', '2026-01-18T22:26:37.197820+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (52, 'django_celery_results', '0011_taskresult_periodic_task_name', '2026-01-18T22:26:37.324394+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (53, 'django_celery_results', '0012_taskresult_date_started', '2026-01-18T22:26:37.447071+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (54, 'django_celery_results', '0013_taskresult_django_cele_periodi_1993cf_idx', '2026-01-18T22:26:37.567406+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (55, 'django_celery_results', '0014_alter_taskresult_status', '2026-01-18T22:26:37.630094+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (56, 'product', '0001_initial', '2026-01-18T22:26:39.186225+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (57, 'product', '0002_product_kd_price_alter_product_price', '2026-01-18T22:26:39.293780+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (58, 'product', '0003_rename_kd_price_product_kg_price', '2026-01-18T22:26:39.423004+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (59, 'product', '0004_alter_images_options_alter_images_images_and_more', '2026-01-18T22:26:39.681525+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (60, 'product', '0005_product_special_product_special_images', '2026-01-18T22:26:39.882839+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (61, 'product', '0006_product_thumbnail', '2026-01-18T22:26:40.010784+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (62, 'product', '0007_category_images', '2026-01-18T22:26:40.166425+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (63, 'product', '0008_remove_product_special_images', '2026-01-18T22:26:40.292882+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (64, 'product', '0009_remove_product_special', '2026-01-18T22:26:40.419665+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (65, 'product', '0010_alter_product_price', '2026-01-18T22:26:40.488409+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (66, 'product', '0011_remove_product_kg_price_product_brim', '2026-01-18T22:26:40.715387+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (67, 'product', '0012_alter_product_brim', '2026-01-18T22:26:40.783285+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (68, 'product', '0013_alter_product_brim', '2026-01-18T22:26:40.879267+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (69, 'product', '0014_alter_product_slug', '2026-01-18T22:26:40.975299+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (70, 'product', '0015_alter_product_brim', '2026-01-18T22:26:41.102201+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (71, 'product', '0016_product_gallery', '2026-01-18T22:26:41.516596+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (72, 'product', '0017_alter_product_brim', '2026-01-18T22:26:41.556929+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (73, 'product', '0018_product_is_front', '2026-01-18T22:26:41.750191+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (74, 'product', '0019_product_thumb', '2026-01-18T22:26:41.910670+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (75, 'product', '0020_remove_product_thumbnail_alter_product_thumb', '2026-01-18T22:26:42.051322+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (76, 'product', '0021_remove_product_thumb_alter_category_images_and_more', '2026-01-18T22:26:42.322768+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (77, 'sessions', '0001_initial', '2026-01-18T22:26:42.539586+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (78, 'settings', '0001_initial', '2026-01-18T22:26:42.693943+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (79, 'settings', '0002_setting_linkedin_setting_pinterest', '2026-01-18T22:26:42.914953+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (80, 'settings', '0003_sitesettings', '2026-01-18T22:26:43.040738+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (81, 'settings', '0004_alter_sitesettings_options_sitesettings_site_active', '2026-01-18T22:26:43.197700+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (82, 'settings', '0005_alter_sitesettings_site_active', '2026-01-18T22:26:43.259407+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (83, 'sites', '0001_initial', '2026-01-18T22:26:43.415004+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (84, 'sites', '0002_alter_domain_unique', '2026-01-18T22:26:43.566011+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (85, 'default', '0001_initial', '2026-01-18T22:26:44.103081+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (86, 'social_auth', '0001_initial', '2026-01-18T22:26:44.133067+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (87, 'social_django', '0001_initial', '2026-01-18T22:26:44.162641+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (88, 'default', '0002_add_related_name', '2026-01-18T22:26:44.211596+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (89, 'social_auth', '0002_add_related_name', '2026-01-18T22:26:44.268276+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (90, 'social_django', '0002_add_related_name', '2026-01-18T22:26:44.297551+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (91, 'default', '0003_alter_email_max_length', '2026-01-18T22:26:44.421917+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (92, 'social_auth', '0003_alter_email_max_length', '2026-01-18T22:26:44.451711+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (93, 'social_django', '0003_alter_email_max_length', '2026-01-18T22:26:44.481836+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (94, 'default', '0004_auto_20160423_0400', '2026-01-18T22:26:44.553779+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (95, 'social_auth', '0004_auto_20160423_0400', '2026-01-18T22:26:44.613238+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (96, 'social_django', '0004_auto_20160423_0400', '2026-01-18T22:26:44.643021+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (97, 'social_auth', '0005_auto_20160727_2333', '2026-01-18T22:26:44.765049+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (98, 'social_django', '0005_auto_20160727_2333', '2026-01-18T22:26:44.795770+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (99, 'social_django', '0006_partial', '2026-01-18T22:26:45.017004+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (100, 'social_django', '0007_code_timestamp', '2026-01-18T22:26:45.203222+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (101, 'social_django', '0008_partial_timestamp', '2026-01-18T22:26:45.390796+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (102, 'social_django', '0009_auto_20191118_0520', '2026-01-18T22:26:45.606051+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (103, 'social_django', '0010_uid_db_index', '2026-01-18T22:26:45.768091+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (104, 'social_django', '0011_alter_id_fields', '2026-01-18T22:26:46.483286+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (105, 'social_django', '0012_usersocialauth_extra_data_new', '2026-01-18T22:26:46.719674+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (106, 'social_django', '0013_migrate_extra_data', '2026-01-18T22:26:46.965822+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (107, 'social_django', '0014_remove_usersocialauth_extra_data', '2026-01-18T22:26:47.134938+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (108, 'social_django', '0015_rename_extra_data_new_usersocialauth_extra_data', '2026-01-18T22:26:47.297024+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (109, 'social_django', '0016_alter_usersocialauth_extra_data', '2026-01-18T22:26:47.369579+00:00'::timestamptz); +INSERT INTO "django_migrations" ("id", "app", "name", "applied") VALUES (110, 'social_django', '0017_usersocialauth_user_social_auth_uid_required', '2026-01-18T22:26:47.531898+00:00'::timestamptz); + + +-- Table: django_session +DROP TABLE IF EXISTS "django_session" CASCADE; +CREATE TABLE "django_session" ( + "session_key" VARCHAR(40) NOT NULL, + "session_data" TEXT NOT NULL, + "expire_date" TIMESTAMP WITH TIME ZONE NOT NULL +); + +-- Data for table: django_session +INSERT INTO "django_session" ("session_key", "session_data", "expire_date") VALUES ('tcqskuvq8ylqqsnym8li5ryz5msuh07l', '.eJxVjDsOwjAQRO_iGln-x6GkzxmstXeNA8iR4qRC3B1HSgHdaN6bebMA-1bC3mgNM7Irk-zy20VIT6oHwAfU-8LTUrd1jvxQ-Ekbnxak1-10_w4KtNLXlLMln1COkI0atHMWRp81AYERpIX1yigXM9IAHnvWVngw0nSuyLPPF_siOAc:1vhbFg:OLstq7hX4uJnLrchGxLbzykgqQqPzsfUd738yJCTISA', '2026-02-01T22:28:08.313123+00:00'::timestamptz); + + +-- Table: django_site +DROP TABLE IF EXISTS "django_site" CASCADE; +CREATE TABLE "django_site" ( + "id" SERIAL, + "domain" VARCHAR(100) NOT NULL, + "name" VARCHAR(50) NOT NULL +); + +-- Data for table: django_site +INSERT INTO "django_site" ("id", "domain", "name") VALUES (1, 'example.com', 'example.com'); + + +-- Table: images +DROP TABLE IF EXISTS "images" CASCADE; +CREATE TABLE "images" ( + "id" BIGSERIAL, + "title" VARCHAR(254) NOT NULL, + "is_active" BOOLEAN NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "images" VARCHAR(100) +); + + +-- Table: products +DROP TABLE IF EXISTS "products" CASCADE; +CREATE TABLE "products" ( + "id" BIGSERIAL, + "title" VARCHAR(254) NOT NULL, + "content" TEXT, + "keywords" VARCHAR(254) NOT NULL, + "price" DOUBLE PRECISION NOT NULL, + "video" VARCHAR(254), + "slug" VARCHAR(250) NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "is_active" BOOLEAN NOT NULL, + "images" VARCHAR(100), + "brim" VARCHAR(10) NOT NULL, + "is_front" BOOLEAN NOT NULL +); + + +-- Table: products_categories +DROP TABLE IF EXISTS "products_categories" CASCADE; +CREATE TABLE "products_categories" ( + "id" BIGSERIAL, + "product_id" BIGINT NOT NULL, + "category_id" BIGINT NOT NULL +); + + +-- Table: products_gallery +DROP TABLE IF EXISTS "products_gallery" CASCADE; +CREATE TABLE "products_gallery" ( + "id" BIGSERIAL, + "product_id" BIGINT NOT NULL, + "images_id" BIGINT NOT NULL +); + + +-- Table: products_tags +DROP TABLE IF EXISTS "products_tags" CASCADE; +CREATE TABLE "products_tags" ( + "id" BIGSERIAL, + "product_id" BIGINT NOT NULL, + "tags_id" BIGINT NOT NULL +); + + +-- Table: settings +DROP TABLE IF EXISTS "settings" CASCADE; +CREATE TABLE "settings" ( + "id" BIGSERIAL, + "title" VARCHAR(254) NOT NULL, + "meta_title" VARCHAR(254) NOT NULL, + "meta_description" VARCHAR(254) NOT NULL, + "phone" VARCHAR(254) NOT NULL, + "url" VARCHAR(254), + "email" VARCHAR(254) NOT NULL, + "facebook" VARCHAR(254), + "x" VARCHAR(254), + "instagram" VARCHAR(254), + "whatsapp" VARCHAR(254), + "slogan" VARCHAR(254), + "w_logo" VARCHAR(100), + "b_logo" VARCHAR(100), + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "is_active" BOOLEAN NOT NULL, + "linkedin" VARCHAR(254), + "pinterest" VARCHAR(254) +); + + +-- Table: site_settings +DROP TABLE IF EXISTS "site_settings" CASCADE; +CREATE TABLE "site_settings" ( + "id" BIGSERIAL, + "is_active" BOOLEAN NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "site_active" BOOLEAN NOT NULL +); + + +-- Table: social_auth_association +DROP TABLE IF EXISTS "social_auth_association" CASCADE; +CREATE TABLE "social_auth_association" ( + "id" BIGSERIAL, + "server_url" VARCHAR(255) NOT NULL, + "handle" VARCHAR(255) NOT NULL, + "secret" VARCHAR(255) NOT NULL, + "issued" INTEGER NOT NULL, + "lifetime" INTEGER NOT NULL, + "assoc_type" VARCHAR(64) NOT NULL +); + + +-- Table: social_auth_code +DROP TABLE IF EXISTS "social_auth_code" CASCADE; +CREATE TABLE "social_auth_code" ( + "id" BIGSERIAL, + "email" VARCHAR(254) NOT NULL, + "code" VARCHAR(32) NOT NULL, + "verified" BOOLEAN NOT NULL, + "timestamp" TIMESTAMP WITH TIME ZONE NOT NULL +); + + +-- Table: social_auth_nonce +DROP TABLE IF EXISTS "social_auth_nonce" CASCADE; +CREATE TABLE "social_auth_nonce" ( + "id" BIGSERIAL, + "server_url" VARCHAR(255) NOT NULL, + "timestamp" INTEGER NOT NULL, + "salt" VARCHAR(65) NOT NULL +); + + +-- Table: social_auth_partial +DROP TABLE IF EXISTS "social_auth_partial" CASCADE; +CREATE TABLE "social_auth_partial" ( + "id" BIGSERIAL, + "token" VARCHAR(32) NOT NULL, + "next_step" SMALLINT NOT NULL, + "backend" VARCHAR(32) NOT NULL, + "timestamp" TIMESTAMP WITH TIME ZONE NOT NULL, + "data" JSONB NOT NULL +); + + +-- Table: social_auth_usersocialauth +DROP TABLE IF EXISTS "social_auth_usersocialauth" CASCADE; +CREATE TABLE "social_auth_usersocialauth" ( + "id" BIGSERIAL, + "provider" VARCHAR(32) NOT NULL, + "uid" VARCHAR(255) NOT NULL, + "user_id" BIGINT NOT NULL, + "created" TIMESTAMP WITH TIME ZONE NOT NULL, + "modified" TIMESTAMP WITH TIME ZONE NOT NULL, + "extra_data" JSONB NOT NULL +); + + +-- Table: tags +DROP TABLE IF EXISTS "tags" CASCADE; +CREATE TABLE "tags" ( + "id" BIGSERIAL, + "tag" VARCHAR(254) NOT NULL, + "created_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL, + "is_active" BOOLEAN NOT NULL, + "slug" VARCHAR(50) NOT NULL +); + + +-- Reset sequences +SELECT setval('django_migrations_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_migrations")); +SELECT setval('django_content_type_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_content_type")); +SELECT setval('auth_permission_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "auth_permission")); +SELECT setval('auth_group_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "auth_group")); +SELECT setval('auth_group_permissions_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "auth_group_permissions")); +SELECT setval('accounts_customuser_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "accounts_customuser")); +SELECT setval('accounts_customuser_groups_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "accounts_customuser_groups")); +SELECT setval('accounts_customuser_user_permissions_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "accounts_customuser_user_permissions")); +SELECT setval('django_admin_log_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_admin_log")); +SELECT setval('backup_databasebackup_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "backup_databasebackup")); +SELECT setval('contacts_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "contacts")); +SELECT setval('django_celery_beat_crontabschedule_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_beat_crontabschedule")); +SELECT setval('django_celery_beat_intervalschedule_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_beat_intervalschedule")); +SELECT setval('django_celery_beat_periodictask_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_beat_periodictask")); +SELECT setval('django_celery_beat_solarschedule_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_beat_solarschedule")); +SELECT setval('django_celery_beat_clockedschedule_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_beat_clockedschedule")); +SELECT setval('django_celery_results_taskresult_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_results_taskresult")); +SELECT setval('django_celery_results_chordcounter_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_results_chordcounter")); +SELECT setval('django_celery_results_groupresult_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_celery_results_groupresult")); +SELECT setval('images_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "images")); +SELECT setval('categories_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "categories")); +SELECT setval('tags_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "tags")); +SELECT setval('products_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "products")); +SELECT setval('products_categories_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "products_categories")); +SELECT setval('products_tags_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "products_tags")); +SELECT setval('comments_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "comments")); +SELECT setval('products_gallery_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "products_gallery")); +SELECT setval('banners_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "banners")); +SELECT setval('settings_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "settings")); +SELECT setval('site_settings_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "site_settings")); +SELECT setval('django_site_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "django_site")); +SELECT setval('social_auth_association_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "social_auth_association")); +SELECT setval('social_auth_code_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "social_auth_code")); +SELECT setval('social_auth_nonce_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "social_auth_nonce")); +SELECT setval('social_auth_usersocialauth_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "social_auth_usersocialauth")); +SELECT setval('social_auth_partial_id_seq', (SELECT COALESCE(MAX("id"), 1) FROM "social_auth_partial")); diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/admin.py b/blog/admin.py new file mode 100644 index 0000000..820ce7f --- /dev/null +++ b/blog/admin.py @@ -0,0 +1,197 @@ +from django.contrib import admin +from django.utils.html import format_html +from blog.models import PCategory, Post, PComment, PCategoryView + + +class ChildInline(admin.TabularInline): + """Alt kategorileri inline olarak göster""" + model = PCategory + extra = 0 + fk_name = 'parent' + fields = ('title', 'is_active', 'order', 'slug') + readonly_fields = ('slug',) + + +@admin.register(PCategory) +class PCategoryAdmin(admin.ModelAdmin): + list_display = ('title', 'parent', 'is_active', 'order', 'created_at', 'post_count', 'view_count', 'image_preview') + list_filter = ('is_active', 'created_at', 'parent') + search_fields = ('title', 'keywords', 'description', 'slug') + list_editable = ('order', 'is_active') + prepopulated_fields = {'slug': ('title',)} + readonly_fields = ('created_at', 'updated_at', 'image_preview', 'view_count') + + fieldsets = ( + ('Temel Bilgiler', { + 'fields': ('title', 'parent', 'order', 'is_active') + }), + ('SEO Bilgileri', { + 'fields': ('slug', 'keywords', 'description') + }), + ('Görsel', { + 'fields': ('image', 'image_preview') + }), + ('Tarihler', { + 'fields': ('created_at', 'updated_at'), + 'classes': ('collapse',) + }), + ) + + inlines = [ChildInline] + + def image_preview(self, obj): + if obj.image: + return format_html('', obj.image.url) + return "Resim Yok" + image_preview.short_description = 'Resim Önizleme' + + def post_count(self, obj): + return obj.post_categories.count() + post_count.short_description = 'Post Sayısı' + + def view_count(self, obj): + return obj.category_views.count() + view_count.short_description = 'Görüntülenme' + + def get_queryset(self, request): + queryset = super().get_queryset(request) + queryset = queryset.prefetch_related('post_categories', 'category_views') + return queryset + + +class PostCategoriesInline(admin.TabularInline): + """Post kategorilerini inline olarak göster""" + model = Post.categories.through + extra = 1 + verbose_name = 'Kategori' + verbose_name_plural = 'Kategoriler' + + +@admin.register(Post) +class PostAdmin(admin.ModelAdmin): + list_display = ('title', 'user', 'is_active', 'is_front', 'created_at', 'comment_count', 'image_preview') + list_filter = ('is_active', 'is_front', 'created_at', 'updated_at', 'categories') + search_fields = ('title', 'content', 'keywords', 'slug') + list_editable = ('is_active', 'is_front') + readonly_fields = ('created_at', 'updated_at', 'slug', 'image_preview', 'thumb_preview', 'thumb', 'parent') + filter_horizontal = ('categories',) + + fieldsets = ( + ('Temel Bilgiler', { + 'fields': ('title', 'user', 'content', 'categories') + }), + ('SEO ve Medya', { + 'fields': ('slug', 'keywords', 'video') + }), + ('Görseller', { + 'fields': ('image', 'image_preview', 'thumb_preview'), + 'description': 'Thumb otomatik oluşturulur, image yüklediğinizde.' + }), + ('Durum', { + 'fields': ('is_active', 'is_front', 'parent') + }), + ('Tarihler', { + 'fields': ('created_at', 'updated_at'), + 'classes': ('collapse',) + }), + ) + + def image_preview(self, obj): + if obj.image: + return format_html('', obj.image.url) + return "Resim Yok" + image_preview.short_description = 'Ana Resim Önizleme' + + def thumb_preview(self, obj): + if obj.thumb: + return format_html('', obj.thumb.url) + return "Thumb Yok (Kaydet ve otomatik oluşur)" + thumb_preview.short_description = 'Thumb Önizleme' + + def comment_count(self, obj): + return obj._post.filter(is_active=True).count() + comment_count.short_description = 'Yorum Sayısı' + + def get_queryset(self, request): + queryset = super().get_queryset(request) + queryset = queryset.prefetch_related('categories', '_post').select_related('user') + return queryset + + def save_model(self, request, obj, form, change): + """Post kaydedilirken user otomatik atanabilir""" + if not obj.user: + obj.user = request.user + super().save_model(request, obj, form, change) + + +class ChildCommentInline(admin.TabularInline): + """Alt yorumları inline olarak göster""" + model = PComment + extra = 0 + fk_name = 'parent' + fields = ('user', 'title', 'body', 'is_active') + readonly_fields = ('user',) + + +@admin.register(PComment) +class PCommentAdmin(admin.ModelAdmin): + list_display = ('title', 'user', 'post', 'parent', 'is_active', 'created_at', 'child_count') + list_filter = ('is_active', 'created_at', 'post') + search_fields = ('title', 'body', 'user__username', 'user__email', 'post__title') + list_editable = ('is_active',) + readonly_fields = ('created_at', 'updated_at', 'slug', 'user', 'post') + + fieldsets = ( + ('Yorum Bilgileri', { + 'fields': ('user', 'post', 'parent') + }), + ('İçerik', { + 'fields': ('title', 'body', 'slug') + }), + ('Durum', { + 'fields': ('is_active',) + }), + ('Tarihler', { + 'fields': ('created_at', 'updated_at'), + 'classes': ('collapse',) + }), + ) + + inlines = [ChildCommentInline] + + def child_count(self, obj): + return obj.child.count() + child_count.short_description = 'Alt Yorum Sayısı' + + def get_queryset(self, request): + queryset = super().get_queryset(request) + queryset = queryset.select_related('user', 'post', 'parent').prefetch_related('child') + return queryset + + +@admin.register(PCategoryView) +class PCategoryViewAdmin(admin.ModelAdmin): + list_display = ('category', 'ip_address', 'created_at', 'short_user_agent') + list_filter = ('created_at', 'category') + search_fields = ('ip_address', 'user_agent', 'category__title') + readonly_fields = ('category', 'ip_address', 'user_agent', 'created_at') + date_hierarchy = 'created_at' + + def short_user_agent(self, obj): + if obj.user_agent: + return obj.user_agent[:50] + '...' if len(obj.user_agent) > 50 else obj.user_agent + return '-' + short_user_agent.short_description = 'User Agent' + + def has_add_permission(self, request): + """Kategori ziyaretleri manuel eklenemez""" + return False + + def has_change_permission(self, request, obj=None): + """Kategori ziyaretleri düzenlenemez""" + return False + + def get_queryset(self, request): + queryset = super().get_queryset(request) + queryset = queryset.select_related('category') + return queryset diff --git a/blog/apps.py b/blog/apps.py new file mode 100644 index 0000000..b9a09fd --- /dev/null +++ b/blog/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + name = 'blog' + default_auto_field = 'django.db.models.BigAutoField' + + def ready(self): + import blog.signals diff --git a/blog/management/__init__.py b/blog/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/management/commands/__init__.py b/blog/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/management/commands/create_fake_posts.py b/blog/management/commands/create_fake_posts.py new file mode 100644 index 0000000..0a93d51 --- /dev/null +++ b/blog/management/commands/create_fake_posts.py @@ -0,0 +1,85 @@ +import os +import random +import string +import requests +from django.contrib.auth import get_user_model +from django.core.management.base import BaseCommand +from django.core.files.base import ContentFile +from blog.models import Post, Category, Tags + +try: + from faker import Faker + fake = Faker() + HAS_FAKER = True +except ImportError: + HAS_FAKER = False + +class Command(BaseCommand): + help = 'Creates 300 fake posts with random images' + + def handle(self, *args, **kwargs): + User = get_user_model() + # Prefer an existing staff user, otherwise any existing user, otherwise create a fallback user + user = User.objects.filter(is_staff=True).first() or User.objects.first() + if not user: + self.stdout.write('Hiç kullanıcı bulunamadı, `fakeuser` oluşturuluyor...') + user = User.objects.create(username='fakeuser', email='fake@example.com') + user.set_unusable_password() + user.save() + categories = list(Category.objects.all()) + if not categories: + self.stdout.write(self.style.ERROR('Lütfen önce en az bir kategori oluşturun!')) + return + + tags = list(Tags.objects.all()) + if not tags: + self.stdout.write('Tag bulunamadı, oluşturuluyor...') + for i in range(5): + tag_name = self.get_random_string(8) if not HAS_FAKER else fake.word() + Tags.objects.create(tag=tag_name) + tags = list(Tags.objects.all()) + + self.stdout.write('300 adet fake post oluşturuluyor...') + + for i in range(300): + if HAS_FAKER: + title = fake.sentence(nb_words=6).replace('.', '') + content = '\n\n'.join(fake.paragraphs(nb=5)) + keywords = ", ".join(fake.words(nb=5)) + else: + title = self.get_random_string(30) + content = self.get_random_string(500) + keywords = self.get_random_string(20) + + post = Post( + user=user, + title=title, + content=content, + keywords=keywords, + video='none', + is_active=True, + is_front=True + ) + post.save() + + # ManyToMany ilişkileri + post.categories.add(random.choice(categories)) + post.tags.add(random.choice(tags)) + + # Resim ekle + try: + # Picsum'dan rastgele resim (800x600) + img_url = f"https://picsum.photos/seed/{random.randint(1, 10000)}/800/600" + response = requests.get(img_url, timeout=10) + if response.status_code == 200: + file_name = f"fake_post_{i}_{random.randint(1000,9999)}.jpg" + post.image.save(file_name, ContentFile(response.content), save=True) + self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimli)') + else: + self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimsiz - İndirme hatası)') + except Exception as e: + self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimsiz - Hata: {str(e)})') + + def get_random_string(self, length): + letters = string.ascii_letters + string.digits + ' ' + return ''.join(random.choice(letters) for i in range(length)) diff --git a/blog/management/commands/generate_blog_thumbs.py b/blog/management/commands/generate_blog_thumbs.py new file mode 100644 index 0000000..b3c9789 --- /dev/null +++ b/blog/management/commands/generate_blog_thumbs.py @@ -0,0 +1,38 @@ +from django.core.management.base import BaseCommand +from blog.models import Post + + +class Command(BaseCommand): + help = 'Tüm blog postları için eksik thumb dosyalarını oluşturur' + + def handle(self, *args, **options): + posts = Post.objects.filter(image__isnull=False) + total = posts.count() + created = 0 + skipped = 0 + + self.stdout.write(f'\n{total} post kontrol ediliyor...\n') + + for post in posts: + if not post.thumb: + try: + post.save() # save() metodu thumb'ı otomatik oluşturacak + created += 1 + self.stdout.write( + self.style.SUCCESS(f'✓ Thumb oluşturuldu: {post.title}') + ) + except Exception as e: + self.stdout.write( + self.style.ERROR(f'✗ Hata ({post.title}): {str(e)}') + ) + else: + skipped += 1 + self.stdout.write( + self.style.WARNING(f'- Atlandı (zaten var): {post.title}') + ) + + self.stdout.write( + self.style.SUCCESS( + f'\n✓ Tamamlandı! {created} thumb oluşturuldu, {skipped} atlandı.\n' + ) + ) diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py new file mode 100644 index 0000000..23d4302 --- /dev/null +++ b/blog/migrations/0001_initial.py @@ -0,0 +1,109 @@ +# Generated by Django 6.0 on 2026-01-21 00:59 + +import autoslug.fields +import core.utils +import django.db.models.deletion +import imagekit.models.fields +import tinymce.models +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='PCategory', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Kategori')), + ('keywords', models.CharField(max_length=254, verbose_name='Seo Kelimeleri Aralarına Virgül Koyunuz')), + ('description', models.CharField(max_length=254, verbose_name='Açıklama')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı')), + ('order', models.IntegerField(db_index=True, default=1, verbose_name='Görüntülenme Sırası')), + ('slug', autoslug.fields.AutoSlugField(blank=True, editable=True, max_length=250, populate_from='title', unique=True)), + ('image', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/category'), verbose_name='Resim 630 x 653 Olmali ve Transparan PNG Olmali')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child', to='blog.pcategory', verbose_name='Üst Kategorisi')), + ], + options={ + 'verbose_name': 'Post Kategori', + 'verbose_name_plural': 'Post Kategorilerileri', + 'db_table': 'p_categories', + 'ordering': ['order'], + 'unique_together': {('slug', 'parent')}, + }, + ), + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Post Başlığı')), + ('content', tinymce.models.HTMLField(blank=True, null=True, verbose_name='Post İçeriği')), + ('keywords', models.CharField(max_length=254, verbose_name='Seo Kelimeleri Aralarına Virgül Koyunuz')), + ('image', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/post'))), + ('thumb', imagekit.models.fields.ProcessedImageField(blank=True, editable=False, null=True, upload_to=core.utils.UniquePathAndRename('uploads/post/thumb'))), + ('video', models.CharField(blank=True, default='none', max_length=254, null=True, verbose_name='Video')), + ('slug', autoslug.fields.AutoSlugField(blank=True, editable=True, max_length=250, populate_from='title', unique=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('is_front', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Önde Görünsünmü ?')), + ('categories', models.ManyToManyField(related_name='post_categories', to='blog.pcategory', verbose_name='Post Kategorisi')), + ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child', to='blog.post', verbose_name='Konular')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='posts', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Post', + 'verbose_name_plural': 'Posts', + 'db_table': 'posts', + 'ordering': ['created_at'], + 'unique_together': {('slug',)}, + }, + ), + migrations.CreateModel( + name='PCategoryView', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ip_address', models.GenericIPAddressField(verbose_name='IP Adresi')), + ('user_agent', models.TextField(blank=True, null=True, verbose_name='User Agent')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Ziyaret Tarihi')), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_views', to='blog.pcategory')), + ], + options={ + 'verbose_name': 'Kategori Ziyareti', + 'verbose_name_plural': 'Kategori Ziyaretleri', + 'db_table': 'p_category_views', + 'indexes': [models.Index(fields=['category', 'ip_address', 'created_at'], name='p_category__categor_8efae6_idx')], + }, + ), + migrations.CreateModel( + name='PComment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Yorum Başlığı')), + ('body', models.TextField(verbose_name='Yorum')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child', to='blog.pcomment')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='_cuser', to=settings.AUTH_USER_MODEL)), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='_post', to='blog.post')), + ], + options={ + 'verbose_name': 'Post Yorum', + 'verbose_name_plural': 'Post Yorumları', + 'db_table': 'p_comments', + 'ordering': ['-created_at'], + 'unique_together': {('slug', 'parent')}, + }, + ), + ] diff --git a/blog/migrations/__init__.py b/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/models.py b/blog/models.py new file mode 100644 index 0000000..dbcc64f --- /dev/null +++ b/blog/models.py @@ -0,0 +1,216 @@ +import os +from autoslug import AutoSlugField +from django.conf import settings +from django.core.files.base import ContentFile +from django.db import models +from imagekit.models import ProcessedImageField +from tinymce.models import HTMLField + +from core.utils import image_optimizer + + +# Create your models here. +class PCategory(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + title = models.CharField(max_length=254, verbose_name="Kategori") + keywords = models.CharField(max_length=254, verbose_name="Seo Kelimeleri Aralarına Virgül Koyunuz") + description = models.CharField(max_length=254, verbose_name="Açıklama") + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı', choices=aktif) + order = models.IntegerField(verbose_name='Görüntülenme Sırası', default=1, db_index=True) + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=True, db_index=True, max_length=250, + blank=True) + parent = models.ForeignKey('self', related_name='child', on_delete=models.CASCADE, blank=True, null=True, + verbose_name='Üst Kategorisi') + image = ProcessedImageField(**image_optimizer('uploads/category', 300, 300, 85, 'PNG'), + verbose_name='Resim 630 x 653 Olmali ve Transparan PNG Olmali', blank=True, null=True) + + class Meta: + ordering = ["order"] + db_table = 'p_categories' + verbose_name_plural = "Post Kategorilerileri" + verbose_name = "Post Kategori" + unique_together = ('slug', 'parent',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while PCategory.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + super().save(*args, **kwargs) + + def __str__(self): + full_path = [self.title] + k = self.parent + while k is not None: + full_path.append(k.title) + k = k.parent + return ' -> '.join(full_path[::-1]) + + + + + +class Post(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + + title = models.CharField(max_length=254, verbose_name="Post Başlığı") + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts', null=True, blank=True) + content = HTMLField(blank=True, null=True, verbose_name='Post İçeriği') + categories = models.ManyToManyField(PCategory, verbose_name="Post Kategorisi", related_name='post_categories') + keywords = models.CharField(max_length=254, verbose_name="Seo Kelimeleri Aralarına Virgül Koyunuz") + image = ProcessedImageField(**image_optimizer('uploads/post', 840, 500, 85, 'avif'), null=True, blank=True) + thumb = ProcessedImageField(**image_optimizer('uploads/post/thumb', 348, 160, 85, 'avif'), null=True, blank=True,editable=False) + + video = models.CharField(verbose_name="Video", null=True, blank=True, max_length=254, default='none') + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=True, db_index=True, max_length=250, + blank=True) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + is_front = models.BooleanField(default=True, verbose_name='Önde Görünsünmü ?', choices=aktif) + parent = models.ForeignKey('self', related_name='child', on_delete=models.CASCADE, blank=True, null=True, + editable=False, + verbose_name='Konular') + + class Meta: + ordering = ["created_at"] + db_table = 'posts' + verbose_name_plural = "Posts" + verbose_name = "Post" + unique_together = ('slug',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while Post.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + + if self.image: + # Eğer yeni bir kayıt ise veya resim değişmişse veya thumb yoksa + update_thumb = False + if not self.pk: + update_thumb = True + elif not self.thumb: + # Thumb yoksa oluştur + update_thumb = True + else: + try: + old_instance = self.__class__.objects.get(pk=self.pk) + if self.image != old_instance.image: + update_thumb = True + except self.__class__.DoesNotExist: + pass + + if update_thumb: + try: + if hasattr(self.image, 'closed') and self.image.closed: + self.image.open() + + if hasattr(self.image, 'seek'): + self.image.seek(0) + + content = self.image.read() + filename = os.path.basename(self.image.name) + + # Doğrudan alana ata, super().save() işleyecek + self.thumb = ContentFile(content, name=filename) + except Exception: + pass + finally: + if hasattr(self.image, 'seek'): + self.image.seek(0) + + super().save(*args, **kwargs) + + def __str__(self): + return f"Postlar: {self.title}" + + +class PCategoryView(models.Model): + """Kategori ziyaretlerini takip etmek için model""" + category = models.ForeignKey(PCategory, on_delete=models.CASCADE, related_name='category_views') + ip_address = models.GenericIPAddressField(verbose_name='IP Adresi') + user_agent = models.TextField(blank=True, null=True, verbose_name='User Agent') + created_at = models.DateTimeField(auto_now_add=True, verbose_name='Ziyaret Tarihi') + + class Meta: + db_table = 'p_category_views' + verbose_name = 'Kategori Ziyareti' + verbose_name_plural = 'Kategori Ziyaretleri' + # unique_together kısıtlamasını kaldırdık - artık günlük bazda kontrol edeceğiz + indexes = [ + models.Index(fields=['category', 'ip_address', 'created_at']), + ] + + def __str__(self): + return f"{self.category.title} - {self.ip_address} - {self.created_at.strftime('%Y-%m-%d %H:%M')}" + + +class PComment(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='_cuser') + post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='_post') + title = models.CharField(max_length=254, verbose_name="Yorum Başlığı") + body = models.TextField(verbose_name='Yorum') + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı', choices=aktif) + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=False, db_index=True) + parent = models.ForeignKey('self', related_name='child', on_delete=models.CASCADE, blank=True, null=True) + + class Meta: + ordering = ["-created_at"] + db_table = 'p_comments' + verbose_name_plural = "Post Yorumları" + verbose_name = "Post Yorum" + unique_together = ('slug', 'parent',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while Comment.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + + if self.parent: + self.post = self.parent.post + if self.parent.parent: + self.parent = self.parent.parent + + super().save(*args, **kwargs) + + def __str__(self): + full_path = [self.title] + k = self.parent + while k is not None: + full_path.append(k.title) + k = k.parent + return ' -> '.join(full_path[::-1]) diff --git a/blog/serializers.py b/blog/serializers.py new file mode 100644 index 0000000..ecc6856 --- /dev/null +++ b/blog/serializers.py @@ -0,0 +1,153 @@ +from rest_framework import serializers + +from blog.models import PCategory, Post, PComment +from blog.tasks import send_comment_notification_email + + +class CateSerializer(serializers.ModelSerializer): + parent = serializers.StringRelatedField() # ID yerine __str__ metodundaki değeri döndürür + + class Meta: + model = PCategory + fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description'] + + + + +class CommentSerializer(serializers.ModelSerializer): + child = serializers.SerializerMethodField() + user = serializers.StringRelatedField(read_only=True) + + class Meta: + model = PComment + fields = ['id', 'user', 'post', 'title', 'body', 'created_at', 'slug', 'parent', 'child'] + read_only_fields = ['slug', 'created_at', 'user'] + + def get_child(self, obj): + # Sadece aktif alt yorumları getir + children = obj.child.filter(is_active=True).order_by('created_at') + return CommentSerializer(children, many=True).data + + def create(self, validated_data): + # Kullanıcıyı request'ten al + request = self.context.get('request') + if request and hasattr(request, 'user'): + validated_data['user'] = request.user + + instance = super().create(validated_data) + + # Celery task'ini tetikle + # Kullanıcı email'i varsa al, yoksa username kullan + user_email = instance.user.email if instance.user.email else instance.user.username + + send_comment_notification_email.delay( + comment_title=instance.title, + comment_body=instance.body, + post_title=instance.post.title, + user_email=user_email + ) + + return instance + + +class PostSerializer(serializers.ModelSerializer): + categories = CateSerializer(read_only=True, many=True) + comments = serializers.SerializerMethodField() + image = serializers.SerializerMethodField() + thumb = serializers.SerializerMethodField() + + class Meta: + model = Post + fields = ['id','title', 'content', 'categories', 'keywords', 'image', 'thumb', 'video', + 'slug', 'created_at', 'updated_at', 'is_active', 'is_front', 'comments'] + # fields = '__all__' + + def get_image(self, obj): + if obj.image: + # Sadece path kısmını döndür (media/ ile başlayan kısım) + url = obj.image.url + # URL'de domain varsa çıkar, yoksa olduğu gibi döndür + if 'http://' in url or 'https://' in url: + # URL'den sadece path kısmını al + from urllib.parse import urlparse + parsed = urlparse(url) + return parsed.path + return url + return None + + def get_thumb(self, obj): + if obj.thumb: + # Sadece path kısmını döndür (media/ ile başlayan kısım) + url = obj.thumb.url + # URL'de domain varsa çıkar, yoksa olduğu gibi döndür + if 'http://' in url or 'https://' in url: + # URL'den sadece path kısmını al + from urllib.parse import urlparse + parsed = urlparse(url) + return parsed.path + return url + return None + + def get_comments(self, obj): + # Sadece ana yorumları (parent=None) ve aktif olanları getir + comments = obj._post.filter(parent__isnull=True, is_active=True).order_by('-created_at') + return CommentSerializer(comments, many=True).data + + +class PostSYalinerializer(serializers.ModelSerializer): + class Meta: + model = Post + fields = ['slug', ] + # fields = '__all__' + + +class CategorySerializer(serializers.ModelSerializer): + + posts = PostSYalinerializer(source='c_categories', read_only=True, many=True) + child = serializers.SerializerMethodField() + + class Meta: + model = PCategory + fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description', + 'posts', 'child'] + + def get_child(self, obj): + serializer = self.__class__(obj.child.all(), many=True, context=self.context) + return serializer.data + + +class CategoryPostSerializer(serializers.ModelSerializer): + + posts = serializers.SerializerMethodField() + child = serializers.SerializerMethodField() + + class Meta: + model = PCategory + fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description', + 'posts', 'child'] + + def get_posts(self, obj): + # Pagination context'ini al + paginator = self.context.get('paginator') + request = self.context.get('request') + + posts = obj.c_categories.all() + + if paginator and request: + # Pagination uygula + paginated_posts = paginator.paginate_queryset(posts, request) + serializer = PostSerializer(paginated_posts, many=True, context=self.context) + return { + 'results': serializer.data, + 'count': posts.count(), + 'next': paginator.get_next_link(), + 'previous': paginator.get_previous_link(), + } + else: + # Pagination yoksa normal döndür + serializer = PostSerializer(posts, many=True, context=self.context) + return serializer.data + + def get_child(self, obj): + serializer = self.__class__(obj.child.all(), many=True, context=self.context) + return serializer.data \ No newline at end of file diff --git a/blog/signals.py b/blog/signals.py new file mode 100644 index 0000000..7fa83b9 --- /dev/null +++ b/blog/signals.py @@ -0,0 +1,52 @@ +from django.db.models.signals import pre_save +from django.dispatch import receiver +from django.core.files.base import ContentFile +from .models import Post + + +@receiver(pre_save, sender=Post) +def update_post_thumb(sender, instance, **kwargs): + """ + Post kaydedilmeden önce, image alanı doluysa thumb'ı da güncelle + """ + if instance.image: + # Yeni kayıt veya image güncellenmiş mi kontrol et + should_update_thumb = False + + if instance.pk: + try: + old_instance = Post.objects.get(pk=instance.pk) + # Image değişmişse thumb'ı da güncelle + if str(old_instance.image) != str(instance.image): + should_update_thumb = True + except Post.DoesNotExist: + # Kayıt bulunamadı, yeni kayıt gibi davran + should_update_thumb = True + else: + # Yeni kayıt (pk yok) + should_update_thumb = True + + if should_update_thumb and hasattr(instance.image, 'file'): + # Image dosyasını thumb alanına kopyala + try: + # Image dosyasının içeriğini oku + instance.image.file.seek(0) + image_content = instance.image.file.read() + instance.image.file.seek(0) + + # Dosya adını al + image_name = instance.image.name.split('/')[-1] + + # Thumb alanına kaydet + instance.thumb.save( + image_name, + ContentFile(image_content), + save=False + ) + except Exception as e: + print(f"Thumb oluşturma hatası: {e}") + import traceback + traceback.print_exc() + + + diff --git a/blog/tasks.py b/blog/tasks.py new file mode 100644 index 0000000..8ad70bb --- /dev/null +++ b/blog/tasks.py @@ -0,0 +1,40 @@ +from celery import shared_task +from django.core.mail import send_mail +from django.conf import settings + +@shared_task +def send_comment_notification_email(comment_title, comment_body, post_title, user_email): + """ + Yeni bir yorum yapıldığında admin'e e-posta gönderir. + """ + subject = f'Yeni Yorum: {post_title}' + message = f""" + Merhaba Admin, + + "{post_title}" başlıklı yazıya yeni bir yorum yapıldı. + + Yorum Yapan: {user_email} + Başlık: {comment_title} + Yorum: {comment_body} + + Kontrol etmek için admin paneline giriş yapabilirsiniz. + """ + + # Admin e-posta adresini settings'den veya doğrudan buraya yazabilirsiniz + # Örnek olarak settings.DEFAULT_FROM_EMAIL kullanıldı, admin listesi de kullanılabilir + admin_email = settings.DEFAULT_FROM_EMAIL + + # Eğer settings.ADMINS tanımlıysa oradaki ilk kişiye de atılabilir + if hasattr(settings, 'ADMINS') and settings.ADMINS: + recipient_list = [email for name, email in settings.ADMINS] + else: + # Fallback olarak bir email + recipient_list = ['admin@example.com'] + + send_mail( + subject, + message, + settings.DEFAULT_FROM_EMAIL, + recipient_list, + fail_silently=False, + ) diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blog/urls.py b/blog/urls.py new file mode 100644 index 0000000..d3f0d32 --- /dev/null +++ b/blog/urls.py @@ -0,0 +1,11 @@ +from django.urls import path + +from blog.views import CategoryList, CategoryDetail, PostDetail, PostList, CommentCreate + +urlpatterns = [ + path('categories/', CategoryList.as_view(), name='categories.list'), + path('categories//', CategoryDetail.as_view(), name='categories.details'), + path('post/', PostList.as_view(), name='post.list'), + path('post//', PostDetail.as_view(), name='post.details'), + path('comment/create/', CommentCreate.as_view(), name='comment.create'), +] diff --git a/blog/views.py b/blog/views.py new file mode 100644 index 0000000..744e9f3 --- /dev/null +++ b/blog/views.py @@ -0,0 +1,53 @@ +from rest_framework.generics import ListAPIView, RetrieveAPIView, CreateAPIView +from rest_framework.pagination import PageNumberPagination +from rest_framework.permissions import IsAuthenticated + +from blog.models import Post, PCategory, PComment +from blog.serializers import PostSerializer, CategorySerializer, CategoryPostSerializer, CommentSerializer +from core.Permission import ReadOnly + + +class StandardResultsSetPagination(PageNumberPagination): + page_size = 10 + page_size_query_param = 'page_size' + max_page_size = 100 + + +# Create your views here. +class CategoryList(ListAPIView): + permission_classes = [ReadOnly] + queryset = PCategory.objects.order_by('order').filter(is_active=True, parent__isnull=True).all() + serializer_class = CategorySerializer + + +class CategoryDetail(RetrieveAPIView): + permission_classes = [ReadOnly] + queryset = PCategory.objects.order_by('order').filter(is_active=True).all() + serializer_class = CategoryPostSerializer + lookup_field = 'slug' # Slug ile arama yapılacak + + def get_serializer_context(self): + context = super().get_serializer_context() + context['paginator'] = StandardResultsSetPagination() + return context + + +# Create your views here. +class PostList(ListAPIView): + permission_classes = [ReadOnly] + queryset = Post.objects.all() + serializer_class = PostSerializer + pagination_class = StandardResultsSetPagination + + +class PostDetail(RetrieveAPIView): + permission_classes = [ReadOnly] + queryset = Post.objects.all() + serializer_class = PostSerializer + lookup_field = 'slug' # Slug ile arama yapılacak + + +class CommentCreate(CreateAPIView): + queryset = PComment.objects.all() + serializer_class = CommentSerializer + permission_classes = [IsAuthenticated] diff --git a/cart/API_DOCS.md b/cart/API_DOCS.md new file mode 100644 index 0000000..ebc05d9 --- /dev/null +++ b/cart/API_DOCS.md @@ -0,0 +1,140 @@ +# Sepet (Cart) API Kullanım Kılavuzu + +Bu doküman, alışveriş sepeti (Shopping Cart) API'sinin nasıl kullanılacağını, uç noktaları (endpoints), istek parametrelerini ve örnek senaryoları içerir. + +## Genel Bilgiler + +- **Base URL:** `/api/v1/cart/` +- **Mantık:** Sepet, sunucu tarafında **Session (Oturum)** tabanlı çalışır. +- **Önemli Not:** İstemci (Frontend/Mobile), sunucudan dönen `sessionid` çerezini (cookie) saklamalı ve sonraki tüm isteklerde header içinde geri göndermelidir. Aksi takdirde her istekte yeni, boş bir sepet oluşturulur. + +--- + +## Uç Noktalar (Endpoints) + +### 1. Sepeti Görüntüle + +Mevcut sepetin içeriğini ve toplam tutarını getirir. + +- **URL:** `/api/v1/cart/` +- **Method:** `GET` + +**Örnek Yanıt:** +```json +{ + "items": [ + { + "product": { + "id": 1, + "title": "Örnek Ürün", + "price": 100.00, + "images": "http://localhost:8000/media/...", + ... + }, + "quantity": 2, + "price": "100.00", + "total_price": "200.00" + } + ], + "total_price": "200.00" +} +``` + +--- + +### 2. Sepete Ürün Ekle / Güncelle + +Sepete yeni bir ürün ekler veya mevcut ürünün miktarını değiştirir. + +- **URL:** `/api/v1/cart/add/` +- **Method:** `POST` + +**Parametreler (Body - JSON):** + +| Parametre | Tip | Zorunlu | Açıklama | +|-----------|-----|---------|----------| +| `product_id` | Integer | Evet | Eklenecek ürünün ID'si. | +| `quantity` | Integer | Hayır | Miktar (Varsayılan: 1). | +| `override_quantity` | Boolean | Hayır | `true` ise miktarı direkt eşitler, `false` ise mevcut miktarın üzerine ekler (Varsayılan: `false`). | + +#### Senaryo A: Sepete Ürün Ekleme (veya Miktar Artırma) +Mevcut miktarın üzerine ekler. (Örn: Sepette 1 tane var, 2 tane daha ekle = 3 olur). + +**İstek:** +```json +{ + "product_id": 1, + "quantity": 2, + "override_quantity": false +} +``` + +#### Senaryo B: Miktarı Güncelleme / Azaltma +Miktarı direkt olarak belirtilen sayıya eşitler. (Örn: Sepette 5 tane var, 4'e düşürmek istiyorsunuz). + +**İstek:** +```json +{ + "product_id": 1, + "quantity": 4, + "override_quantity": true +} +``` + +#### Senaryo C: Miktarı Sıfırlayarak Silme +Eğer `override_quantity: true` iken `quantity: 0` gönderirseniz, ürün sepetten silinir. + +**İstek:** +```json +{ + "product_id": 1, + "quantity": 0, + "override_quantity": true +} +``` + +--- + +### 3. Sepetten Ürün Silme + +Belirli bir ürünü sepetten tamamen kaldırır. + +- **URL:** `/api/v1/cart/remove//` +- **Method:** `DELETE` + +**Örnek:** `/api/v1/cart/remove/1/` + +**Yanıt:** Güncel sepet içeriğini döndürür (Ekleme işlemiyle aynı formatta). + +--- + +### 4. Sepeti Temizle + +Sepetteki tüm ürünleri siler. + +- **URL:** `/api/v1/cart/clear/` +- **Method:** `POST` + +**Yanıt:** +```json +{ + "message": "Cart cleared" +} +``` + +--- + +## Frontend Entegrasyonu İçin İpuçları (React/Vue/Mobile) + +1. **Cookie Yönetimi:** Axios veya Fetch kullanırken `credentials: 'include'` veya `withCredentials: true` ayarının açık olduğundan emin olun. Bu, Django'nun session cookie'sini tarayıcının saklamasını ve göndermesini sağlar. + + ```javascript + // Axios Örneği + axios.post('/api/v1/cart/add/', data, { + withCredentials: true + }); + ``` + +2. **Ürün Detayları:** Sepet yanıtı (`items` dizisi) içindeki `product` objesi, `ProductSerializer`'dan gelen tüm veriyi (resim, slug, başlık vb.) içerir. Ekstra bir istek atmanıza gerek yoktur. + +3. **Toplam Fiyat:** Sepet toplamı `total_price` alanında string decimal olarak gelir (Örn: "1250.50"). Frontend'de gösterirken formatlamanız gerekebilir. diff --git a/cart/__init__.py b/cart/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cart/admin.py b/cart/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/cart/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/cart/apps.py b/cart/apps.py new file mode 100644 index 0000000..12247bb --- /dev/null +++ b/cart/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class CartConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'cart' + + def ready(self): + import cart.signals diff --git a/cart/cart.py b/cart/cart.py new file mode 100644 index 0000000..5da6557 --- /dev/null +++ b/cart/cart.py @@ -0,0 +1,127 @@ +from decimal import Decimal +from django.conf import settings +from product.models import Product +from .models import Cart as CartModel, CartItem + +class Cart(object): + def __init__(self, request): + """ + Initialize the cart. + """ + self.session = request.session + self.user = request.user + + # Session cart initialization + cart = self.session.get(settings.CART_SESSION_ID) + if not cart: + cart = self.session[settings.CART_SESSION_ID] = {} + self.cart = cart + + def add(self, product, quantity=1, override_quantity=False): + """ + Add a product to the cart or update its quantity. + """ + if self.user.is_authenticated: + self._add_db(product, quantity, override_quantity) + else: + self._add_session(product, quantity, override_quantity) + + def _add_session(self, product, quantity, override_quantity): + product_id = str(product.id) + if product_id not in self.cart: + self.cart[product_id] = {'quantity': 0, 'price': str(product.price)} + + if override_quantity: + self.cart[product_id]['quantity'] = quantity + else: + self.cart[product_id]['quantity'] += quantity + + if self.cart[product_id]['quantity'] <= 0: + self.remove(product) + else: + self.save() + + def _add_db(self, product, quantity, override_quantity): + cart, created = CartModel.objects.get_or_create(user=self.user) + cart_item, item_created = CartItem.objects.get_or_create(cart=cart, product=product) + + if override_quantity: + cart_item.quantity = quantity + else: + if not item_created: + cart_item.quantity += quantity + else: + cart_item.quantity = quantity # Yeni oluşturulduysa zaten default 1 değil, gelen quantity olmalı + + if cart_item.quantity <= 0: + cart_item.delete() + else: + cart_item.save() + + def save(self): + # mark the session as "modified" to make sure it gets saved + self.session.modified = True + + def remove(self, product): + """ + Remove a product from the cart. + """ + if self.user.is_authenticated: + CartItem.objects.filter(cart__user=self.user, product=product).delete() + else: + product_id = str(product.id) + if product_id in self.cart: + del self.cart[product_id] + self.save() + + def __iter__(self): + """ + Iterate over the items in the cart and get the products + from the database. + """ + if self.user.is_authenticated: + # DB'den oku + cart, created = CartModel.objects.get_or_create(user=self.user) + for item in cart.items.select_related('product').all(): + yield { + 'product': item.product, + 'quantity': item.quantity, + 'price': Decimal(item.product.price), + 'total_price': Decimal(item.product.price) * item.quantity + } + else: + # Session'dan oku + product_ids = self.cart.keys() + products = Product.objects.filter(id__in=product_ids) + cart = self.cart.copy() + for product in products: + cart[str(product.id)]['product'] = product + for item in cart.values(): + item['price'] = Decimal(item['price']) + item['total_price'] = item['price'] * item['quantity'] + yield item + + def __len__(self): + """ + Count all items in the cart. + """ + if self.user.is_authenticated: + cart, created = CartModel.objects.get_or_create(user=self.user) + return sum(item.quantity for item in cart.items.all()) + else: + return sum(item['quantity'] for item in self.cart.values()) + + def get_total_price(self): + if self.user.is_authenticated: + cart, created = CartModel.objects.get_or_create(user=self.user) + return sum(item.total_price for item in cart.items.all()) + else: + return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values()) + + def clear(self): + if self.user.is_authenticated: + cart, created = CartModel.objects.get_or_create(user=self.user) + cart.items.all().delete() + else: + del self.session[settings.CART_SESSION_ID] + self.save() diff --git a/cart/context_processors.py b/cart/context_processors.py new file mode 100644 index 0000000..b1e456b --- /dev/null +++ b/cart/context_processors.py @@ -0,0 +1,4 @@ +from .cart import Cart + +def cart(request): + return {'cart': Cart(request)} diff --git a/cart/forms.py b/cart/forms.py new file mode 100644 index 0000000..da11c5e --- /dev/null +++ b/cart/forms.py @@ -0,0 +1,11 @@ +from django import forms + +PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 21)] + +class CartAddProductForm(forms.Form): + quantity = forms.TypedChoiceField( + choices=PRODUCT_QUANTITY_CHOICES, + coerce=int) + override = forms.BooleanField(required=False, + initial=False, + widget=forms.HiddenInput) diff --git a/cart/migrations/0001_initial.py b/cart/migrations/0001_initial.py new file mode 100644 index 0000000..0701aca --- /dev/null +++ b/cart/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 6.0 on 2026-01-19 14:31 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('product', '0022_alter_product_content_alter_product_images'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Cart', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='cart', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='CartItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.PositiveIntegerField(default=1)), + ('cart', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='cart.cart')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='product.product')), + ], + options={ + 'unique_together': {('cart', 'product')}, + }, + ), + ] diff --git a/cart/migrations/__init__.py b/cart/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cart/models.py b/cart/models.py new file mode 100644 index 0000000..7d141d4 --- /dev/null +++ b/cart/models.py @@ -0,0 +1,33 @@ +from django.db import models +from django.conf import settings +from product.models import Product + +class Cart(models.Model): + user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='cart') + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return f"{self.user.email} - Cart" + + def get_total_price(self): + return sum(item.total_price for item in self.items.all()) + +class CartItem(models.Model): + cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='items') + product = models.ForeignKey(Product, on_delete=models.CASCADE) + quantity = models.PositiveIntegerField(default=1) + + class Meta: + unique_together = ('cart', 'product') + + def __str__(self): + return f"{self.cart.user.email} - {self.product.title}" + + @property + def price(self): + return self.product.price + + @property + def total_price(self): + return self.price * self.quantity diff --git a/cart/serializers.py b/cart/serializers.py new file mode 100644 index 0000000..1044786 --- /dev/null +++ b/cart/serializers.py @@ -0,0 +1,25 @@ +from rest_framework import serializers +from product.models import Product +from product.serializers import ProductSerializer + +# CartItemSerializer artık hem dict (session) hem de model instance (db) ile çalışabilmeli. +# Serializer'lar varsayılan olarak object attribute'larına erişir. +# Dict erişimi için source kullanabiliriz veya to_representation override edebiliriz. +# Ancak en temizi, view tarafında veriyi standart bir yapıya (list of dicts) dönüştürüp serializer'a vermektir. +# Cart sınıfındaki __iter__ metodu zaten bunu yapıyor (hem DB hem Session için dict döndürüyor). +# Bu yüzden mevcut serializer yapısını koruyabiliriz. + +class CartItemSerializer(serializers.Serializer): + product = ProductSerializer(read_only=True) + quantity = serializers.IntegerField() + price = serializers.DecimalField(max_digits=10, decimal_places=2) + total_price = serializers.DecimalField(max_digits=10, decimal_places=2) + +class CartSerializer(serializers.Serializer): + items = CartItemSerializer(many=True, read_only=True) + total_price = serializers.DecimalField(max_digits=10, decimal_places=2) + +class CartAddProductSerializer(serializers.Serializer): + product_id = serializers.IntegerField() + quantity = serializers.IntegerField(min_value=0, default=1) + override_quantity = serializers.BooleanField(required=False, default=False) diff --git a/cart/signals.py b/cart/signals.py new file mode 100644 index 0000000..5270cf8 --- /dev/null +++ b/cart/signals.py @@ -0,0 +1,39 @@ +from django.contrib.auth.signals import user_logged_in +from django.dispatch import receiver +from django.conf import settings +from .models import Cart, CartItem +from product.models import Product + +@receiver(user_logged_in) +def merge_cart_on_login(sender, user, request, **kwargs): + """ + Kullanıcı giriş yaptığında session sepetini veritabanı sepetiyle birleştirir. + """ + session_cart = request.session.get(settings.CART_SESSION_ID) + + if session_cart: + # Kullanıcının DB sepetini al veya oluştur + db_cart, created = Cart.objects.get_or_create(user=user) + + for product_id, item_data in session_cart.items(): + quantity = item_data['quantity'] + product = Product.objects.get(id=product_id) + + # Ürün zaten DB sepetinde var mı? + cart_item, item_created = CartItem.objects.get_or_create(cart=db_cart, product=product) + + if not item_created: + # Varsa miktarı artır + cart_item.quantity += quantity + else: + # Yoksa miktarı ayarla (default 1 olduğu için üzerine eklemiyoruz, direkt atıyoruz ama get_or_create default ile oluşturduysa quantity 1 olabilir, o yüzden dikkat) + # get_or_create default=1 ile oluşturur. Biz session'dan geleni kullanmalıyız. + # Ancak item_created True ise yeni oluştu demektir ve default değeri almıştır. + # Bizim session'daki quantity'yi atamamız lazım. + cart_item.quantity = quantity + + cart_item.save() + + # Session sepetini temizle + del request.session[settings.CART_SESSION_ID] + request.session.modified = True diff --git a/cart/tests.py b/cart/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/cart/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/cart/urls.py b/cart/urls.py new file mode 100644 index 0000000..c8aeaf0 --- /dev/null +++ b/cart/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + +app_name = 'cart' + +urlpatterns = [ + path('', views.CartDetailView.as_view(), name='cart_detail'), + path('add/', views.CartAddView.as_view(), name='cart_add'), + path('remove//', views.CartRemoveView.as_view(), name='cart_remove'), + path('clear/', views.CartClearView.as_view(), name='cart_clear'), +] diff --git a/cart/views.py b/cart/views.py new file mode 100644 index 0000000..8afa03d --- /dev/null +++ b/cart/views.py @@ -0,0 +1,66 @@ +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status +from django.shortcuts import get_object_or_404 +from product.models import Product +from .cart import Cart +from .serializers import CartSerializer, CartAddProductSerializer + +class CartDetailView(APIView): + def get(self, request): + cart = Cart(request) + # Cart.__iter__ zaten dict döndürüyor, direkt listeye çevirebiliriz. + cart_items = list(cart) + + data = { + 'items': cart_items, + 'total_price': cart.get_total_price() + } + + serializer = CartSerializer(data) + return Response(serializer.data) + +class CartAddView(APIView): + def post(self, request): + serializer = CartAddProductSerializer(data=request.data) + if serializer.is_valid(): + product_id = serializer.validated_data['product_id'] + quantity = serializer.validated_data['quantity'] + override_quantity = serializer.validated_data['override_quantity'] + + product = get_object_or_404(Product, id=product_id) + cart = Cart(request) + cart.add(product=product, quantity=quantity, override_quantity=override_quantity) + + # Güncel sepeti döndür + cart_items = list(cart) + + data = { + 'items': cart_items, + 'total_price': cart.get_total_price() + } + + return Response(CartSerializer(data).data, status=status.HTTP_200_OK) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + +class CartRemoveView(APIView): + def delete(self, request, product_id): + product = get_object_or_404(Product, id=product_id) + cart = Cart(request) + cart.remove(product) + + # Güncel sepeti döndür + cart_items = list(cart) + + data = { + 'items': cart_items, + 'total_price': cart.get_total_price() + } + + return Response(CartSerializer(data).data, status=status.HTTP_200_OK) + +class CartClearView(APIView): + def post(self, request): + cart = Cart(request) + cart.clear() + return Response({'message': 'Cart cleared'}, status=status.HTTP_200_OK) diff --git a/client_secret_2_915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com.json b/client_secret_2_915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com.json new file mode 100644 index 0000000..0a450e2 --- /dev/null +++ b/client_secret_2_915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com.json @@ -0,0 +1 @@ +{"web":{"client_id":"915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com","project_id":"django-471018","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["http://localhost:3000/api/auth/callback/google","http://localhost:8000/api/auth/callback/google","http://127.0.0.1:8000/api/auth/callback/google","http://127.0.0.1:3000/api/auth/callback/google","http://127.0.0.1:8000/accounts/auth/google/login/callback/","http://127.0.0.1:8000/auth/google/callback/","http://localhost:8000/auth/google/callback/","http://localhost:3000/auth/google","http://localhost:8000/auth/google"],"javascript_origins":["http://localhost:3000","http://localhost:8000","http://127.0.0.1:8000","http://127.0.0.1:3000"]}} \ No newline at end of file diff --git a/contact/__init__.py b/contact/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/contact/admin.py b/contact/admin.py new file mode 100644 index 0000000..5855507 --- /dev/null +++ b/contact/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin +from .models import Contact + +# Register your models here. +class ContactAdmin(admin.ModelAdmin): + list_display = ('name', 'email', 'subject', 'created_at') + list_filter = ('created_at',) + search_fields = ('name', 'email', 'subject', 'message') + readonly_fields = ('created_at', 'updated_at') + +admin.site.register(Contact, ContactAdmin) diff --git a/contact/apps.py b/contact/apps.py new file mode 100644 index 0000000..1f23179 --- /dev/null +++ b/contact/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ContactConfig(AppConfig): + name = 'contact' diff --git a/contact/migrations/0001_initial.py b/contact/migrations/0001_initial.py new file mode 100644 index 0000000..1755a68 --- /dev/null +++ b/contact/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 6.0 on 2026-01-15 11:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Contact', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=254, verbose_name='Ad Soyad ')), + ('email', models.CharField(max_length=254, verbose_name='Eposta Adresi ')), + ('subject', models.CharField(max_length=254, verbose_name='Konu ')), + ('message', models.CharField(max_length=254, verbose_name='Mesaj ')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ], + options={ + 'verbose_name': 'Contact', + 'verbose_name_plural': 'Contact', + 'db_table': 'contacts', + 'ordering': ['created_at'], + }, + ), + ] diff --git a/contact/migrations/0002_contact_user.py b/contact/migrations/0002_contact_user.py new file mode 100644 index 0000000..c9ed874 --- /dev/null +++ b/contact/migrations/0002_contact_user.py @@ -0,0 +1,22 @@ +# Generated by Django 6.0 on 2026-01-15 12:39 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contact', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='contact', + name='user', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Kullanıcı'), + preserve_default=False, + ), + ] diff --git a/contact/migrations/0003_alter_contact_message.py b/contact/migrations/0003_alter_contact_message.py new file mode 100644 index 0000000..f947e37 --- /dev/null +++ b/contact/migrations/0003_alter_contact_message.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0 on 2026-01-15 12:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contact', '0002_contact_user'), + ] + + operations = [ + migrations.AlterField( + model_name='contact', + name='message', + field=models.TextField(verbose_name='Mesaj '), + ), + ] diff --git a/contact/migrations/0004_contact_ip.py b/contact/migrations/0004_contact_ip.py new file mode 100644 index 0000000..51237fa --- /dev/null +++ b/contact/migrations/0004_contact_ip.py @@ -0,0 +1,19 @@ +# Generated by Django 6.0 on 2026-01-15 13:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contact', '0003_alter_contact_message'), + ] + + operations = [ + migrations.AddField( + model_name='contact', + name='ip', + field=models.CharField(default=123, max_length=100, verbose_name='IP Adresi '), + preserve_default=False, + ), + ] diff --git a/contact/migrations/0005_alter_contact_ip_alter_contact_user.py b/contact/migrations/0005_alter_contact_ip_alter_contact_user.py new file mode 100644 index 0000000..a90c9a7 --- /dev/null +++ b/contact/migrations/0005_alter_contact_ip_alter_contact_user.py @@ -0,0 +1,26 @@ +# Generated by Django 6.0 on 2026-01-15 13:36 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contact', '0004_contact_ip'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='contact', + name='ip', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='IP Adresi '), + ), + migrations.AlterField( + model_name='contact', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Kullanıcı'), + ), + ] diff --git a/contact/migrations/__init__.py b/contact/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/contact/models.py b/contact/models.py new file mode 100644 index 0000000..24492d4 --- /dev/null +++ b/contact/models.py @@ -0,0 +1,22 @@ +from django.db import models + + +# Create your models here. +class Contact(models.Model): + user = models.ForeignKey('accounts.CustomUser', on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Kullanıcı") + name = models.CharField(max_length=254, verbose_name="Ad Soyad ") + email = models.CharField(max_length=254, verbose_name="Eposta Adresi ") + ip = models.CharField(max_length=100, verbose_name="IP Adresi ", blank=True, null=True) + subject = models.CharField(max_length=254, verbose_name="Konu ") + message = models.TextField(verbose_name="Mesaj ") + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + + class Meta: + ordering = ["created_at"] + db_table = 'contacts' + verbose_name_plural = "Contact" + verbose_name = "Contact" + + def __str__(self): + return f"Contact: {self.name}" diff --git a/contact/serializers.py b/contact/serializers.py new file mode 100644 index 0000000..a6e234a --- /dev/null +++ b/contact/serializers.py @@ -0,0 +1,10 @@ +from rest_framework import serializers + +from contact.models import Contact + + +class ContactSerializer(serializers.ModelSerializer): + class Meta: + model = Contact + fields = ['id', 'name', 'email', 'subject', 'message', 'created_at'] + read_only_fields = ['id', 'created_at'] diff --git a/contact/tasks.py b/contact/tasks.py new file mode 100644 index 0000000..d0a117c --- /dev/null +++ b/contact/tasks.py @@ -0,0 +1,40 @@ +from celery import shared_task +from django.core.mail import send_mail +from django.conf import settings + + +@shared_task +def send_contact_email(name, email, subject, message, ip=None): + """ + Contact formundan gelen mesajı email ile gönderir + """ + email_subject = f"Yeni İletişim Mesajı: {subject}" + + email_message = f""" +Yeni bir iletişim mesajı alındı! + +Gönderen: {name} +Email: {email} +IP Adresi: {ip or 'Belirtilmemiş'} + +Konu: {subject} + +Mesaj: +{message} + +--- +Bu mesaj otomatik olarak gönderilmiştir. + """ + + try: + send_mail( + subject=email_subject, + message=email_message, + from_email=settings.DEFAULT_FROM_EMAIL, + recipient_list=['info@denizogur.com.tr'], # Mesajların gönderileceği email adresi + fail_silently=False, + ) + return f"Email başarıyla gönderildi: {email}" + except Exception as e: + return f"Email gönderilemedi: {str(e)}" + diff --git a/contact/tests.py b/contact/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/contact/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/contact/urls.py b/contact/urls.py new file mode 100644 index 0000000..3a7a5ee --- /dev/null +++ b/contact/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from contact.views import ContactCreate + +urlpatterns = [ + path('contact/create/', ContactCreate.as_view(), name='contact.create'), +] diff --git a/contact/views.py b/contact/views.py new file mode 100644 index 0000000..951b02c --- /dev/null +++ b/contact/views.py @@ -0,0 +1,42 @@ +from rest_framework.generics import CreateAPIView +from rest_framework.permissions import AllowAny + +from contact.models import Contact +from contact.serializers import ContactSerializer +from contact.tasks import send_contact_email + + +# Create your views here. +class ContactCreate(CreateAPIView): + queryset = Contact.objects.all() + serializer_class = ContactSerializer + permission_classes = [AllowAny] # Herkes contact gönderebilir + + def get_client_ip(self, request): + """İstemcinin IP adresini al""" + x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + if x_forwarded_for: + ip = x_forwarded_for.split(',')[0] + else: + ip = request.META.get('REMOTE_ADDR') + return ip + + def perform_create(self, serializer): + # IP adresini al + ip_address = self.get_client_ip(self.request) + + # Kullanıcı varsa kaydet, yoksa None olarak kaydet + user = self.request.user if self.request.user.is_authenticated else None + + # Contact'ı kaydet + contact = serializer.save(user=user, ip=ip_address) + + # Celery task ile email gönder (arka planda) + send_contact_email.delay( + name=contact.name, + email=contact.email, + subject=contact.subject, + message=contact.message, + ip=ip_address + ) + diff --git a/copilot-auth-setup-prompt.md b/copilot-auth-setup-prompt.md new file mode 100644 index 0000000..68c41a6 --- /dev/null +++ b/copilot-auth-setup-prompt.md @@ -0,0 +1,314 @@ +# Copilot için Ayrıntılı Prompt: Django 6.0 Custom Account + Djoser + JWT + Social Auth + +Aşağıdaki metni **Copilot Chat** veya GitHub Copilot’a vereceğim. Sen (Copilot) bu projede adım adım ilerleyen bir **backend mimarı + uygulayıcı** gibi davranacaksın. + +## Proje Bağlamı + +- Framework: **Django==6.0** +- API: **Django REST Framework (djangorestframework==3.16.1)** +- Auth: + - **Djoser==2.3.3** + - **djangorestframework_simplejwt==5.5.1** + - Ek olarak **social auth** social-auth-app-django==5.6.0 social-auth-core==4.8.1 bunlar kulanilacak +- Bu proje bir **REST backend** olacak ve **Nuxt.js** ile **Next.js** frontendlere servis verecek. + - SPA (Single Page App) + JWT kullanımına uygun olacak. + - CORS, JSON response formatı, JWT bearer token desteği önemli.(Corsheader Paketi yuklu ve yaplandirlmis) + +## İstediğim Auth Sistemi (Özet) + +1. **Custom User Model** (email tabanlı): + - Login **email ile** yapılacak (username yok). + - Register da email + password ile olacak. + - `AUTH_USER_MODEL` olarak özel bir user modeli (örn. `accounts.CustomUser`) kullanılacak. + - `USERNAME_FIELD = "email"` + - `email` unique olacak. + - Normal (email/password) register ile oluşturulan hesaplar: + - Başlangıçta `is_active = False` olacak. + - Kullanıcı e‑posta aktivasyonu yapmadan giriş yapamayacak. + - **Social login** ile gelen hesaplar: + - `is_active = True` olacak (yani sosyal hesaplar için ayrıca email aktivasyon istemeyeceğiz). + +2. **Register Akışı (Email/Password)**: + - Örnek endpoint (Djoser varsayılanı da olabilir): `POST /auth/register/` + - Request body: + ```json + { + "email": "user@example.com", + "password": "StrongP@ssw0rd", + "re_password": "StrongP@ssw0rd", + "first_name": "Ali", + "last_name": "Veli" + } + ``` + - İşleyiş: + - Yeni user oluşturulur, `is_active = False` atanır. + - Djoser üzerinden aktivasyon e‑postası gönderilir. + - Aktivasyon linki Djoser’in `ACTIVATION_URL` formatına göre hazırlanır: + - Örn: `https://frontend-domain/auth/activate/{uid}/{token}/` (Nuxt/Next içindeki sayfaya yönlenebilir). + +3. **Email Aktivasyon**: + - Endpoint (Djoser): `POST /auth/activate/` + - Request body: + ```json + { + "uid": "", + "token": "" + } + ``` + - Aktivasyon başarılı olursa: + - `user.is_active = True` + - Kullanıcı artık JWT ile login olabilecek. + +4. **Login (JWT ile)**: + - JWT auth için `djangorestframework_simplejwt` kullanılacak. + - Djoser’la entegre endpoint: + - `POST /auth/jwt/create/` + - Request body: + ```json + { + "email": "user@example.com", + "password": "StrongP@ssw0rd" + } + ``` + - Response: + ```json + { + "access": "", + "refresh": "" + } + ``` + - **Aktivasyon yapmamış** kullanıcı login olmaya çalışırsa: + - Uygun bir hata kodu (400/401) ve anlamlı bir hata mesajı dönecek: + - Örn: `"detail": "Account is not activated. Please check your email."` + +5. **Social Login**: + - Özel social auth endpoint’leri istiyorum: + - Örnek: `POST /auth/social//` (ör: `/auth/social/google/`, `/auth/social/github/`). + - Frontend (Nuxt/Next) tarafı: + - Genelde OAuth flow’u client-side yapıp backend’e `access_token` gönderiyor. + - Backend tarafı: + - Provider’dan gelen `access_token` ile kullanıcı bilgisi alınacak. + - Provider’dan email alınamazsa, uygun bir hata dönülecek (misal: `"Email not provided by provider"`). + - Eğer email varsa: + - Kullanıcı bulunursa giriş yaptır, yoksa yeni bir kullanıcı oluştur. + - Bu kullanıcı için: + - `is_active = True` olarak set edilecek. + - **Ekstra email aktivasyon e‑postası gönderilmeyecek**. + - Ardından JWT access/refresh token üret ve response olarak dön: + ```json + { + "access": "", + "refresh": "", + "user": { + "id": 1, + "email": "user@example.com", + "first_name": "Ali", + "last_name": "Veli" + } + } + ``` + +6. **Djoser Yapılandırması**: + - `djoser==2.3.3` kullanılacak. + - `settings.py` içinde `DJOSER = { ... }` konfigürasyonu yapılacak. + - Örnek ayarlar: + - `SEND_ACTIVATION_EMAIL = True` + - `ACTIVATION_URL = "auth/activate/{uid}/{token}/"` (buraya Nuxt/Next üzerindeki route’u da koyabiliriz). + - `SERIALIZERS` içinde: + - `user_create` → custom serializer (register sırasında `is_active=False` ayarlayacak). + - `user` → custom user serializer (frontend’e gönderilecek user alanlarını kontrol etmek için). + - Token modeli kullanmayacaksak `TOKEN_MODEL = None` vs. + +7. **JWT Ayarları (SIMPLE_JWT)**: + - `REST_FRAMEWORK` → `DEFAULT_AUTHENTICATION_CLASSES` içinde `rest_framework_simplejwt.authentication.JWTAuthentication` tanımlanacak. + - `SIMPLE_JWT` içinde access/refresh lifetime, `AUTH_HEADER_TYPES = ("Bearer",)` vb. ayarları yapacağız. + +8. **Email Gönderimi**: + - Geliştirme ortamı: + - `EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"` olabilir. + - Prod ortamı: + - ENV üzerinden SMTP ayarları (`EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD`, `EMAIL_USE_TLS` vb.) + - Aktivasyon için HTML ve plain text template’leri: + - `templates/email/activation_email.html` + - `templates/email/activation_email.txt` + - sindilik localdeki emailpit kullanalim + +9. **CORS / SPA Entegrasyonu**: + - Nuxt ve Next için: + - `CORS_ALLOWED_ORIGINS` içinde dev ve prod URL’ler olacak (örn. `http://localhost:3000`, `http://localhost:5173`, vs.). + - Auth: + - JWT bearer token kullanılacak: `Authorization: Bearer ` + - Cookie tabanlı session auth kullanmayacağız (veya minimal). CSRF, SPA senaryosuna göre ayarlanacak / devre dışı bırakılacak (bunu açıklayan bir not yaz). + +10. **Güvenlik & Rate Limiting**: + - Django password validators aktif olacak. + - Auth endpoint’leri için basic throttling / rate limit ayarları öner ve uygula (ör: DRF throttling). + +11. **Testler**: + - En azından aşağıdakiler için tests yaz: + - Register → user oluşturuluyor mu, `is_active=False` mi, email aktivasyonu tetikleniyor mu? + - Activate → doğru uid/token ile aktivasyon başarılı mı? Yanlış ise hata veriyor mu? + - Login → aktif kullanıcı login olabiliyor mu? Aktif olmayan için hata dönüyor mu? + - Social login → access_token üzerinden provider’dan user elde ediliyor mu, `is_active=True` ile user oluşturuluyor mu, JWT dönüyor mu? + +12. **Dokümantasyon**: + - Örnek bir doküman dosyası: `AUTH.md` veya `README.md` içinde bir bölüm: + - Tüm auth endpoint’leri + - Örnek request/response’lar + - Nuxt/Next tarafında nasıl kullanılacağına dair ayrintili notlar + - ENV değişkenleri (email, social provider keys vs.) + +## Dosya ve Kod Yapı Planı + +Aşağıdakiler bir referans plan; proje yapısına göre isimler uyarlanabilir (örn. `config/settings.py` vs. `project/settings.py`). + +- `accounts/models.py` + - `CustomUser(AbstractBaseUser, PermissionsMixin)`: + - Alanlar: `email`, `first_name`, `last_name`, `is_staff`, `is_active`, `date_joined` vb. + - `USERNAME_FIELD = "email"` + - `REQUIRED_FIELDS = []` (veya first_name/last_name) + - `CustomUserManager`: + - `create_user` + - `create_superuser` + +- `accounts/admin.py` + - Django admin’de custom user’ı `UserAdmin` türeterek kaydet. + +- `accounts/serializers.py` + - `CustomUserCreateSerializer`: + - Register sırasında kullanılır. + - `is_active=False` set eder. + - `CustomUserSerializer`: + - Kullanıcı profilini döner (id, email, first_name, last_name vb.). + - `SocialLoginSerializer`: + - Alanlar: `provider`, `access_token` (ve gerekiyorsa `id_token` vs.). + +- `accounts/views.py` + - Gerekirse: + - `SocialLoginView` (provider’a göre token doğrulayan, user oluşturan/döndüren, sonra JWT üreten). + - İsteğe bağlı: `ResendActivationView`. + +- `accounts/urls.py` + - `/auth/social//` için route. + - Djoser url’leri (register/activate/jwt vb.) de burada veya ana `urls.py` içinde include edilebilir. + +- `config/settings.py` (veya proje settings dosyası) + - `INSTALLED_APPS`: + - `'accounts'` + - `'rest_framework'` + - `'djoser'` + - `'rest_framework_simplejwt'` + - `'corsheaders'` + - Social auth için: `'social_django'` veya seçtiğimiz paket. + - `AUTH_USER_MODEL = "accounts.CustomUser"` + - `REST_FRAMEWORK` ayarları (`DEFAULT_AUTHENTICATION_CLASSES`, throttling vb.) + - `SIMPLE_JWT` ayarları + - `DJOSER` konfigürasyonu + - `CORS_ALLOWED_ORIGINS` + - `EMAIL_BACKEND` ve diğer email ayarları + - Social provider ayarları (`SOCIAL_AUTH_*` veya ilgili konfigler) + +- `templates/email/activation_email.html` +- `templates/email/activation_email.txt` + +- `requirements.txt` + - `Django==6.0` + - `djangorestframework==3.16.1` + - `djoser==2.3.3` + - `djangorestframework_simplejwt==5.5.1` + - `social-auth-app-django` (veya tercih ettiğimiz social auth paketi) + - `django-cors-headers` + +- `tests/test_accounts.py` + - Yukarıda bahsettiğim tüm kritik akışlar için testler. + +## Hafıza / Progress Kaydı: COPILOT_MEMORY.md + +Projede ne yapıldığını **hatırlamak** için özel bir dosya istiyorum: + +- Repo kökünde: `COPILOT_MEMORY.md` +- Copilot, her önemli adım veya mantıklı grup değişiklikten sonra bu dosyaya **append** yapsın. +- Kayıt formatı şöyle olsun (örnek): + +```markdown +## 2025-12-11T14:32:00Z +- Değişiklik özeti: + - CustomUser model ve manager eklendi. + - settings.py'de AUTH_USER_MODEL ve djoser/jwt ayarlarının temeli kuruldu. +- Dosyalar: + - accounts/models.py + - accounts/admin.py + - config/settings.py +- Next steps: + - Custom registration serializer ve activation email şablonlarını ekle. +``` + +Kurallar: +- Her anlamlı değişiklik setinden sonra yeni bir `## ` başlığı ile blok ekle. +- Bir sonraki yapılacakları (Next steps) kısa ve net yaz. +- Eğer PR açıyorsan, ilgili PR açıklamasına bu kaydın kısa özetini de ekle. + +## Geliştirme Adımları (Önerilen Sıra) + +Copilot’tan beklediğim ilerleme sırası: + +1. **Custom User Model** + - `accounts` app oluştur (yoksa). + - `CustomUser` ve `CustomUserManager` yaz. + - `AUTH_USER_MODEL` ayarla. + - Migrasyonları oluştur ve çalıştırılabilir hale getir (kod olarak migration dosyaları üret). + +2. **Temel Settings Konfigürasyonu** + - `INSTALLED_APPS`, `REST_FRAMEWORK`, `SIMPLE_JWT`, `DJOSER`, `CORS`, `EMAIL_BACKEND` vs. temel ayarlar. + - Nuxt/Next için örnek CORS domainleri koy (yorum satırı olarak da olabilir). + +3. **Djoser Register / Activate / JWT** + - Djoser’ın default endpoint’lerini aktif et. + - `CustomUserCreateSerializer`’ı bağla, register sırasında `is_active=False` olsun. + - Aktivasyon URL’ini Nuxt/Next kullanacak şekilde düzenle. + +4. **Social Auth Entegrasyonu** + - Seçilecek social auth paketini netleştir (preferans: `social-auth-app-django`). + - Provider konfigleri için env örnekleri yaz. + - `SocialLoginView` ve `SocialLoginSerializer` ile: + - Provider token doğrulama + - Email ile user bul/oluştur + - `is_active=True` set et + - JWT üret ve dön. + +5. **Email Şablonları** + - Aktivasyon e-postası için HTML ve text template’leri yaz. + +6. **Testler** + - Temel testler: register, activate, login, social login. + +7. **Dokümantasyon** + - `AUTH.md` veya README’ye auth bölümünü ekle. + +8. **COPILOT_MEMORY.md Güncellemeleri** + - Her adımda bu dosyaya not düş. + +## Copilot’a Komutum + +Bu prompt’u aldıktan sonra, lütfen: + +1. Projeyi ve hedefleri özetle. +2. Social auth kütüphanesi seçimi için bana 1–2 öneri sun (örnek: `social-auth-app-django` vs `django-allauth`), artılarını/eksilerini kısaca yaz ve **hangisini seçmek istediğimi sor**. +3. Ben seçimi yaptıktan sonra şu adımla başla: + - CustomUser model ve manager’ı yaz. + - `settings.py` içinde gerekli temel konfigürasyonları ekle (AUTH_USER_MODEL, Djoser, DRF, JWT, CORS, EMAIL). + - `COPILOT_MEMORY.md` dosyasına ilk kaydı ekle. +4. Her büyük adım sonunda: + - Hangi dosyaları değiştirdiğini kısaca özetle. + - `COPILOT_MEMORY.md`’ye uygun formatta giriş ekle. + - Bir sonraki adımı bana öner ve onayımı bekle (veya devam etmemi iste). + +Başlangıç komutum: + +> **Başla**: +> - CustomUser model ve manager oluştur. +> - `settings.py` gerekli auth (Djoser + JWT + DRF + CORS + EMAIL) konfigürasyonlarını ekle. +> - Djoser’ın register/activate/jwt endpointlerini temel haliyle ayağa kaldıracak url ve ayarları hazırla. +> - `COPILOT_MEMORY.md` dosyasına başlangıç girdisini ekle. + +Bu prompt’u anladıysan, önce kısaca özetle, sonra social auth kütüphane tercihi için benden seçim iste ve ardından adım 1’e başla. \ No newline at end of file diff --git a/core/Permission.py b/core/Permission.py new file mode 100644 index 0000000..18ccd5f --- /dev/null +++ b/core/Permission.py @@ -0,0 +1,9 @@ +from rest_framework.permissions import BasePermission, SAFE_METHODS + +class ReadOnly(BasePermission): + """ + Yalnızca okuma işlemlerine izin verir. + """ + def has_permission(self, request, view): + # SAFE_METHODS: ('GET', 'HEAD', 'OPTIONS') + return request.method in SAFE_METHODS \ No newline at end of file diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..9a37e72 --- /dev/null +++ b/core/__init__.py @@ -0,0 +1,5 @@ +# Celery app'i import et, böylece Django başladığında her zaman yüklenir +from .celery import app as celery_app + +__all__ = ('celery_app',) + diff --git a/core/asgi.py b/core/asgi.py new file mode 100644 index 0000000..cf099bf --- /dev/null +++ b/core/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for core project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + +application = get_asgi_application() diff --git a/core/celery.py b/core/celery.py new file mode 100644 index 0000000..0150caf --- /dev/null +++ b/core/celery.py @@ -0,0 +1,19 @@ +import os +from celery import Celery + +# Django settings modülünü ayarla +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + +app = Celery('core') + +# Django settings'ten celery yapılandırmasını yükle +app.config_from_object('django.conf:settings', namespace='CELERY') + +# Tüm Django app'lerden tasks.py dosyalarını otomatik olarak keşfet +app.autodiscover_tasks() + + +@app.task(bind=True, ignore_result=True) +def debug_task(self): + print(f'Request: {self.request!r}') + diff --git a/core/settings.py b/core/settings.py new file mode 100644 index 0000000..7b00784 --- /dev/null +++ b/core/settings.py @@ -0,0 +1,481 @@ +""" +Django settings for core project. + +Generated by 'django-admin startproject' using Django 6.0. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/6.0/ref/settings/ +""" + +from pathlib import Path +import os +from dotenv import load_dotenv + +# .env dosyasını yükle +load_dotenv() + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-g0y6e(tw41ugb6y73&do6#12+)qk1gh5o+s2v8_m1c5rrq4i3e' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = os.getenv('DEBUG', False) + +ALLOWED_HOSTS = ['back.beyhan.gen.tr', 'localhost', '127.0.0.1', '[::1]'] +CSRF_TRUSTED_ORIGINS = ['https://back.beyhan.gen.tr', 'https://*.beyhan.gen.tr'] +CSRF_COOKIE_DOMAIN = '.beyhan.gen.tr' + +# Site URL - .env dosyasından alınır +SITE_URL = os.getenv('SITE_URL', 'http://127.0.0.1:8000') + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + # 3. Parti + 'rest_framework', + 'rest_framework_simplejwt', + 'django_celery_results', + # celery -A [project-name] worker --beat --scheduler django --loglevel=info + 'django_celery_beat', + 'djoser', + 'corsheaders', + 'social_django', + 'imagekit', + 'django_cleanup', + 'colorfield', + 'autoslug', + 'tinymce', + "debug_toolbar", + + 'django.contrib.sites', # Added for Djoser domain resolution + + # Local Apps + 'accounts', + 'settings', + 'backup', + 'contact', + 'product', + 'cart', + 'reviews', + 'blog', +] + +SITE_ID = 1 +CART_SESSION_ID = 'cart' + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + "whitenoise.middleware.WhiteNoiseMiddleware", + 'django.contrib.sessions.middleware.SessionMiddleware', + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'accounts.middleware.SocialAuthExceptionMiddleware', + "debug_toolbar.middleware.DebugToolbarMiddleware", +] + +ROOT_URLCONF = 'core.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'] + , + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + # Social auth context processors + 'social_django.context_processors.backends', + 'social_django.context_processors.login_redirect', + 'cart.context_processors.cart', + ], + }, + }, +] + +WSGI_APPLICATION = 'core.wsgi.application' + +# Database +# https://docs.djangoproject.com/en/6.0/ref/settings/#databases + +# Docker ortamında veya environment değişkeni varsa PostgreSQL kullan +USE_POSTGRES = os.getenv('USE_POSTGRES', 'True').lower() == 'true' + +if USE_POSTGRES: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.getenv('POSTGRES_DB', 'shop'), + 'USER': os.getenv('POSTGRES_USER', 'shop'), + 'PASSWORD': os.getenv('POSTGRES_PASSWORD', 'gg7678290'), + 'HOST': os.getenv('POSTGRES_HOST', '212.64.215.243'), + 'PORT': os.getenv('POSTGRES_PORT', '5432'), + 'OPTIONS': { + 'options': '-c search_path=public' + }, + } + } +else: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } + } + +# ============================================================================== +# REDIS CACHE CONFIGURATION +# ============================================================================== +CACHES = { + 'default': { + 'BACKEND': 'django_redis.cache.RedisCache', + # 'LOCATION': 'redis://default:1923btO**@ares-redis-xrot7z:6379', + 'LOCATION': os.getenv('CELERY_BROKER_URL', 'redis://default:8KNa2T3ceGkrYPpt@212.64.215.243:6379/3'), + # 'LOCATION': os.getenv('REDIS_URL', 'redis://127.0.0.1:6379/1'), + 'OPTIONS': { + 'CLIENT_CLASS': 'django_redis.client.DefaultClient', + }, + 'KEY_PREFIX': 'ata_', + 'TIMEOUT': 300, # 5 dakika default timeout + } +} + +# ============================================================================== +# CELERY CONFIGURATION +# ============================================================================== +# CELERY_BROKER_URL = 'redis://default:1923btO**@10.80.80.70:6379/5' +CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL', 'redis://default:8KNa2T3ceGkrYPpt@212.64.215.243:6379/5') +CELERY_RESULT_BACKEND = os.getenv('CELERY_RESULT_BACKEND', 'django-db') +CELERY_ACCEPT_CONTENT = ['application/json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' +CELERY_TIMEZONE = 'Europe/Istanbul' # Türkiye timezone +CELERY_ENABLE_UTC = True # UTC zaman kullan + +# Password validation +# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +# https://docs.djangoproject.com/en/6.0/topics/i18n/ + +LANGUAGE_CODE = 'tr' + +TIME_ZONE = 'Europe/Istanbul' + +USE_I18N = True + +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/6.0/howto/static-files/ + +STATIC_URL = 'static/' +STATIC_ROOT = BASE_DIR / 'staticfiles' +STATICFILES_DIRS = [ + BASE_DIR / 'static', +] +# Media files (User uploaded files) +MEDIA_URL = 'media/' +MEDIA_ROOT = BASE_DIR / 'media' +STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' + +# Default primary key field type +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# ============================================================================== +# CUSTOM USER MODEL +# ============================================================================== +AUTH_USER_MODEL = 'accounts.CustomUser' + +# ============================================================================== +# REST FRAMEWORK CONFIGURATION +# ============================================================================== +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework_simplejwt.authentication.JWTAuthentication', + 'rest_framework.authentication.SessionAuthentication', # For social auth + ), + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.IsAuthenticated', + ], + # Throttling for security - api.denizogur.com.tr için bypass edildi + 'DEFAULT_THROTTLE_CLASSES': [ + 'core.throttling.CustomAnonRateThrottle', + 'core.throttling.CustomUserRateThrottle', + ], + 'DEFAULT_THROTTLE_RATES': { + 'anon': '100/hour', # Anonymous users + 'user': '1000/hour', # Authenticated users + }, +} + +# ============================================================================== +# SIMPLE JWT CONFIGURATION +# ============================================================================== +from datetime import timedelta + +SIMPLE_JWT = { + 'ACCESS_TOKEN_LIFETIME': timedelta(days=30), + 'REFRESH_TOKEN_LIFETIME': timedelta(days=120), + 'ROTATE_REFRESH_TOKENS': True, + 'BLACKLIST_AFTER_ROTATION': True, + 'UPDATE_LAST_LOGIN': True, + + 'ALGORITHM': 'HS256', + 'SIGNING_KEY': SECRET_KEY, + 'VERIFYING_KEY': None, + 'AUDIENCE': None, + 'ISSUER': None, + + 'AUTH_HEADER_TYPES': ('Bearer',), + 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', + 'USER_ID_FIELD': 'id', + 'USER_ID_CLAIM': 'user_id', + + 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), + 'TOKEN_TYPE_CLAIM': 'token_type', + + 'JTI_CLAIM': 'jti', +} + +# ============================================================================== +# DJOSER CONFIGURATION +# ============================================================================== +DJOSER = { + # Domain for email links (YOUR FRONTEND URL) + # Djoser combines DOMAIN + ACTIVATION_URL to create the full link + 'DOMAIN': 'localhost:3000', # IMPORTANT: Change this to your frontend's domain + 'SITE_NAME': 'Django Auth API', + + # Registration & Activation + 'SEND_ACTIVATION_EMAIL': True, + 'ACTIVATION_URL': 'activate/{uid}/{token}', # Frontend route, e.g., http://localhost:3000/activate/MQ/token/ + + # Password Reset + 'SEND_CONFIRMATION_EMAIL': True, + 'PASSWORD_RESET_CONFIRM_URL': 'password-reset/{uid}/{token}', # Frontend route + 'PASSWORD_RESET_SHOW_EMAIL_NOT_FOUND': False, + + # Username Reset + 'USERNAME_RESET_CONFIRM_URL': 'username-reset/{uid}/{token}', # Frontend route + + # Email confirmations + 'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True, + 'USERNAME_CHANGED_EMAIL_CONFIRMATION': True, + + # User settings + 'USER_CREATE_PASSWORD_RETYPE': True, + 'SET_PASSWORD_RETYPE': True, + 'PASSWORD_RESET_CONFIRM_RETYPE': True, + 'LOGIN_FIELD': 'email', + + # Serializers + 'SERIALIZERS': { + 'user_create': 'accounts.serializers.CustomUserCreateSerializer', + 'user': 'accounts.serializers.CustomUserSerializer', + 'current_user': 'accounts.serializers.CustomUserSerializer', + }, +} + +# ============================================================================== +# EMAIL CONFIGURATION +# ============================================================================== +# Development: Using MailPit (local email testing tool) +# MailPit default runs on localhost:1025 for SMTP and localhost:8025 for web UI +# SITE_URL = os.getenv('SITE_URL', 'http://127.0.0.1:8000') +EMAIL_BACKEND = os.getenv('EMAIL_BACKEND','django.core.mail.backends.smtp.EmailBackend') +EMAIL_HOST = os.getenv('EMAIL_HOST','212.64.215.243') +EMAIL_PORT = os.getenv('EMAIL_PORT',1025) +# EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS',False) +# EMAIL_USE_SSL = os.getenv('EMAIL_USE_SSL',True) +EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER','') +EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD','') +DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL','noreply@localhost') + +# Production: Uncomment and configure these with environment variables +# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +# EMAIL_HOST = os.environ.get('EMAIL_HOST', 'smtp.gmail.com') +# EMAIL_PORT = int(os.environ.get('EMAIL_PORT', 587)) +# EMAIL_USE_TLS = os.environ.get('EMAIL_USE_TLS', 'True') == 'True' +# EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER') +# EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD') +# DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL', 'noreply@yourdomain.com') + +# ============================================================================== +# CORS CONFIGURATION +# ============================================================================== +CORS_ALLOWED_ORIGINS = [ + "http://localhost:3000", # Next.js default + "http://127.0.0.1:3000", + "http://localhost:5173", # Vite default + "http://127.0.0.1:5173", + "http://localhost:8080", # Vue/Nuxt alternative port + "http://127.0.0.1:8080", +] + +# For development only - be careful in production! +CORS_ORIGIN_ALLOW_ALL = True + +CORS_ALLOW_CREDENTIALS = True +CORS_ALLOW_HEADERS = [ + 'accept', + 'accept-encoding', + 'authorization', + 'content-type', + 'dnt', + 'origin', + 'user-agent', + 'x-csrftoken', + 'x-requested-with', +] + +# ============================================================================== +# SOCIAL AUTH CONFIGURATION (Python Social Auth) +# ============================================================================== +AUTHENTICATION_BACKENDS = ( + # Social auth backends + 'social_core.backends.google.GoogleOAuth2', + 'social_core.backends.github.GithubOAuth2', + 'social_core.backends.facebook.FacebookOAuth2', + # Add more providers as needed + + # Django default + 'django.contrib.auth.backends.ModelBackend', +) + +# Social Auth Settings +SOCIAL_AUTH_JSONFIELD_ENABLED = True +SOCIAL_AUTH_URL_NAMESPACE = 'social' + +# Pipeline - custom pipeline to set is_active=True for social users +SOCIAL_AUTH_PIPELINE = ( + 'social_core.pipeline.social_auth.social_details', + 'social_core.pipeline.social_auth.social_uid', + 'social_core.pipeline.social_auth.auth_allowed', + 'social_core.pipeline.social_auth.social_user', + 'social_core.pipeline.user.get_username', + 'social_core.pipeline.user.create_user', + 'social_core.pipeline.social_auth.associate_user', + 'social_core.pipeline.social_auth.load_extra_data', + 'social_core.pipeline.user.user_details', + 'accounts.pipeline.activate_user', # Custom pipeline to set is_active=True +) + +# User model +SOCIAL_AUTH_USER_MODEL = 'accounts.CustomUser' +SOCIAL_AUTH_USERNAME_IS_REQUIRED = False +SOCIAL_AUTH_USER_FIELDS = ['email', 'first_name', 'last_name'] + +# Strategy +SOCIAL_AUTH_STRATEGY = 'social_django.strategy.DjangoStrategy' +SOCIAL_AUTH_STORAGE = 'social_django.models.DjangoStorage' + +# Google OAuth2 Configuration +# Get credentials from: https://console.developers.google.com/ +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com' # Your Google Client ID +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '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' # Your Google Client Secret +SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [ + 'https://www.googleapis.com/auth/userinfo.email', + 'https://www.googleapis.com/auth/userinfo.profile', +] +SOCIAL_AUTH_GOOGLE_OAUTH2_EXTRA_DATA = ['first_name', 'last_name'] + +# GitHub OAuth2 Configuration +# Get credentials from: https://github.com/settings/developers +SOCIAL_AUTH_GITHUB_KEY = 'Ov23liUt9B61O46Mdfm4' # Your GitHub Client ID +SOCIAL_AUTH_GITHUB_SECRET = 'c7fc8dcb1b2c8f22120608425d07d5efd995baaf' # Your GitHub Client Secret +SOCIAL_AUTH_GITHUB_SCOPE = ['user:email'] + +# Facebook OAuth2 Configuration +# Get credentials from: https://developers.facebook.com/ +SOCIAL_AUTH_FACEBOOK_KEY = '' # Your Facebook App ID +SOCIAL_AUTH_FACEBOOK_SECRET = '' # Your Facebook App Secret +SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] +SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { + 'fields': 'id, name, email, first_name, last_name' +} + +# Redirect URLs (customize for your frontend) +LOGIN_URL = '/api/v1/spa/' +LOGIN_REDIRECT_URL = '/api/v1/auth/social/callback/' +SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/api/v1/auth/social/callback/' +SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/api/v1/auth/social/callback/' +SOCIAL_AUTH_INACTIVE_USER_URL = '/api/v1/auth/social/error/' +SOCIAL_AUTH_LOGIN_ERROR_URL = '/api/v1/auth/social/error/' + +TASKS = {"default": {"BACKEND": "django.tasks.backends.immediate.ImmediateBackend"}} +# ============================================================================== +# SECURITY SETTINGS FOR SPA/JWT +# ============================================================================== +# Since we're using JWT tokens (not session cookies), we can relax CSRF for API endpoints +# But keep it enabled for Django admin +""" +CSRF_COOKIE_HTTPONLY = False +CSRF_COOKIE_SECURE = False # Set to True in production with HTTPS +SESSION_COOKIE_SECURE = False # Set to True in production with HTTPS +CSRF_TRUSTED_ORIGINS = [ + "http://localhost:3000", + "http://localhost:5173", +] +""" +INTERNAL_IPS = [ + "127.0.0.1", +] + +DEBUG_TOOLBAR_PANELS = [ + 'debug_toolbar.panels.history.HistoryPanel', + 'debug_toolbar.panels.versions.VersionsPanel', + 'debug_toolbar.panels.timer.TimerPanel', + 'debug_toolbar.panels.settings.SettingsPanel', + 'debug_toolbar.panels.headers.HeadersPanel', + 'debug_toolbar.panels.request.RequestPanel', + 'debug_toolbar.panels.sql.SQLPanel', + 'debug_toolbar.panels.staticfiles.StaticFilesPanel', + 'debug_toolbar.panels.templates.TemplatesPanel', + 'debug_toolbar.panels.alerts.AlertsPanel', + 'debug_toolbar.panels.cache.CachePanel', + 'debug_toolbar.panels.signals.SignalsPanel', + 'debug_toolbar.panels.community.CommunityPanel', + # 'debug_toolbar.panels.redirects.RedirectsPanel', # Deprecated olduğu için kaldırıldı + 'debug_toolbar.panels.profiling.ProfilingPanel', +] + +DEBUG_TOOLBAR_CONFIG = { + 'INTERCEPT_REDIRECTS': False, +} diff --git a/core/throttling.py b/core/throttling.py new file mode 100644 index 0000000..b366887 --- /dev/null +++ b/core/throttling.py @@ -0,0 +1,350 @@ +""" +Custom throttling classes for API rate limiting +""" +import logging +import ipaddress +from rest_framework.throttling import AnonRateThrottle, UserRateThrottle + +# Logger yapılandırması +logger = logging.getLogger('throttling') +logger.setLevel(logging.INFO) + +# File handler ekle (logs dizinine yaz) +import os +import sys +from pathlib import Path + +BASE_DIR = Path(__file__).resolve().parent.parent +LOG_DIR = BASE_DIR / 'logs' +LOG_DIR.mkdir(exist_ok=True) + +# Formatter oluştur +formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' +) + +# File handler oluştur (dosyaya yaz) +file_handler = logging.FileHandler(LOG_DIR / 'throttling.log', encoding='utf-8') +file_handler.setLevel(logging.INFO) +file_handler.setFormatter(formatter) + +# Stream handler oluştur (konsola yaz - Docker için) +console_handler = logging.StreamHandler(sys.stdout) +console_handler.setLevel(logging.INFO) +console_handler.setFormatter(formatter) + +# Handler'ları logger'a ekle (duplicate handler'ları önlemek için) +if not logger.handlers: + logger.addHandler(file_handler) + logger.addHandler(console_handler) + + +def is_cloudflare_ip(ip): + """ + IP adresinin Cloudflare IP aralığında olup olmadığını kontrol eder + Cloudflare IP aralıkları: https://www.cloudflare.com/ips/ + """ + try: + ip_obj = ipaddress.ip_address(ip) + # Cloudflare IPv4 aralıkları (en yaygın olanlar) + cloudflare_ranges = [ + ipaddress.ip_network('173.245.48.0/20'), + ipaddress.ip_network('103.21.244.0/22'), + ipaddress.ip_network('103.22.200.0/22'), + ipaddress.ip_network('103.31.4.0/22'), + ipaddress.ip_network('141.101.64.0/18'), + ipaddress.ip_network('108.162.192.0/18'), + ipaddress.ip_network('190.93.240.0/20'), + ipaddress.ip_network('188.114.96.0/20'), + ipaddress.ip_network('197.234.240.0/22'), + ipaddress.ip_network('198.41.128.0/17'), + ipaddress.ip_network('162.158.0.0/15'), + ipaddress.ip_network('104.16.0.0/13'), + ipaddress.ip_network('104.24.0.0/14'), + ipaddress.ip_network('172.64.0.0/13'), + ipaddress.ip_network('131.0.72.0/22'), + ] + # Cloudflare IPv6 aralıkları + cloudflare_ranges_v6 = [ + ipaddress.ip_network('2400:cb00::/32'), + ipaddress.ip_network('2606:4700::/32'), + ipaddress.ip_network('2803:f800::/32'), + ipaddress.ip_network('2405:b500::/32'), + ipaddress.ip_network('2405:8100::/32'), + ipaddress.ip_network('2a06:98c0::/29'), + ipaddress.ip_network('2c0f:f248::/32'), + ] + + all_ranges = cloudflare_ranges + cloudflare_ranges_v6 + return any(ip_obj in network for network in all_ranges) + except (ValueError, ipaddress.AddressValueError): + return False + + +class CustomAnonRateThrottle(AnonRateThrottle): + """ + Belirli IP'ler için throttling'i bypass eder + """ + EXEMPT_IPS = [ + '127.0.0.1', + 'localhost', + '::1', + '212.64.215.243', + '162.158.210.254', + '188.132.232.119', + ] + + def get_client_ip(self, request): + """ + Client IP adresini al + Cloudflare kullanıldığında CF-Connecting-IP header'ını öncelikli kullanır + """ + # Cloudflare gerçek client IP'si (en güvenilir) + cf_connecting_ip = request.META.get('HTTP_CF_CONNECTING_IP') + if cf_connecting_ip: + return cf_connecting_ip.strip() + + # True-Client-IP (bazı Cloudflare yapılandırmalarında) + true_client_ip = request.META.get('HTTP_TRUE_CLIENT_IP') + if true_client_ip: + return true_client_ip.strip() + + # X-Forwarded-For (fallback) + x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + if x_forwarded_for: + # İlk IP genellikle gerçek client IP'sidir + ip = x_forwarded_for.split(',')[0].strip() + return ip + + # Son çare: REMOTE_ADDR + remote_addr = request.META.get('REMOTE_ADDR', 'unknown') + + # Eğer REMOTE_ADDR Cloudflare IP'si ise, gerçek IP bulunamadı demektir + if is_cloudflare_ip(remote_addr): + logger.warning( + f"[IP DETECTION] Cloudflare IP tespit edildi ({remote_addr}) " + f"ama gerçek client IP bulunamadı. CF-Connecting-IP header'ı eksik olabilir." + ) + + return remote_addr + + def get_cache_key(self, request, view): + """ + Cache key'i gerçek client IP'ye göre oluşturur + Cloudflare kullanıldığında gerçek IP'yi kullanır + """ + # Gerçek client IP'yi al + ident = self.get_client_ip(request) + + # Cache key format: throttle_anon_{ip} + return self.cache_format % { + 'scope': self.scope, + 'ident': ident + } + + def allow_request(self, request, view): + # Get client IP + ip = self.get_client_ip(request) + remote_addr = request.META.get('REMOTE_ADDR', 'unknown') + host = request.get_host().split(':')[0] + path = request.path + method = request.method + user_agent = request.META.get('HTTP_USER_AGENT', 'unknown') + + # View bilgisi + view_name = getattr(view, '__class__', None) + view_name = view_name.__name__ if view_name else 'unknown' + + # Cloudflare kontrolü + is_from_cloudflare = is_cloudflare_ip(remote_addr) + cf_info = f"CF-IP: {remote_addr}" if is_from_cloudflare else "" + + # Belirtilen IP'lerden geliyorsa throttling yapma + if ip in self.EXEMPT_IPS: + logger.info( + f"[ANON THROTTLE - BYPASS] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"User-Agent: {user_agent[:100]}" + ) + return True + + # Normal throttling kurallarını uygula + allowed = super().allow_request(request, view) + + # Throttle durumunu kontrol et + if allowed: + # Rate limit bilgilerini al + throttle_scope = getattr(view, 'throttle_scope', None) or 'anon' + rate = self.get_rate() + num_requests, duration = self.parse_rate(rate) + + # Cache key'den kalan istek sayısını tahmin et + cache_key = self.get_cache_key(request, view) + history = self.cache.get(cache_key, []) + remaining = max(0, num_requests - len(history)) + + logger.info( + f"[ANON THROTTLE - ALLOWED] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"Rate: {rate} | Remaining: {remaining}/{num_requests} | " + f"User-Agent: {user_agent[:100]}" + ) + else: + # Throttle limit aşıldı + rate = self.get_rate() + num_requests, duration = self.parse_rate(rate) + + logger.warning( + f"[ANON THROTTLE - BLOCKED] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"Rate: {rate} | Limit: {num_requests}/{duration} | " + f"User-Agent: {user_agent[:100]}" + ) + + return allowed + + +class CustomUserRateThrottle(UserRateThrottle): + """ + Belirli kullanıcılar veya domainler için throttling'i bypass eder + """ + EXEMPT_HOSTS = [ + 'api.denizogur.com.tr', + 'back.beyhan.gen.tr', + 'shop.beyhan.gen.tr', + 'beyhan.gen.tr', + 'denizogur.com.tr', + 'denizour.com.tr', + 'localhost', + '127.0.0.1', + ] + + def get_client_ip(self, request): + """ + Client IP adresini al + Cloudflare kullanıldığında CF-Connecting-IP header'ını öncelikli kullanır + """ + # Cloudflare gerçek client IP'si (en güvenilir) + cf_connecting_ip = request.META.get('HTTP_CF_CONNECTING_IP') + if cf_connecting_ip: + return cf_connecting_ip.strip() + + # True-Client-IP (bazı Cloudflare yapılandırmalarında) + true_client_ip = request.META.get('HTTP_TRUE_CLIENT_IP') + if true_client_ip: + return true_client_ip.strip() + + # X-Forwarded-For (fallback) + x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + if x_forwarded_for: + # İlk IP genellikle gerçek client IP'sidir + ip = x_forwarded_for.split(',')[0].strip() + return ip + + # Son çare: REMOTE_ADDR + remote_addr = request.META.get('REMOTE_ADDR', 'unknown') + + # Eğer REMOTE_ADDR Cloudflare IP'si ise, gerçek IP bulunamadı demektir + if is_cloudflare_ip(remote_addr): + logger.warning( + f"[IP DETECTION] Cloudflare IP tespit edildi ({remote_addr}) " + f"ama gerçek client IP bulunamadı. CF-Connecting-IP header'ı eksik olabilir." + ) + + return remote_addr + + def get_cache_key(self, request, view): + """ + Cache key'i gerçek client IP'ye göre oluşturur + Cloudflare kullanıldığında gerçek IP'yi kullanır + UserRateThrottle için user ID de eklenir + """ + # Authenticated kullanıcı için user ID kullan + if request.user and request.user.is_authenticated: + ident = request.user.pk + else: + # Anonymous kullanıcı için gerçek client IP'yi kullan + ident = self.get_client_ip(request) + + # Cache key format: throttle_user_{user_id} veya throttle_anon_{ip} + return self.cache_format % { + 'scope': self.scope, + 'ident': ident + } + + def allow_request(self, request, view): + # Get client IP + ip = self.get_client_ip(request) + remote_addr = request.META.get('REMOTE_ADDR', 'unknown') + host = request.get_host().split(':')[0] + path = request.path + method = request.method + user_agent = request.META.get('HTTP_USER_AGENT', 'unknown') + + # View bilgisi + view_name = getattr(view, '__class__', None) + view_name = view_name.__name__ if view_name else 'unknown' + + # User bilgisi + user_info = 'anonymous' + if request.user and request.user.is_authenticated: + user_info = f"user_id:{request.user.id} | email:{getattr(request.user, 'email', 'N/A')} | staff:{request.user.is_staff}" + + # Cloudflare kontrolü + is_from_cloudflare = is_cloudflare_ip(remote_addr) + cf_info = f"CF-IP: {remote_addr}" if is_from_cloudflare else "" + + # Host kontrolü + if host in self.EXEMPT_HOSTS: + logger.info( + f"[USER THROTTLE - BYPASS (HOST)] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"User: {user_info} | User-Agent: {user_agent[:100]}" + ) + return True + + # Authenticated kullanıcı için throttling yapma (staff users) + if request.user and request.user.is_authenticated and request.user.is_staff: + logger.info( + f"[USER THROTTLE - BYPASS (STAFF)] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"User: {user_info} | User-Agent: {user_agent[:100]}" + ) + return True + + # Normal throttling kurallarını uygula + allowed = super().allow_request(request, view) + + # Throttle durumunu kontrol et + if allowed: + # Rate limit bilgilerini al + throttle_scope = getattr(view, 'throttle_scope', None) or 'user' + rate = self.get_rate() + num_requests, duration = self.parse_rate(rate) + + # Cache key'den kalan istek sayısını tahmin et + cache_key = self.get_cache_key(request, view) + history = self.cache.get(cache_key, []) + remaining = max(0, num_requests - len(history)) + + logger.info( + f"[USER THROTTLE - ALLOWED] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"User: {user_info} | Rate: {rate} | Remaining: {remaining}/{num_requests} | " + f"User-Agent: {user_agent[:100]}" + ) + else: + # Throttle limit aşıldı + rate = self.get_rate() + num_requests, duration = self.parse_rate(rate) + + logger.warning( + f"[USER THROTTLE - BLOCKED] Real-IP: {ip} | {cf_info} | Host: {host} | " + f"Path: {path} | Method: {method} | View: {view_name} | " + f"User: {user_info} | Rate: {rate} | Limit: {num_requests}/{duration} | " + f"User-Agent: {user_agent[:100]}" + ) + + return allowed + diff --git a/core/urls.py b/core/urls.py new file mode 100644 index 0000000..0fa53fe --- /dev/null +++ b/core/urls.py @@ -0,0 +1,41 @@ +""" +URL configuration for core project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/6.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from debug_toolbar.toolbar import debug_toolbar_urls +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path('admin/', admin.site.urls), + + # Main API routes (includes SPA pages) + path('api/v1/', include('accounts.urls')), + path('api/v1/', include('settings.urls')), + path('api/v1/', include('contact.urls')), + path('api/v1/', include('product.urls')), + path('api/v1/blog/', include('blog.urls')), + path('api/v1/cart/', include('cart.urls', namespace='cart')), + path('api/v1/reviews/', include('reviews.urls')), # Reviews URL'leri eklendi + path('api/v1/auth/', include('djoser.urls.jwt')), +]+ debug_toolbar_urls() + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/core/utils.py b/core/utils.py new file mode 100644 index 0000000..307c08f --- /dev/null +++ b/core/utils.py @@ -0,0 +1,40 @@ +import os +import uuid +from django.utils.deconstruct import deconstructible +from imagekit.processors import ResizeToFill + + +class ConvertToRGBA(object): + """Converts an image to RGBA mode.""" + def process(self, img): + if img.mode not in ('RGBA', 'LA'): + img = img.convert('RGBA') + return img + + +@deconstructible +class UniquePathAndRename(object): + def __init__(self, upload_to): + self.upload_to = upload_to + + def __call__(self, instance, filename): + ext = filename.split('.')[-1] + new_filename = f"{uuid.uuid4().hex}.{ext}" + return os.path.join(self.upload_to, new_filename) + + +def image_optimizer(upload_to, width, height, quality, img_format): + """ + ProcessedImageField için gerekli olan `upload_to`, `processors`, `format` + ve `options` parametrelerini dinamik olarak oluşturur. + """ + processors = [ResizeToFill(width, height)] + if img_format == 'PNG': + processors.insert(0, ConvertToRGBA()) + + return { + 'upload_to': UniquePathAndRename(upload_to), + 'processors': processors, + 'format': img_format, + 'options': {'quality': quality} + } diff --git a/core/wsgi.py b/core/wsgi.py new file mode 100644 index 0000000..6d36530 --- /dev/null +++ b/core/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for core project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + +application = get_wsgi_application() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..3b2bfc5 Binary files /dev/null and b/db.sqlite3 differ diff --git a/docker-compose.celery-beat.yml b/docker-compose.celery-beat.yml new file mode 100644 index 0000000..6b8aa0e --- /dev/null +++ b/docker-compose.celery-beat.yml @@ -0,0 +1,38 @@ +# docker-compose.celery-beat.yml +# +# Bu dosya periyodik task'lar için Celery Beat scheduler'ı ekler. +# Beat'i kullanmak için: +# docker-compose -f docker-compose.yml -f docker-compose.celery-beat.yml up -d + +version: '3.8' + +services: + celery-beat: + build: . + container_name: django_celery_beat_shop + entrypoint: ["/app/entrypoint-celery.sh"] + command: celery -A core beat --scheduler django --loglevel=info + dns: + - 8.8.8.8 + - 8.8.4.4 + volumes: + - .:/app + environment: + - DEBUG=1 + - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] + # PostgreSQL ayarları + - USE_POSTGRES=True + - POSTGRES_DB=server_dj + - POSTGRES_USER=server_dj + - POSTGRES_PASSWORD=1234 + - POSTGRES_HOST=10.80.80.50 + - POSTGRES_PORT=5432 + # Celery ayarları + - CELERY_BROKER_URL=redis://default:8KNa2T3ceGkrYPpt@212.64.215.243:6379/5 + - CELERY_RESULT_BACKEND=django-db + depends_on: + - web + - celery + stdin_open: true + tty: true + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..99e0d4a --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,94 @@ +services: + web-shop: + build: . + container_name: django_web_prod_shop + command: gunicorn core.wsgi:application --bind 0.0.0.0:8000 --workers 3 + dns: + - 8.8.8.8 + - 8.8.4.4 + volumes: + - static_volume:/app/staticfiles + - media_volume:/app/media + - ./db.sqlite3:/app/db.sqlite3 + expose: + - 8000 + ports: + - "8800:8000" + networks: + - dokploy-network + environment: + - DEBUG=0 + - SECRET_KEY=${SECRET_KEY} + - USE_POSTGRES=True + - POSTGRES_DB=${POSTGRES_DB} + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_HOST=${POSTGRES_HOST:-10.80.80.50} + - POSTGRES_PORT=${POSTGRES_PORT:-5432} + - DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS} + # Celery ayarları + - CELERY_BROKER_URL=${CELERY_BROKER_URL} + - CELERY_RESULT_BACKEND=${CELERY_RESULT_BACKEND:-django-db} + # Email Settings (Optional) + - EMAIL_BACKEND=${EMAIL_BACKEND:-django.core.mail.backends.smtp.EmailBackend} + - EMAIL_HOST=${EMAIL_HOST:-pit.beyhan.gen.tr} + - EMAIL_PORT=${EMAIL_PORT:-1025} + - EMAIL_HOST_USER=${EMAIL_HOST_USER} + - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD} + - EMAIL_USE_TLS=${EMAIL_USE_TLS:-False} + - EMAIL_USE_SSL=${EMAIL_USE_SSL:-True} + - DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL:-noreply@localhost} + restart: unless-stopped + + celery-shop: + build: . + container_name: django_celery_prod_shop + entrypoint: ["/app/entrypoint-celery.sh"] + command: celery -A core worker --loglevel=info + dns: + - 8.8.8.8 + - 8.8.4.4 + volumes: + - media_volume:/app/media + - ./db.sqlite3:/app/db.sqlite3 + networks: + - dokploy-network + environment: + - DEBUG=0 + - SECRET_KEY=${SECRET_KEY} + - USE_POSTGRES=True + - POSTGRES_DB=${POSTGRES_DB} + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_HOST=${POSTGRES_HOST:-10.80.80.50} + - POSTGRES_PORT=${POSTGRES_PORT:-5432} + - DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS} + # Celery ayarları + - CELERY_BROKER_URL=${CELERY_BROKER_URL} + - CELERY_RESULT_BACKEND=${CELERY_RESULT_BACKEND:-django-db} + depends_on: + - web-shop + restart: unless-stopped + + nginx: + image: nginx:alpine + container_name: django_nginx_shop + ports: + - "8077:80" + networks: + - dokploy-network + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + - ./db.sqlite3:/app/db.sqlite3 + - static_volume:/app/staticfiles:ro + - media_volume:/app/media:ro + depends_on: + - web-shop + restart: unless-stopped + +volumes: + static_volume: + media_volume: +networks: + dokploy-network: + external: true \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b58f848 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,64 @@ +services: + web: + build: . + container_name: django_web_test_shop + command: python manage.py runserver 0.0.0.0:8000 + dns: + - 8.8.8.8 + - 8.8.4.4 + volumes: + - .:/app + - static_volume:/app/staticfiles + - media_volume:/app/media + ports: + - "8000:8000" + environment: + - DEBUG=1 + - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] + # PostgreSQL ayarları - mevcut sunucunuzu kullanıyor + - USE_POSTGRES=True + - POSTGRES_DB=server_dj + - POSTGRES_USER=server_dj + - POSTGRES_PASSWORD=1234 + - POSTGRES_HOST=10.80.80.50 + - POSTGRES_PORT=5432 + # Celery ayarları + - CELERY_BROKER_URL=redis://default:8KNa2T3ceGkrYPpt@212.64.215.243:6379/5 + - CELERY_RESULT_BACKEND=django-db + # Mac'te Docker Desktop kullanıyorsanız host.docker.internal kullanabilirsiniz + # extra_hosts: + # - "host.docker.internal:host-gateway" + stdin_open: true + tty: true + + celery: + build: . + container_name: django_celery_worker_test_shop + entrypoint: ["/app/entrypoint-celery.sh"] + command: celery -A core worker --loglevel=info + dns: + - 8.8.8.8 + - 8.8.4.4 + volumes: + - .:/app + environment: + - DEBUG=1 + - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] + # PostgreSQL ayarları + - USE_POSTGRES=True + - POSTGRES_DB=server_dj + - POSTGRES_USER=server_dj + - POSTGRES_PASSWORD=1234 + - POSTGRES_HOST=10.80.80.50 + - POSTGRES_PORT=5432 + # Celery ayarları + - CELERY_BROKER_URL=redis://default:8KNa2T3ceGkrYPpt@212.64.215.243:6379/5 + - CELERY_RESULT_BACKEND=django-db + depends_on: + - web + stdin_open: true + tty: true + +volumes: + static_volume: + media_volume: diff --git a/entrypoint-celery.sh b/entrypoint-celery.sh new file mode 100644 index 0000000..ec2a593 --- /dev/null +++ b/entrypoint-celery.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Hata durumunda scripti durdur +set -e + +echo "Waiting for web service to complete migrations..." +# Web servisinin migration'ları tamamlaması için bekle +sleep 10 + +echo "Starting Celery worker with beat..." +exec "$@" + diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..5ed8490 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Hata durumunda scripti durdur +set -e + +# PostgreSQL bağlantısını kontrol et (mevcut sunucu için) +echo "Checking PostgreSQL connection..." +# Not: Mevcut PostgreSQL sunucunuz zaten çalışıyor olmalı (10.80.80.50:5432) + +# Veritabanı migrasyonlarını uygula +echo "Applying database migrations..." +python manage.py migrate --noinput + +# Superuser oluştur (eğer yoksa) +echo "Creating superuser if it doesn't exist..." +python manage.py shell -c " +from django.contrib.auth import get_user_model +User = get_user_model() +if not User.objects.filter(email='admin@example.com').exists(): + User.objects.create_superuser('admin@example.com', 'admin') + print('Superuser created: admin@example.com / admin') +else: + print('Superuser already exists') +" || true + +# Static dosyaları topla +echo "Collecting static files..." +python manage.py collectstatic --noinput --clear + +echo "Starting server..." +exec "$@" diff --git a/logs/celery.log b/logs/celery.log new file mode 100644 index 0000000..ef4c7bc --- /dev/null +++ b/logs/celery.log @@ -0,0 +1,315 @@ + + -------------- celery@192.168.1.17 v5.6.2 (recovery) +--- ***** ----- +-- ******* ---- macOS-15.3.1-x86_64-i386-64bit-Mach-O 2026-01-15 18:47:33 +- *** --- * --- +- ** ---------- [config] +- ** ---------- .> app: core:0x10812cec0 +- ** ---------- .> transport: redis://default:**@212.64.215.243:6379/5 +- ** ---------- .> results: +- *** --- * --- .> concurrency: 8 (prefork) +-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) +--- ***** ----- + -------------- [queues] + .> celery exchange=celery(direct) key=celery + + +[tasks] + . contact.tasks.send_contact_email + . core.celery.debug_task + . imagekit.cachefiles.backends._generate_file + +[2026-01-15 18:47:34,582: INFO/MainProcess] Connected to redis://default:**@212.64.215.243:6379/5 +[2026-01-15 18:47:34,611: INFO/MainProcess] mingle: searching for neighbors +[2026-01-15 18:47:35,689: INFO/MainProcess] mingle: all alone +[2026-01-15 18:47:35,959: INFO/MainProcess] celery@192.168.1.17 ready. +[2026-01-15 20:01:28,208: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 116, in call_with_retry + return do() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 973, in + lambda: command(*args, **kwargs), + ~~~~~~~^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 996, in try_read + return conn.read_response(disconnect_on_error=False, push_request=True) + ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1133, in read_response + response = self._parser.read_response(disable_decoding=disable_decoding) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/_parsers/hiredis.py", line 163, in read_response + self.read_from_socket() + ~~~~~~~~~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/_parsers/hiredis.py", line 112, in read_from_socket + raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR) +redis.exceptions.ConnectionError: Connection closed by server. + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 855, in connect_check_health + sock = self.retry.call_with_retry( + lambda: self._connect(), lambda error: self.disconnect(error) + ) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 116, in call_with_retry + return do() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 856, in + lambda: self._connect(), lambda error: self.disconnect(error) + ~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1306, in _connect + raise err + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1290, in _connect + sock.connect(socket_address) + ~~~~~~~~~~~~^^^^^^^^^^^^^^^^ +ConnectionRefusedError: [Errno 61] Connection refused + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py", line 346, in start + blueprint.start(self) + ~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/bootsteps.py", line 116, in start + step.start(parent) + ~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py", line 788, in start + c.loop(*c.loop_args()) + ~~~~~~^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/loops.py", line 96, in asynloop + next(loop) + ~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/asynchronous/hub.py", line 377, in create_loop + cb(*cbargs) + ~~^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 1394, in on_readable + self.cycle.on_readable(fileno) + ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 579, in on_readable + chan.handlers[type]() + ~~~~~~~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 931, in _receive + ret.append(self._receive_one(c)) + ~~~~~~~~~~~~~~~~~^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 941, in _receive_one + response = c.parse_response() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 998, in parse_response + response = self._execute(conn, try_read) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 972, in _execute + response = conn.retry.call_with_retry( + lambda: command(*args, **kwargs), + lambda _: self._reconnect(conn), + ) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 121, in call_with_retry + fail(error) + ~~~~^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 974, in + lambda _: self._reconnect(conn), + ~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 958, in _reconnect + conn.connect() + ~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 846, in connect + self.connect_check_health(check_health=True) + ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 863, in connect_check_health + raise ConnectionError(self._error_message(e)) +redis.exceptions.ConnectionError: Error 61 connecting to 212.64.215.243:6379. Connection refused. +[2026-01-15 20:01:28,406: WARNING/MainProcess] /Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py:397: CPendingDeprecationWarning: +In Celery 5.1 we introduced an optional breaking change which +on connection loss cancels all currently executed tasks with late acknowledgement enabled. +These tasks cannot be acknowledged as the connection is gone, and the tasks are automatically redelivered +back to the queue. You can enable this behavior using the worker_cancel_long_running_tasks_on_connection_loss +setting. In Celery 5.1 it is set to False by default. The setting will be set to True by default in Celery 6.0. + + warnings.warn(CANCEL_TASKS_BY_DEFAULT, CPendingDeprecationWarning) + +[2026-01-15 20:01:28,484: ERROR/MainProcess] consumer: Cannot connect to redis://default:**@212.64.215.243:6379/5: Error 61 connecting to 212.64.215.243:6379. Connection refused.. +Trying again in 2.00 seconds... (1/100) + +[2026-01-15 20:01:30,508: ERROR/MainProcess] consumer: Cannot connect to redis://default:**@212.64.215.243:6379/5: Error 61 connecting to 212.64.215.243:6379. Connection refused.. +Trying again in 4.00 seconds... (2/100) + +[2026-01-15 20:01:34,529: ERROR/MainProcess] consumer: Cannot connect to redis://default:**@212.64.215.243:6379/5: Error 61 connecting to 212.64.215.243:6379. Connection refused.. +Trying again in 6.00 seconds... (3/100) + +[2026-01-15 20:01:40,634: INFO/MainProcess] Connected to redis://default:**@212.64.215.243:6379/5 +[2026-01-15 20:01:40,700: INFO/MainProcess] mingle: searching for neighbors +[2026-01-15 20:01:41,820: INFO/MainProcess] mingle: all alone +[2026-01-15 21:56:10,825: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 116, in call_with_retry + return do() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 973, in + lambda: command(*args, **kwargs), + ~~~~~~~^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 996, in try_read + return conn.read_response(disconnect_on_error=False, push_request=True) + ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1133, in read_response + response = self._parser.read_response(disable_decoding=disable_decoding) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/_parsers/hiredis.py", line 163, in read_response + self.read_from_socket() + ~~~~~~~~~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/_parsers/hiredis.py", line 112, in read_from_socket + raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR) +redis.exceptions.ConnectionError: Connection closed by server. + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 855, in connect_check_health + sock = self.retry.call_with_retry( + lambda: self._connect(), lambda error: self.disconnect(error) + ) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 116, in call_with_retry + return do() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 856, in + lambda: self._connect(), lambda error: self.disconnect(error) + ~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1306, in _connect + raise err + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 1290, in _connect + sock.connect(socket_address) + ~~~~~~~~~~~~^^^^^^^^^^^^^^^^ +ConnectionRefusedError: [Errno 61] Connection refused + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py", line 346, in start + blueprint.start(self) + ~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/bootsteps.py", line 116, in start + step.start(parent) + ~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py", line 788, in start + c.loop(*c.loop_args()) + ~~~~~~^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/loops.py", line 96, in asynloop + next(loop) + ~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/asynchronous/hub.py", line 377, in create_loop + cb(*cbargs) + ~~^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 1394, in on_readable + self.cycle.on_readable(fileno) + ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 579, in on_readable + chan.handlers[type]() + ~~~~~~~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 931, in _receive + ret.append(self._receive_one(c)) + ~~~~~~~~~~~~~~~~~^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 941, in _receive_one + response = c.parse_response() + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 998, in parse_response + response = self._execute(conn, try_read) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 972, in _execute + response = conn.retry.call_with_retry( + lambda: command(*args, **kwargs), + lambda _: self._reconnect(conn), + ) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/retry.py", line 121, in call_with_retry + fail(error) + ~~~~^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 974, in + lambda _: self._reconnect(conn), + ~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/client.py", line 958, in _reconnect + conn.connect() + ~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 846, in connect + self.connect_check_health(check_health=True) + ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/redis/connection.py", line 863, in connect_check_health + raise ConnectionError(self._error_message(e)) +redis.exceptions.ConnectionError: Error 61 connecting to 212.64.215.243:6379. Connection refused. +[2026-01-15 21:56:10,943: WARNING/MainProcess] /Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py:397: CPendingDeprecationWarning: +In Celery 5.1 we introduced an optional breaking change which +on connection loss cancels all currently executed tasks with late acknowledgement enabled. +These tasks cannot be acknowledged as the connection is gone, and the tasks are automatically redelivered +back to the queue. You can enable this behavior using the worker_cancel_long_running_tasks_on_connection_loss +setting. In Celery 5.1 it is set to False by default. The setting will be set to True by default in Celery 6.0. + + warnings.warn(CANCEL_TASKS_BY_DEFAULT, CPendingDeprecationWarning) + +[2026-01-15 21:56:11,049: ERROR/MainProcess] consumer: Cannot connect to redis://default:**@212.64.215.243:6379/5: Error 61 connecting to 212.64.215.243:6379. Connection refused.. +Trying again in 2.00 seconds... (1/100) + +[2026-01-15 21:56:13,224: ERROR/MainProcess] consumer: Cannot connect to redis://default:**@212.64.215.243:6379/5: Error 61 connecting to 212.64.215.243:6379. Connection refused.. +Trying again in 4.00 seconds... (2/100) + +[2026-01-15 21:56:17,312: INFO/MainProcess] Connected to redis://default:**@212.64.215.243:6379/5 +[2026-01-15 21:56:17,383: INFO/MainProcess] mingle: searching for neighbors +[2026-01-15 21:56:17,492: CRITICAL/MainProcess] Unrecoverable error: KeyError(60) +Traceback (most recent call last): + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/worker.py", line 203, in start + self.blueprint.start(self) + ~~~~~~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/bootsteps.py", line 116, in start + step.start(parent) + ~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/bootsteps.py", line 365, in start + return self.obj.start() + ~~~~~~~~~~~~~~^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/consumer.py", line 346, in start + blueprint.start(self) + ~~~~~~~~~~~~~~~^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/bootsteps.py", line 116, in start + step.start(parent) + ~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/mingle.py", line 37, in start + self.sync(c) + ~~~~~~~~~^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/mingle.py", line 41, in sync + replies = self.send_hello(c) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/worker/consumer/mingle.py", line 54, in send_hello + replies = inspect.hello(c.hostname, our_revoked._data) or {} + ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/app/control.py", line 389, in hello + return self._request('hello', from_node=from_node, revoked=revoked) + ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/app/control.py", line 106, in _request + return self._prepare(self.app.control.broadcast( + ~~~~~~~~~~~~~~~~~~~~~~~~~~^ + command, + ^^^^^^^^ + ...<6 lines>... + pattern=self.pattern, matcher=self.matcher, + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + )) + ^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/celery/app/control.py", line 785, in broadcast + return self.mailbox(conn)._broadcast( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + command, arguments, destination, reply, timeout, + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + limit, callback, channel=channel, + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/pidbox.py", line 356, in _broadcast + return self._collect(reply_ticket, limit=limit, + ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + timeout=timeout, + ^^^^^^^^^^^^^^^^ + callback=callback, + ^^^^^^^^^^^^^^^^^^ + channel=chan) + ^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/pidbox.py", line 398, in _collect + self.connection.drain_events(timeout=timeout) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/connection.py", line 343, in drain_events + return self.transport.drain_events(self.connection, **kwargs) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/virtual/base.py", line 997, in drain_events + get(self._deliver, timeout=timeout) + ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 601, in get + ret = self.handle_event(fileno, event) + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 583, in handle_event + return self.on_readable(fileno), self + ~~~~~~~~~~~~~~~~^^^^^^^^ + File "/Users/beyhan/Desktop/Projeler/Python/atabackend/venv/lib/python3.14/site-packages/kombu/transport/redis.py", line 577, in on_readable + chan, type = self._fd_to_chan[fileno] + ~~~~~~~~~~~~~~~~^^^^^^^^ +KeyError: 60 diff --git a/logs/django.log b/logs/django.log new file mode 100644 index 0000000..cd8052f --- /dev/null +++ b/logs/django.log @@ -0,0 +1 @@ +Watching for file changes with StatReloader diff --git a/logs/throttling.log b/logs/throttling.log new file mode 100644 index 0000000..0258e64 --- /dev/null +++ b/logs/throttling.log @@ -0,0 +1,5156 @@ +2026-01-18 23:53:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: node +2026-01-18 23:53:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: node +2026-01-18 23:53:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User: anonymous | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User-Agent: node +2026-01-18 23:54:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User-Agent: node +2026-01-18 23:54:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: node +2026-01-18 23:54:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: node +2026-01-18 23:54:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User: anonymous | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: node +2026-01-18 23:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: node +2026-01-18 23:56:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/open-close/ | Method: GET | View: SettingOpenCloseDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/home/ | Method: GET | View: HomeDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/main-menu/ | Method: GET | View: MainMenuDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/aboutme/ | Method: GET | View: AboutMeDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services/ | Method: GET | View: MyServiceList | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/services-title/ | Method: GET | View: MyServiceTitleDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/resume/ | Method: GET | View: MyResumeDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-18 23:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/categories/ | Method: GET | View: CategoryList | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 01:59:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 01:59:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 02:00:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User-Agent: curl/8.7.1 +2026-01-19 02:00:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User: anonymous | User-Agent: curl/8.7.1 +2026-01-19 02:00:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 02:00:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 02:04:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 02:04:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:03:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:03:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:07:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:07:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:09:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:09:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:10:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:11:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:11:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: POST | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:11:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 15:11:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartAPI | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:20:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:20:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/ | Method: GET | View: CartDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:21:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/add/ | Method: GET | View: CartAddView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:21:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/cart/add/ | Method: GET | View: CartAddView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:38:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:38:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:38:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:38:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:39:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:39:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:41:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:41:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:43:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 17:43:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/categories/ | Method: GET | View: CategoryListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 19:42:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 19:42:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 19:42:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 19:42:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 19:42:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 19:42:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 19:44:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 19:44:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 19:44:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 19:44:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 19:44:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 19:44:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:35:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:35:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:35:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:35:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:36:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:36:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:37:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:37:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:38:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:38:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:39:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:39:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:40:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:40:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:40:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:40:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:47:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:47:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:47:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:47:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:47:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:47:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:48:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:48:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:48:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:48:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:48:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:48:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:49:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:49:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:49:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:49:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:49:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:49:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:49:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:50:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:50:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:50:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:50:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:50:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:50:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:50:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:53:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:53:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:53:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:53:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:53:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:53:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:53:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:55:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:55:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:55:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:55:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:55:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:55:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:55:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:55:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:55:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:55:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: node +2026-01-19 20:55:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: node +2026-01-19 20:55:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:55:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerListView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 20:58:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 20:58:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 20:58:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 20:58:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 20:58:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:11:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:11:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:11:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:11:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:11:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:11:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:11:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:11:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:26:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:26:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:26:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:26:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:27:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:27:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:27:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:27:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:27:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:27:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:27:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:27:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:29:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:29:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:29:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:29:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:29:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:30:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:30:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:30:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:30:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:31:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:31:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:31:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:31:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:31:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:31:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:31:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:33:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:33:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:33:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:33:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:34:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:34:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:34:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:34:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:38:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:38:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:38:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:38:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:38:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:38:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:38:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:38:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:39:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:39:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:39:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:39:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:39:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:39:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:39:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:39:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:39:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:41:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:41:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:41:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:41:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:41:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:41:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:41:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:41:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:41:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:43:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:43:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:43:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:43:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:43:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:43:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:43:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:43:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:49:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 21:49:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 21:49:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 21:49:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 21:49:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:49:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:49:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 21:49:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:05:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:05:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:06:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:06:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:11:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:11:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:12:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:12:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:14:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:14:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:17:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:17:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:20:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:20:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:21:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:21:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:21:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:21:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:21:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:25:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:25:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:25:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:25:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:25:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:25:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:26:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:26:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:26:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:26:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:26:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:26:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:31:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:31:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:31:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:31:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:31:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:31:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:31:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:35:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:35:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:35:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:35:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:35:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:35:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:35:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:36:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:36:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:36:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:36:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:37:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:37:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:37:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:37:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:37:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:37:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:37:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:37:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:37:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:37:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:37:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:37:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:37:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:37:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:40:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:40:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:40:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:40:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:40:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:40:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:40:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:41:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:41:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:41:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:41:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:41:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:41:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:41:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:46:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:46:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:46:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:46:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:46:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:46:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:46:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:46:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:46:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:46:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:46:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:46:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:46:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:46:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:49:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:49:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:49:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:49:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:49:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:49:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:49:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:49:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:49:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:49:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:49:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:49:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:50:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:50:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:50:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:50:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:50:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:50:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 22:51:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 22:51:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 22:51:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 22:51:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 22:51:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 22:51:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 22:51:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:01:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:01:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:01:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:01:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:01:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:01:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:01:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:09:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:09:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:09:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:09:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:09:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:09:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:09:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:27:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:27:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:27:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:27:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:27:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:27:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:27:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:28:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:28:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:28:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:28:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:28:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:28:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:28:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:29:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:29:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:29:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:29:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:29:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:29:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:29:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:29:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:29:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:29:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:29:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:29:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:29:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:30:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:30:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:30:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:30:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:30:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:30:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:30:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:30:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:30:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:30:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:30:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:30:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:30:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:36:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:36:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:36:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:37:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:37:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:37:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:37:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:37:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:37:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:37:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:39:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:39:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:57:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-19 23:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-19 23:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-19 23:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-19 23:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-19 23:57:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-19 23:57:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:07:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:07:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:07:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:07:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:07:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:07:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:07:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:07:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:07:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:07:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:08:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:08:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:08:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:08:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:08:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:08:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:08:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:13:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:13:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:13:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:13:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:13:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:13:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:13:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:13:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:13:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:13:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:13:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:13:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:13:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:14:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:14:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:14:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:14:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:14:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:14:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:14:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:14:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:14:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:14:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:15:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:15:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:15:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:15:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:15:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:15:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:15:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:15:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:15:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:15:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:21:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:21:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:21:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:21:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:21:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:21:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:21:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:29:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:29:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:29:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:29:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:29:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:29:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:29:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:31:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:31:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:31:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:31:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:31:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:31:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:31:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:32:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:32:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:32:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:32:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:32:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:32:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:32:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:37:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:37:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:37:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:37:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:37:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:37:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:37:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:37:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:37:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:37:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:37:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:37:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:37:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:38:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:38:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:38:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:38:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:38:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:38:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:38:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:38:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:38:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:38:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:38:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:38:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:38:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:40:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:40:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:42:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:42:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:42:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:42:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:42:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:51:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:51:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:53:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:53:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:53:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:53:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:53:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:53:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:53:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:53:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:53:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:53:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:53:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:53:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:53:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:53:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:57:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:57:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:57:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:57:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:57:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:57:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:58:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:58:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 00:58:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 00:58:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:58:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:58:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:58:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:58:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 00:58:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:03:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:03:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:03:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:03:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:03:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:03:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:03:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:03:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:07:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:07:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:07:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:07:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:07:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:07:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:07:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:07:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:07:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:07:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:07:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:07:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:07:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:07:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:12:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:12:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:12:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:12:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:12:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:12:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:13:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:13:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:13:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:13:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:13:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:13:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:13:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:13:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:13:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:13:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:13:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:13:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:16:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:16:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:16:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:16:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:16:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:16:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:16:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:16:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:16:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:16:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:16:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:16:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:17:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:17:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:17:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:17:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:17:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:17:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:17:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:20:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:20:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:20:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:20:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:20:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:20:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:20:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:20:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:20:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:20:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:20:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:20:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:20:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:21:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:21:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:21:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:21:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:21:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:21:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:21:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:21:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:21:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:21:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:21:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:21:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:21:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:21:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:21:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:21:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:21:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:21:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:21:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:21:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:21:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:21:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:22:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:22:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:22:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:22:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:22:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:22:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:22:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:24:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:24:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:24:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:24:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:24:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:24:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:24:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:30:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:30:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:30:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:30:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:30:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:30:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:30:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:35:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:35:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:35:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:35:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:35:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:35:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:35:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:35:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:35:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:35:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:35:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:35:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:37:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:37:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:37:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:37:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:38:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:38:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:38:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:38:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:38:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:38:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:38:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:38:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:38:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:38:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:39:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:39:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:39:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:39:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:39:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:39:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:40:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:40:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:40:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:40:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:40:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:40:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:40:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:40:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:41:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:41:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:41:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:41:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:41:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:41:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:44:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:44:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:44:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:44:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:44:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:44:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:44:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:45:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:45:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:45:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:45:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:45:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:45:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:45:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:49:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:49:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:49:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:49:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:49:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:49:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 01:49:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 01:49:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 01:49:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 01:49:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 01:49:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 01:49:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 01:49:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:00:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:00:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:00:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:00:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:00:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:00:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:01:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:01:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:02:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:02:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:02:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:03:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:03:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:03:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:03:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:03:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:03:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:03:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:05:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:05:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:05:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:05:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:05:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:05:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:06:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:06:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:06:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:06:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:06:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:06:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:06:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:06:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:06:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:06:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:06:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:07:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:07:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:07:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:07:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:07:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:07:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:07:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:07:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:07:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:07:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:07:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:07:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:07:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:08:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:08:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:08:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:08:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:08:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:08:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:08:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:11:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:11:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:11:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:11:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:11:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:11:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:11:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:11:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:11:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:11:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:11:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:11:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:12:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:12:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:12:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:12:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:12:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:12:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:12:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:12:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:12:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:15:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:15:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:15:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:15:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:15:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:15:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:15:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:16:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:16:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:16:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:16:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:16:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:16:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:16:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:16:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:16:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:42:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:42:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:42:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:42:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:42:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:42:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:42:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:42:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:42:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:42:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:42:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:43:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:43:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:43:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:43:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:43:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:43:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:45:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:45:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:45:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:45:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 02:46:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 02:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:56:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:56:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:57:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 02:57:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:02:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:02:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:02:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:02:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:03:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:04:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:04:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:07:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:07:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:10:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:10:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:10:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:10:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:16:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:16:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:16:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:16:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:16:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:16:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:16:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:16:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:16:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:19:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:19:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:21:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:21:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:22:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:22:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:22:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:22:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:22:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:22:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:23:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:23:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:23:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:24:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:24:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:24:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:24:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:24:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:24:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:25:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:25:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:25:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:29:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:29:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:30:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:30:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:30:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:30:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:30:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:30:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:30:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:30:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:30:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:31:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:31:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:31:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:32:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:32:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:32:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:34:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:34:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:34:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:34:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:35:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:35:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:35:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:35:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:35:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:35:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:37:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:37:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:37:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:37:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:37:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:37:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:37:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:37:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:37:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:37:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:37:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:40:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:40:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:41:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:41:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:42:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:42:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:42:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:42:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:42:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:47:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:47:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:47:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:47:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:47:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:47:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:47:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:47:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:47:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:50:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:50:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:53:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:53:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:53:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:53:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:57:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:57:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:57:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:57:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:59:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 03:59:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 03:59:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 03:59:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 03:59:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 03:59:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 03:59:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 03:59:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:00:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:01:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:01:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:01:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:01:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:01:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:01:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:01:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:01:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:01:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:01:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:03:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:04:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:04:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:04:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:04:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:04:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:04:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:04:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:05:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:05:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:05:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:08:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:08:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:08:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:08:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:12:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:12:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:12:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:12:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:12:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:12:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:12:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:13:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:13:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:14:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:14:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:16:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:16:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:16:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:18:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:18:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:18:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:18:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:18:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:18:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:19:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:19:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:19:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:19:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:20:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:20:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:20:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:20:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:20:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:20:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:20:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:20:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:20:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:20:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:22:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:22:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:22:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:22:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:23:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:23:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:23:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:23:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:23:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:23:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:23:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:23:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:23:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:23:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:24:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:24:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:24:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:24:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:24:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:24:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:25:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:25:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:25:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:26:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:27:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:27:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:27:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:28:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:29:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:29:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:29:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:29:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:29:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:29:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:30:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:30:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:30:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:30:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:30:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:30:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:30:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:30:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:30:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:30:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:30:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:31:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:31:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:32:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:32:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:32:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:34:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:34:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:35:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:35:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:35:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:35:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:37:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:37:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:37:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:39:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:40:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:41:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:41:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:42:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:42:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:42:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:42:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:43:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:44:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:44:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:44:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:44:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:45:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:45:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:45:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:45:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:46:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:46:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:46:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:47:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:47:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:47:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:47:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:48:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:50:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:50:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:51:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:53:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:53:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:57:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:58:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:58:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 04:59:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 04:59:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 04:59:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 04:59:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 04:59:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 04:59:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 04:59:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 04:59:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 04:59:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 04:59:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:00:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:00:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:00:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:00:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:01:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:02:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:02:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:02:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:03:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:03:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:03:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:03:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:03:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:03:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:06:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:06:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:06:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:06:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:06:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:06:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:06:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:06:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:06:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:07:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:07:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:07:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:07:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:07:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:08:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:09:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:09:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:11:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:11:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:11:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:11:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:11:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:11:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:12:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:13:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:13:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:15:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:15:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:15:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:16:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:16:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 05:16:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 05:16:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:39 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:39 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:16:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 05:17:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 16:14:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 16:14:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 16:14:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 16:14:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 16:14:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 16:14:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 16:14:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 16:14:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 16:14:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 16:14:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:14:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:15:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 16:15:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 16:39:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:39:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:40:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:40:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:40:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:40:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:41:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:41:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:41:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:41:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:43:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:43:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:46:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:46:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:55:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 16:55:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:01:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:01:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:01:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:01:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:29 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:29 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:02:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 17:03:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 17:03:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 17:03:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 17:03:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 17:03:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 17:03:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:03:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 17:03:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 17:04:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:04:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:05:02 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:05:02 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:05:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:05:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 17:06:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:31:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:31:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:31:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:31:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:31:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:32:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:32:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:32:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:32:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:32:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:32:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:32:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:32:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:33:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:33:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:33:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:33:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:33:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:33:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:33:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:33:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:34:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:44:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:44:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:44:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:44:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:44:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:44:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:44:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:44:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:44:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:44:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:44:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:44:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:45:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:45:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:45:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:45:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:45:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:45:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:45:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:45:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:48:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:48:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:48:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:55:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:55:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:55:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:55:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:55:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:56:52 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:56:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:56:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:56:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:56:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:57:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:57:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:57:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:58:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:58:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:58:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:58:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:58:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:58:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:58:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:58:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 18:59:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 18:59:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 18:59:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 19:00:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 19:00:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 19:00:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 19:00:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 19:00:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 19:00:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:00:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 19:09:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 19:09:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:56:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:56:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 19:57:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 19:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 19:57:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:11:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:12:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:12:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:15:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:15:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:55:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 20:55:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 20:55:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 20:55:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 20:55:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 20:55:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 20:55:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 20:55:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 20:55:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 20:55:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 20:56:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 20:56:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 20:56:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:08:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:08:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 21:53:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:53:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:53:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 21:54:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:54:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:54:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 21:56:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 21:56:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 21:56:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 21:56:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 21:56:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 21:56:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 21:56:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:56:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 21:56:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:57 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:56:57 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:57:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:57:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 21:59:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 21:59:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 21:59:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:00:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:00:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:07 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:00:07 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:01:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:01:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:01:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:01:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:04:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:04:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:04:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:05:06 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:05:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:05:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:09:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:09:24 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:09:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:09:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:11:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:11:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:11:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:11:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:11:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:11:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:11:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:11:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:11:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:11:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:20:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:20:30 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:20:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:20:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:21:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:21:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:21:58 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:21:58 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:22:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:22:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:22:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:22:27 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:22:27 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:22:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:22:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:22:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:22:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:22:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:22:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:05 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:05 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:23:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:29:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-20 22:29:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-20 22:29:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-20 22:29:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-20 22:29:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-20 22:29:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-20 22:29:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-20 22:29:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:29:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-20 22:29:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-20 22:30:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:30:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:30:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:30:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:30:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-20 22:30:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 00:16:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 00:16:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 00:16:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 00:16:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 00:16:04 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 00:31:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.0 +2026-01-21 00:31:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.0 +2026-01-21 02:48:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:48:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:48:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:48:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:49:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:49:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:42 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:49:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:50:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:50:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:50:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:50:50 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:51:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:51:10 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:51:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:51:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:15 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:15 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cursor/2.3.41 +2026-01-21 02:51:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:51:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:56:47 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 02:56:47 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 02:56:48 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 02:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:14 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:14 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:41 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:41 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:45 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 02:57:45 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:07:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:07:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:07:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:07:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:07:44 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:08:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:08:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:08:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:08:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:08:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:08:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:25:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:25:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:25:11 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:25:11 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:25:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:27:25 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:27:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:27:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:27:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:27:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:27:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:27:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:27:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:27:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:27:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:27:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:28:28 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:28:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:28:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:54 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:28:54 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:29:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:29:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:29:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:29:12 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:29:12 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:29:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:29:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:29:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:29:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:29:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:16 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:16 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:29:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:31:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:31:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:31:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:31:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:31:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:31:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:31:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:31:09 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:31:09 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:31:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:31:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:33:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:33:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:56 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:33:56 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:35:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:35:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:35:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:35:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:35:59 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:35:59 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:36:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:00 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:36:00 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:03 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:03 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:36:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:36:20 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:36:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:36:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:40:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:40:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:40:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:40:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:40:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:40:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:40 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:40:40 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: node +2026-01-21 03:43:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: node +2026-01-21 03:44:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:17 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:17 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:18 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:18 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: node +2026-01-21 03:44:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: node +2026-01-21 03:44:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: node +2026-01-21 03:44:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: node +2026-01-21 03:44:31 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: node +2026-01-21 03:44:31 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: node +2026-01-21 03:44:33 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:33 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/settings/ | Method: GET | View: SettingDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/banners/ | Method: GET | View: BannerDetailView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:34 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:34 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-tree/ | Method: GET | View: ProductListTreeAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products-featured/ | Method: GET | View: FeaturedProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:38 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 03:44:38 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/products/ | Method: GET | View: ProductListAPIView | User: anonymous | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:22:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:22:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:22:53 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:22:53 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:23:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:23:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:24:46 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:24:46 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:19 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:19 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:22 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:22 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/post/ | Method: GET | View: PostList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:43 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/categories/ | Method: GET | View: CategoryList | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-01-21 04:30:43 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/blog/categories/ | Method: GET | View: CategoryList | User: user_id:1 | email:beyhan@beyhan.dev | staff:True | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0 +2026-02-23 21:03:55 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:03:55 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:04:13 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:04:13 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:05:51 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:05:51 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:08 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:08 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:23 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:23 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:36 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:36 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: localhost | Path: /api/v1/auth/users/ | Method: POST | View: UserViewSet | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:49 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:06:49 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:21 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:21 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:37 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:08:37 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:56:26 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:56:26 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:56:32 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:56:32 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:58:01 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:58:01 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:58:35 - throttling - INFO - [ANON THROTTLE - BYPASS] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User-Agent: PostmanRuntime/7.51.1 +2026-02-23 21:58:35 - throttling - INFO - [USER THROTTLE - BYPASS (HOST)] Real-IP: 127.0.0.1 | | Host: 127.0.0.1 | Path: /api/v1/auth/jwt/create/ | Method: POST | View: TokenObtainPairView | User: anonymous | User-Agent: PostmanRuntime/7.51.1 diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..f2a662c --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012.avif b/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012.avif new file mode 100644 index 0000000..9af6a54 Binary files /dev/null and b/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012.avif differ diff --git a/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012_xNULVUs.avif b/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012_xNULVUs.avif new file mode 100644 index 0000000..9af6a54 Binary files /dev/null and b/media/CACHE/images/uploads/products/01647e0869354e45934a1864abeeea9c/b6713274c5e5bccdd8fc178f5ae0b012_xNULVUs.avif differ diff --git a/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3.avif b/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3.avif new file mode 100644 index 0000000..9a8cff5 Binary files /dev/null and b/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3.avif differ diff --git a/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3_Q7QJe3u.avif b/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3_Q7QJe3u.avif new file mode 100644 index 0000000..9a8cff5 Binary files /dev/null and b/media/CACHE/images/uploads/products/076571893ea54a20babb78047bbeeb0d/15762c575a0038cddb270d154795adb3_Q7QJe3u.avif differ diff --git a/media/CACHE/images/uploads/products/079022c7ce2f4490a8789327dd08deb5/88dfb0c01d1deb6e7c885ef7e5dbff5b.avif b/media/CACHE/images/uploads/products/079022c7ce2f4490a8789327dd08deb5/88dfb0c01d1deb6e7c885ef7e5dbff5b.avif new file mode 100644 index 0000000..b27a5cd Binary files /dev/null and b/media/CACHE/images/uploads/products/079022c7ce2f4490a8789327dd08deb5/88dfb0c01d1deb6e7c885ef7e5dbff5b.avif differ diff --git a/media/CACHE/images/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274/d339952cfe3de59d116bb81405a092a8.avif b/media/CACHE/images/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274/d339952cfe3de59d116bb81405a092a8.avif new file mode 100644 index 0000000..279e6e8 Binary files /dev/null and b/media/CACHE/images/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274/d339952cfe3de59d116bb81405a092a8.avif differ diff --git a/media/CACHE/images/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a/940596fe8d85fc31348fc45eaee54e0e.avif b/media/CACHE/images/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a/940596fe8d85fc31348fc45eaee54e0e.avif new file mode 100644 index 0000000..90b10aa Binary files /dev/null and b/media/CACHE/images/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a/940596fe8d85fc31348fc45eaee54e0e.avif differ diff --git a/media/CACHE/images/uploads/products/0e8ecc98f3da47ba9d20d90b2096142a/1de1d35d735ee9a955811d0e2ea4212a.avif b/media/CACHE/images/uploads/products/0e8ecc98f3da47ba9d20d90b2096142a/1de1d35d735ee9a955811d0e2ea4212a.avif new file mode 100644 index 0000000..0097259 Binary files /dev/null and b/media/CACHE/images/uploads/products/0e8ecc98f3da47ba9d20d90b2096142a/1de1d35d735ee9a955811d0e2ea4212a.avif differ diff --git a/media/CACHE/images/uploads/products/1015337b0ad0481d9ff5648d0df5def7/e3bd98b7eece3e126612b9366b67675b.avif b/media/CACHE/images/uploads/products/1015337b0ad0481d9ff5648d0df5def7/e3bd98b7eece3e126612b9366b67675b.avif new file mode 100644 index 0000000..4a434e5 Binary files /dev/null and b/media/CACHE/images/uploads/products/1015337b0ad0481d9ff5648d0df5def7/e3bd98b7eece3e126612b9366b67675b.avif differ diff --git a/media/CACHE/images/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f/6c6bd2c68832de8c70f53cb57335a4b8.avif b/media/CACHE/images/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f/6c6bd2c68832de8c70f53cb57335a4b8.avif new file mode 100644 index 0000000..7cde155 Binary files /dev/null and b/media/CACHE/images/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f/6c6bd2c68832de8c70f53cb57335a4b8.avif differ diff --git a/media/CACHE/images/uploads/products/110da39e89aa419095c8cbb038758327/bad5e7227c11e981996cefd1eec18bb7.avif b/media/CACHE/images/uploads/products/110da39e89aa419095c8cbb038758327/bad5e7227c11e981996cefd1eec18bb7.avif new file mode 100644 index 0000000..6e68cc9 Binary files /dev/null and b/media/CACHE/images/uploads/products/110da39e89aa419095c8cbb038758327/bad5e7227c11e981996cefd1eec18bb7.avif differ diff --git a/media/CACHE/images/uploads/products/11c2b37f9aa74de98f273a193d221d75/1d38450684e614dbe81c340afe42bee7.avif b/media/CACHE/images/uploads/products/11c2b37f9aa74de98f273a193d221d75/1d38450684e614dbe81c340afe42bee7.avif new file mode 100644 index 0000000..88116da Binary files /dev/null and b/media/CACHE/images/uploads/products/11c2b37f9aa74de98f273a193d221d75/1d38450684e614dbe81c340afe42bee7.avif differ diff --git a/media/CACHE/images/uploads/products/12247ed5deff477ba5caa7f0f33181c7/6280ba52775ada0b5c051fd391a54ba0.avif b/media/CACHE/images/uploads/products/12247ed5deff477ba5caa7f0f33181c7/6280ba52775ada0b5c051fd391a54ba0.avif new file mode 100644 index 0000000..f9a6759 Binary files /dev/null and b/media/CACHE/images/uploads/products/12247ed5deff477ba5caa7f0f33181c7/6280ba52775ada0b5c051fd391a54ba0.avif differ diff --git a/media/CACHE/images/uploads/products/124b632352034d57ab7c887ace0c4f79/31b1fb25ade545ef1066910d787c599a.avif b/media/CACHE/images/uploads/products/124b632352034d57ab7c887ace0c4f79/31b1fb25ade545ef1066910d787c599a.avif new file mode 100644 index 0000000..bc4e658 Binary files /dev/null and b/media/CACHE/images/uploads/products/124b632352034d57ab7c887ace0c4f79/31b1fb25ade545ef1066910d787c599a.avif differ diff --git a/media/CACHE/images/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c/37bae262d690a6f7e7b415057a6252cb.avif b/media/CACHE/images/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c/37bae262d690a6f7e7b415057a6252cb.avif new file mode 100644 index 0000000..5830a1d Binary files /dev/null and b/media/CACHE/images/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c/37bae262d690a6f7e7b415057a6252cb.avif differ diff --git a/media/CACHE/images/uploads/products/196dab60986f4541a4c929a64493dcdd/faca4a4f1309e6d596274bb86fc1c51b.avif b/media/CACHE/images/uploads/products/196dab60986f4541a4c929a64493dcdd/faca4a4f1309e6d596274bb86fc1c51b.avif new file mode 100644 index 0000000..0104a3d Binary files /dev/null and b/media/CACHE/images/uploads/products/196dab60986f4541a4c929a64493dcdd/faca4a4f1309e6d596274bb86fc1c51b.avif differ diff --git a/media/CACHE/images/uploads/products/1b9412b789344983afdf8d75e4f1f0b9/6b23caa6975b08ef2231d35566f69ed5.avif b/media/CACHE/images/uploads/products/1b9412b789344983afdf8d75e4f1f0b9/6b23caa6975b08ef2231d35566f69ed5.avif new file mode 100644 index 0000000..226cb16 Binary files /dev/null and b/media/CACHE/images/uploads/products/1b9412b789344983afdf8d75e4f1f0b9/6b23caa6975b08ef2231d35566f69ed5.avif differ diff --git a/media/CACHE/images/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c/5b72a8ddf4c0ee1f6386cb73d1041716.avif b/media/CACHE/images/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c/5b72a8ddf4c0ee1f6386cb73d1041716.avif new file mode 100644 index 0000000..fe11605 Binary files /dev/null and b/media/CACHE/images/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c/5b72a8ddf4c0ee1f6386cb73d1041716.avif differ diff --git a/media/CACHE/images/uploads/products/1e0f7f405e0a4d2581d112136171a16a/b72848669a4d95c60c717fc6d96aee5c.avif b/media/CACHE/images/uploads/products/1e0f7f405e0a4d2581d112136171a16a/b72848669a4d95c60c717fc6d96aee5c.avif new file mode 100644 index 0000000..f15d918 Binary files /dev/null and b/media/CACHE/images/uploads/products/1e0f7f405e0a4d2581d112136171a16a/b72848669a4d95c60c717fc6d96aee5c.avif differ diff --git a/media/CACHE/images/uploads/products/1efddf20a19941d6b8761e102b50a76f/2b47350f5be35cf7bf54fdffc38f2369.avif b/media/CACHE/images/uploads/products/1efddf20a19941d6b8761e102b50a76f/2b47350f5be35cf7bf54fdffc38f2369.avif new file mode 100644 index 0000000..6c32e5f Binary files /dev/null and b/media/CACHE/images/uploads/products/1efddf20a19941d6b8761e102b50a76f/2b47350f5be35cf7bf54fdffc38f2369.avif differ diff --git a/media/CACHE/images/uploads/products/26da983d6d534102838816dd03e16510/a616fa7705fc09fb55aad63f402275fc.avif b/media/CACHE/images/uploads/products/26da983d6d534102838816dd03e16510/a616fa7705fc09fb55aad63f402275fc.avif new file mode 100644 index 0000000..e6b81c6 Binary files /dev/null and b/media/CACHE/images/uploads/products/26da983d6d534102838816dd03e16510/a616fa7705fc09fb55aad63f402275fc.avif differ diff --git a/media/CACHE/images/uploads/products/2702e71ace9f4e5d9e250aabb06305df/f35e450dc40f662381f4ad41e1e271e7.avif b/media/CACHE/images/uploads/products/2702e71ace9f4e5d9e250aabb06305df/f35e450dc40f662381f4ad41e1e271e7.avif new file mode 100644 index 0000000..ce9b084 Binary files /dev/null and b/media/CACHE/images/uploads/products/2702e71ace9f4e5d9e250aabb06305df/f35e450dc40f662381f4ad41e1e271e7.avif differ diff --git a/media/CACHE/images/uploads/products/286428ac808c4fdbb45e2d3325d77afa/b70b273ee7633bf4d0a1cb6b7eb0b65e.avif b/media/CACHE/images/uploads/products/286428ac808c4fdbb45e2d3325d77afa/b70b273ee7633bf4d0a1cb6b7eb0b65e.avif new file mode 100644 index 0000000..e7c745a Binary files /dev/null and b/media/CACHE/images/uploads/products/286428ac808c4fdbb45e2d3325d77afa/b70b273ee7633bf4d0a1cb6b7eb0b65e.avif differ diff --git a/media/CACHE/images/uploads/products/2b105dbcdb76416cacf8d46382c9589f/fb09728834c6ffc385152d5f679b7435.avif b/media/CACHE/images/uploads/products/2b105dbcdb76416cacf8d46382c9589f/fb09728834c6ffc385152d5f679b7435.avif new file mode 100644 index 0000000..0ae5f9c Binary files /dev/null and b/media/CACHE/images/uploads/products/2b105dbcdb76416cacf8d46382c9589f/fb09728834c6ffc385152d5f679b7435.avif differ diff --git a/media/CACHE/images/uploads/products/2dd02fd80e1a4764afb1344119e7aec1/f3da7952f9191ad30267e7a7a8861233.avif b/media/CACHE/images/uploads/products/2dd02fd80e1a4764afb1344119e7aec1/f3da7952f9191ad30267e7a7a8861233.avif new file mode 100644 index 0000000..59cb1c4 Binary files /dev/null and b/media/CACHE/images/uploads/products/2dd02fd80e1a4764afb1344119e7aec1/f3da7952f9191ad30267e7a7a8861233.avif differ diff --git a/media/CACHE/images/uploads/products/2dd6171e848b473eb761eb7f28f03448/9d2c109d42cab866769f31415121583b.avif b/media/CACHE/images/uploads/products/2dd6171e848b473eb761eb7f28f03448/9d2c109d42cab866769f31415121583b.avif new file mode 100644 index 0000000..2c9fd6f Binary files /dev/null and b/media/CACHE/images/uploads/products/2dd6171e848b473eb761eb7f28f03448/9d2c109d42cab866769f31415121583b.avif differ diff --git a/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e.avif b/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e.avif new file mode 100644 index 0000000..caaff7e Binary files /dev/null and b/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e.avif differ diff --git a/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e_TjstjL2.avif b/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e_TjstjL2.avif new file mode 100644 index 0000000..caaff7e Binary files /dev/null and b/media/CACHE/images/uploads/products/36ab9644d3754604bd0074f49bb38cc5/1653567cdc16534a52481c62a1f06e1e_TjstjL2.avif differ diff --git a/media/CACHE/images/uploads/products/3875c7d1e4f94afab9f3893505d26a99/fc2e0346b1345531d4dc39a4717e21e9.avif b/media/CACHE/images/uploads/products/3875c7d1e4f94afab9f3893505d26a99/fc2e0346b1345531d4dc39a4717e21e9.avif new file mode 100644 index 0000000..245d22a Binary files /dev/null and b/media/CACHE/images/uploads/products/3875c7d1e4f94afab9f3893505d26a99/fc2e0346b1345531d4dc39a4717e21e9.avif differ diff --git a/media/CACHE/images/uploads/products/3a3e87eb62d645de96b0599bdd47a93f/c8406f442d8b2a2e622db3cddb5172c5.avif b/media/CACHE/images/uploads/products/3a3e87eb62d645de96b0599bdd47a93f/c8406f442d8b2a2e622db3cddb5172c5.avif new file mode 100644 index 0000000..cfb46c6 Binary files /dev/null and b/media/CACHE/images/uploads/products/3a3e87eb62d645de96b0599bdd47a93f/c8406f442d8b2a2e622db3cddb5172c5.avif differ diff --git a/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc.avif b/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc.avif new file mode 100644 index 0000000..6214320 Binary files /dev/null and b/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc.avif differ diff --git a/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc_9Lzc5iV.avif b/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc_9Lzc5iV.avif new file mode 100644 index 0000000..6214320 Binary files /dev/null and b/media/CACHE/images/uploads/products/3b6e6e8f4d484fe58168a144e9bfbd6d/af2f51e5e9a1b5f43be7970325ff56cc_9Lzc5iV.avif differ diff --git a/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045.avif b/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045.avif new file mode 100644 index 0000000..0d53bf8 Binary files /dev/null and b/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045.avif differ diff --git a/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045_mGJ2KBx.avif b/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045_mGJ2KBx.avif new file mode 100644 index 0000000..0d53bf8 Binary files /dev/null and b/media/CACHE/images/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa/dbc1b62b50f01703ad731e5ccc4b8045_mGJ2KBx.avif differ diff --git a/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675.avif b/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675.avif new file mode 100644 index 0000000..0e37145 Binary files /dev/null and b/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675.avif differ diff --git a/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675_5S9VTUk.avif b/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675_5S9VTUk.avif new file mode 100644 index 0000000..0e37145 Binary files /dev/null and b/media/CACHE/images/uploads/products/411e3402a405401c843dd4cf1c474bbd/e339b5dcad71daa849e5a8bf2b315675_5S9VTUk.avif differ diff --git a/media/CACHE/images/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b/594cd358d4881b5897252f664f3eee48.avif b/media/CACHE/images/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b/594cd358d4881b5897252f664f3eee48.avif new file mode 100644 index 0000000..cf844ac Binary files /dev/null and b/media/CACHE/images/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b/594cd358d4881b5897252f664f3eee48.avif differ diff --git a/media/CACHE/images/uploads/products/4988ca6025144ec48b211c25519695b9/60186d256d0de37ccdcb3c6e580b041c.avif b/media/CACHE/images/uploads/products/4988ca6025144ec48b211c25519695b9/60186d256d0de37ccdcb3c6e580b041c.avif new file mode 100644 index 0000000..b9c5de0 Binary files /dev/null and b/media/CACHE/images/uploads/products/4988ca6025144ec48b211c25519695b9/60186d256d0de37ccdcb3c6e580b041c.avif differ diff --git a/media/CACHE/images/uploads/products/4bad154b368744b5b8ebb801ffa221c1/af0581444d5a7cd4a75174c9eb650324.avif b/media/CACHE/images/uploads/products/4bad154b368744b5b8ebb801ffa221c1/af0581444d5a7cd4a75174c9eb650324.avif new file mode 100644 index 0000000..82ad44d Binary files /dev/null and b/media/CACHE/images/uploads/products/4bad154b368744b5b8ebb801ffa221c1/af0581444d5a7cd4a75174c9eb650324.avif differ diff --git a/media/CACHE/images/uploads/products/4cb51b8c23c64bdf8788712d810635f2/97febdb1de69ed6552f72d50dfb1f678.avif b/media/CACHE/images/uploads/products/4cb51b8c23c64bdf8788712d810635f2/97febdb1de69ed6552f72d50dfb1f678.avif new file mode 100644 index 0000000..a630a23 Binary files /dev/null and b/media/CACHE/images/uploads/products/4cb51b8c23c64bdf8788712d810635f2/97febdb1de69ed6552f72d50dfb1f678.avif differ diff --git a/media/CACHE/images/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25/8ea99c106852c50038d77676909e5d63.avif b/media/CACHE/images/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25/8ea99c106852c50038d77676909e5d63.avif new file mode 100644 index 0000000..00c9736 Binary files /dev/null and b/media/CACHE/images/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25/8ea99c106852c50038d77676909e5d63.avif differ diff --git a/media/CACHE/images/uploads/products/4d70bcad17eb44708a0044a19e8ff6df/8059501f227a34207be7be84454dbc47.avif b/media/CACHE/images/uploads/products/4d70bcad17eb44708a0044a19e8ff6df/8059501f227a34207be7be84454dbc47.avif new file mode 100644 index 0000000..56e06ba Binary files /dev/null and b/media/CACHE/images/uploads/products/4d70bcad17eb44708a0044a19e8ff6df/8059501f227a34207be7be84454dbc47.avif differ diff --git a/media/CACHE/images/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664/536542e15ceadca2a76dae1382abc6f0.avif b/media/CACHE/images/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664/536542e15ceadca2a76dae1382abc6f0.avif new file mode 100644 index 0000000..8cbb41c Binary files /dev/null and b/media/CACHE/images/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664/536542e15ceadca2a76dae1382abc6f0.avif differ diff --git a/media/CACHE/images/uploads/products/546367f1061143aba77bee96e831a65f/892de9e73b0573b239bd4a6e2f9af639.avif b/media/CACHE/images/uploads/products/546367f1061143aba77bee96e831a65f/892de9e73b0573b239bd4a6e2f9af639.avif new file mode 100644 index 0000000..7e9aca4 Binary files /dev/null and b/media/CACHE/images/uploads/products/546367f1061143aba77bee96e831a65f/892de9e73b0573b239bd4a6e2f9af639.avif differ diff --git a/media/CACHE/images/uploads/products/54dad439006d4edf95d94bd1a3bcc4d1/f8f7997e3646ee2b35ed546e661f27c4.avif b/media/CACHE/images/uploads/products/54dad439006d4edf95d94bd1a3bcc4d1/f8f7997e3646ee2b35ed546e661f27c4.avif new file mode 100644 index 0000000..784de93 Binary files /dev/null and b/media/CACHE/images/uploads/products/54dad439006d4edf95d94bd1a3bcc4d1/f8f7997e3646ee2b35ed546e661f27c4.avif differ diff --git a/media/CACHE/images/uploads/products/552dbe0c29b9433abf55c7975f7044ca/33aefa4e0a885a424885a23aa27e54c1.avif b/media/CACHE/images/uploads/products/552dbe0c29b9433abf55c7975f7044ca/33aefa4e0a885a424885a23aa27e54c1.avif new file mode 100644 index 0000000..1f5903a Binary files /dev/null and b/media/CACHE/images/uploads/products/552dbe0c29b9433abf55c7975f7044ca/33aefa4e0a885a424885a23aa27e54c1.avif differ diff --git a/media/CACHE/images/uploads/products/56e4e296cba849bf9dbf703d162d13f1/d285604a6d6b36580a81458b0f28cd43.avif b/media/CACHE/images/uploads/products/56e4e296cba849bf9dbf703d162d13f1/d285604a6d6b36580a81458b0f28cd43.avif new file mode 100644 index 0000000..359f2d5 Binary files /dev/null and b/media/CACHE/images/uploads/products/56e4e296cba849bf9dbf703d162d13f1/d285604a6d6b36580a81458b0f28cd43.avif differ diff --git a/media/CACHE/images/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f/3e5797e35c4a2a1dd5b517833e3d2f8a.avif b/media/CACHE/images/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f/3e5797e35c4a2a1dd5b517833e3d2f8a.avif new file mode 100644 index 0000000..735ef28 Binary files /dev/null and b/media/CACHE/images/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f/3e5797e35c4a2a1dd5b517833e3d2f8a.avif differ diff --git a/media/CACHE/images/uploads/products/58be0eea6f854a9984494893f27f3f18/55a1fd76893fea9c70b11ef51a1786f4.avif b/media/CACHE/images/uploads/products/58be0eea6f854a9984494893f27f3f18/55a1fd76893fea9c70b11ef51a1786f4.avif new file mode 100644 index 0000000..15e335b Binary files /dev/null and b/media/CACHE/images/uploads/products/58be0eea6f854a9984494893f27f3f18/55a1fd76893fea9c70b11ef51a1786f4.avif differ diff --git a/media/CACHE/images/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2/2d45056b973c7f4975aeebc5a0dd8f41.avif b/media/CACHE/images/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2/2d45056b973c7f4975aeebc5a0dd8f41.avif new file mode 100644 index 0000000..95fad8c Binary files /dev/null and b/media/CACHE/images/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2/2d45056b973c7f4975aeebc5a0dd8f41.avif differ diff --git a/media/CACHE/images/uploads/products/5a434386a3494b8fb950bd17bdff8179/3b2b79ea5fc0f059484b0f873d9cb810.avif b/media/CACHE/images/uploads/products/5a434386a3494b8fb950bd17bdff8179/3b2b79ea5fc0f059484b0f873d9cb810.avif new file mode 100644 index 0000000..4318c83 Binary files /dev/null and b/media/CACHE/images/uploads/products/5a434386a3494b8fb950bd17bdff8179/3b2b79ea5fc0f059484b0f873d9cb810.avif differ diff --git a/media/CACHE/images/uploads/products/5d676c186ad24d45888769767bf9de68/243a673820e4ab9db1622f1c10ce9d01.avif b/media/CACHE/images/uploads/products/5d676c186ad24d45888769767bf9de68/243a673820e4ab9db1622f1c10ce9d01.avif new file mode 100644 index 0000000..2a63f78 Binary files /dev/null and b/media/CACHE/images/uploads/products/5d676c186ad24d45888769767bf9de68/243a673820e4ab9db1622f1c10ce9d01.avif differ diff --git a/media/CACHE/images/uploads/products/5d784a0814af482189911249d606f603/04e527558e3347625b9e0549fdcaff50.avif b/media/CACHE/images/uploads/products/5d784a0814af482189911249d606f603/04e527558e3347625b9e0549fdcaff50.avif new file mode 100644 index 0000000..610034f Binary files /dev/null and b/media/CACHE/images/uploads/products/5d784a0814af482189911249d606f603/04e527558e3347625b9e0549fdcaff50.avif differ diff --git a/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b.avif b/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b.avif new file mode 100644 index 0000000..fafa0fe Binary files /dev/null and b/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b.avif differ diff --git a/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b_7Pyl7ho.avif b/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b_7Pyl7ho.avif new file mode 100644 index 0000000..fafa0fe Binary files /dev/null and b/media/CACHE/images/uploads/products/5dcd38cb2b3f4fbfab804429e6344141/44372d9a59bbae98e2da94ffd39fc15b_7Pyl7ho.avif differ diff --git a/media/CACHE/images/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2/2631822dd26781646ef36610ea843743.avif b/media/CACHE/images/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2/2631822dd26781646ef36610ea843743.avif new file mode 100644 index 0000000..e893566 Binary files /dev/null and b/media/CACHE/images/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2/2631822dd26781646ef36610ea843743.avif differ diff --git a/media/CACHE/images/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c/3a4961a377b922b51f30568e509d8634.avif b/media/CACHE/images/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c/3a4961a377b922b51f30568e509d8634.avif new file mode 100644 index 0000000..fbc6e41 Binary files /dev/null and b/media/CACHE/images/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c/3a4961a377b922b51f30568e509d8634.avif differ diff --git a/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9.avif b/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9.avif new file mode 100644 index 0000000..7e892a2 Binary files /dev/null and b/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9.avif differ diff --git a/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9_pfQit7E.avif b/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9_pfQit7E.avif new file mode 100644 index 0000000..7e892a2 Binary files /dev/null and b/media/CACHE/images/uploads/products/5ff06bf0ce5641269fdadd1d59b53d44/204bf961b47fa0cbcd033bce7846f4c9_pfQit7E.avif differ diff --git a/media/CACHE/images/uploads/products/602c4cd564e8472bb898e5964bb84a55/73350edbaa0f777fabf5013e0c7cedbb.avif b/media/CACHE/images/uploads/products/602c4cd564e8472bb898e5964bb84a55/73350edbaa0f777fabf5013e0c7cedbb.avif new file mode 100644 index 0000000..bb209bf Binary files /dev/null and b/media/CACHE/images/uploads/products/602c4cd564e8472bb898e5964bb84a55/73350edbaa0f777fabf5013e0c7cedbb.avif differ diff --git a/media/CACHE/images/uploads/products/608e31e713f048bfa0041a80ffbf9fb8/d6a184064da7c13bf88d80e4d1a7005a.avif b/media/CACHE/images/uploads/products/608e31e713f048bfa0041a80ffbf9fb8/d6a184064da7c13bf88d80e4d1a7005a.avif new file mode 100644 index 0000000..64e368f Binary files /dev/null and b/media/CACHE/images/uploads/products/608e31e713f048bfa0041a80ffbf9fb8/d6a184064da7c13bf88d80e4d1a7005a.avif differ diff --git a/media/CACHE/images/uploads/products/612943511f5d47e9b8031f643cd8f7d7/aa4828563cff0853be20722c9837557e.avif b/media/CACHE/images/uploads/products/612943511f5d47e9b8031f643cd8f7d7/aa4828563cff0853be20722c9837557e.avif new file mode 100644 index 0000000..09646fb Binary files /dev/null and b/media/CACHE/images/uploads/products/612943511f5d47e9b8031f643cd8f7d7/aa4828563cff0853be20722c9837557e.avif differ diff --git a/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d.avif b/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d.avif new file mode 100644 index 0000000..f4bbe28 Binary files /dev/null and b/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d.avif differ diff --git a/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d_qt8pBtp.avif b/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d_qt8pBtp.avif new file mode 100644 index 0000000..f4bbe28 Binary files /dev/null and b/media/CACHE/images/uploads/products/61687eb679cd4c31bd83316cd8d0f40f/83ac6255dcc5196ce05b92c9f7c7fc9d_qt8pBtp.avif differ diff --git a/media/CACHE/images/uploads/products/61703184dd394bc6a7b66079f702a896/d70a39fb3e8d84ad5d362959d745a6d7.avif b/media/CACHE/images/uploads/products/61703184dd394bc6a7b66079f702a896/d70a39fb3e8d84ad5d362959d745a6d7.avif new file mode 100644 index 0000000..26beb09 Binary files /dev/null and b/media/CACHE/images/uploads/products/61703184dd394bc6a7b66079f702a896/d70a39fb3e8d84ad5d362959d745a6d7.avif differ diff --git a/media/CACHE/images/uploads/products/6183cbed724f4b43ae38d63818a2c744/77553ac34c4bed5635671c19bb246497.avif b/media/CACHE/images/uploads/products/6183cbed724f4b43ae38d63818a2c744/77553ac34c4bed5635671c19bb246497.avif new file mode 100644 index 0000000..d52fc52 Binary files /dev/null and b/media/CACHE/images/uploads/products/6183cbed724f4b43ae38d63818a2c744/77553ac34c4bed5635671c19bb246497.avif differ diff --git a/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9.avif b/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9.avif new file mode 100644 index 0000000..0376c2c Binary files /dev/null and b/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9.avif differ diff --git a/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9_i6brZrP.avif b/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9_i6brZrP.avif new file mode 100644 index 0000000..0376c2c Binary files /dev/null and b/media/CACHE/images/uploads/products/66d781d4cc904b8aaa8b1e8ce157f506/5182f0a727f440afcbf6ffe9a5a65db9_i6brZrP.avif differ diff --git a/media/CACHE/images/uploads/products/6b09a03697c94cfe84883ac7a454aa9f/fc9746972179020a22a5ce31d3e1ba6e.avif b/media/CACHE/images/uploads/products/6b09a03697c94cfe84883ac7a454aa9f/fc9746972179020a22a5ce31d3e1ba6e.avif new file mode 100644 index 0000000..94de3fc Binary files /dev/null and b/media/CACHE/images/uploads/products/6b09a03697c94cfe84883ac7a454aa9f/fc9746972179020a22a5ce31d3e1ba6e.avif differ diff --git a/media/CACHE/images/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f/abd2329a2540c53013d939223155d637.avif b/media/CACHE/images/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f/abd2329a2540c53013d939223155d637.avif new file mode 100644 index 0000000..f8becd1 Binary files /dev/null and b/media/CACHE/images/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f/abd2329a2540c53013d939223155d637.avif differ diff --git a/media/CACHE/images/uploads/products/6d2c0ff3c92540358fc7bee4c61e17d3/9715ba22cfed57984a41f0c63cb0eaa1.avif b/media/CACHE/images/uploads/products/6d2c0ff3c92540358fc7bee4c61e17d3/9715ba22cfed57984a41f0c63cb0eaa1.avif new file mode 100644 index 0000000..8727478 Binary files /dev/null and b/media/CACHE/images/uploads/products/6d2c0ff3c92540358fc7bee4c61e17d3/9715ba22cfed57984a41f0c63cb0eaa1.avif differ diff --git a/media/CACHE/images/uploads/products/6f165768ffa240fbb531200fca56bb7b/0459a7a463358992f8de049b0ec5b0fb.avif b/media/CACHE/images/uploads/products/6f165768ffa240fbb531200fca56bb7b/0459a7a463358992f8de049b0ec5b0fb.avif new file mode 100644 index 0000000..9e902bd Binary files /dev/null and b/media/CACHE/images/uploads/products/6f165768ffa240fbb531200fca56bb7b/0459a7a463358992f8de049b0ec5b0fb.avif differ diff --git a/media/CACHE/images/uploads/products/71ea138d1b8546e3ab14252eb1bf663c/93a19eb64d6e8bb4a9b05bdbf6cdb0bf.avif b/media/CACHE/images/uploads/products/71ea138d1b8546e3ab14252eb1bf663c/93a19eb64d6e8bb4a9b05bdbf6cdb0bf.avif new file mode 100644 index 0000000..2657543 Binary files /dev/null and b/media/CACHE/images/uploads/products/71ea138d1b8546e3ab14252eb1bf663c/93a19eb64d6e8bb4a9b05bdbf6cdb0bf.avif differ diff --git a/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4.avif b/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4.avif new file mode 100644 index 0000000..fd765c4 Binary files /dev/null and b/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4.avif differ diff --git a/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4_XGKwfgJ.avif b/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4_XGKwfgJ.avif new file mode 100644 index 0000000..fd765c4 Binary files /dev/null and b/media/CACHE/images/uploads/products/725faaca8ebc4c2bb5a0e609c9a7de03/a70671b15db262ca1261c096b14f26b4_XGKwfgJ.avif differ diff --git a/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e.avif b/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e.avif new file mode 100644 index 0000000..e3fa532 Binary files /dev/null and b/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e.avif differ diff --git a/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e_59BxjYt.avif b/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e_59BxjYt.avif new file mode 100644 index 0000000..e3fa532 Binary files /dev/null and b/media/CACHE/images/uploads/products/732307e84871479e80c37a990477a6a2/b6d9aeea7bea2680531883492d94e11e_59BxjYt.avif differ diff --git a/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f.avif b/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f.avif new file mode 100644 index 0000000..b1b51ab Binary files /dev/null and b/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f.avif differ diff --git a/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f_1iMKWkf.avif b/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f_1iMKWkf.avif new file mode 100644 index 0000000..b1b51ab Binary files /dev/null and b/media/CACHE/images/uploads/products/73876e0e045d4a00b3ed55535a036d54/7834c83186ac6f9ad0f017ce03fd636f_1iMKWkf.avif differ diff --git a/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36.avif b/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36.avif new file mode 100644 index 0000000..a11ec60 Binary files /dev/null and b/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36.avif differ diff --git a/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36_5iPsrnG.avif b/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36_5iPsrnG.avif new file mode 100644 index 0000000..a11ec60 Binary files /dev/null and b/media/CACHE/images/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3/882d9991605c2cd1bf43c03943bf0a36_5iPsrnG.avif differ diff --git a/media/CACHE/images/uploads/products/7405e7744403436f8e50dd1daf42c376/924603e693b578da7b09fba2f9883f20.avif b/media/CACHE/images/uploads/products/7405e7744403436f8e50dd1daf42c376/924603e693b578da7b09fba2f9883f20.avif new file mode 100644 index 0000000..4de4e94 Binary files /dev/null and b/media/CACHE/images/uploads/products/7405e7744403436f8e50dd1daf42c376/924603e693b578da7b09fba2f9883f20.avif differ diff --git a/media/CACHE/images/uploads/products/742a36851b164918a52816df17cbad98/0e64b1f8a9986139ee132cb96068829e.avif b/media/CACHE/images/uploads/products/742a36851b164918a52816df17cbad98/0e64b1f8a9986139ee132cb96068829e.avif new file mode 100644 index 0000000..6cd875c Binary files /dev/null and b/media/CACHE/images/uploads/products/742a36851b164918a52816df17cbad98/0e64b1f8a9986139ee132cb96068829e.avif differ diff --git a/media/CACHE/images/uploads/products/7a8a9cfe64974409b367ca6eb72c37a3/03998e272fa2141a771f37addbccdd3a.avif b/media/CACHE/images/uploads/products/7a8a9cfe64974409b367ca6eb72c37a3/03998e272fa2141a771f37addbccdd3a.avif new file mode 100644 index 0000000..bb8e2a0 Binary files /dev/null and b/media/CACHE/images/uploads/products/7a8a9cfe64974409b367ca6eb72c37a3/03998e272fa2141a771f37addbccdd3a.avif differ diff --git a/media/CACHE/images/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9/70520b2d54e8d14613fff2afe94d87fe.avif b/media/CACHE/images/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9/70520b2d54e8d14613fff2afe94d87fe.avif new file mode 100644 index 0000000..47e471f Binary files /dev/null and b/media/CACHE/images/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9/70520b2d54e8d14613fff2afe94d87fe.avif differ diff --git a/media/CACHE/images/uploads/products/7d54c58b6bdb4f979b257127a20c15f7/82e49fe2cbaf903e759f16700c2fd1a5.avif b/media/CACHE/images/uploads/products/7d54c58b6bdb4f979b257127a20c15f7/82e49fe2cbaf903e759f16700c2fd1a5.avif new file mode 100644 index 0000000..be2340a Binary files /dev/null and b/media/CACHE/images/uploads/products/7d54c58b6bdb4f979b257127a20c15f7/82e49fe2cbaf903e759f16700c2fd1a5.avif differ diff --git a/media/CACHE/images/uploads/products/7ed1c866c19c41bbafc5c486752444e4/64eaee8acbfdbf03b78367a8dd3580fe.avif b/media/CACHE/images/uploads/products/7ed1c866c19c41bbafc5c486752444e4/64eaee8acbfdbf03b78367a8dd3580fe.avif new file mode 100644 index 0000000..1a87cdb Binary files /dev/null and b/media/CACHE/images/uploads/products/7ed1c866c19c41bbafc5c486752444e4/64eaee8acbfdbf03b78367a8dd3580fe.avif differ diff --git a/media/CACHE/images/uploads/products/7eda2deff2f9477db59b582b6b1a7692/b97ee416a2223c71ebbbb7d32a34c582.avif b/media/CACHE/images/uploads/products/7eda2deff2f9477db59b582b6b1a7692/b97ee416a2223c71ebbbb7d32a34c582.avif new file mode 100644 index 0000000..335308a Binary files /dev/null and b/media/CACHE/images/uploads/products/7eda2deff2f9477db59b582b6b1a7692/b97ee416a2223c71ebbbb7d32a34c582.avif differ diff --git a/media/CACHE/images/uploads/products/810979e81f5541c28974cf5ede8d0ad4/7c6e0094c07737b4274cf6b9809e6ed1.avif b/media/CACHE/images/uploads/products/810979e81f5541c28974cf5ede8d0ad4/7c6e0094c07737b4274cf6b9809e6ed1.avif new file mode 100644 index 0000000..27c5292 Binary files /dev/null and b/media/CACHE/images/uploads/products/810979e81f5541c28974cf5ede8d0ad4/7c6e0094c07737b4274cf6b9809e6ed1.avif differ diff --git a/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d.avif b/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d.avif new file mode 100644 index 0000000..662c91f Binary files /dev/null and b/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d.avif differ diff --git a/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d_ilivRGR.avif b/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d_ilivRGR.avif new file mode 100644 index 0000000..662c91f Binary files /dev/null and b/media/CACHE/images/uploads/products/810d46a5540047ef9397c6601922a0ac/c45b5986a0629e9d95964625ab26c71d_ilivRGR.avif differ diff --git a/media/CACHE/images/uploads/products/8669e88ff3784a839e9a6a6dea1c6f2f/dc894d9a16d8b30b1bd072148c4612e1.avif b/media/CACHE/images/uploads/products/8669e88ff3784a839e9a6a6dea1c6f2f/dc894d9a16d8b30b1bd072148c4612e1.avif new file mode 100644 index 0000000..8ccd930 Binary files /dev/null and b/media/CACHE/images/uploads/products/8669e88ff3784a839e9a6a6dea1c6f2f/dc894d9a16d8b30b1bd072148c4612e1.avif differ diff --git a/media/CACHE/images/uploads/products/893c89d3fade4a24b1a898a9c20adbd1/001951d1906a51082b0dd8d7c89fc430.avif b/media/CACHE/images/uploads/products/893c89d3fade4a24b1a898a9c20adbd1/001951d1906a51082b0dd8d7c89fc430.avif new file mode 100644 index 0000000..16ac591 Binary files /dev/null and b/media/CACHE/images/uploads/products/893c89d3fade4a24b1a898a9c20adbd1/001951d1906a51082b0dd8d7c89fc430.avif differ diff --git a/media/CACHE/images/uploads/products/89622000de974008b1a48ae6017b729b/0f2782bb384c7df7635336ad572a535c.avif b/media/CACHE/images/uploads/products/89622000de974008b1a48ae6017b729b/0f2782bb384c7df7635336ad572a535c.avif new file mode 100644 index 0000000..4071acf Binary files /dev/null and b/media/CACHE/images/uploads/products/89622000de974008b1a48ae6017b729b/0f2782bb384c7df7635336ad572a535c.avif differ diff --git a/media/CACHE/images/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af/a07976c17ba311bbb416500b27aed711.avif b/media/CACHE/images/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af/a07976c17ba311bbb416500b27aed711.avif new file mode 100644 index 0000000..c7a6c7e Binary files /dev/null and b/media/CACHE/images/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af/a07976c17ba311bbb416500b27aed711.avif differ diff --git a/media/CACHE/images/uploads/products/914dd1df3e7b464788ff39fa927428ee/4553c735e077b08f5e9111b2c4dd7780.avif b/media/CACHE/images/uploads/products/914dd1df3e7b464788ff39fa927428ee/4553c735e077b08f5e9111b2c4dd7780.avif new file mode 100644 index 0000000..68c37e2 Binary files /dev/null and b/media/CACHE/images/uploads/products/914dd1df3e7b464788ff39fa927428ee/4553c735e077b08f5e9111b2c4dd7780.avif differ diff --git a/media/CACHE/images/uploads/products/9459653209704b9aacfbd8754f0ef30f/046065688579d3b4409f48beea575cd4.avif b/media/CACHE/images/uploads/products/9459653209704b9aacfbd8754f0ef30f/046065688579d3b4409f48beea575cd4.avif new file mode 100644 index 0000000..7951522 Binary files /dev/null and b/media/CACHE/images/uploads/products/9459653209704b9aacfbd8754f0ef30f/046065688579d3b4409f48beea575cd4.avif differ diff --git a/media/CACHE/images/uploads/products/999e89fafd4e46669608825c7832e3cd/f80478537ab9dc2f8ae6632b3f07ade6.avif b/media/CACHE/images/uploads/products/999e89fafd4e46669608825c7832e3cd/f80478537ab9dc2f8ae6632b3f07ade6.avif new file mode 100644 index 0000000..2050147 Binary files /dev/null and b/media/CACHE/images/uploads/products/999e89fafd4e46669608825c7832e3cd/f80478537ab9dc2f8ae6632b3f07ade6.avif differ diff --git a/media/CACHE/images/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa/3c556008a54e47e7e0a846ef5cbd9e7b.avif b/media/CACHE/images/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa/3c556008a54e47e7e0a846ef5cbd9e7b.avif new file mode 100644 index 0000000..1b38256 Binary files /dev/null and b/media/CACHE/images/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa/3c556008a54e47e7e0a846ef5cbd9e7b.avif differ diff --git a/media/CACHE/images/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e/2a4b3661e96df0712b18dd2685cce829.avif b/media/CACHE/images/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e/2a4b3661e96df0712b18dd2685cce829.avif new file mode 100644 index 0000000..355430f Binary files /dev/null and b/media/CACHE/images/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e/2a4b3661e96df0712b18dd2685cce829.avif differ diff --git a/media/CACHE/images/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144/363350b097f9218c93a8d35d75a98b0d.avif b/media/CACHE/images/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144/363350b097f9218c93a8d35d75a98b0d.avif new file mode 100644 index 0000000..ea083ce Binary files /dev/null and b/media/CACHE/images/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144/363350b097f9218c93a8d35d75a98b0d.avif differ diff --git a/media/CACHE/images/uploads/products/a1ffdd884cb442a79a7953a459539dfa/a1c204d226ec2b90530b2bfc647b313e.avif b/media/CACHE/images/uploads/products/a1ffdd884cb442a79a7953a459539dfa/a1c204d226ec2b90530b2bfc647b313e.avif new file mode 100644 index 0000000..4c5653f Binary files /dev/null and b/media/CACHE/images/uploads/products/a1ffdd884cb442a79a7953a459539dfa/a1c204d226ec2b90530b2bfc647b313e.avif differ diff --git a/media/CACHE/images/uploads/products/a2a50f65878a447bb5bfe4e761d1387d/d124798721438e884368ee2c47870dc2.avif b/media/CACHE/images/uploads/products/a2a50f65878a447bb5bfe4e761d1387d/d124798721438e884368ee2c47870dc2.avif new file mode 100644 index 0000000..23a15f4 Binary files /dev/null and b/media/CACHE/images/uploads/products/a2a50f65878a447bb5bfe4e761d1387d/d124798721438e884368ee2c47870dc2.avif differ diff --git a/media/CACHE/images/uploads/products/a3628a56cc7d42a094f7d2b768c55240/030fdd339d91ebeeeae41afc4597a389.avif b/media/CACHE/images/uploads/products/a3628a56cc7d42a094f7d2b768c55240/030fdd339d91ebeeeae41afc4597a389.avif new file mode 100644 index 0000000..6904b7b Binary files /dev/null and b/media/CACHE/images/uploads/products/a3628a56cc7d42a094f7d2b768c55240/030fdd339d91ebeeeae41afc4597a389.avif differ diff --git a/media/CACHE/images/uploads/products/a4a6856c291f45b78bf8b931f6e482f4/c4014b662b9a3a260b8a06e7772f7ead.avif b/media/CACHE/images/uploads/products/a4a6856c291f45b78bf8b931f6e482f4/c4014b662b9a3a260b8a06e7772f7ead.avif new file mode 100644 index 0000000..82cd7ea Binary files /dev/null and b/media/CACHE/images/uploads/products/a4a6856c291f45b78bf8b931f6e482f4/c4014b662b9a3a260b8a06e7772f7ead.avif differ diff --git a/media/CACHE/images/uploads/products/a82db83eec354164849522caa6587528/834e81445144ed55b74e27a71d14912b.avif b/media/CACHE/images/uploads/products/a82db83eec354164849522caa6587528/834e81445144ed55b74e27a71d14912b.avif new file mode 100644 index 0000000..17de9b5 Binary files /dev/null and b/media/CACHE/images/uploads/products/a82db83eec354164849522caa6587528/834e81445144ed55b74e27a71d14912b.avif differ diff --git a/media/CACHE/images/uploads/products/a8b6effa98dc4fafa61d66e23aa748e4/e18f8a0ddec087337bd3f319f98a577e.avif b/media/CACHE/images/uploads/products/a8b6effa98dc4fafa61d66e23aa748e4/e18f8a0ddec087337bd3f319f98a577e.avif new file mode 100644 index 0000000..275a069 Binary files /dev/null and b/media/CACHE/images/uploads/products/a8b6effa98dc4fafa61d66e23aa748e4/e18f8a0ddec087337bd3f319f98a577e.avif differ diff --git a/media/CACHE/images/uploads/products/a8e4e4d8dc924037b927311eb7196b6f/1f759ee9950620ef7bcf4d7070bea529.avif b/media/CACHE/images/uploads/products/a8e4e4d8dc924037b927311eb7196b6f/1f759ee9950620ef7bcf4d7070bea529.avif new file mode 100644 index 0000000..ea8d53c Binary files /dev/null and b/media/CACHE/images/uploads/products/a8e4e4d8dc924037b927311eb7196b6f/1f759ee9950620ef7bcf4d7070bea529.avif differ diff --git a/media/CACHE/images/uploads/products/a96efdda983e49b3b06c393f5b9759f3/d33888374fe9d66c616bbc698100d4ba.avif b/media/CACHE/images/uploads/products/a96efdda983e49b3b06c393f5b9759f3/d33888374fe9d66c616bbc698100d4ba.avif new file mode 100644 index 0000000..6c9f695 Binary files /dev/null and b/media/CACHE/images/uploads/products/a96efdda983e49b3b06c393f5b9759f3/d33888374fe9d66c616bbc698100d4ba.avif differ diff --git a/media/CACHE/images/uploads/products/a9998a2925224d2ba1f849ed74eacc33/bf51bed052f626b28bde1dd5c792c3f6.avif b/media/CACHE/images/uploads/products/a9998a2925224d2ba1f849ed74eacc33/bf51bed052f626b28bde1dd5c792c3f6.avif new file mode 100644 index 0000000..ff6c008 Binary files /dev/null and b/media/CACHE/images/uploads/products/a9998a2925224d2ba1f849ed74eacc33/bf51bed052f626b28bde1dd5c792c3f6.avif differ diff --git a/media/CACHE/images/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1/4bce3724b3defd2dba21633a1348074b.avif b/media/CACHE/images/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1/4bce3724b3defd2dba21633a1348074b.avif new file mode 100644 index 0000000..c314582 Binary files /dev/null and b/media/CACHE/images/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1/4bce3724b3defd2dba21633a1348074b.avif differ diff --git a/media/CACHE/images/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7/7d3ac23476adf9b03d30bdb884f4e1f1.avif b/media/CACHE/images/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7/7d3ac23476adf9b03d30bdb884f4e1f1.avif new file mode 100644 index 0000000..e35503b Binary files /dev/null and b/media/CACHE/images/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7/7d3ac23476adf9b03d30bdb884f4e1f1.avif differ diff --git a/media/CACHE/images/uploads/products/ade965458b5547bb85352f54381d96c3/81514bd9d8f3f049e100455f81b5ea10.avif b/media/CACHE/images/uploads/products/ade965458b5547bb85352f54381d96c3/81514bd9d8f3f049e100455f81b5ea10.avif new file mode 100644 index 0000000..0da9758 Binary files /dev/null and b/media/CACHE/images/uploads/products/ade965458b5547bb85352f54381d96c3/81514bd9d8f3f049e100455f81b5ea10.avif differ diff --git a/media/CACHE/images/uploads/products/aed87dae71ef4f6eb37f0330318d54de/481037f55f86422a67f791fab209792a.avif b/media/CACHE/images/uploads/products/aed87dae71ef4f6eb37f0330318d54de/481037f55f86422a67f791fab209792a.avif new file mode 100644 index 0000000..1f84194 Binary files /dev/null and b/media/CACHE/images/uploads/products/aed87dae71ef4f6eb37f0330318d54de/481037f55f86422a67f791fab209792a.avif differ diff --git a/media/CACHE/images/uploads/products/af4910ba69f5480c962e86bd0d43244e/76da48deb03e7a55da97c9240ba9e739.avif b/media/CACHE/images/uploads/products/af4910ba69f5480c962e86bd0d43244e/76da48deb03e7a55da97c9240ba9e739.avif new file mode 100644 index 0000000..cb94b8d Binary files /dev/null and b/media/CACHE/images/uploads/products/af4910ba69f5480c962e86bd0d43244e/76da48deb03e7a55da97c9240ba9e739.avif differ diff --git a/media/CACHE/images/uploads/products/b3dcb48858d74b3abbfc385edef950b2/be4d4ab8e679072eef7de389742a626d.avif b/media/CACHE/images/uploads/products/b3dcb48858d74b3abbfc385edef950b2/be4d4ab8e679072eef7de389742a626d.avif new file mode 100644 index 0000000..11a32bc Binary files /dev/null and b/media/CACHE/images/uploads/products/b3dcb48858d74b3abbfc385edef950b2/be4d4ab8e679072eef7de389742a626d.avif differ diff --git a/media/CACHE/images/uploads/products/b4a62d4f390948ceabf8871a4d7d3f27/225086437a0f0f1c136d67a91b64f693.avif b/media/CACHE/images/uploads/products/b4a62d4f390948ceabf8871a4d7d3f27/225086437a0f0f1c136d67a91b64f693.avif new file mode 100644 index 0000000..ec8c862 Binary files /dev/null and b/media/CACHE/images/uploads/products/b4a62d4f390948ceabf8871a4d7d3f27/225086437a0f0f1c136d67a91b64f693.avif differ diff --git a/media/CACHE/images/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1/d578867920ad6ff07fb9dc329c5625e2.avif b/media/CACHE/images/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1/d578867920ad6ff07fb9dc329c5625e2.avif new file mode 100644 index 0000000..b9b9346 Binary files /dev/null and b/media/CACHE/images/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1/d578867920ad6ff07fb9dc329c5625e2.avif differ diff --git a/media/CACHE/images/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7/09d26098012f0c71ac5ac0a7b649c219.avif b/media/CACHE/images/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7/09d26098012f0c71ac5ac0a7b649c219.avif new file mode 100644 index 0000000..bd658e7 Binary files /dev/null and b/media/CACHE/images/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7/09d26098012f0c71ac5ac0a7b649c219.avif differ diff --git a/media/CACHE/images/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b/8149b6745f83e759a6ebf086e088e33c.avif b/media/CACHE/images/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b/8149b6745f83e759a6ebf086e088e33c.avif new file mode 100644 index 0000000..5418637 Binary files /dev/null and b/media/CACHE/images/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b/8149b6745f83e759a6ebf086e088e33c.avif differ diff --git a/media/CACHE/images/uploads/products/c05f8cd932b045128c7f8ff9e3963a61/11c4e5056cefe9a249f9c9435f9e70be.avif b/media/CACHE/images/uploads/products/c05f8cd932b045128c7f8ff9e3963a61/11c4e5056cefe9a249f9c9435f9e70be.avif new file mode 100644 index 0000000..e0180df Binary files /dev/null and b/media/CACHE/images/uploads/products/c05f8cd932b045128c7f8ff9e3963a61/11c4e5056cefe9a249f9c9435f9e70be.avif differ diff --git a/media/CACHE/images/uploads/products/c0f1fa4c5d394f529a8a65b52d8abafc/96fee6cd0b4749857f8bbd72a696240f.avif b/media/CACHE/images/uploads/products/c0f1fa4c5d394f529a8a65b52d8abafc/96fee6cd0b4749857f8bbd72a696240f.avif new file mode 100644 index 0000000..5a080a5 Binary files /dev/null and b/media/CACHE/images/uploads/products/c0f1fa4c5d394f529a8a65b52d8abafc/96fee6cd0b4749857f8bbd72a696240f.avif differ diff --git a/media/CACHE/images/uploads/products/c246492b7a594771be225485157b2207/b66fa170a3013a57cf0600d4a3ffbe03.avif b/media/CACHE/images/uploads/products/c246492b7a594771be225485157b2207/b66fa170a3013a57cf0600d4a3ffbe03.avif new file mode 100644 index 0000000..4ff8da9 Binary files /dev/null and b/media/CACHE/images/uploads/products/c246492b7a594771be225485157b2207/b66fa170a3013a57cf0600d4a3ffbe03.avif differ diff --git a/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c.avif b/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c.avif new file mode 100644 index 0000000..23b4ba4 Binary files /dev/null and b/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c.avif differ diff --git a/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c_1JWcRqA.avif b/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c_1JWcRqA.avif new file mode 100644 index 0000000..23b4ba4 Binary files /dev/null and b/media/CACHE/images/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f/350d8726b0876853b5df5de673bc282c_1JWcRqA.avif differ diff --git a/media/CACHE/images/uploads/products/c2f6942cbc7041fe8623871be8b8bea5/e66bb17406db09e1bbcc7938477d18e7.avif b/media/CACHE/images/uploads/products/c2f6942cbc7041fe8623871be8b8bea5/e66bb17406db09e1bbcc7938477d18e7.avif new file mode 100644 index 0000000..297ff0d Binary files /dev/null and b/media/CACHE/images/uploads/products/c2f6942cbc7041fe8623871be8b8bea5/e66bb17406db09e1bbcc7938477d18e7.avif differ diff --git a/media/CACHE/images/uploads/products/c6977be10f904209ba22f274f47ccfac/2486ac67a1ba6eb0be6e4cb3986ec6ba.avif b/media/CACHE/images/uploads/products/c6977be10f904209ba22f274f47ccfac/2486ac67a1ba6eb0be6e4cb3986ec6ba.avif new file mode 100644 index 0000000..1696031 Binary files /dev/null and b/media/CACHE/images/uploads/products/c6977be10f904209ba22f274f47ccfac/2486ac67a1ba6eb0be6e4cb3986ec6ba.avif differ diff --git a/media/CACHE/images/uploads/products/c72c51b167274e069e8918259fd73b5d/c0b26e55b899023778f7a79f50bbddb0.avif b/media/CACHE/images/uploads/products/c72c51b167274e069e8918259fd73b5d/c0b26e55b899023778f7a79f50bbddb0.avif new file mode 100644 index 0000000..114afbb Binary files /dev/null and b/media/CACHE/images/uploads/products/c72c51b167274e069e8918259fd73b5d/c0b26e55b899023778f7a79f50bbddb0.avif differ diff --git a/media/CACHE/images/uploads/products/c7d3ee78f0554c71a69c555267edd17a/e9aa39dc9a69d1a6239aa06d20c07981.avif b/media/CACHE/images/uploads/products/c7d3ee78f0554c71a69c555267edd17a/e9aa39dc9a69d1a6239aa06d20c07981.avif new file mode 100644 index 0000000..413560d Binary files /dev/null and b/media/CACHE/images/uploads/products/c7d3ee78f0554c71a69c555267edd17a/e9aa39dc9a69d1a6239aa06d20c07981.avif differ diff --git a/media/CACHE/images/uploads/products/cc1c85b10d464299a0c260ad52de3666/6e5a4b6c011de2ff47344b8a5a968080.avif b/media/CACHE/images/uploads/products/cc1c85b10d464299a0c260ad52de3666/6e5a4b6c011de2ff47344b8a5a968080.avif new file mode 100644 index 0000000..eff9131 Binary files /dev/null and b/media/CACHE/images/uploads/products/cc1c85b10d464299a0c260ad52de3666/6e5a4b6c011de2ff47344b8a5a968080.avif differ diff --git a/media/CACHE/images/uploads/products/ce8160d227314e37ac745176e4f539da/77af8463c5f67bc64599314395feea9f.avif b/media/CACHE/images/uploads/products/ce8160d227314e37ac745176e4f539da/77af8463c5f67bc64599314395feea9f.avif new file mode 100644 index 0000000..479e1cd Binary files /dev/null and b/media/CACHE/images/uploads/products/ce8160d227314e37ac745176e4f539da/77af8463c5f67bc64599314395feea9f.avif differ diff --git a/media/CACHE/images/uploads/products/d27d1832fc494a089e47fa8b725591f0/815f5569029e125dc943526e41a1df6f.avif b/media/CACHE/images/uploads/products/d27d1832fc494a089e47fa8b725591f0/815f5569029e125dc943526e41a1df6f.avif new file mode 100644 index 0000000..38e22a9 Binary files /dev/null and b/media/CACHE/images/uploads/products/d27d1832fc494a089e47fa8b725591f0/815f5569029e125dc943526e41a1df6f.avif differ diff --git a/media/CACHE/images/uploads/products/d3bc4e9c610249b986368578e2fff2a5/60bc0454ec4bbac5a22aee650b5dff2a.avif b/media/CACHE/images/uploads/products/d3bc4e9c610249b986368578e2fff2a5/60bc0454ec4bbac5a22aee650b5dff2a.avif new file mode 100644 index 0000000..83d680d Binary files /dev/null and b/media/CACHE/images/uploads/products/d3bc4e9c610249b986368578e2fff2a5/60bc0454ec4bbac5a22aee650b5dff2a.avif differ diff --git a/media/CACHE/images/uploads/products/d5861603f1604ddd8fe49f4517aee544/0fa5cddc18af21907367e55b5344882a.avif b/media/CACHE/images/uploads/products/d5861603f1604ddd8fe49f4517aee544/0fa5cddc18af21907367e55b5344882a.avif new file mode 100644 index 0000000..f204851 Binary files /dev/null and b/media/CACHE/images/uploads/products/d5861603f1604ddd8fe49f4517aee544/0fa5cddc18af21907367e55b5344882a.avif differ diff --git a/media/CACHE/images/uploads/products/d5e3fdf9a47e4dd3ad0030110719ff2d/88f83347336c8340c8c4d0f85499c54c.avif b/media/CACHE/images/uploads/products/d5e3fdf9a47e4dd3ad0030110719ff2d/88f83347336c8340c8c4d0f85499c54c.avif new file mode 100644 index 0000000..4ecb13d Binary files /dev/null and b/media/CACHE/images/uploads/products/d5e3fdf9a47e4dd3ad0030110719ff2d/88f83347336c8340c8c4d0f85499c54c.avif differ diff --git a/media/CACHE/images/uploads/products/d7ce147e91f844598c37fd6826f0c7fd/f07054a310469dad3d5356dbf06dabe1.avif b/media/CACHE/images/uploads/products/d7ce147e91f844598c37fd6826f0c7fd/f07054a310469dad3d5356dbf06dabe1.avif new file mode 100644 index 0000000..50f6d6f Binary files /dev/null and b/media/CACHE/images/uploads/products/d7ce147e91f844598c37fd6826f0c7fd/f07054a310469dad3d5356dbf06dabe1.avif differ diff --git a/media/CACHE/images/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9/21bb363bb7c7cf17d3d9651025566d3f.avif b/media/CACHE/images/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9/21bb363bb7c7cf17d3d9651025566d3f.avif new file mode 100644 index 0000000..5692bd7 Binary files /dev/null and b/media/CACHE/images/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9/21bb363bb7c7cf17d3d9651025566d3f.avif differ diff --git a/media/CACHE/images/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9/6997473b99afeb5d4e7afa3ca9002171.avif b/media/CACHE/images/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9/6997473b99afeb5d4e7afa3ca9002171.avif new file mode 100644 index 0000000..194c3bf Binary files /dev/null and b/media/CACHE/images/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9/6997473b99afeb5d4e7afa3ca9002171.avif differ diff --git a/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010.avif b/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010.avif new file mode 100644 index 0000000..94f1f48 Binary files /dev/null and b/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010.avif differ diff --git a/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010_o2CqQhW.avif b/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010_o2CqQhW.avif new file mode 100644 index 0000000..94f1f48 Binary files /dev/null and b/media/CACHE/images/uploads/products/dc878c0fd726418abd0366caf205a215/15e743d892ba91360fec9eb8d0d30010_o2CqQhW.avif differ diff --git a/media/CACHE/images/uploads/products/dd61e04d872d45a59fd9e3a9f6f5915b/e318e8f539090ef78325479babb32816.avif b/media/CACHE/images/uploads/products/dd61e04d872d45a59fd9e3a9f6f5915b/e318e8f539090ef78325479babb32816.avif new file mode 100644 index 0000000..4a6cceb Binary files /dev/null and b/media/CACHE/images/uploads/products/dd61e04d872d45a59fd9e3a9f6f5915b/e318e8f539090ef78325479babb32816.avif differ diff --git a/media/CACHE/images/uploads/products/de8ee46355574e2890d9bf07e4579ed6/69c7379a3ac349b3f6ee2b8b01a161a9.avif b/media/CACHE/images/uploads/products/de8ee46355574e2890d9bf07e4579ed6/69c7379a3ac349b3f6ee2b8b01a161a9.avif new file mode 100644 index 0000000..638f47b Binary files /dev/null and b/media/CACHE/images/uploads/products/de8ee46355574e2890d9bf07e4579ed6/69c7379a3ac349b3f6ee2b8b01a161a9.avif differ diff --git a/media/CACHE/images/uploads/products/e29ee8dfbb5545438a71f30c8ac6e0f1/2c2ba3ae8b41af7e4625c3c806aae48c.avif b/media/CACHE/images/uploads/products/e29ee8dfbb5545438a71f30c8ac6e0f1/2c2ba3ae8b41af7e4625c3c806aae48c.avif new file mode 100644 index 0000000..72cc45d Binary files /dev/null and b/media/CACHE/images/uploads/products/e29ee8dfbb5545438a71f30c8ac6e0f1/2c2ba3ae8b41af7e4625c3c806aae48c.avif differ diff --git a/media/CACHE/images/uploads/products/e45a6c1e1aaa4ff8af57261c0376c602/9b062ee06feb35ead69f9536c2264ba6.avif b/media/CACHE/images/uploads/products/e45a6c1e1aaa4ff8af57261c0376c602/9b062ee06feb35ead69f9536c2264ba6.avif new file mode 100644 index 0000000..141b835 Binary files /dev/null and b/media/CACHE/images/uploads/products/e45a6c1e1aaa4ff8af57261c0376c602/9b062ee06feb35ead69f9536c2264ba6.avif differ diff --git a/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405.avif b/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405.avif new file mode 100644 index 0000000..6486f3b Binary files /dev/null and b/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405.avif differ diff --git a/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405_xxJDlSr.avif b/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405_xxJDlSr.avif new file mode 100644 index 0000000..6486f3b Binary files /dev/null and b/media/CACHE/images/uploads/products/e52af00a2ea74e299fe76982958e6515/651217fe59398e3ec1cc56f05356a405_xxJDlSr.avif differ diff --git a/media/CACHE/images/uploads/products/e7775344340845e0bb7fe2b470fa2aa7/5d802ef29379935d6cd4146107ac004b.avif b/media/CACHE/images/uploads/products/e7775344340845e0bb7fe2b470fa2aa7/5d802ef29379935d6cd4146107ac004b.avif new file mode 100644 index 0000000..08ae0cb Binary files /dev/null and b/media/CACHE/images/uploads/products/e7775344340845e0bb7fe2b470fa2aa7/5d802ef29379935d6cd4146107ac004b.avif differ diff --git a/media/CACHE/images/uploads/products/e7e2e4f2ee174836808a213f894b1da2/dfc9242fe872b3c312cd446b59c4b237.avif b/media/CACHE/images/uploads/products/e7e2e4f2ee174836808a213f894b1da2/dfc9242fe872b3c312cd446b59c4b237.avif new file mode 100644 index 0000000..c570f66 Binary files /dev/null and b/media/CACHE/images/uploads/products/e7e2e4f2ee174836808a213f894b1da2/dfc9242fe872b3c312cd446b59c4b237.avif differ diff --git a/media/CACHE/images/uploads/products/e8039d3cae1f46bf81afcbcddea7615b/1f4e1278d39182c4e1d54f4d0ed98e90.avif b/media/CACHE/images/uploads/products/e8039d3cae1f46bf81afcbcddea7615b/1f4e1278d39182c4e1d54f4d0ed98e90.avif new file mode 100644 index 0000000..eb00f71 Binary files /dev/null and b/media/CACHE/images/uploads/products/e8039d3cae1f46bf81afcbcddea7615b/1f4e1278d39182c4e1d54f4d0ed98e90.avif differ diff --git a/media/CACHE/images/uploads/products/e89741acfc0e468285653da6d2ae5e59/14b0662bf2aa10e87fbed89accdde1ed.avif b/media/CACHE/images/uploads/products/e89741acfc0e468285653da6d2ae5e59/14b0662bf2aa10e87fbed89accdde1ed.avif new file mode 100644 index 0000000..7b68a2d Binary files /dev/null and b/media/CACHE/images/uploads/products/e89741acfc0e468285653da6d2ae5e59/14b0662bf2aa10e87fbed89accdde1ed.avif differ diff --git a/media/CACHE/images/uploads/products/e8db628ca039471f9a3ddd1705f22f5a/22531441e22ea415bf5c93f2a2a1c61b.avif b/media/CACHE/images/uploads/products/e8db628ca039471f9a3ddd1705f22f5a/22531441e22ea415bf5c93f2a2a1c61b.avif new file mode 100644 index 0000000..4deb36b Binary files /dev/null and b/media/CACHE/images/uploads/products/e8db628ca039471f9a3ddd1705f22f5a/22531441e22ea415bf5c93f2a2a1c61b.avif differ diff --git a/media/CACHE/images/uploads/products/e9733f12a094402da16c2aba4ae7e3c0/3081adee4975e57212e05d3d62c13eba.avif b/media/CACHE/images/uploads/products/e9733f12a094402da16c2aba4ae7e3c0/3081adee4975e57212e05d3d62c13eba.avif new file mode 100644 index 0000000..b80c584 Binary files /dev/null and b/media/CACHE/images/uploads/products/e9733f12a094402da16c2aba4ae7e3c0/3081adee4975e57212e05d3d62c13eba.avif differ diff --git a/media/CACHE/images/uploads/products/eb38df0a85e64658bbc80f417975f40d/e7bc01f5cd84d7ba2a07e8a9a8fe1c49.avif b/media/CACHE/images/uploads/products/eb38df0a85e64658bbc80f417975f40d/e7bc01f5cd84d7ba2a07e8a9a8fe1c49.avif new file mode 100644 index 0000000..e7d8674 Binary files /dev/null and b/media/CACHE/images/uploads/products/eb38df0a85e64658bbc80f417975f40d/e7bc01f5cd84d7ba2a07e8a9a8fe1c49.avif differ diff --git a/media/CACHE/images/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614/2b9881ddbfa9a6b4d9146b3a04e3f26f.avif b/media/CACHE/images/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614/2b9881ddbfa9a6b4d9146b3a04e3f26f.avif new file mode 100644 index 0000000..d691f53 Binary files /dev/null and b/media/CACHE/images/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614/2b9881ddbfa9a6b4d9146b3a04e3f26f.avif differ diff --git a/media/CACHE/images/uploads/products/ed742b53982d4a78a428097fc4637ae9/1687eab539ff42b5ee86f14630c647b9.avif b/media/CACHE/images/uploads/products/ed742b53982d4a78a428097fc4637ae9/1687eab539ff42b5ee86f14630c647b9.avif new file mode 100644 index 0000000..69d9b36 Binary files /dev/null and b/media/CACHE/images/uploads/products/ed742b53982d4a78a428097fc4637ae9/1687eab539ff42b5ee86f14630c647b9.avif differ diff --git a/media/CACHE/images/uploads/products/edd0edc7a8d64a139df7593481b30bcc/634860e6e189fab37169c2683b6f61bc.avif b/media/CACHE/images/uploads/products/edd0edc7a8d64a139df7593481b30bcc/634860e6e189fab37169c2683b6f61bc.avif new file mode 100644 index 0000000..abb49d7 Binary files /dev/null and b/media/CACHE/images/uploads/products/edd0edc7a8d64a139df7593481b30bcc/634860e6e189fab37169c2683b6f61bc.avif differ diff --git a/media/CACHE/images/uploads/products/efd47ea776814f1fbb4fc72165c5718b/68eae2cf3622ff8aefa045dfd9b9b25e.avif b/media/CACHE/images/uploads/products/efd47ea776814f1fbb4fc72165c5718b/68eae2cf3622ff8aefa045dfd9b9b25e.avif new file mode 100644 index 0000000..a09f9c7 Binary files /dev/null and b/media/CACHE/images/uploads/products/efd47ea776814f1fbb4fc72165c5718b/68eae2cf3622ff8aefa045dfd9b9b25e.avif differ diff --git a/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0.avif b/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0.avif new file mode 100644 index 0000000..3d065a3 Binary files /dev/null and b/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0.avif differ diff --git a/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0_odLlZMn.avif b/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0_odLlZMn.avif new file mode 100644 index 0000000..3d065a3 Binary files /dev/null and b/media/CACHE/images/uploads/products/f00a5583115049ba9c5dc898a1f87c7b/587ca969ad78e8697c789a439e2eeff0_odLlZMn.avif differ diff --git a/media/CACHE/images/uploads/products/f012ae99c97245bd87d93b9951041a8f/7d3abb43ebda70b58c44ca4a397793a2.avif b/media/CACHE/images/uploads/products/f012ae99c97245bd87d93b9951041a8f/7d3abb43ebda70b58c44ca4a397793a2.avif new file mode 100644 index 0000000..4e28320 Binary files /dev/null and b/media/CACHE/images/uploads/products/f012ae99c97245bd87d93b9951041a8f/7d3abb43ebda70b58c44ca4a397793a2.avif differ diff --git a/media/CACHE/images/uploads/products/f1d0c22698774617913ca434afa57662/65e9f17fa739e361c8cc82bffde26f5e.avif b/media/CACHE/images/uploads/products/f1d0c22698774617913ca434afa57662/65e9f17fa739e361c8cc82bffde26f5e.avif new file mode 100644 index 0000000..9960ea0 Binary files /dev/null and b/media/CACHE/images/uploads/products/f1d0c22698774617913ca434afa57662/65e9f17fa739e361c8cc82bffde26f5e.avif differ diff --git a/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572.avif b/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572.avif new file mode 100644 index 0000000..39cdcc5 Binary files /dev/null and b/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572.avif differ diff --git a/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572_VCk1ngB.avif b/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572_VCk1ngB.avif new file mode 100644 index 0000000..39cdcc5 Binary files /dev/null and b/media/CACHE/images/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5/575cebc4a9f994f49ff4ebff4809c572_VCk1ngB.avif differ diff --git a/media/CACHE/images/uploads/products/f599b169e72546d19ed51f792ade81b1/95b3a7789078fe660ff7545a0c173760.avif b/media/CACHE/images/uploads/products/f599b169e72546d19ed51f792ade81b1/95b3a7789078fe660ff7545a0c173760.avif new file mode 100644 index 0000000..a9edc89 Binary files /dev/null and b/media/CACHE/images/uploads/products/f599b169e72546d19ed51f792ade81b1/95b3a7789078fe660ff7545a0c173760.avif differ diff --git a/media/CACHE/images/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d/c6e490f0db1d099430178379d965754a.avif b/media/CACHE/images/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d/c6e490f0db1d099430178379d965754a.avif new file mode 100644 index 0000000..0f2d9af Binary files /dev/null and b/media/CACHE/images/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d/c6e490f0db1d099430178379d965754a.avif differ diff --git a/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2.avif b/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2.avif new file mode 100644 index 0000000..0a74cf4 Binary files /dev/null and b/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2.avif differ diff --git a/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2_Y7kxeZy.avif b/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2_Y7kxeZy.avif new file mode 100644 index 0000000..0a74cf4 Binary files /dev/null and b/media/CACHE/images/uploads/products/f7ab9431f73148d6aa7784cc675f5c16/cc282e4d0e79748c44a2325e88fc48b2_Y7kxeZy.avif differ diff --git a/media/CACHE/images/uploads/products/fae8cabd288b4566aafaae9136ea534e/1f287a54a539b63afd8cc04872453838.avif b/media/CACHE/images/uploads/products/fae8cabd288b4566aafaae9136ea534e/1f287a54a539b63afd8cc04872453838.avif new file mode 100644 index 0000000..9f7bccc Binary files /dev/null and b/media/CACHE/images/uploads/products/fae8cabd288b4566aafaae9136ea534e/1f287a54a539b63afd8cc04872453838.avif differ diff --git a/media/CACHE/images/uploads/products/fb43bea523d64a448c709ac25b9b6869/078fbbff2fe2c30732fcf0f432abb692.avif b/media/CACHE/images/uploads/products/fb43bea523d64a448c709ac25b9b6869/078fbbff2fe2c30732fcf0f432abb692.avif new file mode 100644 index 0000000..64dcfd6 Binary files /dev/null and b/media/CACHE/images/uploads/products/fb43bea523d64a448c709ac25b9b6869/078fbbff2fe2c30732fcf0f432abb692.avif differ diff --git a/media/CACHE/images/uploads/products/fceec0066023437cb78bd02748ac4d60/69997b1730aea6278cfef54cb7b5ba44.avif b/media/CACHE/images/uploads/products/fceec0066023437cb78bd02748ac4d60/69997b1730aea6278cfef54cb7b5ba44.avif new file mode 100644 index 0000000..8310f37 Binary files /dev/null and b/media/CACHE/images/uploads/products/fceec0066023437cb78bd02748ac4d60/69997b1730aea6278cfef54cb7b5ba44.avif differ diff --git a/media/CACHE/images/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711/148039bfafcf10a38e0b634437034c36.avif b/media/CACHE/images/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711/148039bfafcf10a38e0b634437034c36.avif new file mode 100644 index 0000000..e5c6ef0 Binary files /dev/null and b/media/CACHE/images/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711/148039bfafcf10a38e0b634437034c36.avif differ diff --git a/media/CACHE/images/uploads/products/fe29a58337314f12a2194040f241c428/5a2eb9d786886a119de16311a70d011d.avif b/media/CACHE/images/uploads/products/fe29a58337314f12a2194040f241c428/5a2eb9d786886a119de16311a70d011d.avif new file mode 100644 index 0000000..a5d365d Binary files /dev/null and b/media/CACHE/images/uploads/products/fe29a58337314f12a2194040f241c428/5a2eb9d786886a119de16311a70d011d.avif differ diff --git a/media/uploads/b_logo/cc7024e5a1e04b229a5da7f00e13f7eb.png b/media/uploads/b_logo/cc7024e5a1e04b229a5da7f00e13f7eb.png new file mode 100644 index 0000000..de6408b Binary files /dev/null and b/media/uploads/b_logo/cc7024e5a1e04b229a5da7f00e13f7eb.png differ diff --git a/media/uploads/banner/2025/Linux-Logo.wine_.jpg b/media/uploads/banner/2025/Linux-Logo.wine_.jpg new file mode 100644 index 0000000..ccd249b Binary files /dev/null and b/media/uploads/banner/2025/Linux-Logo.wine_.jpg differ diff --git a/media/uploads/banner/dacccad3b1c849cf87cb4eb3c1934703.avif b/media/uploads/banner/dacccad3b1c849cf87cb4eb3c1934703.avif new file mode 100644 index 0000000..7ebde5a Binary files /dev/null and b/media/uploads/banner/dacccad3b1c849cf87cb4eb3c1934703.avif differ diff --git a/media/uploads/banner/kucuk/2025/Linux-Logo.wine_.png b/media/uploads/banner/kucuk/2025/Linux-Logo.wine_.png new file mode 100644 index 0000000..1a7da38 Binary files /dev/null and b/media/uploads/banner/kucuk/2025/Linux-Logo.wine_.png differ diff --git a/media/uploads/cv/djsol b/media/uploads/cv/djsol new file mode 100644 index 0000000..58e9fab Binary files /dev/null and b/media/uploads/cv/djsol differ diff --git a/media/uploads/images/00283ab0323c4fb3aa2c1161963f2ee4.avif b/media/uploads/images/00283ab0323c4fb3aa2c1161963f2ee4.avif new file mode 100644 index 0000000..07b5467 Binary files /dev/null and b/media/uploads/images/00283ab0323c4fb3aa2c1161963f2ee4.avif differ diff --git a/media/uploads/images/0805a651dda644a9bdc0c9af30f2cbc8.avif b/media/uploads/images/0805a651dda644a9bdc0c9af30f2cbc8.avif new file mode 100644 index 0000000..b8c630a Binary files /dev/null and b/media/uploads/images/0805a651dda644a9bdc0c9af30f2cbc8.avif differ diff --git a/media/uploads/images/13ad688062f842338b3ede8dd3f6aacc.avif b/media/uploads/images/13ad688062f842338b3ede8dd3f6aacc.avif new file mode 100644 index 0000000..be1d87f Binary files /dev/null and b/media/uploads/images/13ad688062f842338b3ede8dd3f6aacc.avif differ diff --git a/media/uploads/images/16cd2d7e1fba4b93bcc82fc8a60f36b1.avif b/media/uploads/images/16cd2d7e1fba4b93bcc82fc8a60f36b1.avif new file mode 100644 index 0000000..8a46eaa Binary files /dev/null and b/media/uploads/images/16cd2d7e1fba4b93bcc82fc8a60f36b1.avif differ diff --git a/media/uploads/images/1b22db11bd3e4a76a8932e45026ac973.avif b/media/uploads/images/1b22db11bd3e4a76a8932e45026ac973.avif new file mode 100644 index 0000000..8e1aa93 Binary files /dev/null and b/media/uploads/images/1b22db11bd3e4a76a8932e45026ac973.avif differ diff --git a/media/uploads/images/22628c241f6b49d59bb1898db7d44b84.avif b/media/uploads/images/22628c241f6b49d59bb1898db7d44b84.avif new file mode 100644 index 0000000..cac3a3d Binary files /dev/null and b/media/uploads/images/22628c241f6b49d59bb1898db7d44b84.avif differ diff --git a/media/uploads/images/33fcd82cf2024829910ce6b5482c0345.avif b/media/uploads/images/33fcd82cf2024829910ce6b5482c0345.avif new file mode 100644 index 0000000..389b778 Binary files /dev/null and b/media/uploads/images/33fcd82cf2024829910ce6b5482c0345.avif differ diff --git a/media/uploads/images/35a0daf5ae84412ea9bc3b0f1020cd6a.avif b/media/uploads/images/35a0daf5ae84412ea9bc3b0f1020cd6a.avif new file mode 100644 index 0000000..95e137e Binary files /dev/null and b/media/uploads/images/35a0daf5ae84412ea9bc3b0f1020cd6a.avif differ diff --git a/media/uploads/images/36ca031c27bd4a93b40d7fd37076f2c5.avif b/media/uploads/images/36ca031c27bd4a93b40d7fd37076f2c5.avif new file mode 100644 index 0000000..74ae05a Binary files /dev/null and b/media/uploads/images/36ca031c27bd4a93b40d7fd37076f2c5.avif differ diff --git a/media/uploads/images/3ff46661037e473397aca53d0eabd2d6.avif b/media/uploads/images/3ff46661037e473397aca53d0eabd2d6.avif new file mode 100644 index 0000000..52c5fc8 Binary files /dev/null and b/media/uploads/images/3ff46661037e473397aca53d0eabd2d6.avif differ diff --git a/media/uploads/images/4184973d20944aa19b2a4df865133934.avif b/media/uploads/images/4184973d20944aa19b2a4df865133934.avif new file mode 100644 index 0000000..d8c3d60 Binary files /dev/null and b/media/uploads/images/4184973d20944aa19b2a4df865133934.avif differ diff --git a/media/uploads/images/59e5a9a6e4a34fd8ba6a31b8a9f23b93.avif b/media/uploads/images/59e5a9a6e4a34fd8ba6a31b8a9f23b93.avif new file mode 100644 index 0000000..db9ca60 Binary files /dev/null and b/media/uploads/images/59e5a9a6e4a34fd8ba6a31b8a9f23b93.avif differ diff --git a/media/uploads/images/5d54cee1671448f3ada6dddb748dca94.avif b/media/uploads/images/5d54cee1671448f3ada6dddb748dca94.avif new file mode 100644 index 0000000..845bb27 Binary files /dev/null and b/media/uploads/images/5d54cee1671448f3ada6dddb748dca94.avif differ diff --git a/media/uploads/images/695e77378e654675aa3b6b4e061c106e.avif b/media/uploads/images/695e77378e654675aa3b6b4e061c106e.avif new file mode 100644 index 0000000..af8898b Binary files /dev/null and b/media/uploads/images/695e77378e654675aa3b6b4e061c106e.avif differ diff --git a/media/uploads/images/6f540e06c87c4dd6858d61da66c8777d.avif b/media/uploads/images/6f540e06c87c4dd6858d61da66c8777d.avif new file mode 100644 index 0000000..9210aad Binary files /dev/null and b/media/uploads/images/6f540e06c87c4dd6858d61da66c8777d.avif differ diff --git a/media/uploads/images/6f975a0663ba4fec8d8d283495468ad4.avif b/media/uploads/images/6f975a0663ba4fec8d8d283495468ad4.avif new file mode 100644 index 0000000..84160e9 Binary files /dev/null and b/media/uploads/images/6f975a0663ba4fec8d8d283495468ad4.avif differ diff --git a/media/uploads/images/728b62290a94459faf477f226645552e.avif b/media/uploads/images/728b62290a94459faf477f226645552e.avif new file mode 100644 index 0000000..4fce120 Binary files /dev/null and b/media/uploads/images/728b62290a94459faf477f226645552e.avif differ diff --git a/media/uploads/images/7a37b38cd4aa402cb0b5079a2277a4eb.avif b/media/uploads/images/7a37b38cd4aa402cb0b5079a2277a4eb.avif new file mode 100644 index 0000000..b9300b8 Binary files /dev/null and b/media/uploads/images/7a37b38cd4aa402cb0b5079a2277a4eb.avif differ diff --git a/media/uploads/images/91246bcac15144d6a81f54df961499fb.avif b/media/uploads/images/91246bcac15144d6a81f54df961499fb.avif new file mode 100644 index 0000000..5ab8da1 Binary files /dev/null and b/media/uploads/images/91246bcac15144d6a81f54df961499fb.avif differ diff --git a/media/uploads/images/956a2795dd3e47459a3db8ec353091d0.avif b/media/uploads/images/956a2795dd3e47459a3db8ec353091d0.avif new file mode 100644 index 0000000..4908ff7 Binary files /dev/null and b/media/uploads/images/956a2795dd3e47459a3db8ec353091d0.avif differ diff --git a/media/uploads/images/977a9d444a7e4158b4f5a4f97bae555c.avif b/media/uploads/images/977a9d444a7e4158b4f5a4f97bae555c.avif new file mode 100644 index 0000000..8c6cdb6 Binary files /dev/null and b/media/uploads/images/977a9d444a7e4158b4f5a4f97bae555c.avif differ diff --git a/media/uploads/images/a7dc5c06b0ef468e91960c4f82efb95c.avif b/media/uploads/images/a7dc5c06b0ef468e91960c4f82efb95c.avif new file mode 100644 index 0000000..f06425b Binary files /dev/null and b/media/uploads/images/a7dc5c06b0ef468e91960c4f82efb95c.avif differ diff --git a/media/uploads/images/abc012fb32cd43daa2d830f51b355d25.avif b/media/uploads/images/abc012fb32cd43daa2d830f51b355d25.avif new file mode 100644 index 0000000..b94864b Binary files /dev/null and b/media/uploads/images/abc012fb32cd43daa2d830f51b355d25.avif differ diff --git a/media/uploads/images/b4d3126c226247eaa3a2edbec6c3cc30.avif b/media/uploads/images/b4d3126c226247eaa3a2edbec6c3cc30.avif new file mode 100644 index 0000000..5c95780 Binary files /dev/null and b/media/uploads/images/b4d3126c226247eaa3a2edbec6c3cc30.avif differ diff --git a/media/uploads/images/c96adbd6443341ccb56f4564a05ef1a6.avif b/media/uploads/images/c96adbd6443341ccb56f4564a05ef1a6.avif new file mode 100644 index 0000000..e15878e Binary files /dev/null and b/media/uploads/images/c96adbd6443341ccb56f4564a05ef1a6.avif differ diff --git a/media/uploads/images/d2a6ddbdd4964536b7e03728d03f3484.avif b/media/uploads/images/d2a6ddbdd4964536b7e03728d03f3484.avif new file mode 100644 index 0000000..63bcbb3 Binary files /dev/null and b/media/uploads/images/d2a6ddbdd4964536b7e03728d03f3484.avif differ diff --git a/media/uploads/images/e3206b110924444b83920886fdb5e5ca.avif b/media/uploads/images/e3206b110924444b83920886fdb5e5ca.avif new file mode 100644 index 0000000..e9da9fa Binary files /dev/null and b/media/uploads/images/e3206b110924444b83920886fdb5e5ca.avif differ diff --git a/media/uploads/images/ebb6454c52b1416887f31586c6bc7ab0.avif b/media/uploads/images/ebb6454c52b1416887f31586c6bc7ab0.avif new file mode 100644 index 0000000..19234a2 Binary files /dev/null and b/media/uploads/images/ebb6454c52b1416887f31586c6bc7ab0.avif differ diff --git a/media/uploads/images/efb0899151ca43559285b44a7f9da49a.avif b/media/uploads/images/efb0899151ca43559285b44a7f9da49a.avif new file mode 100644 index 0000000..a3f955b Binary files /dev/null and b/media/uploads/images/efb0899151ca43559285b44a7f9da49a.avif differ diff --git a/media/uploads/images/f72185d515664939a577da1f92995696.avif b/media/uploads/images/f72185d515664939a577da1f92995696.avif new file mode 100644 index 0000000..f6c3b0d Binary files /dev/null and b/media/uploads/images/f72185d515664939a577da1f92995696.avif differ diff --git a/media/uploads/logo/1200x630bb.png b/media/uploads/logo/1200x630bb.png new file mode 100644 index 0000000..708c011 Binary files /dev/null and b/media/uploads/logo/1200x630bb.png differ diff --git a/media/uploads/logo/1657955547black-google-icon.png b/media/uploads/logo/1657955547black-google-icon.png new file mode 100644 index 0000000..57eb824 Binary files /dev/null and b/media/uploads/logo/1657955547black-google-icon.png differ diff --git a/media/uploads/logo/Linux-Logo.wine_.png b/media/uploads/logo/Linux-Logo.wine_.png new file mode 100644 index 0000000..6d22fe5 Binary files /dev/null and b/media/uploads/logo/Linux-Logo.wine_.png differ diff --git a/media/uploads/logo/Linux-Logo_pfOqRkc.wine_.png b/media/uploads/logo/Linux-Logo_pfOqRkc.wine_.png new file mode 100644 index 0000000..6d22fe5 Binary files /dev/null and b/media/uploads/logo/Linux-Logo_pfOqRkc.wine_.png differ diff --git a/media/uploads/portfolio/10430e06c5104e549d7bba44bd48c5ba.avif b/media/uploads/portfolio/10430e06c5104e549d7bba44bd48c5ba.avif new file mode 100644 index 0000000..f5026dc Binary files /dev/null and b/media/uploads/portfolio/10430e06c5104e549d7bba44bd48c5ba.avif differ diff --git a/media/uploads/portfolio/134c18533175418ba37d1bf23be13679.avif b/media/uploads/portfolio/134c18533175418ba37d1bf23be13679.avif new file mode 100644 index 0000000..0c97e9a Binary files /dev/null and b/media/uploads/portfolio/134c18533175418ba37d1bf23be13679.avif differ diff --git a/media/uploads/portfolio/23e0e3430a8b45388d1b663e48eb8176.avif b/media/uploads/portfolio/23e0e3430a8b45388d1b663e48eb8176.avif new file mode 100644 index 0000000..fd6cd09 Binary files /dev/null and b/media/uploads/portfolio/23e0e3430a8b45388d1b663e48eb8176.avif differ diff --git a/media/uploads/portfolio/285d54c978b544288f26567db345bc41.avif b/media/uploads/portfolio/285d54c978b544288f26567db345bc41.avif new file mode 100644 index 0000000..d53d096 Binary files /dev/null and b/media/uploads/portfolio/285d54c978b544288f26567db345bc41.avif differ diff --git a/media/uploads/portfolio/40ae83cc3b414b7bb3c0a1cadb1f9ab7.avif b/media/uploads/portfolio/40ae83cc3b414b7bb3c0a1cadb1f9ab7.avif new file mode 100644 index 0000000..7604a6a Binary files /dev/null and b/media/uploads/portfolio/40ae83cc3b414b7bb3c0a1cadb1f9ab7.avif differ diff --git a/media/uploads/portfolio/42689da3ccb54418b35587cc8defa907.avif b/media/uploads/portfolio/42689da3ccb54418b35587cc8defa907.avif new file mode 100644 index 0000000..2fd6cd9 Binary files /dev/null and b/media/uploads/portfolio/42689da3ccb54418b35587cc8defa907.avif differ diff --git a/media/uploads/portfolio/5c16e4c7cde346b7835077c5b2c49d1b.avif b/media/uploads/portfolio/5c16e4c7cde346b7835077c5b2c49d1b.avif new file mode 100644 index 0000000..5344a79 Binary files /dev/null and b/media/uploads/portfolio/5c16e4c7cde346b7835077c5b2c49d1b.avif differ diff --git a/media/uploads/portfolio/6ea85ff652b24a07a24b1a560d3096cc.avif b/media/uploads/portfolio/6ea85ff652b24a07a24b1a560d3096cc.avif new file mode 100644 index 0000000..84a990f Binary files /dev/null and b/media/uploads/portfolio/6ea85ff652b24a07a24b1a560d3096cc.avif differ diff --git a/media/uploads/portfolio/980c33448f9e49f08c303f1633b0bf93.avif b/media/uploads/portfolio/980c33448f9e49f08c303f1633b0bf93.avif new file mode 100644 index 0000000..9f14e7b Binary files /dev/null and b/media/uploads/portfolio/980c33448f9e49f08c303f1633b0bf93.avif differ diff --git a/media/uploads/portfolio/9e560e91f75b4bb68b6442604b8c6d30.avif b/media/uploads/portfolio/9e560e91f75b4bb68b6442604b8c6d30.avif new file mode 100644 index 0000000..7405b16 Binary files /dev/null and b/media/uploads/portfolio/9e560e91f75b4bb68b6442604b8c6d30.avif differ diff --git a/media/uploads/portfolio/9eb1b722a78f41b893dfed661e48cbef.avif b/media/uploads/portfolio/9eb1b722a78f41b893dfed661e48cbef.avif new file mode 100644 index 0000000..7e412ae Binary files /dev/null and b/media/uploads/portfolio/9eb1b722a78f41b893dfed661e48cbef.avif differ diff --git a/media/uploads/portfolio/a2afc48f6532427cac863619563e3800.avif b/media/uploads/portfolio/a2afc48f6532427cac863619563e3800.avif new file mode 100644 index 0000000..f39a48c Binary files /dev/null and b/media/uploads/portfolio/a2afc48f6532427cac863619563e3800.avif differ diff --git a/media/uploads/portfolio/a7f96daf593746ca8d80e8c3824e215e.avif b/media/uploads/portfolio/a7f96daf593746ca8d80e8c3824e215e.avif new file mode 100644 index 0000000..deba839 Binary files /dev/null and b/media/uploads/portfolio/a7f96daf593746ca8d80e8c3824e215e.avif differ diff --git a/media/uploads/portfolio/b073dc58a8ea40e1bc5925492342cd61.avif b/media/uploads/portfolio/b073dc58a8ea40e1bc5925492342cd61.avif new file mode 100644 index 0000000..624eb98 Binary files /dev/null and b/media/uploads/portfolio/b073dc58a8ea40e1bc5925492342cd61.avif differ diff --git a/media/uploads/portfolio/cb27b2df1d93498aa3441fb40f4d91b9.avif b/media/uploads/portfolio/cb27b2df1d93498aa3441fb40f4d91b9.avif new file mode 100644 index 0000000..c136af7 Binary files /dev/null and b/media/uploads/portfolio/cb27b2df1d93498aa3441fb40f4d91b9.avif differ diff --git a/media/uploads/portfolio/cb370e06ed59425fbb142cd34decf7ea.avif b/media/uploads/portfolio/cb370e06ed59425fbb142cd34decf7ea.avif new file mode 100644 index 0000000..8cd107b Binary files /dev/null and b/media/uploads/portfolio/cb370e06ed59425fbb142cd34decf7ea.avif differ diff --git a/media/uploads/portfolio/d5e1d5244e8e4551b1f9454c7b73643d.avif b/media/uploads/portfolio/d5e1d5244e8e4551b1f9454c7b73643d.avif new file mode 100644 index 0000000..2e01195 Binary files /dev/null and b/media/uploads/portfolio/d5e1d5244e8e4551b1f9454c7b73643d.avif differ diff --git a/media/uploads/portfolio/e8a66d341dc341ca9c21fcdbbc3a4dbc.avif b/media/uploads/portfolio/e8a66d341dc341ca9c21fcdbbc3a4dbc.avif new file mode 100644 index 0000000..9c365cb Binary files /dev/null and b/media/uploads/portfolio/e8a66d341dc341ca9c21fcdbbc3a4dbc.avif differ diff --git a/media/uploads/portfolio/ee0e2af6e2de4dcf842fe867213e44b2.avif b/media/uploads/portfolio/ee0e2af6e2de4dcf842fe867213e44b2.avif new file mode 100644 index 0000000..a88a81c Binary files /dev/null and b/media/uploads/portfolio/ee0e2af6e2de4dcf842fe867213e44b2.avif differ diff --git a/media/uploads/portfolio/f56cf130ee6846d89f54bac33b0905dc.avif b/media/uploads/portfolio/f56cf130ee6846d89f54bac33b0905dc.avif new file mode 100644 index 0000000..46cb9c4 Binary files /dev/null and b/media/uploads/portfolio/f56cf130ee6846d89f54bac33b0905dc.avif differ diff --git a/media/uploads/portfolio/f6a585ec286a445dbcfe0cb5dfa180aa.avif b/media/uploads/portfolio/f6a585ec286a445dbcfe0cb5dfa180aa.avif new file mode 100644 index 0000000..b31fa00 Binary files /dev/null and b/media/uploads/portfolio/f6a585ec286a445dbcfe0cb5dfa180aa.avif differ diff --git a/media/uploads/portfolio/fdd509f3b0594df4a4eee64928303cde.avif b/media/uploads/portfolio/fdd509f3b0594df4a4eee64928303cde.avif new file mode 100644 index 0000000..61a4da1 Binary files /dev/null and b/media/uploads/portfolio/fdd509f3b0594df4a4eee64928303cde.avif differ diff --git a/media/uploads/post/84e43ea9eb5a4780af9312b8f3c4812c.avif b/media/uploads/post/84e43ea9eb5a4780af9312b8f3c4812c.avif new file mode 100644 index 0000000..c29584c Binary files /dev/null and b/media/uploads/post/84e43ea9eb5a4780af9312b8f3c4812c.avif differ diff --git a/media/uploads/post/9e7c649b1661401e8e4d6adae150ac34.avif b/media/uploads/post/9e7c649b1661401e8e4d6adae150ac34.avif new file mode 100644 index 0000000..260d45c Binary files /dev/null and b/media/uploads/post/9e7c649b1661401e8e4d6adae150ac34.avif differ diff --git a/media/uploads/post/fe53450098d94747ae973262ba5fe2a3.avif b/media/uploads/post/fe53450098d94747ae973262ba5fe2a3.avif new file mode 100644 index 0000000..b9729e7 Binary files /dev/null and b/media/uploads/post/fe53450098d94747ae973262ba5fe2a3.avif differ diff --git a/media/uploads/post/thumb/d10f33aecc944f5b8885ad1ed1633940.avif b/media/uploads/post/thumb/d10f33aecc944f5b8885ad1ed1633940.avif new file mode 100644 index 0000000..f97ea6c Binary files /dev/null and b/media/uploads/post/thumb/d10f33aecc944f5b8885ad1ed1633940.avif differ diff --git a/media/uploads/products/00b09b78a169474c8fbae99bb495db75.avif b/media/uploads/products/00b09b78a169474c8fbae99bb495db75.avif new file mode 100644 index 0000000..bc17ab3 Binary files /dev/null and b/media/uploads/products/00b09b78a169474c8fbae99bb495db75.avif differ diff --git a/media/uploads/products/01647e0869354e45934a1864abeeea9c.avif b/media/uploads/products/01647e0869354e45934a1864abeeea9c.avif new file mode 100644 index 0000000..0b5251c Binary files /dev/null and b/media/uploads/products/01647e0869354e45934a1864abeeea9c.avif differ diff --git a/media/uploads/products/079022c7ce2f4490a8789327dd08deb5.avif b/media/uploads/products/079022c7ce2f4490a8789327dd08deb5.avif new file mode 100644 index 0000000..8448ae3 Binary files /dev/null and b/media/uploads/products/079022c7ce2f4490a8789327dd08deb5.avif differ diff --git a/media/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274.avif b/media/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274.avif new file mode 100644 index 0000000..bea9f94 Binary files /dev/null and b/media/uploads/products/0c6aaa93e69d4cee9e78ce7bf6b7d274.avif differ diff --git a/media/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a.avif b/media/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a.avif new file mode 100644 index 0000000..ef85ca3 Binary files /dev/null and b/media/uploads/products/0d02e2f6d27a4d60a764f9a64f55b80a.avif differ diff --git a/media/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f.avif b/media/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f.avif new file mode 100644 index 0000000..bd840da Binary files /dev/null and b/media/uploads/products/10a6d14f64994aa180b2d68fc5a8b93f.avif differ diff --git a/media/uploads/products/110da39e89aa419095c8cbb038758327.avif b/media/uploads/products/110da39e89aa419095c8cbb038758327.avif new file mode 100644 index 0000000..6a17fc6 Binary files /dev/null and b/media/uploads/products/110da39e89aa419095c8cbb038758327.avif differ diff --git a/media/uploads/products/11c2b37f9aa74de98f273a193d221d75.avif b/media/uploads/products/11c2b37f9aa74de98f273a193d221d75.avif new file mode 100644 index 0000000..64a7962 Binary files /dev/null and b/media/uploads/products/11c2b37f9aa74de98f273a193d221d75.avif differ diff --git a/media/uploads/products/124b632352034d57ab7c887ace0c4f79.avif b/media/uploads/products/124b632352034d57ab7c887ace0c4f79.avif new file mode 100644 index 0000000..54d42d9 Binary files /dev/null and b/media/uploads/products/124b632352034d57ab7c887ace0c4f79.avif differ diff --git a/media/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c.avif b/media/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c.avif new file mode 100644 index 0000000..0517baa Binary files /dev/null and b/media/uploads/products/1506d35a3f0640c4b4b610ad1db6c66c.avif differ diff --git a/media/uploads/products/196dab60986f4541a4c929a64493dcdd.avif b/media/uploads/products/196dab60986f4541a4c929a64493dcdd.avif new file mode 100644 index 0000000..1d23dbd Binary files /dev/null and b/media/uploads/products/196dab60986f4541a4c929a64493dcdd.avif differ diff --git a/media/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c.avif b/media/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c.avif new file mode 100644 index 0000000..252ac35 Binary files /dev/null and b/media/uploads/products/1caf750fd0df4e9fa7f4969afdd5029c.avif differ diff --git a/media/uploads/products/1e0f7f405e0a4d2581d112136171a16a.avif b/media/uploads/products/1e0f7f405e0a4d2581d112136171a16a.avif new file mode 100644 index 0000000..76827ec Binary files /dev/null and b/media/uploads/products/1e0f7f405e0a4d2581d112136171a16a.avif differ diff --git a/media/uploads/products/1efddf20a19941d6b8761e102b50a76f.avif b/media/uploads/products/1efddf20a19941d6b8761e102b50a76f.avif new file mode 100644 index 0000000..a50f0f6 Binary files /dev/null and b/media/uploads/products/1efddf20a19941d6b8761e102b50a76f.avif differ diff --git a/media/uploads/products/26da983d6d534102838816dd03e16510.avif b/media/uploads/products/26da983d6d534102838816dd03e16510.avif new file mode 100644 index 0000000..af6676f Binary files /dev/null and b/media/uploads/products/26da983d6d534102838816dd03e16510.avif differ diff --git a/media/uploads/products/2702e71ace9f4e5d9e250aabb06305df.avif b/media/uploads/products/2702e71ace9f4e5d9e250aabb06305df.avif new file mode 100644 index 0000000..d01ff2c Binary files /dev/null and b/media/uploads/products/2702e71ace9f4e5d9e250aabb06305df.avif differ diff --git a/media/uploads/products/286428ac808c4fdbb45e2d3325d77afa.avif b/media/uploads/products/286428ac808c4fdbb45e2d3325d77afa.avif new file mode 100644 index 0000000..da098fc Binary files /dev/null and b/media/uploads/products/286428ac808c4fdbb45e2d3325d77afa.avif differ diff --git a/media/uploads/products/2b105dbcdb76416cacf8d46382c9589f.avif b/media/uploads/products/2b105dbcdb76416cacf8d46382c9589f.avif new file mode 100644 index 0000000..275a70a Binary files /dev/null and b/media/uploads/products/2b105dbcdb76416cacf8d46382c9589f.avif differ diff --git a/media/uploads/products/2dd02fd80e1a4764afb1344119e7aec1.avif b/media/uploads/products/2dd02fd80e1a4764afb1344119e7aec1.avif new file mode 100644 index 0000000..352c4d2 Binary files /dev/null and b/media/uploads/products/2dd02fd80e1a4764afb1344119e7aec1.avif differ diff --git a/media/uploads/products/3875c7d1e4f94afab9f3893505d26a99.avif b/media/uploads/products/3875c7d1e4f94afab9f3893505d26a99.avif new file mode 100644 index 0000000..dc31c84 Binary files /dev/null and b/media/uploads/products/3875c7d1e4f94afab9f3893505d26a99.avif differ diff --git a/media/uploads/products/3a3e87eb62d645de96b0599bdd47a93f.avif b/media/uploads/products/3a3e87eb62d645de96b0599bdd47a93f.avif new file mode 100644 index 0000000..5790b95 Binary files /dev/null and b/media/uploads/products/3a3e87eb62d645de96b0599bdd47a93f.avif differ diff --git a/media/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa.avif b/media/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa.avif new file mode 100644 index 0000000..a0ac0f9 Binary files /dev/null and b/media/uploads/products/3d9b9523045f4bef80cf672e2ab26dfa.avif differ diff --git a/media/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b.avif b/media/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b.avif new file mode 100644 index 0000000..9430b31 Binary files /dev/null and b/media/uploads/products/4847dc0b5b2e421e9b24edc37fa2854b.avif differ diff --git a/media/uploads/products/4988ca6025144ec48b211c25519695b9.avif b/media/uploads/products/4988ca6025144ec48b211c25519695b9.avif new file mode 100644 index 0000000..1c1e8ac Binary files /dev/null and b/media/uploads/products/4988ca6025144ec48b211c25519695b9.avif differ diff --git a/media/uploads/products/4bad154b368744b5b8ebb801ffa221c1.avif b/media/uploads/products/4bad154b368744b5b8ebb801ffa221c1.avif new file mode 100644 index 0000000..581c282 Binary files /dev/null and b/media/uploads/products/4bad154b368744b5b8ebb801ffa221c1.avif differ diff --git a/media/uploads/products/4cb51b8c23c64bdf8788712d810635f2.avif b/media/uploads/products/4cb51b8c23c64bdf8788712d810635f2.avif new file mode 100644 index 0000000..4eb9db0 Binary files /dev/null and b/media/uploads/products/4cb51b8c23c64bdf8788712d810635f2.avif differ diff --git a/media/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25.avif b/media/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25.avif new file mode 100644 index 0000000..7394387 Binary files /dev/null and b/media/uploads/products/4cf86aee4fab4b9caa4bf8a4aad6de25.avif differ diff --git a/media/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664.avif b/media/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664.avif new file mode 100644 index 0000000..f17ba56 Binary files /dev/null and b/media/uploads/products/4da60a8f3aca4191b7b49b4f9a0df664.avif differ diff --git a/media/uploads/products/546367f1061143aba77bee96e831a65f.avif b/media/uploads/products/546367f1061143aba77bee96e831a65f.avif new file mode 100644 index 0000000..80d5c5e Binary files /dev/null and b/media/uploads/products/546367f1061143aba77bee96e831a65f.avif differ diff --git a/media/uploads/products/552dbe0c29b9433abf55c7975f7044ca.avif b/media/uploads/products/552dbe0c29b9433abf55c7975f7044ca.avif new file mode 100644 index 0000000..70813e5 Binary files /dev/null and b/media/uploads/products/552dbe0c29b9433abf55c7975f7044ca.avif differ diff --git a/media/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f.avif b/media/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f.avif new file mode 100644 index 0000000..0bbd536 Binary files /dev/null and b/media/uploads/products/56e8db9d0fb14404bdc11a0813a0db4f.avif differ diff --git a/media/uploads/products/58b0c7c732644318a1cc30dab4a0dee2.avif b/media/uploads/products/58b0c7c732644318a1cc30dab4a0dee2.avif new file mode 100644 index 0000000..da4a3c5 Binary files /dev/null and b/media/uploads/products/58b0c7c732644318a1cc30dab4a0dee2.avif differ diff --git a/media/uploads/products/58be0eea6f854a9984494893f27f3f18.avif b/media/uploads/products/58be0eea6f854a9984494893f27f3f18.avif new file mode 100644 index 0000000..f0a7c6b Binary files /dev/null and b/media/uploads/products/58be0eea6f854a9984494893f27f3f18.avif differ diff --git a/media/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2.avif b/media/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2.avif new file mode 100644 index 0000000..37490d4 Binary files /dev/null and b/media/uploads/products/5a331a9725d3424fbe91e85ea2cadcb2.avif differ diff --git a/media/uploads/products/5a434386a3494b8fb950bd17bdff8179.avif b/media/uploads/products/5a434386a3494b8fb950bd17bdff8179.avif new file mode 100644 index 0000000..92ded44 Binary files /dev/null and b/media/uploads/products/5a434386a3494b8fb950bd17bdff8179.avif differ diff --git a/media/uploads/products/5d676c186ad24d45888769767bf9de68.avif b/media/uploads/products/5d676c186ad24d45888769767bf9de68.avif new file mode 100644 index 0000000..0343f99 Binary files /dev/null and b/media/uploads/products/5d676c186ad24d45888769767bf9de68.avif differ diff --git a/media/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2.avif b/media/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2.avif new file mode 100644 index 0000000..cffacd6 Binary files /dev/null and b/media/uploads/products/5e33c5261f204bd7a43cb50ef1f3a1a2.avif differ diff --git a/media/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c.avif b/media/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c.avif new file mode 100644 index 0000000..76cac99 Binary files /dev/null and b/media/uploads/products/5ecb4ed86f5b4c48af0e63d18f99913c.avif differ diff --git a/media/uploads/products/602c4cd564e8472bb898e5964bb84a55.avif b/media/uploads/products/602c4cd564e8472bb898e5964bb84a55.avif new file mode 100644 index 0000000..7ac77a2 Binary files /dev/null and b/media/uploads/products/602c4cd564e8472bb898e5964bb84a55.avif differ diff --git a/media/uploads/products/608e31e713f048bfa0041a80ffbf9fb8.avif b/media/uploads/products/608e31e713f048bfa0041a80ffbf9fb8.avif new file mode 100644 index 0000000..5de9ae1 Binary files /dev/null and b/media/uploads/products/608e31e713f048bfa0041a80ffbf9fb8.avif differ diff --git a/media/uploads/products/612943511f5d47e9b8031f643cd8f7d7.avif b/media/uploads/products/612943511f5d47e9b8031f643cd8f7d7.avif new file mode 100644 index 0000000..c66d23e Binary files /dev/null and b/media/uploads/products/612943511f5d47e9b8031f643cd8f7d7.avif differ diff --git a/media/uploads/products/61687eb679cd4c31bd83316cd8d0f40f.avif b/media/uploads/products/61687eb679cd4c31bd83316cd8d0f40f.avif new file mode 100644 index 0000000..9a03137 Binary files /dev/null and b/media/uploads/products/61687eb679cd4c31bd83316cd8d0f40f.avif differ diff --git a/media/uploads/products/61703184dd394bc6a7b66079f702a896.avif b/media/uploads/products/61703184dd394bc6a7b66079f702a896.avif new file mode 100644 index 0000000..e518842 Binary files /dev/null and b/media/uploads/products/61703184dd394bc6a7b66079f702a896.avif differ diff --git a/media/uploads/products/6183cbed724f4b43ae38d63818a2c744.avif b/media/uploads/products/6183cbed724f4b43ae38d63818a2c744.avif new file mode 100644 index 0000000..90c7010 Binary files /dev/null and b/media/uploads/products/6183cbed724f4b43ae38d63818a2c744.avif differ diff --git a/media/uploads/products/6b09a03697c94cfe84883ac7a454aa9f.avif b/media/uploads/products/6b09a03697c94cfe84883ac7a454aa9f.avif new file mode 100644 index 0000000..1bf24c0 Binary files /dev/null and b/media/uploads/products/6b09a03697c94cfe84883ac7a454aa9f.avif differ diff --git a/media/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f.avif b/media/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f.avif new file mode 100644 index 0000000..8b7a8eb Binary files /dev/null and b/media/uploads/products/6b91ceef92e64600aa4ab99c7da6f80f.avif differ diff --git a/media/uploads/products/6f165768ffa240fbb531200fca56bb7b.avif b/media/uploads/products/6f165768ffa240fbb531200fca56bb7b.avif new file mode 100644 index 0000000..f23a558 Binary files /dev/null and b/media/uploads/products/6f165768ffa240fbb531200fca56bb7b.avif differ diff --git a/media/uploads/products/71ea138d1b8546e3ab14252eb1bf663c.avif b/media/uploads/products/71ea138d1b8546e3ab14252eb1bf663c.avif new file mode 100644 index 0000000..78de344 Binary files /dev/null and b/media/uploads/products/71ea138d1b8546e3ab14252eb1bf663c.avif differ diff --git a/media/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3.avif b/media/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3.avif new file mode 100644 index 0000000..aa5afca Binary files /dev/null and b/media/uploads/products/73b7febe4d6d4c279f8043f2bd11e0f3.avif differ diff --git a/media/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9.avif b/media/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9.avif new file mode 100644 index 0000000..e6cf05a Binary files /dev/null and b/media/uploads/products/7afbcb26f16a417fb7d39e16c2a08cf9.avif differ diff --git a/media/uploads/products/7d54c58b6bdb4f979b257127a20c15f7.avif b/media/uploads/products/7d54c58b6bdb4f979b257127a20c15f7.avif new file mode 100644 index 0000000..9080d58 Binary files /dev/null and b/media/uploads/products/7d54c58b6bdb4f979b257127a20c15f7.avif differ diff --git a/media/uploads/products/7ed1c866c19c41bbafc5c486752444e4.avif b/media/uploads/products/7ed1c866c19c41bbafc5c486752444e4.avif new file mode 100644 index 0000000..8e0ea53 Binary files /dev/null and b/media/uploads/products/7ed1c866c19c41bbafc5c486752444e4.avif differ diff --git a/media/uploads/products/810979e81f5541c28974cf5ede8d0ad4.avif b/media/uploads/products/810979e81f5541c28974cf5ede8d0ad4.avif new file mode 100644 index 0000000..5725131 Binary files /dev/null and b/media/uploads/products/810979e81f5541c28974cf5ede8d0ad4.avif differ diff --git a/media/uploads/products/810d46a5540047ef9397c6601922a0ac.avif b/media/uploads/products/810d46a5540047ef9397c6601922a0ac.avif new file mode 100644 index 0000000..d9b46b8 Binary files /dev/null and b/media/uploads/products/810d46a5540047ef9397c6601922a0ac.avif differ diff --git a/media/uploads/products/893c89d3fade4a24b1a898a9c20adbd1.avif b/media/uploads/products/893c89d3fade4a24b1a898a9c20adbd1.avif new file mode 100644 index 0000000..a41c34c Binary files /dev/null and b/media/uploads/products/893c89d3fade4a24b1a898a9c20adbd1.avif differ diff --git a/media/uploads/products/89622000de974008b1a48ae6017b729b.avif b/media/uploads/products/89622000de974008b1a48ae6017b729b.avif new file mode 100644 index 0000000..9b7533f Binary files /dev/null and b/media/uploads/products/89622000de974008b1a48ae6017b729b.avif differ diff --git a/media/uploads/products/8ad5b62a83b44138b937b40a90dfbb42.avif b/media/uploads/products/8ad5b62a83b44138b937b40a90dfbb42.avif new file mode 100644 index 0000000..5e98144 Binary files /dev/null and b/media/uploads/products/8ad5b62a83b44138b937b40a90dfbb42.avif differ diff --git a/media/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af.avif b/media/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af.avif new file mode 100644 index 0000000..0cc72fd Binary files /dev/null and b/media/uploads/products/8c8d4a0ee0c14607833db0f6e495a1af.avif differ diff --git a/media/uploads/products/914dd1df3e7b464788ff39fa927428ee.avif b/media/uploads/products/914dd1df3e7b464788ff39fa927428ee.avif new file mode 100644 index 0000000..844e3f3 Binary files /dev/null and b/media/uploads/products/914dd1df3e7b464788ff39fa927428ee.avif differ diff --git a/media/uploads/products/9459653209704b9aacfbd8754f0ef30f.avif b/media/uploads/products/9459653209704b9aacfbd8754f0ef30f.avif new file mode 100644 index 0000000..13c6b60 Binary files /dev/null and b/media/uploads/products/9459653209704b9aacfbd8754f0ef30f.avif differ diff --git a/media/uploads/products/999e89fafd4e46669608825c7832e3cd.avif b/media/uploads/products/999e89fafd4e46669608825c7832e3cd.avif new file mode 100644 index 0000000..2a8ad2b Binary files /dev/null and b/media/uploads/products/999e89fafd4e46669608825c7832e3cd.avif differ diff --git a/media/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa.avif b/media/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa.avif new file mode 100644 index 0000000..d8ee956 Binary files /dev/null and b/media/uploads/products/9a9897bdf8e143a1873c15b59d3c3cfa.avif differ diff --git a/media/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e.avif b/media/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e.avif new file mode 100644 index 0000000..bae9bdc Binary files /dev/null and b/media/uploads/products/9d37f22eb67a4846aa7e76fd1e037d6e.avif differ diff --git a/media/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144.avif b/media/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144.avif new file mode 100644 index 0000000..b62ef7c Binary files /dev/null and b/media/uploads/products/9dcd36b0f80c4fe2adfcd3a4cfdf1144.avif differ diff --git a/media/uploads/products/a1ffdd884cb442a79a7953a459539dfa.avif b/media/uploads/products/a1ffdd884cb442a79a7953a459539dfa.avif new file mode 100644 index 0000000..f085c0c Binary files /dev/null and b/media/uploads/products/a1ffdd884cb442a79a7953a459539dfa.avif differ diff --git a/media/uploads/products/a3628a56cc7d42a094f7d2b768c55240.avif b/media/uploads/products/a3628a56cc7d42a094f7d2b768c55240.avif new file mode 100644 index 0000000..b4984cb Binary files /dev/null and b/media/uploads/products/a3628a56cc7d42a094f7d2b768c55240.avif differ diff --git a/media/uploads/products/a82db83eec354164849522caa6587528.avif b/media/uploads/products/a82db83eec354164849522caa6587528.avif new file mode 100644 index 0000000..62743af Binary files /dev/null and b/media/uploads/products/a82db83eec354164849522caa6587528.avif differ diff --git a/media/uploads/products/a8e4e4d8dc924037b927311eb7196b6f.avif b/media/uploads/products/a8e4e4d8dc924037b927311eb7196b6f.avif new file mode 100644 index 0000000..1c8e35b Binary files /dev/null and b/media/uploads/products/a8e4e4d8dc924037b927311eb7196b6f.avif differ diff --git a/media/uploads/products/a9998a2925224d2ba1f849ed74eacc33.avif b/media/uploads/products/a9998a2925224d2ba1f849ed74eacc33.avif new file mode 100644 index 0000000..f32a2a7 Binary files /dev/null and b/media/uploads/products/a9998a2925224d2ba1f849ed74eacc33.avif differ diff --git a/media/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1.avif b/media/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1.avif new file mode 100644 index 0000000..cd58f66 Binary files /dev/null and b/media/uploads/products/ab82311ddf154e4fa94aba08ecf7bdb1.avif differ diff --git a/media/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7.avif b/media/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7.avif new file mode 100644 index 0000000..32ab384 Binary files /dev/null and b/media/uploads/products/ac43c1e91c7c4c8697610830cfaa95f7.avif differ diff --git a/media/uploads/products/b3dcb48858d74b3abbfc385edef950b2.avif b/media/uploads/products/b3dcb48858d74b3abbfc385edef950b2.avif new file mode 100644 index 0000000..156c6f0 Binary files /dev/null and b/media/uploads/products/b3dcb48858d74b3abbfc385edef950b2.avif differ diff --git a/media/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1.avif b/media/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1.avif new file mode 100644 index 0000000..48f0379 Binary files /dev/null and b/media/uploads/products/b9e6846ea3784855ad27842fc5f8fdf1.avif differ diff --git a/media/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7.avif b/media/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7.avif new file mode 100644 index 0000000..0220c74 Binary files /dev/null and b/media/uploads/products/bb5ef7a970a7485f9bf51aa5828b8eb7.avif differ diff --git a/media/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b.avif b/media/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b.avif new file mode 100644 index 0000000..849a609 Binary files /dev/null and b/media/uploads/products/bf26f81ca9ce48948e73f7af5ecf5b7b.avif differ diff --git a/media/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f.avif b/media/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f.avif new file mode 100644 index 0000000..ee7263e Binary files /dev/null and b/media/uploads/products/c2c847c87ed34f92bae08ed7e681ec3f.avif differ diff --git a/media/uploads/products/c2f6942cbc7041fe8623871be8b8bea5.avif b/media/uploads/products/c2f6942cbc7041fe8623871be8b8bea5.avif new file mode 100644 index 0000000..4d819e6 Binary files /dev/null and b/media/uploads/products/c2f6942cbc7041fe8623871be8b8bea5.avif differ diff --git a/media/uploads/products/c72c51b167274e069e8918259fd73b5d.avif b/media/uploads/products/c72c51b167274e069e8918259fd73b5d.avif new file mode 100644 index 0000000..dc97104 Binary files /dev/null and b/media/uploads/products/c72c51b167274e069e8918259fd73b5d.avif differ diff --git a/media/uploads/products/c7d3ee78f0554c71a69c555267edd17a.avif b/media/uploads/products/c7d3ee78f0554c71a69c555267edd17a.avif new file mode 100644 index 0000000..3732a9e Binary files /dev/null and b/media/uploads/products/c7d3ee78f0554c71a69c555267edd17a.avif differ diff --git a/media/uploads/products/d7ce147e91f844598c37fd6826f0c7fd.avif b/media/uploads/products/d7ce147e91f844598c37fd6826f0c7fd.avif new file mode 100644 index 0000000..7b369b7 Binary files /dev/null and b/media/uploads/products/d7ce147e91f844598c37fd6826f0c7fd.avif differ diff --git a/media/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9.avif b/media/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9.avif new file mode 100644 index 0000000..23a51d0 Binary files /dev/null and b/media/uploads/products/d7f8e03c3a1c4f77883c4d21f5cc99b9.avif differ diff --git a/media/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9.avif b/media/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9.avif new file mode 100644 index 0000000..95a156a Binary files /dev/null and b/media/uploads/products/d803e9fc1afb473b8bab83c9323ab0a9.avif differ diff --git a/media/uploads/products/de8ee46355574e2890d9bf07e4579ed6.avif b/media/uploads/products/de8ee46355574e2890d9bf07e4579ed6.avif new file mode 100644 index 0000000..0298d06 Binary files /dev/null and b/media/uploads/products/de8ee46355574e2890d9bf07e4579ed6.avif differ diff --git a/media/uploads/products/e7775344340845e0bb7fe2b470fa2aa7.avif b/media/uploads/products/e7775344340845e0bb7fe2b470fa2aa7.avif new file mode 100644 index 0000000..c2bc39a Binary files /dev/null and b/media/uploads/products/e7775344340845e0bb7fe2b470fa2aa7.avif differ diff --git a/media/uploads/products/e8039d3cae1f46bf81afcbcddea7615b.avif b/media/uploads/products/e8039d3cae1f46bf81afcbcddea7615b.avif new file mode 100644 index 0000000..6a5b678 Binary files /dev/null and b/media/uploads/products/e8039d3cae1f46bf81afcbcddea7615b.avif differ diff --git a/media/uploads/products/e89741acfc0e468285653da6d2ae5e59.avif b/media/uploads/products/e89741acfc0e468285653da6d2ae5e59.avif new file mode 100644 index 0000000..d28c28e Binary files /dev/null and b/media/uploads/products/e89741acfc0e468285653da6d2ae5e59.avif differ diff --git a/media/uploads/products/e8db628ca039471f9a3ddd1705f22f5a.avif b/media/uploads/products/e8db628ca039471f9a3ddd1705f22f5a.avif new file mode 100644 index 0000000..27f2a36 Binary files /dev/null and b/media/uploads/products/e8db628ca039471f9a3ddd1705f22f5a.avif differ diff --git a/media/uploads/products/e9733f12a094402da16c2aba4ae7e3c0.avif b/media/uploads/products/e9733f12a094402da16c2aba4ae7e3c0.avif new file mode 100644 index 0000000..e5f5352 Binary files /dev/null and b/media/uploads/products/e9733f12a094402da16c2aba4ae7e3c0.avif differ diff --git a/media/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614.avif b/media/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614.avif new file mode 100644 index 0000000..0938568 Binary files /dev/null and b/media/uploads/products/ec3db9ee55ea4fe489c9acd08a64a614.avif differ diff --git a/media/uploads/products/ed742b53982d4a78a428097fc4637ae9.avif b/media/uploads/products/ed742b53982d4a78a428097fc4637ae9.avif new file mode 100644 index 0000000..fa9f93e Binary files /dev/null and b/media/uploads/products/ed742b53982d4a78a428097fc4637ae9.avif differ diff --git a/media/uploads/products/edd0edc7a8d64a139df7593481b30bcc.avif b/media/uploads/products/edd0edc7a8d64a139df7593481b30bcc.avif new file mode 100644 index 0000000..47834a0 Binary files /dev/null and b/media/uploads/products/edd0edc7a8d64a139df7593481b30bcc.avif differ diff --git a/media/uploads/products/efd47ea776814f1fbb4fc72165c5718b.avif b/media/uploads/products/efd47ea776814f1fbb4fc72165c5718b.avif new file mode 100644 index 0000000..83b3900 Binary files /dev/null and b/media/uploads/products/efd47ea776814f1fbb4fc72165c5718b.avif differ diff --git a/media/uploads/products/f00a5583115049ba9c5dc898a1f87c7b.avif b/media/uploads/products/f00a5583115049ba9c5dc898a1f87c7b.avif new file mode 100644 index 0000000..d22170c Binary files /dev/null and b/media/uploads/products/f00a5583115049ba9c5dc898a1f87c7b.avif differ diff --git a/media/uploads/products/f012ae99c97245bd87d93b9951041a8f.avif b/media/uploads/products/f012ae99c97245bd87d93b9951041a8f.avif new file mode 100644 index 0000000..702d4bf Binary files /dev/null and b/media/uploads/products/f012ae99c97245bd87d93b9951041a8f.avif differ diff --git a/media/uploads/products/f1d0c22698774617913ca434afa57662.avif b/media/uploads/products/f1d0c22698774617913ca434afa57662.avif new file mode 100644 index 0000000..afc9628 Binary files /dev/null and b/media/uploads/products/f1d0c22698774617913ca434afa57662.avif differ diff --git a/media/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5.avif b/media/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5.avif new file mode 100644 index 0000000..501a383 Binary files /dev/null and b/media/uploads/products/f2df176495e34ea5abf41bfe63bfb7c5.avif differ diff --git a/media/uploads/products/f599b169e72546d19ed51f792ade81b1.avif b/media/uploads/products/f599b169e72546d19ed51f792ade81b1.avif new file mode 100644 index 0000000..52adf29 Binary files /dev/null and b/media/uploads/products/f599b169e72546d19ed51f792ade81b1.avif differ diff --git a/media/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d.avif b/media/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d.avif new file mode 100644 index 0000000..692ab60 Binary files /dev/null and b/media/uploads/products/f5f0c381cf3a4b7ebe4e38bc6613347d.avif differ diff --git a/media/uploads/products/f7ab9431f73148d6aa7784cc675f5c16.avif b/media/uploads/products/f7ab9431f73148d6aa7784cc675f5c16.avif new file mode 100644 index 0000000..c34d9cb Binary files /dev/null and b/media/uploads/products/f7ab9431f73148d6aa7784cc675f5c16.avif differ diff --git a/media/uploads/products/fae8cabd288b4566aafaae9136ea534e.avif b/media/uploads/products/fae8cabd288b4566aafaae9136ea534e.avif new file mode 100644 index 0000000..d923fbc Binary files /dev/null and b/media/uploads/products/fae8cabd288b4566aafaae9136ea534e.avif differ diff --git a/media/uploads/products/fceec0066023437cb78bd02748ac4d60.avif b/media/uploads/products/fceec0066023437cb78bd02748ac4d60.avif new file mode 100644 index 0000000..e03894d Binary files /dev/null and b/media/uploads/products/fceec0066023437cb78bd02748ac4d60.avif differ diff --git a/media/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711.avif b/media/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711.avif new file mode 100644 index 0000000..744c6be Binary files /dev/null and b/media/uploads/products/fcfc32d5a0c8479fb81c9709ba6d6711.avif differ diff --git a/media/uploads/products/fe29a58337314f12a2194040f241c428.avif b/media/uploads/products/fe29a58337314f12a2194040f241c428.avif new file mode 100644 index 0000000..e1c51c5 Binary files /dev/null and b/media/uploads/products/fe29a58337314f12a2194040f241c428.avif differ diff --git a/media/uploads/products/thumb/03349d17ce894a26866aa939ff9fdaba.avif b/media/uploads/products/thumb/03349d17ce894a26866aa939ff9fdaba.avif new file mode 100644 index 0000000..bb209bf Binary files /dev/null and b/media/uploads/products/thumb/03349d17ce894a26866aa939ff9fdaba.avif differ diff --git a/media/uploads/products/thumb/05b4db8a931d48f1be60690dce3b2ed6.avif b/media/uploads/products/thumb/05b4db8a931d48f1be60690dce3b2ed6.avif new file mode 100644 index 0000000..bd658e7 Binary files /dev/null and b/media/uploads/products/thumb/05b4db8a931d48f1be60690dce3b2ed6.avif differ diff --git a/media/uploads/products/thumb/0a4c54477c324d48befae80f641b053d.avif b/media/uploads/products/thumb/0a4c54477c324d48befae80f641b053d.avif new file mode 100644 index 0000000..ff6c008 Binary files /dev/null and b/media/uploads/products/thumb/0a4c54477c324d48befae80f641b053d.avif differ diff --git a/media/uploads/products/thumb/0ef37c3c45e84993829f6a8c0cf1f808.avif b/media/uploads/products/thumb/0ef37c3c45e84993829f6a8c0cf1f808.avif new file mode 100644 index 0000000..413560d Binary files /dev/null and b/media/uploads/products/thumb/0ef37c3c45e84993829f6a8c0cf1f808.avif differ diff --git a/media/uploads/products/thumb/0f55dcffdfd94ac89ff65f44ab4841a5.avif b/media/uploads/products/thumb/0f55dcffdfd94ac89ff65f44ab4841a5.avif new file mode 100644 index 0000000..6c32e5f Binary files /dev/null and b/media/uploads/products/thumb/0f55dcffdfd94ac89ff65f44ab4841a5.avif differ diff --git a/media/uploads/products/thumb/108416816cba4cd3a62cf9c81dec6b9a.avif b/media/uploads/products/thumb/108416816cba4cd3a62cf9c81dec6b9a.avif new file mode 100644 index 0000000..82ad44d Binary files /dev/null and b/media/uploads/products/thumb/108416816cba4cd3a62cf9c81dec6b9a.avif differ diff --git a/media/uploads/products/thumb/14f83067dad04b288a3f7753ace3c116.avif b/media/uploads/products/thumb/14f83067dad04b288a3f7753ace3c116.avif new file mode 100644 index 0000000..cfb46c6 Binary files /dev/null and b/media/uploads/products/thumb/14f83067dad04b288a3f7753ace3c116.avif differ diff --git a/media/uploads/products/thumb/1529fa8e7d0e4a75977c39c0548560e1.avif b/media/uploads/products/thumb/1529fa8e7d0e4a75977c39c0548560e1.avif new file mode 100644 index 0000000..ea8d53c Binary files /dev/null and b/media/uploads/products/thumb/1529fa8e7d0e4a75977c39c0548560e1.avif differ diff --git a/media/uploads/products/thumb/15e2b88f247a4984a4790947d6869e84.avif b/media/uploads/products/thumb/15e2b88f247a4984a4790947d6869e84.avif new file mode 100644 index 0000000..279e6e8 Binary files /dev/null and b/media/uploads/products/thumb/15e2b88f247a4984a4790947d6869e84.avif differ diff --git a/media/uploads/products/thumb/189c86d0a30745e198aff000024fb1db.avif b/media/uploads/products/thumb/189c86d0a30745e198aff000024fb1db.avif new file mode 100644 index 0000000..4deb36b Binary files /dev/null and b/media/uploads/products/thumb/189c86d0a30745e198aff000024fb1db.avif differ diff --git a/media/uploads/products/thumb/18bee0f9e4cc4839853d72f62abfd256.avif b/media/uploads/products/thumb/18bee0f9e4cc4839853d72f62abfd256.avif new file mode 100644 index 0000000..e7c745a Binary files /dev/null and b/media/uploads/products/thumb/18bee0f9e4cc4839853d72f62abfd256.avif differ diff --git a/media/uploads/products/thumb/1a4a0d0366b04760aeb3592599f6efc7.avif b/media/uploads/products/thumb/1a4a0d0366b04760aeb3592599f6efc7.avif new file mode 100644 index 0000000..90b10aa Binary files /dev/null and b/media/uploads/products/thumb/1a4a0d0366b04760aeb3592599f6efc7.avif differ diff --git a/media/uploads/products/thumb/1ce0a84685674f74af8c61579ff1ca3d.avif b/media/uploads/products/thumb/1ce0a84685674f74af8c61579ff1ca3d.avif new file mode 100644 index 0000000..4c5653f Binary files /dev/null and b/media/uploads/products/thumb/1ce0a84685674f74af8c61579ff1ca3d.avif differ diff --git a/media/uploads/products/thumb/1ce1273c7c6c45418429b3767e440cfa.avif b/media/uploads/products/thumb/1ce1273c7c6c45418429b3767e440cfa.avif new file mode 100644 index 0000000..be2340a Binary files /dev/null and b/media/uploads/products/thumb/1ce1273c7c6c45418429b3767e440cfa.avif differ diff --git a/media/uploads/products/thumb/1d269204a546479398a757e80f96c674.avif b/media/uploads/products/thumb/1d269204a546479398a757e80f96c674.avif new file mode 100644 index 0000000..d691f53 Binary files /dev/null and b/media/uploads/products/thumb/1d269204a546479398a757e80f96c674.avif differ diff --git a/media/uploads/products/thumb/26097bcb187b41c484b73e7297b6f645.avif b/media/uploads/products/thumb/26097bcb187b41c484b73e7297b6f645.avif new file mode 100644 index 0000000..245d22a Binary files /dev/null and b/media/uploads/products/thumb/26097bcb187b41c484b73e7297b6f645.avif differ diff --git a/media/uploads/products/thumb/27d03f7610a64a33a9d606fdcd2e7ce3.avif b/media/uploads/products/thumb/27d03f7610a64a33a9d606fdcd2e7ce3.avif new file mode 100644 index 0000000..b9c5de0 Binary files /dev/null and b/media/uploads/products/thumb/27d03f7610a64a33a9d606fdcd2e7ce3.avif differ diff --git a/media/uploads/products/thumb/2b9dd04609fe4e77a0342bc0b8c0aa13.avif b/media/uploads/products/thumb/2b9dd04609fe4e77a0342bc0b8c0aa13.avif new file mode 100644 index 0000000..a5d365d Binary files /dev/null and b/media/uploads/products/thumb/2b9dd04609fe4e77a0342bc0b8c0aa13.avif differ diff --git a/media/uploads/products/thumb/2e0651e6f86f4f8b943cc463d4d2d6de.avif b/media/uploads/products/thumb/2e0651e6f86f4f8b943cc463d4d2d6de.avif new file mode 100644 index 0000000..0f2d9af Binary files /dev/null and b/media/uploads/products/thumb/2e0651e6f86f4f8b943cc463d4d2d6de.avif differ diff --git a/media/uploads/products/thumb/2eabe72614084f90a2afabb8258cab4a.avif b/media/uploads/products/thumb/2eabe72614084f90a2afabb8258cab4a.avif new file mode 100644 index 0000000..4071acf Binary files /dev/null and b/media/uploads/products/thumb/2eabe72614084f90a2afabb8258cab4a.avif differ diff --git a/media/uploads/products/thumb/2ef1c3ed429f4a33ab0f61eaa6ffc61b.avif b/media/uploads/products/thumb/2ef1c3ed429f4a33ab0f61eaa6ffc61b.avif new file mode 100644 index 0000000..355430f Binary files /dev/null and b/media/uploads/products/thumb/2ef1c3ed429f4a33ab0f61eaa6ffc61b.avif differ diff --git a/media/uploads/products/thumb/2fff56a73f054ed298221fd6a16e7ed0.avif b/media/uploads/products/thumb/2fff56a73f054ed298221fd6a16e7ed0.avif new file mode 100644 index 0000000..b9b9346 Binary files /dev/null and b/media/uploads/products/thumb/2fff56a73f054ed298221fd6a16e7ed0.avif differ diff --git a/media/uploads/products/thumb/30cbe4bad214472cb61757e70c6e9bd1.avif b/media/uploads/products/thumb/30cbe4bad214472cb61757e70c6e9bd1.avif new file mode 100644 index 0000000..9e902bd Binary files /dev/null and b/media/uploads/products/thumb/30cbe4bad214472cb61757e70c6e9bd1.avif differ diff --git a/media/uploads/products/thumb/392ab093cc9b429ab6db9fcc5e73b518.avif b/media/uploads/products/thumb/392ab093cc9b429ab6db9fcc5e73b518.avif new file mode 100644 index 0000000..297ff0d Binary files /dev/null and b/media/uploads/products/thumb/392ab093cc9b429ab6db9fcc5e73b518.avif differ diff --git a/media/uploads/products/thumb/3d543a3bc1bf414cad4d9b27e6297f58.avif b/media/uploads/products/thumb/3d543a3bc1bf414cad4d9b27e6297f58.avif new file mode 100644 index 0000000..27c5292 Binary files /dev/null and b/media/uploads/products/thumb/3d543a3bc1bf414cad4d9b27e6297f58.avif differ diff --git a/media/uploads/products/thumb/3d62eeaec41d44399152c954afc25f2c.avif b/media/uploads/products/thumb/3d62eeaec41d44399152c954afc25f2c.avif new file mode 100644 index 0000000..fe11605 Binary files /dev/null and b/media/uploads/products/thumb/3d62eeaec41d44399152c954afc25f2c.avif differ diff --git a/media/uploads/products/thumb/3df232e1a90d49c29e0e87f5a85b9349.avif b/media/uploads/products/thumb/3df232e1a90d49c29e0e87f5a85b9349.avif new file mode 100644 index 0000000..64e368f Binary files /dev/null and b/media/uploads/products/thumb/3df232e1a90d49c29e0e87f5a85b9349.avif differ diff --git a/media/uploads/products/thumb/42329fc4dac74f1a89b51353ad0d996f.avif b/media/uploads/products/thumb/42329fc4dac74f1a89b51353ad0d996f.avif new file mode 100644 index 0000000..0d53bf8 Binary files /dev/null and b/media/uploads/products/thumb/42329fc4dac74f1a89b51353ad0d996f.avif differ diff --git a/media/uploads/products/thumb/447a658f312441abb39c3c8086669049.avif b/media/uploads/products/thumb/447a658f312441abb39c3c8086669049.avif new file mode 100644 index 0000000..d52fc52 Binary files /dev/null and b/media/uploads/products/thumb/447a658f312441abb39c3c8086669049.avif differ diff --git a/media/uploads/products/thumb/44ea47bf9d21403280959afc1e919b4f.avif b/media/uploads/products/thumb/44ea47bf9d21403280959afc1e919b4f.avif new file mode 100644 index 0000000..3d065a3 Binary files /dev/null and b/media/uploads/products/thumb/44ea47bf9d21403280959afc1e919b4f.avif differ diff --git a/media/uploads/products/thumb/45596163481741cf92926cdea2bb8613.avif b/media/uploads/products/thumb/45596163481741cf92926cdea2bb8613.avif new file mode 100644 index 0000000..cf844ac Binary files /dev/null and b/media/uploads/products/thumb/45596163481741cf92926cdea2bb8613.avif differ diff --git a/media/uploads/products/thumb/49040f4edc7c4612b05e9fd60e2bdeda.avif b/media/uploads/products/thumb/49040f4edc7c4612b05e9fd60e2bdeda.avif new file mode 100644 index 0000000..e893566 Binary files /dev/null and b/media/uploads/products/thumb/49040f4edc7c4612b05e9fd60e2bdeda.avif differ diff --git a/media/uploads/products/thumb/4948c8a7bb37405fb13f7973ae9a6a74.avif b/media/uploads/products/thumb/4948c8a7bb37405fb13f7973ae9a6a74.avif new file mode 100644 index 0000000..0ae5f9c Binary files /dev/null and b/media/uploads/products/thumb/4948c8a7bb37405fb13f7973ae9a6a74.avif differ diff --git a/media/uploads/products/thumb/4c7ab9a127ac46c891776907d388035e.avif b/media/uploads/products/thumb/4c7ab9a127ac46c891776907d388035e.avif new file mode 100644 index 0000000..f8becd1 Binary files /dev/null and b/media/uploads/products/thumb/4c7ab9a127ac46c891776907d388035e.avif differ diff --git a/media/uploads/products/thumb/4f047ba2ea004ecfa413f15fcb3669ab.avif b/media/uploads/products/thumb/4f047ba2ea004ecfa413f15fcb3669ab.avif new file mode 100644 index 0000000..b80c584 Binary files /dev/null and b/media/uploads/products/thumb/4f047ba2ea004ecfa413f15fcb3669ab.avif differ diff --git a/media/uploads/products/thumb/547c435745d54af89db9988af0687a47.avif b/media/uploads/products/thumb/547c435745d54af89db9988af0687a47.avif new file mode 100644 index 0000000..735ef28 Binary files /dev/null and b/media/uploads/products/thumb/547c435745d54af89db9988af0687a47.avif differ diff --git a/media/uploads/products/thumb/54e6a4d70ebc42ce822eacebc5b38432.avif b/media/uploads/products/thumb/54e6a4d70ebc42ce822eacebc5b38432.avif new file mode 100644 index 0000000..17de9b5 Binary files /dev/null and b/media/uploads/products/thumb/54e6a4d70ebc42ce822eacebc5b38432.avif differ diff --git a/media/uploads/products/thumb/5a14452185e944a0827221d04652ffa5.avif b/media/uploads/products/thumb/5a14452185e944a0827221d04652ffa5.avif new file mode 100644 index 0000000..ce9b084 Binary files /dev/null and b/media/uploads/products/thumb/5a14452185e944a0827221d04652ffa5.avif differ diff --git a/media/uploads/products/thumb/5fc82686fcdc4205afb0b841f7fb4083.avif b/media/uploads/products/thumb/5fc82686fcdc4205afb0b841f7fb4083.avif new file mode 100644 index 0000000..11a32bc Binary files /dev/null and b/media/uploads/products/thumb/5fc82686fcdc4205afb0b841f7fb4083.avif differ diff --git a/media/uploads/products/thumb/62c8b7d3546b46c9b708ea5da45c5643.avif b/media/uploads/products/thumb/62c8b7d3546b46c9b708ea5da45c5643.avif new file mode 100644 index 0000000..662c91f Binary files /dev/null and b/media/uploads/products/thumb/62c8b7d3546b46c9b708ea5da45c5643.avif differ diff --git a/media/uploads/products/thumb/643e233df3d04421b448df550d4c9dc8.avif b/media/uploads/products/thumb/643e233df3d04421b448df550d4c9dc8.avif new file mode 100644 index 0000000..f15d918 Binary files /dev/null and b/media/uploads/products/thumb/643e233df3d04421b448df550d4c9dc8.avif differ diff --git a/media/uploads/products/thumb/64b627ef199d41249b7076664099b6c1.avif b/media/uploads/products/thumb/64b627ef199d41249b7076664099b6c1.avif new file mode 100644 index 0000000..c7a6c7e Binary files /dev/null and b/media/uploads/products/thumb/64b627ef199d41249b7076664099b6c1.avif differ diff --git a/media/uploads/products/thumb/686cc4a55d0f4995940b4458077e4f0b.avif b/media/uploads/products/thumb/686cc4a55d0f4995940b4458077e4f0b.avif new file mode 100644 index 0000000..08ae0cb Binary files /dev/null and b/media/uploads/products/thumb/686cc4a55d0f4995940b4458077e4f0b.avif differ diff --git a/media/uploads/products/thumb/69c6406f6f7949a2a5c4be26270f52d5.avif b/media/uploads/products/thumb/69c6406f6f7949a2a5c4be26270f52d5.avif new file mode 100644 index 0000000..4e28320 Binary files /dev/null and b/media/uploads/products/thumb/69c6406f6f7949a2a5c4be26270f52d5.avif differ diff --git a/media/uploads/products/thumb/6ac25b4895f249f79a6a7debd9156ac4.avif b/media/uploads/products/thumb/6ac25b4895f249f79a6a7debd9156ac4.avif new file mode 100644 index 0000000..e5c6ef0 Binary files /dev/null and b/media/uploads/products/thumb/6ac25b4895f249f79a6a7debd9156ac4.avif differ diff --git a/media/uploads/products/thumb/6b03865236d44167b9153a31000a93f9.avif b/media/uploads/products/thumb/6b03865236d44167b9153a31000a93f9.avif new file mode 100644 index 0000000..2050147 Binary files /dev/null and b/media/uploads/products/thumb/6b03865236d44167b9153a31000a93f9.avif differ diff --git a/media/uploads/products/thumb/6d6685c51bc84cbebe3661e8b9b46197.avif b/media/uploads/products/thumb/6d6685c51bc84cbebe3661e8b9b46197.avif new file mode 100644 index 0000000..a09f9c7 Binary files /dev/null and b/media/uploads/products/thumb/6d6685c51bc84cbebe3661e8b9b46197.avif differ diff --git a/media/uploads/products/thumb/6e44deef08494c97bc077a3222dcf493.avif b/media/uploads/products/thumb/6e44deef08494c97bc077a3222dcf493.avif new file mode 100644 index 0000000..5692bd7 Binary files /dev/null and b/media/uploads/products/thumb/6e44deef08494c97bc077a3222dcf493.avif differ diff --git a/media/uploads/products/thumb/704fa5418b8343899296d59d6af9f567.avif b/media/uploads/products/thumb/704fa5418b8343899296d59d6af9f567.avif new file mode 100644 index 0000000..7e9aca4 Binary files /dev/null and b/media/uploads/products/thumb/704fa5418b8343899296d59d6af9f567.avif differ diff --git a/media/uploads/products/thumb/70e6dfb729c347689ce7b41ded17542e.avif b/media/uploads/products/thumb/70e6dfb729c347689ce7b41ded17542e.avif new file mode 100644 index 0000000..c314582 Binary files /dev/null and b/media/uploads/products/thumb/70e6dfb729c347689ce7b41ded17542e.avif differ diff --git a/media/uploads/products/thumb/7597e7111218422588549dcb326aacf8.avif b/media/uploads/products/thumb/7597e7111218422588549dcb326aacf8.avif new file mode 100644 index 0000000..50f6d6f Binary files /dev/null and b/media/uploads/products/thumb/7597e7111218422588549dcb326aacf8.avif differ diff --git a/media/uploads/products/thumb/76e8b6ccf8234951b1222a72c9407b02.avif b/media/uploads/products/thumb/76e8b6ccf8234951b1222a72c9407b02.avif new file mode 100644 index 0000000..47e471f Binary files /dev/null and b/media/uploads/products/thumb/76e8b6ccf8234951b1222a72c9407b02.avif differ diff --git a/media/uploads/products/thumb/7a9a2af548a84843b5728df0be692ad4.avif b/media/uploads/products/thumb/7a9a2af548a84843b5728df0be692ad4.avif new file mode 100644 index 0000000..abb49d7 Binary files /dev/null and b/media/uploads/products/thumb/7a9a2af548a84843b5728df0be692ad4.avif differ diff --git a/media/uploads/products/thumb/808ec0639e1144e3a368b2c0345555eb.avif b/media/uploads/products/thumb/808ec0639e1144e3a368b2c0345555eb.avif new file mode 100644 index 0000000..9f7bccc Binary files /dev/null and b/media/uploads/products/thumb/808ec0639e1144e3a368b2c0345555eb.avif differ diff --git a/media/uploads/products/thumb/81afdadbce13405ea3fe06fba07b4823.avif b/media/uploads/products/thumb/81afdadbce13405ea3fe06fba07b4823.avif new file mode 100644 index 0000000..6904b7b Binary files /dev/null and b/media/uploads/products/thumb/81afdadbce13405ea3fe06fba07b4823.avif differ diff --git a/media/uploads/products/thumb/8541948018e6467eb4c147712884697c.avif b/media/uploads/products/thumb/8541948018e6467eb4c147712884697c.avif new file mode 100644 index 0000000..26beb09 Binary files /dev/null and b/media/uploads/products/thumb/8541948018e6467eb4c147712884697c.avif differ diff --git a/media/uploads/products/thumb/860b15ef02a342dca2fd2ef60013d482.avif b/media/uploads/products/thumb/860b15ef02a342dca2fd2ef60013d482.avif new file mode 100644 index 0000000..bc4e658 Binary files /dev/null and b/media/uploads/products/thumb/860b15ef02a342dca2fd2ef60013d482.avif differ diff --git a/media/uploads/products/thumb/8aeb9429cbd543dc98a0aad4b268ebaf.avif b/media/uploads/products/thumb/8aeb9429cbd543dc98a0aad4b268ebaf.avif new file mode 100644 index 0000000..a9edc89 Binary files /dev/null and b/media/uploads/products/thumb/8aeb9429cbd543dc98a0aad4b268ebaf.avif differ diff --git a/media/uploads/products/thumb/8c9e6b33bf194c6ca2b260e581a459d8.avif b/media/uploads/products/thumb/8c9e6b33bf194c6ca2b260e581a459d8.avif new file mode 100644 index 0000000..b27a5cd Binary files /dev/null and b/media/uploads/products/thumb/8c9e6b33bf194c6ca2b260e581a459d8.avif differ diff --git a/media/uploads/products/thumb/8ca29058c63d4ffe979948fd3b3be349.avif b/media/uploads/products/thumb/8ca29058c63d4ffe979948fd3b3be349.avif new file mode 100644 index 0000000..6e68cc9 Binary files /dev/null and b/media/uploads/products/thumb/8ca29058c63d4ffe979948fd3b3be349.avif differ diff --git a/media/uploads/products/thumb/997da7faa64742b8a9c424a119287424.avif b/media/uploads/products/thumb/997da7faa64742b8a9c424a119287424.avif new file mode 100644 index 0000000..23b4ba4 Binary files /dev/null and b/media/uploads/products/thumb/997da7faa64742b8a9c424a119287424.avif differ diff --git a/media/uploads/products/thumb/9ac329e25f98451780e71268c4c57737.avif b/media/uploads/products/thumb/9ac329e25f98451780e71268c4c57737.avif new file mode 100644 index 0000000..0a74cf4 Binary files /dev/null and b/media/uploads/products/thumb/9ac329e25f98451780e71268c4c57737.avif differ diff --git a/media/uploads/products/thumb/9f9c1276b424484ab7a6f2718f479b82.avif b/media/uploads/products/thumb/9f9c1276b424484ab7a6f2718f479b82.avif new file mode 100644 index 0000000..2657543 Binary files /dev/null and b/media/uploads/products/thumb/9f9c1276b424484ab7a6f2718f479b82.avif differ diff --git a/media/uploads/products/thumb/a2b8c657b1ba4cc2a24f1ed9229f4e93.avif b/media/uploads/products/thumb/a2b8c657b1ba4cc2a24f1ed9229f4e93.avif new file mode 100644 index 0000000..fbc6e41 Binary files /dev/null and b/media/uploads/products/thumb/a2b8c657b1ba4cc2a24f1ed9229f4e93.avif differ diff --git a/media/uploads/products/thumb/a54e0bd48d674875808b10a68379ba00.avif b/media/uploads/products/thumb/a54e0bd48d674875808b10a68379ba00.avif new file mode 100644 index 0000000..a630a23 Binary files /dev/null and b/media/uploads/products/thumb/a54e0bd48d674875808b10a68379ba00.avif differ diff --git a/media/uploads/products/thumb/a6dfaecd9035489cadf51f25dd1e3a56.avif b/media/uploads/products/thumb/a6dfaecd9035489cadf51f25dd1e3a56.avif new file mode 100644 index 0000000..114afbb Binary files /dev/null and b/media/uploads/products/thumb/a6dfaecd9035489cadf51f25dd1e3a56.avif differ diff --git a/media/uploads/products/thumb/a8ce795cc2a24b47bd99049327ea4514.avif b/media/uploads/products/thumb/a8ce795cc2a24b47bd99049327ea4514.avif new file mode 100644 index 0000000..a11ec60 Binary files /dev/null and b/media/uploads/products/thumb/a8ce795cc2a24b47bd99049327ea4514.avif differ diff --git a/media/uploads/products/thumb/acc04803b405497d9aec4cc4ab77a637.avif b/media/uploads/products/thumb/acc04803b405497d9aec4cc4ab77a637.avif new file mode 100644 index 0000000..9af6a54 Binary files /dev/null and b/media/uploads/products/thumb/acc04803b405497d9aec4cc4ab77a637.avif differ diff --git a/media/uploads/products/thumb/b0776f1fe2e14a649d33bdf22698c386.avif b/media/uploads/products/thumb/b0776f1fe2e14a649d33bdf22698c386.avif new file mode 100644 index 0000000..e35503b Binary files /dev/null and b/media/uploads/products/thumb/b0776f1fe2e14a649d33bdf22698c386.avif differ diff --git a/media/uploads/products/thumb/b0f32f373bf04e20a5e06b644d2fbecd.avif b/media/uploads/products/thumb/b0f32f373bf04e20a5e06b644d2fbecd.avif new file mode 100644 index 0000000..2a63f78 Binary files /dev/null and b/media/uploads/products/thumb/b0f32f373bf04e20a5e06b644d2fbecd.avif differ diff --git a/media/uploads/products/thumb/b15ccf390ae04831821a464cb8434bc5.avif b/media/uploads/products/thumb/b15ccf390ae04831821a464cb8434bc5.avif new file mode 100644 index 0000000..39cdcc5 Binary files /dev/null and b/media/uploads/products/thumb/b15ccf390ae04831821a464cb8434bc5.avif differ diff --git a/media/uploads/products/thumb/b5de3c3548114889833a57dd67d0bca8.avif b/media/uploads/products/thumb/b5de3c3548114889833a57dd67d0bca8.avif new file mode 100644 index 0000000..88116da Binary files /dev/null and b/media/uploads/products/thumb/b5de3c3548114889833a57dd67d0bca8.avif differ diff --git a/media/uploads/products/thumb/b73d3e1f8892429daf46c43011d96387.avif b/media/uploads/products/thumb/b73d3e1f8892429daf46c43011d96387.avif new file mode 100644 index 0000000..59cb1c4 Binary files /dev/null and b/media/uploads/products/thumb/b73d3e1f8892429daf46c43011d96387.avif differ diff --git a/media/uploads/products/thumb/b87e877ed0984f97811e6d7b28187142.avif b/media/uploads/products/thumb/b87e877ed0984f97811e6d7b28187142.avif new file mode 100644 index 0000000..7b68a2d Binary files /dev/null and b/media/uploads/products/thumb/b87e877ed0984f97811e6d7b28187142.avif differ diff --git a/media/uploads/products/thumb/b8b891c5b3ce430fa823db2b2e61c91a.avif b/media/uploads/products/thumb/b8b891c5b3ce430fa823db2b2e61c91a.avif new file mode 100644 index 0000000..94de3fc Binary files /dev/null and b/media/uploads/products/thumb/b8b891c5b3ce430fa823db2b2e61c91a.avif differ diff --git a/media/uploads/products/thumb/bfd3e1c83c8b413089650d9d923e97df.avif b/media/uploads/products/thumb/bfd3e1c83c8b413089650d9d923e97df.avif new file mode 100644 index 0000000..68c37e2 Binary files /dev/null and b/media/uploads/products/thumb/bfd3e1c83c8b413089650d9d923e97df.avif differ diff --git a/media/uploads/products/thumb/c59a3658d72c49baab129a274aebaaec.avif b/media/uploads/products/thumb/c59a3658d72c49baab129a274aebaaec.avif new file mode 100644 index 0000000..7951522 Binary files /dev/null and b/media/uploads/products/thumb/c59a3658d72c49baab129a274aebaaec.avif differ diff --git a/media/uploads/products/thumb/ca03d51576d846e9b8ae350a2743a4b9.avif b/media/uploads/products/thumb/ca03d51576d846e9b8ae350a2743a4b9.avif new file mode 100644 index 0000000..9960ea0 Binary files /dev/null and b/media/uploads/products/thumb/ca03d51576d846e9b8ae350a2743a4b9.avif differ diff --git a/media/uploads/products/thumb/caededa438374964acea2e3720ef674a.avif b/media/uploads/products/thumb/caededa438374964acea2e3720ef674a.avif new file mode 100644 index 0000000..638f47b Binary files /dev/null and b/media/uploads/products/thumb/caededa438374964acea2e3720ef674a.avif differ diff --git a/media/uploads/products/thumb/cb60dfbc6ddb45d98b023f06ea3663b7.avif b/media/uploads/products/thumb/cb60dfbc6ddb45d98b023f06ea3663b7.avif new file mode 100644 index 0000000..8310f37 Binary files /dev/null and b/media/uploads/products/thumb/cb60dfbc6ddb45d98b023f06ea3663b7.avif differ diff --git a/media/uploads/products/thumb/ce68838b78eb4b55925d3b9e6d2312b0.avif b/media/uploads/products/thumb/ce68838b78eb4b55925d3b9e6d2312b0.avif new file mode 100644 index 0000000..5830a1d Binary files /dev/null and b/media/uploads/products/thumb/ce68838b78eb4b55925d3b9e6d2312b0.avif differ diff --git a/media/uploads/products/thumb/ceb959a7f1e1425a9084e2e2f1f3d4b3.avif b/media/uploads/products/thumb/ceb959a7f1e1425a9084e2e2f1f3d4b3.avif new file mode 100644 index 0000000..eb00f71 Binary files /dev/null and b/media/uploads/products/thumb/ceb959a7f1e1425a9084e2e2f1f3d4b3.avif differ diff --git a/media/uploads/products/thumb/cfb276df515e4d7999aaf82f7490d516.avif b/media/uploads/products/thumb/cfb276df515e4d7999aaf82f7490d516.avif new file mode 100644 index 0000000..7cde155 Binary files /dev/null and b/media/uploads/products/thumb/cfb276df515e4d7999aaf82f7490d516.avif differ diff --git a/media/uploads/products/thumb/d24eb106d982458488dae83f861bc5b9.avif b/media/uploads/products/thumb/d24eb106d982458488dae83f861bc5b9.avif new file mode 100644 index 0000000..1b38256 Binary files /dev/null and b/media/uploads/products/thumb/d24eb106d982458488dae83f861bc5b9.avif differ diff --git a/media/uploads/products/thumb/d3319f7b4b1f4916a95ef2367d49057f.avif b/media/uploads/products/thumb/d3319f7b4b1f4916a95ef2367d49057f.avif new file mode 100644 index 0000000..194c3bf Binary files /dev/null and b/media/uploads/products/thumb/d3319f7b4b1f4916a95ef2367d49057f.avif differ diff --git a/media/uploads/products/thumb/d540dd35af304187b6cfe1948c35d93d.avif b/media/uploads/products/thumb/d540dd35af304187b6cfe1948c35d93d.avif new file mode 100644 index 0000000..00c9736 Binary files /dev/null and b/media/uploads/products/thumb/d540dd35af304187b6cfe1948c35d93d.avif differ diff --git a/media/uploads/products/thumb/d65909cbb9944b87b210b92055626083.avif b/media/uploads/products/thumb/d65909cbb9944b87b210b92055626083.avif new file mode 100644 index 0000000..ea083ce Binary files /dev/null and b/media/uploads/products/thumb/d65909cbb9944b87b210b92055626083.avif differ diff --git a/media/uploads/products/thumb/d9bb022aac05400986cf00771c371080.avif b/media/uploads/products/thumb/d9bb022aac05400986cf00771c371080.avif new file mode 100644 index 0000000..69d9b36 Binary files /dev/null and b/media/uploads/products/thumb/d9bb022aac05400986cf00771c371080.avif differ diff --git a/media/uploads/products/thumb/da9ad01d9c6f4bd49e62bdd983a37416.avif b/media/uploads/products/thumb/da9ad01d9c6f4bd49e62bdd983a37416.avif new file mode 100644 index 0000000..4318c83 Binary files /dev/null and b/media/uploads/products/thumb/da9ad01d9c6f4bd49e62bdd983a37416.avif differ diff --git a/media/uploads/products/thumb/db2f4d616252461baf94c908acbfdc65.avif b/media/uploads/products/thumb/db2f4d616252461baf94c908acbfdc65.avif new file mode 100644 index 0000000..95fad8c Binary files /dev/null and b/media/uploads/products/thumb/db2f4d616252461baf94c908acbfdc65.avif differ diff --git a/media/uploads/products/thumb/e120825007d04e2bb202104087df1bd2.avif b/media/uploads/products/thumb/e120825007d04e2bb202104087df1bd2.avif new file mode 100644 index 0000000..1a87cdb Binary files /dev/null and b/media/uploads/products/thumb/e120825007d04e2bb202104087df1bd2.avif differ diff --git a/media/uploads/products/thumb/e213899db8634263a2493ab1b0d730e3.avif b/media/uploads/products/thumb/e213899db8634263a2493ab1b0d730e3.avif new file mode 100644 index 0000000..8cbb41c Binary files /dev/null and b/media/uploads/products/thumb/e213899db8634263a2493ab1b0d730e3.avif differ diff --git a/media/uploads/products/thumb/e3e5c77a293b480eb68bb5c2bb6652f5.avif b/media/uploads/products/thumb/e3e5c77a293b480eb68bb5c2bb6652f5.avif new file mode 100644 index 0000000..e6b81c6 Binary files /dev/null and b/media/uploads/products/thumb/e3e5c77a293b480eb68bb5c2bb6652f5.avif differ diff --git a/media/uploads/products/thumb/e4d31dbbaf8a428c8d9480b9cd1a7b87.avif b/media/uploads/products/thumb/e4d31dbbaf8a428c8d9480b9cd1a7b87.avif new file mode 100644 index 0000000..5418637 Binary files /dev/null and b/media/uploads/products/thumb/e4d31dbbaf8a428c8d9480b9cd1a7b87.avif differ diff --git a/media/uploads/products/thumb/eb1f670a3ac248008b8fa50401ba5f67.avif b/media/uploads/products/thumb/eb1f670a3ac248008b8fa50401ba5f67.avif new file mode 100644 index 0000000..f4bbe28 Binary files /dev/null and b/media/uploads/products/thumb/eb1f670a3ac248008b8fa50401ba5f67.avif differ diff --git a/media/uploads/products/thumb/ee49826b6ef14521aba9ca8958f8092d.avif b/media/uploads/products/thumb/ee49826b6ef14521aba9ca8958f8092d.avif new file mode 100644 index 0000000..16ac591 Binary files /dev/null and b/media/uploads/products/thumb/ee49826b6ef14521aba9ca8958f8092d.avif differ diff --git a/media/uploads/products/thumb/efb7bc8b053d423ebf3ed9b86b6b67e7.avif b/media/uploads/products/thumb/efb7bc8b053d423ebf3ed9b86b6b67e7.avif new file mode 100644 index 0000000..0104a3d Binary files /dev/null and b/media/uploads/products/thumb/efb7bc8b053d423ebf3ed9b86b6b67e7.avif differ diff --git a/media/uploads/products/thumb/f5281ecf82c74f9fa64a173d57cbc03e.avif b/media/uploads/products/thumb/f5281ecf82c74f9fa64a173d57cbc03e.avif new file mode 100644 index 0000000..09646fb Binary files /dev/null and b/media/uploads/products/thumb/f5281ecf82c74f9fa64a173d57cbc03e.avif differ diff --git a/media/uploads/products/thumb/faa086485f4041d1b9fd8aa7ca224c4f.avif b/media/uploads/products/thumb/faa086485f4041d1b9fd8aa7ca224c4f.avif new file mode 100644 index 0000000..1f5903a Binary files /dev/null and b/media/uploads/products/thumb/faa086485f4041d1b9fd8aa7ca224c4f.avif differ diff --git a/media/uploads/products/thumb/fc22b9894c364ce0937061dd4d5e8141.avif b/media/uploads/products/thumb/fc22b9894c364ce0937061dd4d5e8141.avif new file mode 100644 index 0000000..15e335b Binary files /dev/null and b/media/uploads/products/thumb/fc22b9894c364ce0937061dd4d5e8141.avif differ diff --git a/media/uploads/services/0ff5e0ce135447758d345766c5313094.png b/media/uploads/services/0ff5e0ce135447758d345766c5313094.png new file mode 100644 index 0000000..104e9f8 Binary files /dev/null and b/media/uploads/services/0ff5e0ce135447758d345766c5313094.png differ diff --git a/media/uploads/services/179706d1e44348838f398f96e98ed486.png b/media/uploads/services/179706d1e44348838f398f96e98ed486.png new file mode 100644 index 0000000..a2c5374 Binary files /dev/null and b/media/uploads/services/179706d1e44348838f398f96e98ed486.png differ diff --git a/media/uploads/services/5e2c8c4917774b1e82c73b8a49159bd1.png b/media/uploads/services/5e2c8c4917774b1e82c73b8a49159bd1.png new file mode 100644 index 0000000..101832c Binary files /dev/null and b/media/uploads/services/5e2c8c4917774b1e82c73b8a49159bd1.png differ diff --git a/media/uploads/services/71008cc45a7243ada028d29a720b45cd.png b/media/uploads/services/71008cc45a7243ada028d29a720b45cd.png new file mode 100644 index 0000000..7888db2 Binary files /dev/null and b/media/uploads/services/71008cc45a7243ada028d29a720b45cd.png differ diff --git a/media/uploads/services/b2898cf2381a47e7ba314417d5a70d46.png b/media/uploads/services/b2898cf2381a47e7ba314417d5a70d46.png new file mode 100644 index 0000000..d601576 Binary files /dev/null and b/media/uploads/services/b2898cf2381a47e7ba314417d5a70d46.png differ diff --git a/media/uploads/services/bcacc4d032c14a5884c2a601d0af7da5.png b/media/uploads/services/bcacc4d032c14a5884c2a601d0af7da5.png new file mode 100644 index 0000000..d57ebaf Binary files /dev/null and b/media/uploads/services/bcacc4d032c14a5884c2a601d0af7da5.png differ diff --git a/media/uploads/sub_banner/6baf6508d51d47f6928ff85fedce1c04.avif b/media/uploads/sub_banner/6baf6508d51d47f6928ff85fedce1c04.avif new file mode 100644 index 0000000..e5ca0ed Binary files /dev/null and b/media/uploads/sub_banner/6baf6508d51d47f6928ff85fedce1c04.avif differ diff --git a/media/uploads/w_logo/7faba228e56c423aa8119a3e2161324e.png b/media/uploads/w_logo/7faba228e56c423aa8119a3e2161324e.png new file mode 100644 index 0000000..fef6b6e Binary files /dev/null and b/media/uploads/w_logo/7faba228e56c423aa8119a3e2161324e.png differ diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..9975df6 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,39 @@ +events { + worker_connections 1024; +} + +http { + upstream django { + server django_web_prod_shop:8000; + } + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + server { + listen 80; + server_name localhost; + client_max_body_size 100M; + + location / { + proxy_pass http://django; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + } + + location /static/ { + alias /app/staticfiles/; + expires 30d; + add_header Cache-Control "public, immutable"; + } + + location /media/ { + alias /app/media/; + expires 7d; + add_header Cache-Control "public"; + } + } +} diff --git a/pids/celery_worker.pid b/pids/celery_worker.pid new file mode 100644 index 0000000..03887da --- /dev/null +++ b/pids/celery_worker.pid @@ -0,0 +1 @@ +14935 diff --git a/pids/django.pid b/pids/django.pid new file mode 100644 index 0000000..5c95acf --- /dev/null +++ b/pids/django.pid @@ -0,0 +1 @@ +14934 diff --git a/product/__init__.py b/product/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/product/admin.py b/product/admin.py new file mode 100644 index 0000000..debd580 --- /dev/null +++ b/product/admin.py @@ -0,0 +1,136 @@ +from django.contrib import admin +from django.utils.safestring import mark_safe +from django.utils.html import format_html + +from product.models import Product, Category, Images, Tags, ProductTree + + +# Register your models here. +class ProductAdmin(admin.ModelAdmin): + list_display = ('title', 'urun_resim', 'is_active', 'urun_kategorileri', 'brim', 'price', 'slug', 'urun_galeri') + list_filter = ('is_active', 'categories') + search_fields = ('title', 'is_active', 'slug', 'content') + list_editable = ('is_active', 'brim', 'price', 'slug',) + readonly_fields = ('thumb', 'image_preview', 'thumb_preview') + filter_horizontal = ('categories', 'tags', 'gallery') + + fieldsets = ( + ('Temel Bilgiler', { + 'fields': ('title', 'content', 'categories', 'tags') + }), + ('Fiyat ve Birim', { + 'fields': ('brim', 'price') + }), + ('SEO ve Medya', { + 'fields': ('slug', 'keywords', 'video') + }), + ('Görseller', { + 'fields': ('images', 'image_preview', 'thumb_preview', 'gallery'), + 'description': 'Thumb otomatik oluşturulur, images yüklediğinizde.' + }), + ('Durum', { + 'fields': ('is_active', 'is_front') + }), + ) + + class Meta: + model = Product + + def formatted_hit_count(self, obj): + return obj.current_hit_count if obj.current_hit_count > 0 else '-' + + formatted_hit_count.admin_order_field = 'hit_count' + formatted_hit_count.short_description = 'Hits' + + def blog_tags(self, obj): + tags = '
      ' + for tag in obj.tags.all(): + tags += '
    • ' + tag.tag + '
    • ' + tags += '
    ' + return mark_safe(tags) + + def urun_kategorileri(self, obj): + html = '
      ' + for category in obj.categories.all(): + html += '
    • ' + category.title + '
    • ' + html += '
    ' + return mark_safe(html) + + def urun_resim(self, obj): + if obj.images: + return mark_safe(''.format(obj.id, obj.id, obj.images.url)) + return mark_safe('Resim Yok'.format(obj.id, obj.id)) + + urun_resim.short_description = 'Ürün Resmi' + + def image_preview(self, obj): + if obj.images: + return format_html('', obj.images.url) + return "Resim Yok" + image_preview.short_description = 'Ana Resim Önizleme' + + def thumb_preview(self, obj): + if obj.thumb: + return format_html('', obj.thumb.url) + return "Thumb Yok (Kaydet ve otomatik oluşur)" + thumb_preview.short_description = 'Thumb Önizleme' + + def urun_galeri(self, obj): + html = '
      ' + for gal in obj.gallery.all(): + html += '
    • ' + gal.title + '
    • ' + html += '
    ' + return mark_safe(html) + + +admin.site.register(Product, ProductAdmin) + + +class ProductTreeAdmin(admin.ModelAdmin): + list_display = ('title', 'is_active', 'price') + list_filter = ('is_active',) + search_fields = ('title', 'is_active', 'content') + list_editable = ('is_active', 'price',) + + class Meta: + model = ProductTree + +admin.site.register(ProductTree, ProductTreeAdmin) + + +class CategoryAdmin(admin.ModelAdmin): + list_display = ('title', 'parent', 'is_active', 'created_at', 'order', 'slug') + list_filter = ('title', 'is_active', 'created_at',) + search_fields = ('title', 'is_active', 'slug') + list_editable = ('is_active', 'order', 'slug') + + class Meta: + model = Category + + +admin.site.register(Category, CategoryAdmin) + + +class ImagesAdmin(admin.ModelAdmin): + list_display = ('title', 'images', 'created_at',) + list_filter = ('title',) + search_fields = ('title', 'images') + list_editable = ('images',) + + class Meta: + model = Images + + +admin.site.register(Images, ImagesAdmin) + + +class TagsAdmin(admin.ModelAdmin): + list_display = ('tag', 'created_at',) + list_filter = ('tag',) + search_fields = ('tag',) + + class Meta: + model = Tags + + +admin.site.register(Tags, TagsAdmin) diff --git a/product/apps.py b/product/apps.py new file mode 100644 index 0000000..7d5b7b2 --- /dev/null +++ b/product/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class ProductConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'product' + + def ready(self): + import product.signals diff --git a/product/management/__init__.py b/product/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/product/management/commands/__init__.py b/product/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/product/management/commands/generate_fake_data.py b/product/management/commands/generate_fake_data.py new file mode 100644 index 0000000..9d82aef --- /dev/null +++ b/product/management/commands/generate_fake_data.py @@ -0,0 +1,131 @@ +import random +import string +from django.core.management.base import BaseCommand +from django.core.files.base import ContentFile +from PIL import Image, ImageDraw +from product.models import Product, Category, Tags, Images + +# Try to import Faker, use fallback if not available +try: + from faker import Faker + fake = Faker(['tr_TR']) + HAS_FAKER = True +except ImportError: + HAS_FAKER = False + +class Command(BaseCommand): + help = 'Generates fake data for products, categories, and tags.' + + def handle(self, *args, **kwargs): + self.stdout.write("Generating fake data...") + + if not HAS_FAKER: + self.stdout.write(self.style.WARNING("Faker library not found. Using simple random data generator. Install with 'pip install faker' for better data.")) + + # 1. Generate Categories + categories = [] + for i in range(10): + title = fake.word().capitalize() if HAS_FAKER else f"Kategori {i+1}" + keywords = ','.join(fake.words(nb=5)) if HAS_FAKER else "test, kategori, urun" + description = fake.sentence() if HAS_FAKER else f"Bu kategori {i+1} için açıklamadır." + + cat = Category.objects.create( + title=title, + keywords=keywords, + description=description + ) + categories.append(cat) + self.stdout.write(self.style.SUCCESS(f"{len(categories)} categories created.")) + + # 2. Generate Tags + tags = [] + for i in range(20): + tag_name = fake.word() if HAS_FAKER else f"Etiket {i+1}" + tag = Tags.objects.create(tag=tag_name) + tags.append(tag) + self.stdout.write(self.style.SUCCESS(f"{len(tags)} tags created.")) + + # 3. Generate Gallery Images + gallery_images = [] + for i in range(15): + img_name = f"gallery_{i}.jpg" # Using jpg for better compatibility + img = self._generate_random_image(img_name) + title = fake.word() if HAS_FAKER else f"Resim {i+1}" + + image_instance = Images.objects.create(title=title) + image_instance.images.save(img_name, img) + gallery_images.append(image_instance) + self.stdout.write(self.style.SUCCESS(f"{len(gallery_images)} gallery images created.")) + + # 4. Generate Products + products = [] + for i in range(50): + product_title = fake.company() if HAS_FAKER else f"Ürün {i+1} - {self._random_string(5)}" + content = fake.paragraph(nb_sentences=10) if HAS_FAKER else f"Bu ürün {i+1} için detaylı açıklamadır. " * 5 + keywords = ','.join(fake.words(nb=5)) if HAS_FAKER else "urun, satis, online" + video_code = fake.password(length=11, special_chars=False, upper_case=True, lower_case=True, digits=True) if HAS_FAKER else self._random_string(11) + + product = Product.objects.create( + title=product_title, + content=content, + keywords=keywords, + brim=random.choice(['Adet', 'Kg', 'Porsiyon', 'Dilim']), + price=round(random.uniform(10.0, 500.0), 2), + video=f"https://www.youtube.com/watch?v={video_code}" + ) + + # Assign categories, tags, and gallery + product.categories.set(random.sample(categories, k=random.randint(1, 3))) + product.tags.set(random.sample(tags, k=random.randint(1, 5))) + product.gallery.set(random.sample(gallery_images, k=random.randint(1, 4))) + + # Generate and assign main product image + img_name = f"product_{i}.jpg" + main_image = self._generate_random_image(img_name) + product.images.save(img_name, main_image) + + products.append(product) + + self.stdout.write(self.style.SUCCESS(f"{len(products)} products created.")) + self.stdout.write(self.style.SUCCESS("Fake data generation complete!")) + + def _generate_random_image(self, name): + """Generates a random image file in memory.""" + width, height = 400, 400 + img = Image.new('RGB', (width, height)) + draw = ImageDraw.Draw(img) + + # Random background color + bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) + draw.rectangle([0, 0, width, height], fill=bg_color) + + # Draw some random shapes + for _ in range(random.randint(3, 7)): + shape_type = random.choice(['ellipse', 'rectangle']) + + # Generate coordinates and sort them to ensure x0 <= x1 and y0 <= y1 + x1 = random.randint(0, width) + x2 = random.randint(0, width) + y1 = random.randint(0, height) + y2 = random.randint(0, height) + + xy = [ + (min(x1, x2), min(y1, y2)), + (max(x1, x2), max(y1, y2)) + ] + + fill_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) + + if shape_type == 'ellipse': + draw.ellipse(xy, fill=fill_color) + else: + draw.rectangle(xy, fill=fill_color) + + # Save image to a byte buffer + from io import BytesIO + buffer = BytesIO() + img.save(buffer, format='JPEG') # Using JPEG as it is standard in PIL + return ContentFile(buffer.getvalue(), name=name) + + def _random_string(self, length): + return ''.join(random.choices(string.ascii_letters + string.digits, k=length)) diff --git a/product/management/commands/generate_product_thumbs.py b/product/management/commands/generate_product_thumbs.py new file mode 100644 index 0000000..7da3113 --- /dev/null +++ b/product/management/commands/generate_product_thumbs.py @@ -0,0 +1,38 @@ +from django.core.management.base import BaseCommand +from product.models import Product + + +class Command(BaseCommand): + help = 'Tüm ürünler için eksik thumb dosyalarını oluşturur' + + def handle(self, *args, **options): + products = Product.objects.filter(images__isnull=False) + total = products.count() + created = 0 + skipped = 0 + + self.stdout.write(f'\n{total} ürün kontrol ediliyor...\n') + + for product in products: + if not product.thumb: + try: + product.save() # save() metodu thumb'ı otomatik oluşturacak + created += 1 + self.stdout.write( + self.style.SUCCESS(f'✓ Thumb oluşturuldu: {product.title}') + ) + except Exception as e: + self.stdout.write( + self.style.ERROR(f'✗ Hata ({product.title}): {str(e)}') + ) + else: + skipped += 1 + self.stdout.write( + self.style.WARNING(f'- Atlandı (zaten var): {product.title}') + ) + + self.stdout.write( + self.style.SUCCESS( + f'\n✓ Tamamlandı! {created} thumb oluşturuldu, {skipped} atlandı.\n' + ) + ) diff --git a/product/migrations/0001_initial.py b/product/migrations/0001_initial.py new file mode 100644 index 0000000..6b66b05 --- /dev/null +++ b/product/migrations/0001_initial.py @@ -0,0 +1,123 @@ +# Generated by Django 5.2.1 on 2025-06-03 04:02 + +import autoslug.fields +import django.db.models.deletion +import imagekit.models.fields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Images', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Resim Başlığı')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('images', imagekit.models.fields.ProcessedImageField(upload_to='uploads/product/%Y')), + ], + options={ + 'verbose_name': 'Ürün Resmi', + 'verbose_name_plural': 'Ürün Resimleri', + 'db_table': 'images', + 'ordering': ['-created_at'], + }, + ), + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Kategori')), + ('keywords', models.CharField(max_length=254, verbose_name='Seo Kelimeleri Aralarına Virgül Koyunuz')), + ('description', models.CharField(max_length=254, verbose_name='Açıklama')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı')), + ('order', models.IntegerField(db_index=True, default=1, verbose_name='Görüntülenme Sırası')), + ('slug', autoslug.fields.AutoSlugField(blank=True, editable=True, max_length=250, populate_from='title', unique=True)), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child', to='product.category', verbose_name='Üst Kategorisi')), + ], + options={ + 'verbose_name': 'Ürün Kategori', + 'verbose_name_plural': 'Ürün Kategorilerileri', + 'db_table': 'categories', + 'ordering': ['order'], + 'unique_together': {('slug', 'parent')}, + }, + ), + migrations.CreateModel( + name='Tags', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('tag', models.CharField(max_length=254, verbose_name='Ürün Tagları')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='tag', unique=True)), + ], + options={ + 'verbose_name': 'Ürün Tagı', + 'verbose_name_plural': 'Ürün Tagları', + 'db_table': 'tags', + 'ordering': ['-created_at'], + 'unique_together': {('slug',)}, + }, + ), + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Ürün Başlığı')), + ('content', models.TextField(blank=True, null=True, verbose_name='Ürün İçeriği')), + ('keywords', models.CharField(max_length=254, verbose_name='Seo Kelimeleri Aralarına Virgül Koyunuz')), + ('price', models.FloatField(verbose_name='Fiyatı')), + ('video', models.CharField(blank=True, default='none', max_length=254, null=True, verbose_name='Video')), + ('slug', autoslug.fields.AutoSlugField(editable=False, max_length=250, populate_from='title', unique=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('categories', models.ManyToManyField(related_name='categories', to='product.category', verbose_name='Ürün Kategorisi')), + ('images', models.ManyToManyField(related_name='img', to='product.images', verbose_name='Ürün Resimleri')), + ('tags', models.ManyToManyField(related_name='tags', to='product.tags', verbose_name='Ürün Tagları')), + ], + options={ + 'verbose_name': 'Ürün', + 'verbose_name_plural': 'Ürünler', + 'db_table': 'products', + 'ordering': ['-created_at'], + 'unique_together': {('slug',)}, + }, + ), + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Yorum Başlığı')), + ('body', models.TextField(verbose_name='Yorum')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child', to='product.comment')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cuser', to=settings.AUTH_USER_MODEL)), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='_product', to='product.product')), + ], + options={ + 'verbose_name': 'Ürüm Yorum', + 'verbose_name_plural': 'Ürün Yorumları', + 'db_table': 'comments', + 'ordering': ['-created_at'], + 'unique_together': {('slug', 'parent')}, + }, + ), + ] diff --git a/product/migrations/0002_product_kd_price_alter_product_price.py b/product/migrations/0002_product_kd_price_alter_product_price.py new file mode 100644 index 0000000..1deb58b --- /dev/null +++ b/product/migrations/0002_product_kd_price_alter_product_price.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.1 on 2025-06-03 04:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='kd_price', + field=models.FloatField(blank=True, null=True, verbose_name='Kg Fiyatı'), + ), + migrations.AlterField( + model_name='product', + name='price', + field=models.FloatField(verbose_name='Top Fiyatı'), + ), + ] diff --git a/product/migrations/0003_rename_kd_price_product_kg_price.py b/product/migrations/0003_rename_kd_price_product_kg_price.py new file mode 100644 index 0000000..2353f90 --- /dev/null +++ b/product/migrations/0003_rename_kd_price_product_kg_price.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-03 04:11 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0002_product_kd_price_alter_product_price'), + ] + + operations = [ + migrations.RenameField( + model_name='product', + old_name='kd_price', + new_name='kg_price', + ), + ] diff --git a/product/migrations/0004_alter_images_options_alter_images_images_and_more.py b/product/migrations/0004_alter_images_options_alter_images_images_and_more.py new file mode 100644 index 0000000..62047cf --- /dev/null +++ b/product/migrations/0004_alter_images_options_alter_images_images_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2.1 on 2025-06-03 13:21 + +import imagekit.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0003_rename_kd_price_product_kg_price'), + ] + + operations = [ + migrations.AlterModelOptions( + name='images', + options={'ordering': ['-created_at'], 'verbose_name': 'Galeri Resmi', 'verbose_name_plural': 'Galeri Resimleri'}, + ), + migrations.AlterField( + model_name='images', + name='images', + field=imagekit.models.fields.ProcessedImageField(upload_to='uploads/galeri/%Y'), + ), + migrations.RemoveField( + model_name='product', + name='images', + ), + migrations.AlterField( + model_name='product', + name='price', + field=models.FloatField(verbose_name='Birim Fiyatı'), + ), + migrations.AddField( + model_name='product', + name='images', + field=imagekit.models.fields.ProcessedImageField(default=1, upload_to='uploads/product/%Y'), + preserve_default=False, + ), + ] diff --git a/product/migrations/0005_product_special_product_special_images.py b/product/migrations/0005_product_special_product_special_images.py new file mode 100644 index 0000000..653098a --- /dev/null +++ b/product/migrations/0005_product_special_product_special_images.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.1 on 2025-06-12 01:46 + +import imagekit.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0004_alter_images_options_alter_images_images_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='special', + field=models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=False, verbose_name='Özel Ürünmü ?'), + ), + migrations.AddField( + model_name='product', + name='special_images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to='uploads/product/special/%Y', verbose_name='Eğer bu Ürün Özel Ürünise Resim yükleyin !!'), + ), + ] diff --git a/product/migrations/0006_product_thumbnail.py b/product/migrations/0006_product_thumbnail.py new file mode 100644 index 0000000..ee2f93d --- /dev/null +++ b/product/migrations/0006_product_thumbnail.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-12 04:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0005_product_special_product_special_images'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='thumbnail', + field=models.ImageField(blank=True, editable=False, null=True, upload_to='uploads/product/thumbs/%Y'), + ), + ] diff --git a/product/migrations/0007_category_images.py b/product/migrations/0007_category_images.py new file mode 100644 index 0000000..e42d895 --- /dev/null +++ b/product/migrations/0007_category_images.py @@ -0,0 +1,20 @@ +# Generated by Django 5.2.1 on 2025-06-12 18:43 + +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0006_product_thumbnail'), + ] + + operations = [ + migrations.AddField( + model_name='category', + name='images', + field=imagekit.models.fields.ProcessedImageField(default=1, upload_to='uploads/category/%Y'), + preserve_default=False, + ), + ] diff --git a/product/migrations/0008_remove_product_special_images.py b/product/migrations/0008_remove_product_special_images.py new file mode 100644 index 0000000..5c53ca3 --- /dev/null +++ b/product/migrations/0008_remove_product_special_images.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2.1 on 2025-06-13 01:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0007_category_images'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='special_images', + ), + ] diff --git a/product/migrations/0009_remove_product_special.py b/product/migrations/0009_remove_product_special.py new file mode 100644 index 0000000..a7e8035 --- /dev/null +++ b/product/migrations/0009_remove_product_special.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2.1 on 2025-06-13 01:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0008_remove_product_special_images'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='special', + ), + ] diff --git a/product/migrations/0010_alter_product_price.py b/product/migrations/0010_alter_product_price.py new file mode 100644 index 0000000..ccdf7cd --- /dev/null +++ b/product/migrations/0010_alter_product_price.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-13 03:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0009_remove_product_special'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='price', + field=models.FloatField(default='50', verbose_name='Birim Fiyatı'), + ), + ] diff --git a/product/migrations/0011_remove_product_kg_price_product_brim.py b/product/migrations/0011_remove_product_kg_price_product_brim.py new file mode 100644 index 0000000..34974d4 --- /dev/null +++ b/product/migrations/0011_remove_product_kg_price_product_brim.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.1 on 2025-06-13 12:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0010_alter_product_price'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='kg_price', + ), + migrations.AddField( + model_name='product', + name='brim', + field=models.CharField(default=1, max_length=10, verbose_name='Birim'), + preserve_default=False, + ), + ] diff --git a/product/migrations/0012_alter_product_brim.py b/product/migrations/0012_alter_product_brim.py new file mode 100644 index 0000000..f67f5ab --- /dev/null +++ b/product/migrations/0012_alter_product_brim.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-13 12:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0011_remove_product_kg_price_product_brim'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='brim', + field=models.CharField(choices=[('Top', 'Top'), ('Kg', 'Kg'), ('Adet', 'Adet'), ('Litre', 'Litre')], max_length=10, verbose_name='Birim'), + ), + ] diff --git a/product/migrations/0013_alter_product_brim.py b/product/migrations/0013_alter_product_brim.py new file mode 100644 index 0000000..a9d032e --- /dev/null +++ b/product/migrations/0013_alter_product_brim.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-13 12:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0012_alter_product_brim'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='brim', + field=models.CharField(choices=[('Top', 'Top'), ('Kg', 'Kg'), ('Adet', 'Adet'), ('Dilim', 'Dilim'), ('Litre', 'Litre')], max_length=10, verbose_name='Birim'), + ), + ] diff --git a/product/migrations/0014_alter_product_slug.py b/product/migrations/0014_alter_product_slug.py new file mode 100644 index 0000000..d8966cf --- /dev/null +++ b/product/migrations/0014_alter_product_slug.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.1 on 2025-06-13 13:02 + +import autoslug.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0013_alter_product_brim'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='slug', + field=autoslug.fields.AutoSlugField(blank=True, editable=True, max_length=250, populate_from='title', unique=True), + ), + ] diff --git a/product/migrations/0015_alter_product_brim.py b/product/migrations/0015_alter_product_brim.py new file mode 100644 index 0000000..fe39d57 --- /dev/null +++ b/product/migrations/0015_alter_product_brim.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-14 14:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0014_alter_product_slug'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='brim', + field=models.CharField(choices=[('Top', 'Top'), ('Kg', 'Kg'), ('Adet', 'Adet'), ('Fincan', 'Fincan'), ('Bardak', 'Bardak'), ('Dilim', 'Dilim'), ('Litre', 'Litre')], max_length=10, verbose_name='Birim'), + ), + ] diff --git a/product/migrations/0016_product_gallery.py b/product/migrations/0016_product_gallery.py new file mode 100644 index 0000000..9b5f071 --- /dev/null +++ b/product/migrations/0016_product_gallery.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-14 15:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0015_alter_product_brim'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='gallery', + field=models.ManyToManyField(related_name='gallery', to='product.images', verbose_name='Galeri'), + ), + ] diff --git a/product/migrations/0017_alter_product_brim.py b/product/migrations/0017_alter_product_brim.py new file mode 100644 index 0000000..35cbef9 --- /dev/null +++ b/product/migrations/0017_alter_product_brim.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-15 01:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0016_product_gallery'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='brim', + field=models.CharField(choices=[('Top', 'Top'), ('Kg', 'Kg'), ('Adet', 'Adet'), ('Porsiyon', 'Porsiyon'), ('Fincan', 'Fincan'), ('Bardak', 'Bardak'), ('Dilim', 'Dilim'), ('Litre', 'Litre')], max_length=10, verbose_name='Birim'), + ), + ] diff --git a/product/migrations/0018_product_is_front.py b/product/migrations/0018_product_is_front.py new file mode 100644 index 0000000..f56476e --- /dev/null +++ b/product/migrations/0018_product_is_front.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.1 on 2025-06-15 01:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0017_alter_product_brim'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='is_front', + field=models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Önde Görünsünmü ?'), + ), + ] diff --git a/product/migrations/0019_product_thumb.py b/product/migrations/0019_product_thumb.py new file mode 100644 index 0000000..c319be3 --- /dev/null +++ b/product/migrations/0019_product_thumb.py @@ -0,0 +1,20 @@ +# Generated by Django 5.2.1 on 2025-06-15 14:32 + +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0018_product_is_front'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='thumb', + field=imagekit.models.fields.ProcessedImageField(default=1, upload_to='uploads/thumb/%Y'), + preserve_default=False, + ), + ] diff --git a/product/migrations/0020_remove_product_thumbnail_alter_product_thumb.py b/product/migrations/0020_remove_product_thumbnail_alter_product_thumb.py new file mode 100644 index 0000000..b2a0d5a --- /dev/null +++ b/product/migrations/0020_remove_product_thumbnail_alter_product_thumb.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.1 on 2025-06-15 14:35 + +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0019_product_thumb'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='thumbnail', + ), + migrations.AlterField( + model_name='product', + name='thumb', + field=imagekit.models.fields.ProcessedImageField(editable=False, upload_to='uploads/thumb/%Y'), + ), + ] diff --git a/product/migrations/0021_remove_product_thumb_alter_category_images_and_more.py b/product/migrations/0021_remove_product_thumb_alter_category_images_and_more.py new file mode 100644 index 0000000..8b7f2be --- /dev/null +++ b/product/migrations/0021_remove_product_thumb_alter_category_images_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 6.0 on 2026-01-18 22:26 + +import core.utils +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0020_remove_product_thumbnail_alter_product_thumb'), + ] + + operations = [ + migrations.RemoveField( + model_name='product', + name='thumb', + ), + migrations.AlterField( + model_name='category', + name='images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/category')), + ), + migrations.AlterField( + model_name='images', + name='images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/images')), + ), + migrations.AlterField( + model_name='product', + name='images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/post')), + ), + ] diff --git a/product/migrations/0022_alter_product_content_alter_product_images.py b/product/migrations/0022_alter_product_content_alter_product_images.py new file mode 100644 index 0000000..c169a5c --- /dev/null +++ b/product/migrations/0022_alter_product_content_alter_product_images.py @@ -0,0 +1,26 @@ +# Generated by Django 6.0 on 2026-01-18 22:37 + +import core.utils +import imagekit.models.fields +import tinymce.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0021_remove_product_thumb_alter_category_images_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='content', + field=tinymce.models.HTMLField(blank=True, null=True, verbose_name='Ürün İçeriği'), + ), + migrations.AlterField( + model_name='product', + name='images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/products')), + ), + ] diff --git a/product/migrations/0023_alter_product_brim_alter_product_categories_and_more.py b/product/migrations/0023_alter_product_brim_alter_product_categories_and_more.py new file mode 100644 index 0000000..7825551 --- /dev/null +++ b/product/migrations/0023_alter_product_brim_alter_product_categories_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 6.0 on 2026-01-19 19:04 + +import core.utils +import imagekit.models.fields +import tinymce.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0022_alter_product_content_alter_product_images'), + ] + + operations = [ + migrations.AlterField( + model_name='product', + name='brim', + field=models.CharField(choices=[('Kg', 'Kg'), ('Adet', 'Adet')], max_length=10, verbose_name='Birim'), + ), + migrations.AlterField( + model_name='product', + name='categories', + field=models.ManyToManyField(related_name='products', to='product.category', verbose_name='Ürün Kategorisi'), + ), + migrations.CreateModel( + name='ProductTree', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Text')), + ('button', models.CharField(max_length=254, verbose_name='Button Text')), + ('content', tinymce.models.HTMLField(blank=True, null=True, verbose_name='Ürün İçeriği')), + ('price', models.FloatField(default='50', verbose_name='Birim Fiyatı')), + ('images', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/products'))), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('is_front', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Önde Görünsünmü ?')), + ('categories', models.ManyToManyField(related_name='product_trees', to='product.category', verbose_name='Ürün Kategorisi')), + ], + options={ + 'verbose_name': 'Ürün', + 'verbose_name_plural': 'Ürünler', + 'db_table': 'products_tree', + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/product/migrations/0024_alter_producttree_options_and_more.py b/product/migrations/0024_alter_producttree_options_and_more.py new file mode 100644 index 0000000..2e227cb --- /dev/null +++ b/product/migrations/0024_alter_producttree_options_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 6.0 on 2026-01-19 19:08 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0023_alter_product_brim_alter_product_categories_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='producttree', + options={'ordering': ['-created_at'], 'verbose_name': 'Ürün Tree', 'verbose_name_plural': 'Ürünler Tree'}, + ), + migrations.RemoveField( + model_name='producttree', + name='categories', + ), + ] diff --git a/product/migrations/0025_alter_producttree_content.py b/product/migrations/0025_alter_producttree_content.py new file mode 100644 index 0000000..db6c132 --- /dev/null +++ b/product/migrations/0025_alter_producttree_content.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0 on 2026-01-19 19:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0024_alter_producttree_options_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='producttree', + name='content', + field=models.TextField(blank=True, null=True, verbose_name='Ürün İçeriği'), + ), + ] diff --git a/product/migrations/0026_producttree_categories.py b/product/migrations/0026_producttree_categories.py new file mode 100644 index 0000000..5852611 --- /dev/null +++ b/product/migrations/0026_producttree_categories.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0 on 2026-01-20 18:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0025_alter_producttree_content'), + ] + + operations = [ + migrations.AddField( + model_name='producttree', + name='categories', + field=models.ManyToManyField(related_name='product_trees', to='product.category', verbose_name='Ürün Kategorisi'), + ), + ] diff --git a/product/migrations/0027_product_thumb.py b/product/migrations/0027_product_thumb.py new file mode 100644 index 0000000..fc59b6a --- /dev/null +++ b/product/migrations/0027_product_thumb.py @@ -0,0 +1,20 @@ +# Generated by Django 6.0 on 2026-01-21 01:07 + +import core.utils +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0026_producttree_categories'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='thumb', + field=imagekit.models.fields.ProcessedImageField(blank=True, editable=False, null=True, upload_to=core.utils.UniquePathAndRename('uploads/products/thumb')), + ), + ] diff --git a/product/migrations/__init__.py b/product/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/product/models.py b/product/models.py new file mode 100644 index 0000000..e24a2e5 --- /dev/null +++ b/product/models.py @@ -0,0 +1,275 @@ +import os +from django.conf import settings +from django.core.files.base import ContentFile +from django.db import models +from imagekit.models import ProcessedImageField +from autoslug import AutoSlugField +from tinymce.models import HTMLField + +from core.utils import image_optimizer +from reviews.models import RateableMixin # RateableMixin import edildi + + +# Create your models here. +class Category(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + title = models.CharField(max_length=254, verbose_name="Kategori") + keywords = models.CharField(max_length=254, verbose_name="Seo Kelimeleri Aralarına Virgül Koyunuz") + description = models.CharField(max_length=254, verbose_name="Açıklama") + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı', choices=aktif) + order = models.IntegerField(verbose_name='Görüntülenme Sırası', default=1, db_index=True) + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=True, db_index=True, max_length=250, + blank=True) + parent = models.ForeignKey('self', related_name='child', on_delete=models.CASCADE, blank=True, null=True, + verbose_name='Üst Kategorisi') + images = ProcessedImageField(**image_optimizer('uploads/category', 400, 400, 90, 'avif'), null=True, blank=True) + + class Meta: + ordering = ["order"] + db_table = 'categories' + verbose_name_plural = "Ürün Kategorilerileri" + verbose_name = "Ürün Kategori" + unique_together = ('slug', 'parent',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while Category.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + super().save(*args, **kwargs) + + def __str__(self): + full_path = [self.title] + k = self.parent + while k is not None: + full_path.append(k.title) + k = k.parent + return ' -> '.join(full_path[::-1]) + + +class Tags(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + tag = models.CharField(max_length=254, verbose_name="Ürün Tagları") + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı', choices=aktif) + slug = AutoSlugField(populate_from='tag', null=False, unique=True, editable=False, db_index=True) + + class Meta: + ordering = ["-created_at"] + db_table = 'tags' + verbose_name_plural = "Ürün Tagları" + verbose_name = "Ürün Tagı" + unique_together = ('slug',) + + def get_slug(self): + slug = self.tag.replace('ı', "i").replace('İ', 'i') + number = 1 + while Tags.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + super().save(*args, **kwargs) + + def __str__(self): + return self.tag + + +class Images(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + title = models.CharField(max_length=254, verbose_name="Resim Başlığı") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + images = ProcessedImageField(**image_optimizer('uploads/images', 1500, 1500, 90, 'avif'), null=True, blank=True) + + + class Meta: + ordering = ["-created_at"] + db_table = 'images' + verbose_name_plural = "Galeri Resimleri" + verbose_name = "Galeri Resmi" + + def __str__(self): + return self.title + + + +class Product(RateableMixin, models.Model): # RateableMixin eklendi + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + birim = ( + ('Kg', 'Kg'), + ('Adet', 'Adet'), + ) + title = models.CharField(max_length=254, verbose_name="Ürün Başlığı") + content = HTMLField(blank=True, null=True, verbose_name='Ürün İçeriği') + categories = models.ManyToManyField(Category, verbose_name="Ürün Kategorisi", related_name='products') + keywords = models.CharField(max_length=254, verbose_name="Seo Kelimeleri Aralarına Virgül Koyunuz") + brim = models.CharField(max_length=10, verbose_name="Birim",choices=birim) + price = models.FloatField(verbose_name='Birim Fiyatı',default='50') + tags = models.ManyToManyField(Tags, verbose_name="Ürün Tagları", related_name='tags') + gallery = models.ManyToManyField(Images, verbose_name="Galeri", related_name='gallery') + images = ProcessedImageField(**image_optimizer('uploads/products', 260, 260, 90, 'avif'), null=True, blank=True) + thumb = ProcessedImageField(**image_optimizer('uploads/products/thumb', 150, 150, 85, 'avif'), null=True, blank=True, editable=False) + video = models.CharField(verbose_name="Video", null=True, blank=True, max_length=254, default='none') + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=True, db_index=True, max_length=250, + blank=True) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + is_front = models.BooleanField(default=True, verbose_name='Önde Görünsünmü ?', choices=aktif) + + class Meta: + ordering = ["-created_at"] + db_table = 'products' + verbose_name_plural = "Ürünler" + verbose_name = "Ürün" + unique_together = ('slug',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while Product.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + + if self.images: + # Eğer yeni bir kayıt ise veya resim değişmişse veya thumb yoksa + update_thumb = False + if not self.pk: + update_thumb = True + elif not self.thumb: + # Thumb yoksa oluştur + update_thumb = True + else: + try: + old_instance = self.__class__.objects.get(pk=self.pk) + if self.images != old_instance.images: + update_thumb = True + except self.__class__.DoesNotExist: + pass + + if update_thumb: + try: + if hasattr(self.images, 'closed') and self.images.closed: + self.images.open() + + if hasattr(self.images, 'seek'): + self.images.seek(0) + + content = self.images.read() + filename = os.path.basename(self.images.name) + + # Doğrudan alana ata, super().save() işleyecek + self.thumb = ContentFile(content, name=filename) + except Exception: + pass + finally: + if hasattr(self.images, 'seek'): + self.images.seek(0) + + super().save(*args, **kwargs) + + def __str__(self): + return f"Ürünler: {self.title}" + +class ProductTree(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + birim = ( + ('Kg', 'Kg'), + ('Adet', 'Adet'), + ) + title = models.CharField(max_length=254, verbose_name="Text") + button = models.CharField(max_length=254, verbose_name="Button Text") + content = models.TextField(blank=True, null=True, verbose_name='Ürün İçeriği') + categories = models.ManyToManyField(Category, verbose_name="Ürün Kategorisi", related_name='product_trees') + price = models.FloatField(verbose_name='Birim Fiyatı',default='50') + images = ProcessedImageField(**image_optimizer('uploads/products', 740, 1100, 90, 'avif'), null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + is_front = models.BooleanField(default=True, verbose_name='Önde Görünsünmü ?', choices=aktif) + + class Meta: + ordering = ["-created_at"] + db_table = 'products_tree' + verbose_name_plural = "Ürünler Tree" + verbose_name = "Ürün Tree" + + def __str__(self): + return f"Ürünler Tree: {self.title}" + +class Comment(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='cuser') + product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='_product') + title = models.CharField(max_length=254, verbose_name="Yorum Başlığı") + body = models.TextField(verbose_name='Yorum') + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=True, verbose_name='Yayındamı', choices=aktif) + slug = AutoSlugField(populate_from='title', null=False, unique=True, editable=False, db_index=True) + parent = models.ForeignKey('self', related_name='child', on_delete=models.CASCADE, blank=True, null=True) + + class Meta: + ordering = ["-created_at"] + db_table = 'comments' + verbose_name_plural = "Ürün Yorumları" + verbose_name = "Ürüm Yorum" + unique_together = ('slug', 'parent',) + + def get_slug(self): + slug = self.title.replace('ı', "i").replace('İ', 'i') + number = 1 + while Comment.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(slug, number) + number += 1 + return slug + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + super().save(*args, **kwargs) + + def __str__(self): + full_path = [self.title] + k = self.parent + while k is not None: + full_path.append(k.title) + k = k.parent + return ' -> '.join(full_path[::-1]) diff --git a/product/serializers.py b/product/serializers.py new file mode 100644 index 0000000..d4aa3e9 --- /dev/null +++ b/product/serializers.py @@ -0,0 +1,100 @@ +from rest_framework import serializers +from product.models import Category, Product, Images, Tags, ProductTree + + +class CateSerializer(serializers.ModelSerializer): + images = serializers.SerializerMethodField() + + class Meta: + model = Category + fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'images', 'keywords', 'description'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + +class GalSerializer(serializers.ModelSerializer): + images = serializers.SerializerMethodField() + + class Meta: + model = Images + fields = ['title', 'images'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + +class TagSerializer(serializers.ModelSerializer): + class Meta: + model = Tags + fields = ['tag', 'slug'] + + +class ProductTreeSerializer(serializers.ModelSerializer): + images = serializers.SerializerMethodField() + categories = CateSerializer(read_only=True, many=True) + + class Meta: + model = ProductTree + fields = ['id', 'title', 'button', 'content', 'categories', 'price', 'images', 'created_at', 'updated_at', 'is_active', 'is_front'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + +class ProductSerializer(serializers.ModelSerializer): + categories = CateSerializer(read_only=True, many=True) + gallery = GalSerializer(read_only=True, many=True) + tags = TagSerializer(read_only=True, many=True) + images = serializers.SerializerMethodField() + thumb = serializers.SerializerMethodField() + + # RateableMixin'den gelen property'leri buraya ekliyoruz + average_rating = serializers.FloatField(read_only=True) + rating_count = serializers.IntegerField(read_only=True) + + class Meta: + model = Product + fields = ['id', 'title', 'content', 'categories', 'keywords', 'brim', 'tags', 'gallery', 'images', 'thumb', 'video', + 'slug', 'created_at', 'updated_at', 'is_active', 'is_front', 'price', 'average_rating', 'rating_count'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + def get_thumb(self, obj): + try: + if obj.thumb: + return obj.thumb.url + except Exception: + # Thumbnail oluşturulamadıysa veya bir hata olursa ana resmi dene + if obj.images: + return obj.images.url + return None + + +class CategorySerializer(serializers.ModelSerializer): + categories = ProductSerializer(read_only=True, many=True) + child = serializers.SerializerMethodField() + images = serializers.SerializerMethodField() + + class Meta: + model = Category + fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'images', 'keywords', 'description', + 'categories', 'child'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + def get_child(self, obj): + serializer = self.__class__(obj.child.all(), many=True, context=self.context) + return serializer.data diff --git a/product/signals.py b/product/signals.py new file mode 100644 index 0000000..bd86f6a --- /dev/null +++ b/product/signals.py @@ -0,0 +1,35 @@ +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from django.core.cache import cache +from .models import Product, Category, ProductTree + +@receiver([post_save, post_delete], sender=Product) +def clear_product_cache(sender, instance, **kwargs): + """ + Product modeli güncellendiğinde, silindiğinde veya yeni bir ürün eklendiğinde + ilgili cache'leri temizler. + """ + cache.delete('product:products:list') + cache.delete('product:products:featured') + cache.delete(f'product:product:{instance.slug}') + +@receiver([post_save, post_delete], sender=Category) +def clear_category_cache(sender, instance, **kwargs): + """ + Category modeli güncellendiğinde, silindiğinde veya yeni bir kategori eklendiğinde + ilgili cache'leri temizler. + """ + cache.delete('product:categories:list') + cache.delete(f'product:category:{instance.slug}') + # Eğer alt kategoriler varsa, üst kategorinin de cache'ini temizlemek gerekebilir. + if instance.parent: + cache.delete(f'product:category:{instance.parent.slug}') + + +@receiver([post_save, post_delete], sender=ProductTree) +def clear_product_tree_cache(sender, instance, **kwargs): + """ + ProductTree modeli güncellendiğinde, silindiğinde veya yeni bir nesne eklendiğinde + ilgili cache'i temizler. + """ + cache.delete('product:product_trees:list') diff --git a/product/tests.py b/product/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/product/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/product/urls.py b/product/urls.py new file mode 100644 index 0000000..fca947a --- /dev/null +++ b/product/urls.py @@ -0,0 +1,13 @@ +from django.urls import path + +from product.views import CategoryListView, CategoryRetrieveAPIView, ProductListAPIView, ProductRetrieveAPIView, \ + ProductListTreeAPIView, FeaturedProductListAPIView + +urlpatterns = [ # Success/Error pages + path('categories/', CategoryListView.as_view(), name='categories.list'), + path('categories//', CategoryRetrieveAPIView.as_view(), name='categories.details'), + path('products-tree/', ProductListTreeAPIView.as_view(), name='products.tree'), + path('products-featured/', FeaturedProductListAPIView.as_view(), name='products.featured'), + path('products/', ProductListAPIView.as_view(), name='products.list'), + path('products//', ProductRetrieveAPIView.as_view(), name='products.details'), +] diff --git a/product/views.py b/product/views.py new file mode 100644 index 0000000..19aa314 --- /dev/null +++ b/product/views.py @@ -0,0 +1,137 @@ +from django.core.cache import cache +from rest_framework import generics +from rest_framework.pagination import PageNumberPagination +from rest_framework.response import Response + +from core.Permission import ReadOnly +from product.models import Category, Product, ProductTree +from product.serializers import CategorySerializer, ProductSerializer, ProductTreeSerializer + +CACHE_TTL = 60 * 5 # 5 dakika + + +class StandardResultsSetPagination(PageNumberPagination): + page_size = 12 + page_size_query_param = 'page_size' + max_page_size = 100 + + +class CategoryListView(generics.ListAPIView): + permission_classes = [ReadOnly] + serializer_class = CategorySerializer + queryset = Category.objects.order_by('order').filter(is_active=True, parent__isnull=True).all() + + def get(self, request, *args, **kwargs): + cache_key = 'product:categories:list' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + queryset = self.get_queryset() + serializer = self.get_serializer(queryset, many=True) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL) + return Response(serializer.data) + + +class CategoryRetrieveAPIView(generics.RetrieveAPIView): + permission_classes = [ReadOnly] + queryset = Category.objects.order_by('order').filter(is_active=True).all() + serializer_class = CategorySerializer + lookup_field = 'slug' + + def get(self, request, *args, **kwargs): + slug = self.kwargs.get('slug') + cache_key = f'product:category:{slug}' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + instance = self.get_object() + serializer = self.get_serializer(instance) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL) + return Response(serializer.data) + + +class ProductListAPIView(generics.ListAPIView): + permission_classes = [ReadOnly] + serializer_class = ProductSerializer + queryset = Product.objects.filter(is_active=True).all() + pagination_class = StandardResultsSetPagination + + def get(self, request, *args, **kwargs): + # Sayfa numarasını al + page = request.query_params.get('page', 1) + cache_key = f'product:products:list:page:{page}' + + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + queryset = self.get_queryset() + + # Sayfalama işlemini uygula + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + # Sayfalanmış yanıtı al (count, next, previous, results yapısı) + response = self.get_paginated_response(serializer.data) + # Yanıtın verisini (data) cache'e kaydet + cache.set(cache_key, response.data, timeout=CACHE_TTL) + return response + + # Sayfalama yoksa normal döndür + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + + +class FeaturedProductListAPIView(generics.ListAPIView): + permission_classes = [ReadOnly] + serializer_class = ProductSerializer + queryset = Product.objects.filter(is_active=True, is_front=True).all() + + def get(self, request, *args, **kwargs): + cache_key = 'product:products:featured' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + queryset = self.get_queryset() + serializer = self.get_serializer(queryset, many=True) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL) + return Response(serializer.data) + + +class ProductListTreeAPIView(generics.ListAPIView): + permission_classes = [ReadOnly] + serializer_class = ProductTreeSerializer + queryset = ProductTree.objects.filter(is_active=True).all()[:3] + + def get(self, request, *args, **kwargs): + cache_key = 'product:product_trees:list' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + queryset = self.get_queryset() + serializer = self.get_serializer(queryset, many=True) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL) + return Response(serializer.data) + + +class ProductRetrieveAPIView(generics.RetrieveAPIView): + permission_classes = [ReadOnly] + queryset = Product.objects.filter(is_active=True).all() + serializer_class = ProductSerializer + lookup_field = 'slug' + + def get(self, request, *args, **kwargs): + slug = self.kwargs.get('slug') + cache_key = f'product:product:{slug}' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + instance = self.get_object() + serializer = self.get_serializer(instance) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL) + return Response(serializer.data) diff --git a/req.txt b/req.txt new file mode 100644 index 0000000..8daf5e1 --- /dev/null +++ b/req.txt @@ -0,0 +1,82 @@ +amqp==5.3.1 +asgiref==3.11.1 +billiard==4.2.4 +cachetools==7.0.1 +celery==5.6.2 +celery-types==0.24.0 +certifi==2026.1.4 +cffi==2.0.0 +charset-normalizer==3.4.4 +click==8.3.1 +click-didyoumean==0.3.1 +click-plugins==1.1.1.2 +click-repl==0.3.0 +cron_descriptor==2.0.6 +cryptography==46.0.5 +decorator==5.2.1 +defusedxml==0.7.1 +Django==6.0.2 +django-appconf==1.2.0 +django-autoslug==1.9.9 +django-celery-beat==2.1.0 +django-ckeditor-5==0.2.20 +django-cleanup==9.0.0 +django-colorfield==0.14.0 +django-cors-headers==4.9.0 +django-cropper-image==1.0.5 +django-debug-toolbar==6.2.0 +django-filter==25.2 +django-imagekit==6.1.0 +django-redis==6.0.0 +django-stubs==5.2.9 +django-stubs-ext==5.2.9 +django-timezone-field==4.2.3 +django-tinymce==5.0.0 +django-unicorn==0.65.2 +django_celery_results==2.6.0 +djangorestframework==3.16.1 +djangorestframework-stubs==3.16.8 +djangorestframework_simplejwt==5.5.1 +djoser==2.3.3 +Faker==40.4.0 +flower==2.0.1 +gunicorn==25.1.0 +hiredis==3.3.0 +humanize==4.15.0 +idna==3.11 +kombu==5.6.2 +lxml==6.0.2 +Markdown==3.10.2 +oauthlib==3.3.1 +orjson==3.11.7 +packaging==26.0 +pilkit==3.0 +pillow==12.1.1 +prometheus_client==0.24.1 +prompt_toolkit==3.0.52 +psycopg2-binary==2.9.11 +pycparser==3.0 +PyJWT==2.11.0 +python-crontab==3.3.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.1 +python3-openid==3.2.0 +pytz==2025.2 +redis==7.2.0 +requests==2.32.5 +requests-oauthlib==2.0.0 +shortuuid==1.0.13 +six==1.17.0 +social-auth-app-django==5.7.0 +social-auth-core==4.8.5 +sqlparse==0.5.5 +tornado==6.5.4 +types-PyYAML==6.0.12.20250915 +types-requests==2.32.4.20260107 +typing_extensions==4.15.0 +tzdata==2025.3 +tzlocal==5.3.1 +urllib3==2.6.3 +vine==5.1.0 +wcwidth==0.6.0 +whitenoise==6.11.0 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8daf5e1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,82 @@ +amqp==5.3.1 +asgiref==3.11.1 +billiard==4.2.4 +cachetools==7.0.1 +celery==5.6.2 +celery-types==0.24.0 +certifi==2026.1.4 +cffi==2.0.0 +charset-normalizer==3.4.4 +click==8.3.1 +click-didyoumean==0.3.1 +click-plugins==1.1.1.2 +click-repl==0.3.0 +cron_descriptor==2.0.6 +cryptography==46.0.5 +decorator==5.2.1 +defusedxml==0.7.1 +Django==6.0.2 +django-appconf==1.2.0 +django-autoslug==1.9.9 +django-celery-beat==2.1.0 +django-ckeditor-5==0.2.20 +django-cleanup==9.0.0 +django-colorfield==0.14.0 +django-cors-headers==4.9.0 +django-cropper-image==1.0.5 +django-debug-toolbar==6.2.0 +django-filter==25.2 +django-imagekit==6.1.0 +django-redis==6.0.0 +django-stubs==5.2.9 +django-stubs-ext==5.2.9 +django-timezone-field==4.2.3 +django-tinymce==5.0.0 +django-unicorn==0.65.2 +django_celery_results==2.6.0 +djangorestframework==3.16.1 +djangorestframework-stubs==3.16.8 +djangorestframework_simplejwt==5.5.1 +djoser==2.3.3 +Faker==40.4.0 +flower==2.0.1 +gunicorn==25.1.0 +hiredis==3.3.0 +humanize==4.15.0 +idna==3.11 +kombu==5.6.2 +lxml==6.0.2 +Markdown==3.10.2 +oauthlib==3.3.1 +orjson==3.11.7 +packaging==26.0 +pilkit==3.0 +pillow==12.1.1 +prometheus_client==0.24.1 +prompt_toolkit==3.0.52 +psycopg2-binary==2.9.11 +pycparser==3.0 +PyJWT==2.11.0 +python-crontab==3.3.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.1 +python3-openid==3.2.0 +pytz==2025.2 +redis==7.2.0 +requests==2.32.5 +requests-oauthlib==2.0.0 +shortuuid==1.0.13 +six==1.17.0 +social-auth-app-django==5.7.0 +social-auth-core==4.8.5 +sqlparse==0.5.5 +tornado==6.5.4 +types-PyYAML==6.0.12.20250915 +types-requests==2.32.4.20260107 +typing_extensions==4.15.0 +tzdata==2025.3 +tzlocal==5.3.1 +urllib3==2.6.3 +vine==5.1.0 +wcwidth==0.6.0 +whitenoise==6.11.0 diff --git a/requirements.txt.bak b/requirements.txt.bak new file mode 100644 index 0000000..c97583d --- /dev/null +++ b/requirements.txt.bak @@ -0,0 +1,81 @@ +amqp +asgiref +billiard +cachetools +celery +celery-types +certifi +cffi +charset-normalizer +click +click-didyoumean +click-plugins +click-repl +cryptography +decorator +defusedxml +Django +django-appconf +django-autoslug +django-celery-beat +django-ckeditor-5 +django-cleanup +django-colorfield +django-cors-headers +django-cropper-image +django-debug-toolbar +django-filter +django-imagekit +django-redis +django-stubs +django-stubs-ext +django-timezone-field +django-tinymce +django-unicorn +django_celery_results +djangorestframework +djangorestframework-stubs +djangorestframework_simplejwt +djoser +Faker +flower +gunicorn +hiredis +humanize +idna +kombu +lxml +Markdown +oauthlib +orjson +packaging +pilkit +pillow +prometheus_client +prompt_toolkit +psycopg2-binary +pycparser +PyJWT +python-crontab +python-dateutil +python-dotenv +python3-openid +pytz +redis +requests +requests-oauthlib +shortuuid +six +social-auth-app-django +social-auth-core +sqlparse +tornado +types-PyYAML +types-requests +typing_extensions +tzdata +tzlocal +urllib3 +vine +wcwidth +whitenoise diff --git a/reviews/__init__.py b/reviews/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/reviews/admin.py b/reviews/admin.py new file mode 100644 index 0000000..df653a0 --- /dev/null +++ b/reviews/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin +from .models import Rating + +@admin.register(Rating) +class RatingAdmin(admin.ModelAdmin): + list_display = ('content_object', 'user', 'score', 'created_at') + list_filter = ('score', 'created_at', 'content_type') + search_fields = ('user__username', 'user__email', 'comment') + readonly_fields = ('created_at', 'updated_at') + + # GenericForeignKey alanlarını admin panelinde daha düzgün göstermek için + # content_object alanını list_display'e ekledik, bu sayede hangi nesneye oy verildiği görülebilir. + + def get_queryset(self, request): + # N+1 sorununu önlemek için related alanları prefetch edelim + return super().get_queryset(request).select_related('user', 'content_type').prefetch_related('content_object') diff --git a/reviews/apps.py b/reviews/apps.py new file mode 100644 index 0000000..80e0186 --- /dev/null +++ b/reviews/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ReviewsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'reviews' diff --git a/reviews/migrations/0001_initial.py b/reviews/migrations/0001_initial.py new file mode 100644 index 0000000..d91675c --- /dev/null +++ b/reviews/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 6.0 on 2026-01-20 18:10 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Rating', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('score', models.PositiveSmallIntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')], verbose_name='Puan')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Yorum')), + ('object_id', models.PositiveIntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ratings', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Değerlendirme', + 'verbose_name_plural': 'Değerlendirmeler', + 'ordering': ['-created_at'], + 'unique_together': {('content_type', 'object_id', 'user')}, + }, + ), + ] diff --git a/reviews/migrations/__init__.py b/reviews/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/reviews/models.py b/reviews/models.py new file mode 100644 index 0000000..87db4d9 --- /dev/null +++ b/reviews/models.py @@ -0,0 +1,48 @@ +from django.conf import settings +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from django.db import models +from django.db.models import Avg + + +class Rating(models.Model): + score = models.PositiveSmallIntegerField(choices=[(i, str(i)) for i in range(1, 6)], verbose_name="Puan") + comment = models.TextField(blank=True, null=True, verbose_name="Yorum") + + # Generic Relation Fields + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey('content_type', 'object_id') + + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ratings') + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + unique_together = ('content_type', 'object_id', 'user') # Bir kullanıcı bir şeye sadece bir kez oy verebilir + ordering = ['-created_at'] + verbose_name = "Değerlendirme" + verbose_name_plural = "Değerlendirmeler" + + def __str__(self): + return f"{self.score} - {self.content_object}" + + +# Bu Mixin'i oylanabilir olmasını istediğiniz modellere miras (inherit) verebilirsiniz. +class RateableMixin: + @property + def average_rating(self): + # İlgili nesneye ait tüm oyların ortalamasını alır + ratings = Rating.objects.filter( + content_type=ContentType.objects.get_for_model(self), + object_id=self.id + ) + return ratings.aggregate(Avg('score'))['score__avg'] or 0.0 + + @property + def rating_count(self): + # Toplam oy sayısını döndürür + return Rating.objects.filter( + content_type=ContentType.objects.get_for_model(self), + object_id=self.id + ).count() diff --git a/reviews/serializers.py b/reviews/serializers.py new file mode 100644 index 0000000..f45c7d4 --- /dev/null +++ b/reviews/serializers.py @@ -0,0 +1,37 @@ +from rest_framework import serializers +from django.contrib.contenttypes.models import ContentType +from .models import Rating + +class RatingSerializer(serializers.ModelSerializer): + user = serializers.StringRelatedField(read_only=True) + model_name = serializers.CharField(write_only=True) # Örn: 'product' + object_id = serializers.IntegerField() + + class Meta: + model = Rating + fields = ['id', 'score', 'comment', 'user', 'created_at', 'model_name', 'object_id'] + read_only_fields = ['id', 'created_at', 'user'] + + def create(self, validated_data): + model_name = validated_data.pop('model_name').lower() + object_id = validated_data.pop('object_id') + user = self.context['request'].user + + # Model adından ContentType'ı bul + try: + # app_label='product' varsayımı yapıyoruz veya tüm app'lerde arayabiliriz. + # Daha güvenli olması için app_label'ı da parametre alabiliriz ama şimdilik basit tutalım. + # Genellikle model isimleri unique olur. + content_type = ContentType.objects.get(model=model_name) + except ContentType.DoesNotExist: + raise serializers.ValidationError(f"Model '{model_name}' bulunamadı.") + + # Kullanıcının daha önce oy verip vermediğini kontrol et (unique_together constraint var ama burada da yakalayalım) + rating, created = Rating.objects.update_or_create( + content_type=content_type, + object_id=object_id, + user=user, + defaults={'score': validated_data.get('score'), 'comment': validated_data.get('comment')} + ) + + return rating diff --git a/reviews/urls.py b/reviews/urls.py new file mode 100644 index 0000000..3f52140 --- /dev/null +++ b/reviews/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from .views import CreateRatingView, ListRatingsView + +urlpatterns = [ + path('rate/', CreateRatingView.as_view(), name='create-rating'), + path('list/', ListRatingsView.as_view(), name='list-ratings'), +] diff --git a/reviews/views.py b/reviews/views.py new file mode 100644 index 0000000..f8463fb --- /dev/null +++ b/reviews/views.py @@ -0,0 +1,34 @@ +from rest_framework import generics, permissions, status +from rest_framework.response import Response +from rest_framework.views import APIView +from django.contrib.contenttypes.models import ContentType +from .models import Rating +from .serializers import RatingSerializer + +class CreateRatingView(generics.CreateAPIView): + serializer_class = RatingSerializer + permission_classes = [permissions.IsAuthenticated] + + def perform_create(self, serializer): + # Serializer'ın create metodunda user ve content_type işlemleri yapılıyor + serializer.save() + +class ListRatingsView(APIView): + """ + Belirli bir model ve ID için yorumları listeler. + Örn: /api/v1/reviews/list/?model=product&id=1 + """ + def get(self, request): + model_name = request.query_params.get('model') + object_id = request.query_params.get('id') + + if not model_name or not object_id: + return Response({"error": "model ve id parametreleri gereklidir."}, status=status.HTTP_400_BAD_REQUEST) + + try: + content_type = ContentType.objects.get(model=model_name.lower()) + ratings = Rating.objects.filter(content_type=content_type, object_id=object_id) + serializer = RatingSerializer(ratings, many=True) + return Response(serializer.data) + except ContentType.DoesNotExist: + return Response({"error": "Model bulunamadı."}, status=status.HTTP_404_NOT_FOUND) diff --git a/run_spa_server.py b/run_spa_server.py new file mode 100644 index 0000000..a9cf1fc --- /dev/null +++ b/run_spa_server.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 +""" +Simple HTTP server to serve SPA test page on port 3000 +This simulates a Nuxt/Next.js frontend +""" +import http.server +import socketserver +import os +from urllib.parse import urlparse, parse_qs +import json + +PORT = 3001 # Using 3001 since 3000 might be in use + +class SPAHandler(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + # Parse URL + parsed = urlparse(self.path) + path = parsed.path + + # Serve activation page + if path.startswith('/activate/'): + parts = path.split('/') + if len(parts) >= 4: + uid = parts[2] + token = parts[3] + self.serve_activation_page(uid, token) + return + + # Serve main SPA page + if path == '/' or path == '/index.html': + self.serve_spa_page() + return + + # Default handler + super().do_GET() + + def serve_spa_page(self): + """Serve the main SPA page""" + html = """ + + + + Frontend SPA (Port 3000) + + + +
    +

    🎉 Frontend SPA (Port 3000)

    +

    Bu sayfa Nuxt/Next.js frontend'inizi simüle ediyor.

    + +
    + ✅ Email activation linkleri buraya gelecek! +

    Format: http://localhost:3000/activate/{uid}/{token}/

    +
    + +

    Test için:

    +
      +
    • Backend'de user oluşturun
    • +
    • MailPit'te email'i açın
    • +
    • Activation link'e tıklayın
    • +
    • Bu sayfaya gelecek ve otomatik activate edecek!
    • +
    + +

    Backend SPA Test (Port 8000)

    +
    + + + """ + self.send_response(200) + self.send_header('Content-type', 'text/html') + self.end_headers() + self.wfile.write(html.encode()) + + def serve_activation_page(self, uid, token): + """Serve activation page that calls Django API""" + html = f""" + + + + Activating Account... + + + +
    +
    +
    +

    Activating Your Account...

    +

    Please wait...

    +
    + +
    +
    +

    Account Activated!

    +

    Your account has been successfully activated.

    + Go to Login +
    + +
    +
    +

    Activation Failed

    +

    Something went wrong.

    + Back to Login +
    +
    + + + + + """ + self.send_response(200) + self.send_header('Content-type', 'text/html') + self.end_headers() + self.wfile.write(html.encode()) + +os.chdir('/home/beyhan/Python/server') + +with socketserver.TCPServer(("", PORT), SPAHandler) as httpd: + print(f"🚀 Frontend SPA Server running on http://localhost:{PORT}") + print(f"📧 Email activation links will work here!") + print(f"🔗 Open: http://localhost:{PORT}") + print(f"\nPress Ctrl+C to stop") + httpd.serve_forever() + diff --git a/settings/__init__.py b/settings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/settings/admin.py b/settings/admin.py new file mode 100644 index 0000000..27b5673 --- /dev/null +++ b/settings/admin.py @@ -0,0 +1,25 @@ +from django.contrib import admin +from settings.models import Setting, Banner, SiteSettings + + +# Register your models here. +class SettingAdmin(admin.ModelAdmin): + list_display = ('title', 'is_active', 'created_at') + list_editable = ('is_active',) + + +admin.site.register(Setting, SettingAdmin) + + +class BannerAdmin(admin.ModelAdmin): + list_display = ('title', 'is_active', 'created_at') + list_editable = ('is_active',) + + +admin.site.register(Banner, BannerAdmin) + +class SiteSettingsAdmin(admin.ModelAdmin): + list_display = ('id', 'is_active', 'site_active', 'created_at') + list_editable = ('is_active','site_active',) + +admin.site.register(SiteSettings, SiteSettingsAdmin) diff --git a/settings/apps.py b/settings/apps.py new file mode 100644 index 0000000..4f67616 --- /dev/null +++ b/settings/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class SettingsConfig(AppConfig): + name = 'settings' + + def ready(self): + import settings.signals diff --git a/settings/migrations/0001_initial.py b/settings/migrations/0001_initial.py new file mode 100644 index 0000000..be2b445 --- /dev/null +++ b/settings/migrations/0001_initial.py @@ -0,0 +1,68 @@ +# Generated by Django 6.0 on 2025-12-13 15:41 + +import colorfield.fields +import imagekit.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Banner', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('color', colorfield.fields.ColorField(default='#FFFFFF', image_field=None, max_length=25, samples=None, verbose_name='Yazı Rengi')), + ('title', models.CharField(max_length=254, null=True, verbose_name='Baner Adı')), + ('text1', models.CharField(max_length=254, null=True, verbose_name='Baner Küçük Yazı 1')), + ('text2', models.CharField(max_length=254, null=True, verbose_name='Baner Büyük Yazı 1')), + ('text4', models.CharField(max_length=254, null=True, verbose_name='Baner Küçük Yazı 2')), + ('text5', models.CharField(max_length=254, null=True, verbose_name='Baner Düğme Yazısı')), + ('image', imagekit.models.fields.ProcessedImageField(upload_to='uploads/banner/%Y')), + ('image_k', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to='uploads/banner/kucuk/%Y')), + ('image_k_txt', models.CharField(max_length=254, null=True, verbose_name='Küçük Resim Yazisi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ], + options={ + 'verbose_name': 'Banner', + 'verbose_name_plural': 'Bannerler', + 'db_table': 'banners', + 'ordering': ['-created_at'], + }, + ), + migrations.CreateModel( + name='Setting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=254, verbose_name='Ayar Başlığı')), + ('meta_title', models.CharField(default='Meta Title', max_length=254, verbose_name='Meta Title')), + ('meta_description', models.CharField(default='Meta Description', max_length=254, verbose_name='Meta Description')), + ('phone', models.CharField(max_length=254, verbose_name='Telefon')), + ('url', models.CharField(blank=True, default='https://beyhanogur.com.tr', max_length=254, null=True, verbose_name='Site İnternet Adresi')), + ('email', models.EmailField(max_length=254, verbose_name='E-Posta')), + ('facebook', models.CharField(blank=True, default='https://www.facebook.com', max_length=254, null=True, verbose_name='Facebook')), + ('x', models.CharField(blank=True, default='https://www.twitter.com', max_length=254, null=True, verbose_name='Twitter')), + ('instagram', models.CharField(blank=True, default='https://www.instagram.com', max_length=254, null=True, verbose_name='Instagram')), + ('whatsapp', models.CharField(blank=True, default='https://www.whatsapp.com', max_length=254, null=True, verbose_name='Whatsapp')), + ('slogan', models.CharField(blank=True, default='Dondurma', max_length=254, null=True, verbose_name='Başlık Solaganı')), + ('w_logo', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to='uploads/logo')), + ('b_logo', imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to='uploads/logo')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=False, verbose_name='Yayındamı')), + ], + options={ + 'verbose_name': 'Site Ayarı', + 'verbose_name_plural': 'Site Ayarları', + 'db_table': 'settings', + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/settings/migrations/0002_setting_linkedin_setting_pinterest.py b/settings/migrations/0002_setting_linkedin_setting_pinterest.py new file mode 100644 index 0000000..0bdebfc --- /dev/null +++ b/settings/migrations/0002_setting_linkedin_setting_pinterest.py @@ -0,0 +1,23 @@ +# Generated by Django 6.0 on 2026-01-12 17:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('settings', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='setting', + name='linkedin', + field=models.CharField(blank=True, default='https://www.linkedin.com', max_length=254, null=True, verbose_name='linkedin'), + ), + migrations.AddField( + model_name='setting', + name='pinterest', + field=models.CharField(blank=True, default='https://www.pinterest.com', max_length=254, null=True, verbose_name='pinterest'), + ), + ] diff --git a/settings/migrations/0003_sitesettings.py b/settings/migrations/0003_sitesettings.py new file mode 100644 index 0000000..db25ab4 --- /dev/null +++ b/settings/migrations/0003_sitesettings.py @@ -0,0 +1,28 @@ +# Generated by Django 6.0 on 2026-01-16 11:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('settings', '0002_setting_linkedin_setting_pinterest'), + ] + + operations = [ + migrations.CreateModel( + name='SiteSettings', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_active', models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')), + ], + options={ + 'verbose_name': 'Banner', + 'verbose_name_plural': 'Bannerler', + 'db_table': 'site_settings', + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/settings/migrations/0004_alter_sitesettings_options_sitesettings_site_active.py b/settings/migrations/0004_alter_sitesettings_options_sitesettings_site_active.py new file mode 100644 index 0000000..10c2028 --- /dev/null +++ b/settings/migrations/0004_alter_sitesettings_options_sitesettings_site_active.py @@ -0,0 +1,22 @@ +# Generated by Django 6.0 on 2026-01-16 12:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('settings', '0003_sitesettings'), + ] + + operations = [ + migrations.AlterModelOptions( + name='sitesettings', + options={'ordering': ['-created_at'], 'verbose_name': 'Site Ayarı Aç / Kapat', 'verbose_name_plural': 'Site Ayarları Aç / Kapat'}, + ), + migrations.AddField( + model_name='sitesettings', + name='site_active', + field=models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Yayındamı ?'), + ), + ] diff --git a/settings/migrations/0005_alter_sitesettings_site_active.py b/settings/migrations/0005_alter_sitesettings_site_active.py new file mode 100644 index 0000000..1e20b8c --- /dev/null +++ b/settings/migrations/0005_alter_sitesettings_site_active.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0 on 2026-01-18 22:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('settings', '0004_alter_sitesettings_options_sitesettings_site_active'), + ] + + operations = [ + migrations.AlterField( + model_name='sitesettings', + name='site_active', + field=models.BooleanField(choices=[(True, 'Evet'), (False, 'Hayır')], default=True, verbose_name='Site Aktifmi ?'), + ), + ] diff --git a/settings/migrations/0006_rename_text2_banner_button_text_and_more.py b/settings/migrations/0006_rename_text2_banner_button_text_and_more.py new file mode 100644 index 0000000..24d9df7 --- /dev/null +++ b/settings/migrations/0006_rename_text2_banner_button_text_and_more.py @@ -0,0 +1,65 @@ +# Generated by Django 6.0 on 2026-01-19 17:27 + +import core.utils +import imagekit.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('settings', '0005_alter_sitesettings_site_active'), + ] + + operations = [ + migrations.RenameField( + model_name='banner', + old_name='text2', + new_name='button_text', + ), + migrations.RenameField( + model_name='banner', + old_name='text1', + new_name='sub_text', + ), + migrations.RemoveField( + model_name='banner', + name='image', + ), + migrations.RemoveField( + model_name='banner', + name='image_k', + ), + migrations.RemoveField( + model_name='banner', + name='image_k_txt', + ), + migrations.RemoveField( + model_name='banner', + name='text4', + ), + migrations.RemoveField( + model_name='banner', + name='text5', + ), + migrations.AddField( + model_name='banner', + name='images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/banner')), + ), + migrations.AddField( + model_name='banner', + name='sub_images', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/sub_banner')), + ), + migrations.AlterField( + model_name='setting', + name='b_logo', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/b_logo')), + ), + migrations.AlterField( + model_name='setting', + name='w_logo', + field=imagekit.models.fields.ProcessedImageField(blank=True, null=True, upload_to=core.utils.UniquePathAndRename('uploads/w_logo')), + ), + ] diff --git a/settings/migrations/__init__.py b/settings/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/settings/models.py b/settings/models.py new file mode 100644 index 0000000..b27e436 --- /dev/null +++ b/settings/models.py @@ -0,0 +1,92 @@ +from django.db import models +from colorfield.fields import ColorField +from imagekit.models import ProcessedImageField + +from core.utils import image_optimizer + + +class Setting(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + title = models.CharField(max_length=254, verbose_name="Ayar Başlığı") + meta_title = models.CharField(max_length=254, verbose_name="Meta Title", default='Meta Title') + meta_description = models.CharField(max_length=254, verbose_name="Meta Description", default='Meta Description') + phone = models.CharField(max_length=254, verbose_name="Telefon") + url = models.CharField(max_length=254, verbose_name="Site İnternet Adresi", blank=True, null=True, + default='https://beyhanogur.com.tr') + email = models.EmailField(max_length=254, verbose_name="E-Posta") + facebook = models.CharField(max_length=254, verbose_name="Facebook", default='https://www.facebook.com', null=True, + blank=True) + x = models.CharField(max_length=254, verbose_name="Twitter", default='https://www.twitter.com', null=True, + blank=True) + instagram = models.CharField(max_length=254, verbose_name="Instagram", default='https://www.instagram.com', + null=True, blank=True) + whatsapp = models.CharField(max_length=254, verbose_name="Whatsapp", default='https://www.whatsapp.com', null=True, + blank=True) + pinterest = models.CharField(max_length=254, verbose_name="pinterest", default='https://www.pinterest.com', + null=True, blank=True) + linkedin = models.CharField(max_length=254, verbose_name="linkedin", default='https://www.linkedin.com', null=True, + blank=True) + slogan = models.CharField(max_length=254, verbose_name="Başlık Solaganı", default='Dondurma', null=True, blank=True) + w_logo = ProcessedImageField(**image_optimizer('uploads/w_logo', 191, 30, 85, 'png'), null=True, blank=True) + b_logo = ProcessedImageField(**image_optimizer('uploads/b_logo', 191, 30, 85, 'png'), null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + is_active = models.BooleanField(default=False, verbose_name='Yayındamı', choices=aktif) + + class Meta: + ordering = ["-created_at"] + db_table = 'settings' + verbose_name_plural = "Site Ayarları" + verbose_name = "Site Ayarı" + + def __str__(self): + return self.title + + +class Banner(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + color = ColorField(default='#FFFFFF', verbose_name='Yazı Rengi') + title = models.CharField(max_length=254, verbose_name='Baner Adı', null=True) + sub_text = models.CharField(max_length=254, verbose_name='Baner Küçük Yazı 1', null=True) + button_text = models.CharField(max_length=254, verbose_name='Baner Büyük Yazı 1', null=True) + images = ProcessedImageField(**image_optimizer('uploads/banner', 1720, 800, 85, 'avif'), null=True, blank=True) + sub_images = ProcessedImageField(**image_optimizer('uploads/sub_banner', 306, 311, 85, 'avif'), null=True, blank=True) + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + + class Meta: + ordering = ["-created_at"] + db_table = 'banners' + verbose_name_plural = "Bannerler" + verbose_name = "Banner" + + def __str__(self): + return str(self.title) + + +class SiteSettings(models.Model): + aktif = ( + (True, 'Evet'), + (False, 'Hayır'), + ) + is_active = models.BooleanField(default=True, verbose_name='Yayındamı ?', choices=aktif) + site_active = models.BooleanField(default=True, verbose_name='Site Aktifmi ?', choices=aktif) + created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="Oluşturulma Tarihi") + updated_at = models.DateTimeField(auto_now=True, editable=False, verbose_name="Güncelleme Tarihi") + + class Meta: + ordering = ["-created_at"] + db_table = 'site_settings' + verbose_name_plural = "Site Ayarları Aç / Kapat" + verbose_name = "Site Ayarı Aç / Kapat" + + def __str__(self): + return f"Site Ayarı {self.pk}" diff --git a/settings/serializers.py b/settings/serializers.py new file mode 100644 index 0000000..4115ecd --- /dev/null +++ b/settings/serializers.py @@ -0,0 +1,53 @@ +from rest_framework import serializers +from django.conf import settings + +# from product.models import Category, Product, Images, Tags +from settings.models import Setting, SiteSettings, Banner + +class SettingSerializer(serializers.ModelSerializer): + b_logo = serializers.SerializerMethodField() + w_logo = serializers.SerializerMethodField() + + class Meta: + model = Setting + fields = ['title', 'meta_title', 'meta_description', 'phone', 'url', 'email', 'facebook', 'x','pinterest','linkedin', + 'instagram', 'whatsapp', 'slogan', 'w_logo', 'b_logo', 'created_at', + 'updated_at', 'is_active'] + + def get_w_logo(self, obj): + if obj.w_logo: + # Sadece path döndür, domain olmadan + return obj.w_logo.url + return None + + def get_b_logo(self, obj): + if obj.b_logo: + # Sadece path döndür, domain olmadan + return obj.b_logo.url + return None + + +class SettingOpenCloseSerializer(serializers.ModelSerializer): + + class Meta: + model = SiteSettings + fields = ['is_active','site_active'] + + +class BannerSerializer(serializers.ModelSerializer): + images = serializers.SerializerMethodField() + sub_images = serializers.SerializerMethodField() + + class Meta: + model = Banner + fields = ['id', 'color', 'title', 'sub_text', 'button_text', 'images', 'sub_images', 'is_active', 'created_at', 'updated_at'] + + def get_images(self, obj): + if obj.images: + return obj.images.url + return None + + def get_sub_images(self, obj): + if obj.sub_images: + return obj.sub_images.url + return None diff --git a/settings/signals.py b/settings/signals.py new file mode 100644 index 0000000..4ceadd3 --- /dev/null +++ b/settings/signals.py @@ -0,0 +1,19 @@ +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from django.core.cache import cache +from .models import Banner + +@receiver(post_save, sender=Banner) +def clear_banner_cache_on_save(sender, instance, **kwargs): + """ + Banner modeli güncellendiğinde veya yeni bir banner eklendiğinde + ilgili cache'i temizler. + """ + cache.delete('settings:banner') + +@receiver(post_delete, sender=Banner) +def clear_banner_cache_on_delete(sender, instance, **kwargs): + """ + Banner silindiğinde ilgili cache'i temizler. + """ + cache.delete('settings:banner') diff --git a/settings/tests.py b/settings/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/settings/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/settings/urls.py b/settings/urls.py new file mode 100644 index 0000000..35c42ad --- /dev/null +++ b/settings/urls.py @@ -0,0 +1,8 @@ +from django.urls import path, include +from .views import SettingDetailView, SettingOpenCloseDetailView, BannerDetailView + +urlpatterns = [ # Success/Error pages + path('settings/', SettingDetailView.as_view(), name='settings'), + path('open-close/', SettingOpenCloseDetailView.as_view(), name='open.close'), + path('banners/', BannerDetailView.as_view(), name='banners'), +] diff --git a/settings/views.py b/settings/views.py new file mode 100644 index 0000000..973b5ae --- /dev/null +++ b/settings/views.py @@ -0,0 +1,76 @@ +from django.core.cache import cache +from rest_framework import status +from rest_framework.response import Response +from rest_framework.views import APIView + +from core.Permission import ReadOnly +from settings.models import Setting, SiteSettings, Banner +from settings.serializers import SettingSerializer, SettingOpenCloseSerializer, BannerSerializer + +CACHE_TTL_SECONDS = 60 * 5 + + +# Create your views here. +class SettingDetailView(APIView): + permission_classes = [ReadOnly] + + def get(self, request): + try: + cache_key = 'settings:detail' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + # İlk kaydı getir (veya istediğin koşula göre) + setting = Setting.objects.filter(is_active=True).first() + if setting: + serializer = SettingSerializer(setting) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS) + return Response(serializer.data) + else: + return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND) + except Exception as e: + return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +class SettingOpenCloseDetailView(APIView): + permission_classes = [ReadOnly] + + def get(self, request): + try: + cache_key = 'settings:site_status' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + # İlk kaydı getir (veya istediğin koşula göre) + setting = SiteSettings.objects.filter(is_active=True).first() + if setting: + serializer = SettingOpenCloseSerializer(setting) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS) + return Response(serializer.data) + else: + return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND) + except Exception as e: + return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +class BannerDetailView(APIView): + permission_classes = [ReadOnly] + + def get(self, request): + try: + cache_key = 'settings:banner' + cached_data = cache.get(cache_key) + if cached_data: + return Response(cached_data) + + banner = Banner.objects.filter(is_active=True).first() + if banner: + serializer = BannerSerializer(banner) + cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS) + return Response(serializer.data) + else: + return Response({"error": "No active banner found"}, status=status.HTTP_404_NOT_FOUND) + except Exception as e: + return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) diff --git a/start-services.sh b/start-services.sh new file mode 100644 index 0000000..23a9a78 --- /dev/null +++ b/start-services.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +# Django ve Celery servislerini başlatma scripti +# Kullanım: ./start-services.sh + +set -e + +echo "🚀 Django ve Celery servisleri başlatılıyor..." + +# Renk kodları +GREEN='\033[0;32m' +BLUE='\033[0;34m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# PID dosyaları için dizin +PID_DIR="./pids" +mkdir -p $PID_DIR + +# Django PID +DJANGO_PID="$PID_DIR/django.pid" +# Celery Worker PID +CELERY_WORKER_PID="$PID_DIR/celery_worker.pid" + +# Cleanup fonksiyonu - Script sonlandığında çağrılır +cleanup() { + echo -e "\n${RED}🛑 Servisler durduruluyor...${NC}" + + if [ -f "$DJANGO_PID" ]; then + DJANGO_PID_VALUE=$(cat $DJANGO_PID) + if ps -p $DJANGO_PID_VALUE > /dev/null 2>&1; then + echo -e "${BLUE}Django sunucusu durduruluyor (PID: $DJANGO_PID_VALUE)${NC}" + kill -TERM $DJANGO_PID_VALUE 2>/dev/null || true + fi + rm -f $DJANGO_PID + fi + + if [ -f "$CELERY_WORKER_PID" ]; then + CELERY_PID_VALUE=$(cat $CELERY_WORKER_PID) + if ps -p $CELERY_PID_VALUE > /dev/null 2>&1; then + echo -e "${BLUE}Celery worker durduruluyor (PID: $CELERY_PID_VALUE)${NC}" + kill -TERM $CELERY_PID_VALUE 2>/dev/null || true + fi + rm -f $CELERY_WORKER_PID + fi + + # Celery process'lerini temizle + pkill -f "celery worker" 2>/dev/null || true + + echo -e "${GREEN}✅ Tüm servisler durduruldu${NC}" + exit 0 +} + +# SIGINT (Ctrl+C) ve SIGTERM sinyallerini yakala +trap cleanup SIGINT SIGTERM + +# Eski PID dosyalarını temizle +rm -f $DJANGO_PID $CELERY_WORKER_PID + +echo -e "${BLUE}📦 Migrasyonlar kontrol ediliyor...${NC}" +python manage.py migrate --noinput + +echo -e "${BLUE}📁 Static dosyalar toplaniyor...${NC}" +python manage.py collectstatic --noinput + +echo -e "${GREEN}✅ Hazırlık tamamlandı${NC}\n" + +# Django sunucusunu başlat +echo -e "${BLUE}🌐 Django development sunucusu başlatılıyor...${NC}" +python manage.py runserver 0.0.0.0:8000 > ./logs/django.log 2>&1 & +DJANGO_PID_VALUE=$! +echo $DJANGO_PID_VALUE > $DJANGO_PID +echo -e "${GREEN}✅ Django sunucusu başlatıldı (PID: $DJANGO_PID_VALUE)${NC}" +echo -e "${GREEN} URL: http://localhost:8000${NC}\n" + +# Celery worker'ı başlat +echo -e "${BLUE}⚙️ Celery worker başlatılıyor...${NC}" +celery -A core worker --loglevel=info > ./logs/celery.log 2>&1 & +CELERY_PID_VALUE=$! +echo $CELERY_PID_VALUE > $CELERY_WORKER_PID +echo -e "${GREEN}✅ Celery worker başlatıldı (PID: $CELERY_PID_VALUE)${NC}\n" + +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN}🎉 Tüm servisler başarıyla başlatıldı!${NC}" +echo -e "${GREEN}========================================${NC}" +echo -e "${BLUE}Django Server:${NC} http://localhost:8000" +echo -e "${BLUE}Loglar:${NC}" +echo -e " - Django: ./logs/django.log" +echo -e " - Celery: ./logs/celery.log" +echo -e "\n${RED}Durdurmak için Ctrl+C tuşlarına basın${NC}\n" + +# Logları takip et +tail -f ./logs/django.log ./logs/celery.log & +TAIL_PID=$! + +# Sonsuz döngü - servisler çalışmaya devam etsin +wait $DJANGO_PID_VALUE $CELERY_PID_VALUE + diff --git a/static/spa-test.css b/static/spa-test.css new file mode 100644 index 0000000..2e09b04 --- /dev/null +++ b/static/spa-test.css @@ -0,0 +1,401 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; +} + +.navbar { + background: white; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + position: sticky; + top: 0; + z-index: 100; +} + +.nav-container { + max-width: 1200px; + margin: 0 auto; + padding: 1rem 2rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.nav-brand { + font-size: 1.5rem; + font-weight: bold; + color: #667eea; +} + +.nav-menu { + display: flex; + align-items: center; + gap: 1rem; +} + +.user-email { + color: #666; + font-size: 0.9rem; +} + +.btn-logout { + padding: 0.5rem 1rem; + background: #e74c3c; + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 0.9rem; + transition: background 0.3s; +} + +.btn-logout:hover { + background: #c0392b; +} + +.page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 2rem; +} + +.container { + max-width: 500px; + width: 100%; +} + +.card { + background: white; + border-radius: 20px; + box-shadow: 0 20px 60px rgba(0,0,0,0.3); + padding: 3rem; +} + +h1 { + color: #333; + margin-bottom: 0.5rem; + text-align: center; + font-size: 2rem; +} + +.subtitle { + color: #666; + text-align: center; + margin-bottom: 2rem; + font-size: 1rem; +} + +.form-group { + margin-bottom: 1.5rem; +} + +.form-group label { + display: block; + color: #333; + font-weight: 600; + margin-bottom: 0.5rem; + font-size: 0.9rem; +} + +.form-group input { + width: 100%; + padding: 0.8rem 1rem; + border: 2px solid #e1e8ed; + border-radius: 8px; + font-size: 1rem; + transition: border-color 0.3s; +} + +.form-group input:focus { + outline: none; + border-color: #667eea; +} + +.btn { + width: 100%; + padding: 1rem; + border: none; + border-radius: 8px; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s; + text-decoration: none; + display: block; + text-align: center; +} + +.btn-primary { + background: #667eea; + color: white; +} + +.btn-primary:hover { + background: #5568d3; + transform: translateY(-2px); + box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4); +} + +.btn-google { + background: #4285f4; + color: white; + margin-bottom: 0.8rem; +} + +.btn-google:hover { + background: #357ae8; +} + +.btn-github { + background: #24292e; + color: white; +} + +.btn-github:hover { + background: #1a1e22; +} + +.btn-small { + width: auto; + padding: 0.5rem 1rem; + font-size: 0.85rem; +} + +.divider { + text-align: center; + margin: 2rem 0; + color: #999; + position: relative; +} + +.divider::before, +.divider::after { + content: ""; + position: absolute; + top: 50%; + width: 45%; + height: 1px; + background: #ddd; +} + +.divider::before { left: 0; } +.divider::after { right: 0; } + +.social-buttons { + margin-top: 1.5rem; +} + +.footer-text { + text-align: center; + margin-top: 2rem; + color: #666; + font-size: 0.9rem; +} + +.footer-text a { + color: #667eea; + text-decoration: none; + font-weight: 600; +} + +.footer-text a:hover { + text-decoration: underline; +} + +.alert { + padding: 1rem; + border-radius: 8px; + margin-top: 1rem; + font-size: 0.9rem; +} + +.alert-error { + background: #fee; + border: 2px solid #fcc; + color: #c33; +} + +.alert-success { + background: #efe; + border: 2px solid #cfc; + color: #3c3; +} + +.profile-section { + display: flex; + align-items: center; + gap: 1.5rem; + margin: 2rem 0; + padding: 1.5rem; + background: #f8f9fa; + border-radius: 12px; +} + +.profile-avatar { + font-size: 4rem; + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; + background: #667eea; + border-radius: 50%; +} + +.profile-info h2 { + color: #333; + margin-bottom: 0.3rem; + font-size: 1.5rem; +} + +.text-muted { + color: #666; + font-size: 0.9rem; +} + +.badge { + display: inline-block; + padding: 0.3rem 0.8rem; + background: #28a745; + color: white; + border-radius: 20px; + font-size: 0.75rem; + font-weight: 600; + margin-top: 0.5rem; +} + +.stats-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 1rem; + margin: 2rem 0; +} + +.stat-card { + background: #f8f9fa; + padding: 1.5rem; + border-radius: 12px; + display: flex; + align-items: center; + gap: 1rem; +} + +.stat-icon { + font-size: 2rem; +} + +.stat-info h3 { + color: #333; + font-size: 1.1rem; + margin-bottom: 0.3rem; +} + +.stat-info p { + color: #666; + font-size: 0.8rem; +} + +.token-section { + margin: 2rem 0; +} + +.token-section h3 { + color: #333; + margin-bottom: 1rem; +} + +.token-box { + margin-bottom: 1.5rem; +} + +.token-box label { + display: block; + color: #666; + font-size: 0.85rem; + font-weight: 600; + margin-bottom: 0.5rem; +} + +.token-box textarea { + width: 100%; + padding: 0.8rem; + border: 2px solid #e1e8ed; + border-radius: 8px; + font-family: 'Courier New', monospace; + font-size: 0.75rem; + resize: vertical; + min-height: 80px; + margin-bottom: 0.5rem; +} + +.loading-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.7); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 9999; + color: white; +} + +.spinner { + border: 4px solid rgba(255,255,255,0.3); + border-top: 4px solid white; + border-radius: 50%; + width: 50px; + height: 50px; + animation: spin 1s linear infinite; + margin-bottom: 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* Dashboard specific styles */ +#dashboardPage .container { + max-width: 800px; +} + +#dashboardPage .card { + padding: 2rem; +} + +.info-box { + background: #e7f3ff; + border: 2px solid #b3d9ff; + color: #004085; + padding: 1rem; + border-radius: 8px; + margin-top: 1.5rem; + font-size: 0.85rem; +} + +.info-box strong { + display: block; + margin-bottom: 0.5rem; +} + +.info-box ol { + margin-left: 1.5rem; + margin-top: 0.5rem; +} + +.info-box li { + margin: 0.3rem 0; +} + diff --git a/static/spa-test.js b/static/spa-test.js new file mode 100644 index 0000000..0aca3ae --- /dev/null +++ b/static/spa-test.js @@ -0,0 +1,381 @@ +// API Base URL +const API_BASE = 'http://localhost:8000/api/v1'; + +// Google OAuth Client ID +const GOOGLE_CLIENT_ID = '915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com'; + +// Initialize app +document.addEventListener('DOMContentLoaded', () => { + checkAuth(); + checkOAuthCallback(); +}); + +// Check if user is authenticated +function checkAuth() { + const accessToken = localStorage.getItem('access_token'); + + if (accessToken) { + // User is logged in, show dashboard + loadUserProfile(); + } else { + // User is not logged in, show login page + showLogin(); + } +} + +// Check for OAuth callback parameters +function checkOAuthCallback() { + const urlParams = new URLSearchParams(window.location.search); + const access = urlParams.get('access'); + const refresh = urlParams.get('refresh'); + + if (access && refresh) { + // Save tokens from OAuth callback + localStorage.setItem('access_token', access); + localStorage.setItem('refresh_token', refresh); + + // Clean URL + window.history.replaceState({}, document.title, window.location.pathname); + + // Load user profile + loadUserProfile(); + } +} + +// Show login page +function showLogin() { + document.getElementById('loginPage').style.display = 'flex'; + document.getElementById('registerPage').style.display = 'none'; + document.getElementById('dashboardPage').style.display = 'none'; + document.getElementById('navbar').style.display = 'none'; +} + +// Show register page +function showRegister() { + document.getElementById('loginPage').style.display = 'none'; + document.getElementById('registerPage').style.display = 'flex'; + document.getElementById('dashboardPage').style.display = 'none'; + document.getElementById('navbar').style.display = 'none'; +} + +// Show dashboard +function showDashboard() { + document.getElementById('loginPage').style.display = 'none'; + document.getElementById('registerPage').style.display = 'none'; + document.getElementById('dashboardPage').style.display = 'flex'; + document.getElementById('navbar').style.display = 'block'; +} + +// Show loading +function showLoading() { + document.getElementById('loadingOverlay').style.display = 'flex'; +} + +// Hide loading +function hideLoading() { + document.getElementById('loadingOverlay').style.display = 'none'; +} + +// Show error +function showError(message) { + const errorAlert = document.getElementById('errorAlert'); + errorAlert.textContent = message; + errorAlert.style.display = 'block'; + + setTimeout(() => { + errorAlert.style.display = 'none'; + }, 5000); +} + +// Handle login form submit +async function handleLogin(event) { + event.preventDefault(); + + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + showLoading(); + + try { + const response = await fetch(`${API_BASE}/auth/jwt/create/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email, password }) + }); + + const data = await response.json(); + + if (response.ok) { + // Save tokens + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + // Load profile + await loadUserProfile(); + } else { + hideLoading(); + showError(data.detail || 'Login failed. Please check your credentials.'); + } + } catch (error) { + hideLoading(); + showError('Network error. Please try again.'); + } +} + +// Handle register form submit +async function handleRegister(event) { + event.preventDefault(); + + const email = document.getElementById('regEmail').value; + const password = document.getElementById('regPassword').value; + const passwordConfirm = document.getElementById('regPasswordConfirm').value; + const firstName = document.getElementById('firstName').value; + const lastName = document.getElementById('lastName').value; + + if (password !== passwordConfirm) { + showError('Passwords do not match!'); + return; + } + + showLoading(); + + try { + const response = await fetch(`${API_BASE}/auth/users/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + email, + password, + re_password: passwordConfirm, + first_name: firstName, + last_name: lastName + }) + }); + + const data = await response.json(); + hideLoading(); + + if (response.ok) { + // Show success message + document.getElementById('registerSuccess').style.display = 'block'; + document.getElementById('registerForm').reset(); + + // Redirect to login after 3 seconds + setTimeout(() => { + showLogin(); + document.getElementById('registerSuccess').style.display = 'none'; + }, 3000); + } else { + const errorMsg = Object.values(data).flat().join(', '); + showError(errorMsg || 'Registration failed.'); + } + } catch (error) { + hideLoading(); + showError('Network error. Please try again.'); + } +} + +// Load user profile +async function loadUserProfile() { + showLoading(); + + const accessToken = localStorage.getItem('access_token'); + + try { + const response = await fetch(`${API_BASE}/auth/users/me/`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + if (response.ok) { + const user = await response.json(); + + // Update UI with user data + document.getElementById('userEmail').textContent = user.email; + document.getElementById('profileName').textContent = + `${user.first_name} ${user.last_name}` || user.email; + document.getElementById('profileEmail').textContent = user.email; + document.getElementById('userEmailStat').textContent = user.email; + document.getElementById('profileStatus').textContent = + user.is_active ? '✅ Active' : '❌ Inactive'; + + // Format date + const joinDate = new Date(user.date_joined); + document.getElementById('joinedDate').textContent = + joinDate.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }); + + // Show tokens + document.getElementById('accessToken').value = localStorage.getItem('access_token'); + document.getElementById('refreshToken').value = localStorage.getItem('refresh_token'); + + hideLoading(); + showDashboard(); + } else { + // Token expired or invalid + logout(); + } + } catch (error) { + hideLoading(); + showError('Failed to load profile.'); + logout(); + } +} + +// Logout +function logout() { + localStorage.removeItem('access_token'); + localStorage.removeItem('refresh_token'); + showLogin(); +} + +// Copy token to clipboard +function copyToken(type) { + const token = type === 'access' + ? document.getElementById('accessToken').value + : document.getElementById('refreshToken').value; + + navigator.clipboard.writeText(token) + .then(() => alert(`${type} token copied to clipboard!`)) + .catch(() => alert('Failed to copy token')); +} + +// ============================================================================ +// SOCIAL AUTH - TOKEN-BASED FLOW (like Nuxt/Next.js) +// ============================================================================ + +// Google Login (Token-Based) +function loginWithGoogle() { + // Trigger Google One Tap or popup + google.accounts.id.prompt(); +} + +// Handle Google OAuth callback +async function handleGoogleCallback(response) { + console.log('[Google OAuth] Credential received:', response.credential); + + showLoading(); + + try { + // Send Google's ID token to Django backend + const result = await fetch(`${API_BASE}/auth/social/google-oauth2/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + access_token: response.credential, // Google's ID token + id_token: response.credential + }) + }); + + const data = await result.json(); + console.log('[Django Response]:', data); + + hideLoading(); + + if (result.ok) { + // Save JWT tokens from Django + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + console.log('[Success] JWT tokens saved to localStorage'); + + // Load user profile + await loadUserProfile(); + } else { + showError(data.error || 'Google login failed'); + } + } catch (error) { + hideLoading(); + console.error('[Error]:', error); + showError('Network error during Google login'); + } +} + +// GitHub Login (Token-Based) +async function loginWithGitHub() { + alert(` +⚠️ GitHub Token-Based Flow için: + +1. GitHub Personal Access Token oluşturun: + https://github.com/settings/tokens + +2. Scopes: user, user:email + +3. Token'ı prompt'a girin + +NOT: Production'da OAuth2 PKCE flow kullanılmalı. +Bu sadece test için! + `); + + const token = prompt('GitHub Personal Access Token girin:'); + if (!token) return; + + showLoading(); + + try { + const result = await fetch(`${API_BASE}/auth/social/github/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + access_token: token + }) + }); + + const data = await result.json(); + console.log('[Django Response]:', data); + + hideLoading(); + + if (result.ok) { + // Save JWT tokens from Django + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + console.log('[Success] JWT tokens saved to localStorage'); + + // Load user profile + await loadUserProfile(); + } else { + showError(data.error || 'GitHub login failed'); + } + } catch (error) { + hideLoading(); + console.error('[Error]:', error); + showError('Network error during GitHub login'); + } +} + +// Test protected endpoint +async function testProtectedEndpoint() { + showLoading(); + + const accessToken = localStorage.getItem('access_token'); + + try { + const response = await fetch(`${API_BASE}/auth/users/me/`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + hideLoading(); + + if (response.ok) { + alert('✅ Protected endpoint access successful!\n\nYour JWT token is working correctly.'); + } else { + alert('❌ Protected endpoint access failed.\n\nToken may be expired or invalid.'); + } + } catch (error) { + hideLoading(); + alert('❌ Network error while testing endpoint.'); + } +} + diff --git a/staticfiles/admin/css/autocomplete.css b/staticfiles/admin/css/autocomplete.css new file mode 100644 index 0000000..7478c2c --- /dev/null +++ b/staticfiles/admin/css/autocomplete.css @@ -0,0 +1,279 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: var(--body-quiet-color); + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: var(--body-fg); + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 10px 5px 5px; + width: 100%; + display: flex; + flex-wrap: wrap; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: var(--body-quiet-color); + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; + position: absolute; + right: 0; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: var(--body-quiet-color); + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: var(--body-fg); +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid var(--body-quiet-color) 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown { + background: var(--darkened-bg); +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + color: var(--body-fg); + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} + +.errors .select2-selection { + border: 1px solid var(--error-fg); +} diff --git a/staticfiles/admin/css/base.css b/staticfiles/admin/css/base.css new file mode 100644 index 0000000..a3ddccd --- /dev/null +++ b/staticfiles/admin/css/base.css @@ -0,0 +1,1221 @@ +/* + DJANGO Admin styles +*/ + +/* VARIABLE DEFINITIONS */ +html[data-theme="light"], +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --body-medium-color: #444; + --body-loud-color: #000; + + --header-color: #ffc; + --header-branding-color: var(--accent); + --header-bg: var(--secondary); + --header-link-color: var(--primary-fg); + + --breadcrumbs-fg: #c4dce8; + --breadcrumbs-link-fg: var(--body-bg); + --breadcrumbs-bg: #264b5d; + + --link-fg: #417893; + --link-hover-color: #036; + --link-selected-fg: var(--secondary); + + --hairline-color: #e8e8e8; + --border-color: #ccc; + + --error-fg: #ba2121; + + --message-debug-bg: #efefef; + --message-debug-icon: url(../img/icon-debug.svg); + --message-info-bg: #ccefff; + --message-info-icon: url(../img/icon-info.svg); + --message-success-bg: #dfd; + --message-success-icon: url(../img/icon-yes.svg); + --message-warning-bg: #ffc; + --message-warning-icon: url(../img/icon-alert.svg); + --message-error-bg: #ffefef; + --message-error-icon: url(../img/icon-no.svg); + + --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ + --selected-bg: #e4e4e4; /* E.g. selected table cells */ + --selected-row: #ffc; + + --button-fg: #fff; + --button-bg: var(--secondary); + --button-hover-bg: #205067; + --default-button-bg: #205067; + --default-button-hover-bg: var(--secondary); + --close-button-bg: #747474; + --close-button-hover-bg: #333; + --delete-button-bg: #ba2121; + --delete-button-hover-bg: #a41515; + + --object-tools-fg: var(--button-fg); + --object-tools-bg: var(--close-button-bg); + --object-tools-hover-bg: var(--close-button-hover-bg); + + --font-family-primary: + "Segoe UI", + system-ui, + Roboto, + "Helvetica Neue", + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + --font-family-monospace: + ui-monospace, + Menlo, + Monaco, + "Cascadia Mono", + "Segoe UI Mono", + "Roboto Mono", + "Oxygen Mono", + "Ubuntu Monospace", + "Source Code Pro", + "Fira Mono", + "Droid Sans Mono", + "Courier New", + monospace, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + + color-scheme: light; +} + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 0.875rem; + font-family: var(--font-family-primary); + color: var(--body-fg); + background: var(--body-bg); +} + +/* LINKS */ + +a:link, a:visited { + color: var(--link-fg); + text-decoration: none; + transition: color 0.15s, background 0.15s; +} + +a:focus, a:hover { + color: var(--link-hover-color); +} + +a:focus { + text-decoration: underline; +} + +a:not( + [role="button"], + #header a, + #nav-sidebar a, + #content-main.app-list a, + .object-tools a +) { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: var(--header-link-color); + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 1.25rem; +} + +h2 { + font-size: 1rem; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 0.875rem; + margin: .8em 0 .3em 0; + color: var(--body-medium-color); + font-weight: bold; +} + +h4 { + font-size: 0.75rem; + margin: 1em 0 .8em 0; + padding-bottom: 3px; + color: var(--body-medium-color); +} + +h5 { + font-size: 0.625rem; + margin: 1.5em 0 .5em 0; + color: var(--body-quiet-color); + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 0.8125rem; + line-height: 1.25rem; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +details summary { + cursor: pointer; +} + +blockquote { + font-size: 0.6875rem; + color: var(--body-quiet-color); + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid currentColor; +} + +code, pre { + font-family: var(--font-family-monospace); + color: var(--body-quiet-color); + font-size: 0.75rem; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 0.6875rem; +} + +.mini { + font-size: 0.625rem; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none !important; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 0.8125rem; + line-height: 1rem; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 500; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 0.6875rem; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + font-weight: bold; +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 1.125rem; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: var(--font-family-primary); + font-weight: normal; + font-size: 0.8125rem; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +/* +Minifiers remove the default (text) "type" attribute from "input" HTML tags. +Add input:not([type]) to make the CSS stylesheet work the same. +*/ +input:not([type]), input[type=text], input[type=password], input[type=email], +input[type=url], input[type=number], input[type=tel], textarea, select, +.vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +/* +Minifiers remove the default (text) "type" attribute from "input" HTML tags. +Add input:not([type]) to make the CSS stylesheet work the same. +*/ +input:not([type]):focus, input[type=text]:focus, input[type=password]:focus, +input[type=email]:focus, input[type=url]:focus, input[type=number]:focus, +input[type=tel]:focus, textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 1.875rem; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + text-align: left; + background: var(--header-bg); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 0.75rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 0.8125rem; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + color: var(--body-fg); + word-break: break-word; + background-color: var(--message-info-bg); + background-image: var(--message-info-icon); + background-position: 40px 12px; + background-repeat: no-repeat; + background-size: 16px auto; +} + +ul.messagelist li.debug { + background-color: var(--message-debug-bg); + background-image: var(--message-debug-icon); +} + +ul.messagelist li.info { + background-color: var(--message-info-bg); + background-image: var(--message-info-icon); +} + +ul.messagelist li.success { + background-color: var(--message-success-bg); + background-image: var(--message-success-icon); +} + +ul.messagelist li.warning { + background-color: var(--message-warning-bg); + background-image: var(--message-warning-icon); +} + +ul.messagelist li.error { + background-color: var(--message-error-bg); + background-image: var(--message-error-icon); +} + +@media (forced-colors: active) { + ul.messagelist li { + border: 1px solid; + } +} + +.errornote { + font-size: 0.875rem; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 0.8125rem; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 0.75rem; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.hidelink { + padding-left: 16px; + background: url(../img/icon-hidelink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + padding: 0; + overflow: hidden; + text-align: right; + margin: 0 0 15px; +} + +.object-tools li { + display: inline-block; + height: auto; +} + +.object-tools li + li { + margin-left: 15px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 0.6875rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +#change-history table { + width: 100%; +} + +#change-history table tbody th { + width: 16em; +} + +#change-history .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +.skip-to-content-link { + position: absolute; + top: -999px; + margin: 5px; + padding: 5px; + background: var(--body-bg); + z-index: 1; +} + +.skip-to-content-link:focus { + left: 0px; + top: 0px; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +@media (forced-colors: active) { + #content-related { + border: 1px solid; + } +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); +} + +#header a:link, #header a:visited, #logout-form button { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +@media (forced-colors: active) { + #header { + border-bottom: 1px solid; + } +} + +#branding { + display: flex; +} + +#site-name { + padding: 0; + margin: 0; + margin-inline-end: 20px; + font-weight: 300; + font-size: 1.5rem; + color: var(--header-branding-color); +} + +#site-name a:link, #site-name a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 0.875rem; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#logout-form { + display: inline; +} + +#logout-form button { + background: none; + border: 0; + cursor: pointer; + font-family: var(--font-family-primary); +} + +#user-tools { + float: right; + margin: 0 0 0 20px; + text-align: right; +} + +#user-tools, #logout-form button{ + padding: 0; + font-weight: 300; + font-size: 0.6875rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +#user-tools a, #logout-form button { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover, +#logout-form button:active, #logout-form button:hover { + text-decoration: none; + border-bottom: 0; +} + +#logout-form button:active, #logout-form button:hover { + margin-bottom: 1px; +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 0.8125rem; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 1.125rem; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 0.9375rem; + line-height: 0.9375rem; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} + +/* PAGINATOR */ + +.paginator { + display: flex; + align-items: center; + gap: 4px; + font-size: 0.8125rem; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + box-sizing: border-box; +} + +.paginator ul { + margin: 0; + margin-right: 6px; +} + +.paginator ul li { + display: inline-block; + line-height: 22px; + padding: 0; +} + +.paginator a { + display: inline-block; + padding: 2px 6px; +} + +.paginator a:not(.showall) { + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a[aria-current="page"] { + color: var(--body-quiet-color); + background: transparent; + font-weight: bold; + cursor: default; +} + +.paginator a:not([aria-current="page"], .showall):focus, +.paginator a:not([aria-current="page"], .showall):hover { + color: white; + background: var(--link-hover-color); +} + +.paginator input { + margin-left: auto; +} + +.base-svgs { + display: none; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} diff --git a/staticfiles/admin/css/changelists.css b/staticfiles/admin/css/changelists.css new file mode 100644 index 0000000..60cbaf2 --- /dev/null +++ b/staticfiles/admin/css/changelists.css @@ -0,0 +1,371 @@ +/* CHANGELISTS */ + +#changelist .changelist-form-container { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + width: 100%; +} + +#changelist .changelist-form-container > div { + flex: 1 1 auto; +} + +#changelist .changelist-form-container:not(:has(#changelist-filter)) > div { + width: 100%; +} + +#changelist .changelist-form-container:has(#changelist-filter) > div { + max-width: calc(100% - 270px); +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .filtered #toolbar, +.filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .changelist-footer { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .changelist-footer .paginator { + color: var(--body-quiet-color); + background: var(--body-bg); + border: none; + padding: 0; +} + +#changelist .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); +} + +#changelist .paginator ul { + padding: 0; + white-space: nowrap; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: var(--body-quiet-color); +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +#toolbar form input { + border-radius: 4px; + font-size: 0.875rem; + padding: 5px; + color: var(--body-fg); +} + +#toolbar #searchbar { + height: 1.1875rem; + border: 1px solid var(--border-color); + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 0.8125rem; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: var(--body-quiet-color); +} + +#toolbar form input[type="submit"] { + border: 1px solid var(--border-color); + font-size: 0.8125rem; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: var(--body-fg); +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: var(--body-quiet-color); +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +#changelist-search .help { + word-break: break-word; +} + +/* FILTER COLUMN */ + +#changelist-filter { + flex: 0 0 240px; + order: 1; + background: var(--darkened-bg); + border-left: none; + margin: 0 0 0 30px; +} + +@media (forced-colors: active) { + #changelist-filter { + border: 1px solid; + } +} + +#changelist-filter h2 { + font-size: 0.875rem; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3, +#changelist-filter details summary { + font-weight: 400; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter details summary > * { + display: inline; +} + +#changelist-filter details > summary { + list-style-type: none; +} + +#changelist-filter details > summary::-webkit-details-marker { + display: none; +} + +#changelist-filter details > summary::before { + content: '→'; + font-weight: bold; + color: var(--link-hover-color); +} + +#changelist-filter details[open] > summary::before { + content: '↓'; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + word-break: break-word; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-extra-actions { + font-size: 0.8125rem; + margin-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list .toplinks { + display: flex; + padding-bottom: 5px; + flex-wrap: wrap; + gap: 3px 17px; + font-weight: bold; +} + +.change-list .toplinks a { + font-size: 0.8125rem; +} + +.change-list .toplinks .date-back { + color: var(--body-quiet-color); +} + +.change-list .toplinks .date-back:focus, +.change-list .toplinks .date-back:hover { + color: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +/* Once the :has() pseudo-class is supported by all browsers, the tr.selected + selector and the JS adding the class can be removed. */ +#changelist tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist tbody tr:has(.action-select:checked) { + background-color: var(--selected-row); +} + +@media (forced-colors: active) { + #changelist tbody tr.selected { + background-color: SelectedItem; + } + #changelist tbody tr:has(.action-select:checked) { + background-color: SelectedItem; + } +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 1.5rem; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 0.8125rem; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 1.5rem; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 0.8125rem; +} + +#changelist .actions .button { + font-size: 0.8125rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 1.5rem; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/staticfiles/admin/css/dark_mode.css b/staticfiles/admin/css/dark_mode.css new file mode 100644 index 0000000..76cbf17 --- /dev/null +++ b/staticfiles/admin/css/dark_mode.css @@ -0,0 +1,146 @@ +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #d0d0d0; + --body-medium-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + + --message-debug-bg: #4e4e4e; + --message-debug-icon: url(../img/icon-debug-dark.svg); + --message-info-bg: #265895; + --message-info-icon: url(../img/icon-info-dark.svg); + --message-success-bg: #006b1b; + --message-success-icon: url(../img/icon-yes-dark.svg); + --message-warning-bg: #583305; + --message-warning-icon: url(../img/icon-alert-dark.svg); + --message-error-bg: #570808; + --message-error-icon: url(../img/icon-no-dark.svg); + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + + color-scheme: dark; + } + } + + +html[data-theme="dark"] { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #d0d0d0; + --body-medium-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + + --message-debug-bg: #4e4e4e; + --message-debug-icon: url(../img/icon-debug-dark.svg); + --message-info-bg: #265895; + --message-info-icon: url(../img/icon-info-dark.svg); + --message-success-bg: #006b1b; + --message-success-icon: url(../img/icon-yes-dark.svg); + --message-warning-bg: #583305; + --message-warning-icon: url(../img/icon-alert-dark.svg); + --message-error-bg: #570808; + --message-error-icon: url(../img/icon-no-dark.svg); + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + + color-scheme: dark; +} + +/* THEME SWITCH */ +.theme-toggle { + cursor: pointer; + border: none; + padding: 0; + background: transparent; + vertical-align: middle; + margin-inline-start: 5px; + margin-top: -1px; +} + +.theme-toggle svg { + vertical-align: middle; + height: 1.5rem; + width: 1.5rem; + display: none; +} + +/* +Fully hide screen reader text so we only show the one matching the current +theme. +*/ +.theme-toggle .visually-hidden { + display: none; +} + +html[data-theme="auto"] .theme-toggle .theme-label-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle .theme-label-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle .theme-label-when-light { + display: block; +} + +/* ICONS */ +.theme-toggle svg.theme-icon-when-auto, +.theme-toggle svg.theme-icon-when-dark, +.theme-toggle svg.theme-icon-when-light { + fill: var(--header-link-color); + color: var(--header-bg); +} + +html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} diff --git a/staticfiles/admin/css/dashboard.css b/staticfiles/admin/css/dashboard.css new file mode 100644 index 0000000..242b81a --- /dev/null +++ b/staticfiles/admin/css/dashboard.css @@ -0,0 +1,29 @@ +/* DASHBOARD */ +.dashboard td, .dashboard th { + word-break: break-word; +} + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/staticfiles/admin/css/forms.css b/staticfiles/admin/css/forms.css new file mode 100644 index 0000000..76e2d49 --- /dev/null +++ b/staticfiles/admin/css/forms.css @@ -0,0 +1,522 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 0.8125rem; + border-bottom: 1px solid var(--hairline-color); +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.flex-container { + display: flex; +} + +.form-multiline { + flex-wrap: wrap; +} + +.form-multiline > div { + padding-bottom: 10px; +} + +/* FORM LABELS */ + +legend, label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 0.8125rem; +} + +.required legend, legend.required, +.required label, label.required { + font-weight: bold; +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* FIELDSETS */ + +fieldset .fieldset-heading, +fieldset .inline-heading, +:not(.inline-related) .collapse summary { + border: 1px solid var(--header-bg); + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + background: var(--header-bg); + color: var(--header-link-color); +} + +/* ALIGNED FIELDSETS */ + +.aligned fieldset { + width: 100%; + border-top: none; +} + +.aligned fieldset > div { + width: 100%; +} + +.aligned legend { + float: left; +} + +.aligned legend, +.aligned label { + display: block; + padding: 4px 10px 0 0; + min-width: 160px; + width: 160px; + word-wrap: break-word; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; +} + +.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned fieldset div.help { + margin-left: 0; +} + +form .aligned p.help, +form .aligned div.help { + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-left: 0; + padding-left: 0; + font-weight: normal; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned select option:checked { + background-color: var(--selected-row); +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + padding: 1px 0 0 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +fieldset .fieldBox { + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p.help, +form .wide ul.errorlist, +form .wide div.help { + padding-left: 50px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSIBLE FIELDSETS */ + +.collapse summary .fieldset-heading, +.collapse summary .inline-heading { + background: transparent; + border: none; + color: currentColor; + display: inline; + margin: 0; + padding: 0; +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: var(--font-family-monospace); +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px 12px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 2.1875rem; + line-height: 0.9375rem; +} + +.submit-row input, .submit-row a { + margin: 0; +} + +.submit-row input.default { + text-transform: uppercase; +} + +.submit-row a.deletelink { + margin-left: auto; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 0.625rem 0.9375rem; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); + text-decoration: none; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); + text-decoration: none; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.app-flatpages.model-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h4, +.inline-related:not(.tabular) .collapse summary { + margin: 0; + color: var(--body-medium-color); + padding: 5px; + font-size: 0.8125rem; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-left-color: var(--darkened-bg); + border-right-color: var(--darkened-bg); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 0.6875rem; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular div.wrapper { + overflow-x: auto; +} + +.inline-related.tabular fieldset.module table { + width: 100%; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td { + font-size: 1rem; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.2em; + padding: 2px 9px; + overflow: hidden; + font-size: 0.875rem; + font-weight: bold; + color: var(--body-quiet-color); +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + font-size: 0.75rem; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 1rem; + height: 1rem; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/staticfiles/admin/css/login.css b/staticfiles/admin/css/login.css new file mode 100644 index 0000000..805a34b --- /dev/null +++ b/staticfiles/admin/css/login.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 1.125rem; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/staticfiles/admin/css/nav_sidebar.css b/staticfiles/admin/css/nav_sidebar.css new file mode 100644 index 0000000..7eb0de9 --- /dev/null +++ b/staticfiles/admin/css/nav_sidebar.css @@ -0,0 +1,150 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 1.25rem; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main > #nav-sidebar { + visibility: hidden; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; + visibility: visible; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +@media (forced-colors: active) { + #nav-sidebar .current-model { + background-color: SelectedItem; + } +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/staticfiles/admin/css/responsive.css b/staticfiles/admin/css/responsive.css new file mode 100644 index 0000000..fbf0d88 --- /dev/null +++ b/staticfiles/admin/css/responsive.css @@ -0,0 +1,881 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 0.875rem; + } + + .small { + font-size: 0.75rem; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 15px 20px 20px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #site-name { + margin: 0 0 8px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 0.8125rem; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 1.375rem; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 1.375rem; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 0.6875rem; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + legend, + label { + font-size: 1rem; + } + + /* + Minifiers remove the default (text) "type" attribute from "input" HTML + tags. Add input:not([type]) to make the CSS stylesheet work the same. + */ + .form-row input:not([type]), + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 2.25rem; + font-size: 1rem; + } + + .form-row select { + height: 2.25rem; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + .submit-row { + padding: 8px; + } + + .submit-row a.deletelink { + padding: 10px 7px; + } + + .button, input[type=submit], input[type=button], .submit-row input, a.button { + padding: 7px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter input { + width: 100%; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector-chooseall, .selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + padding: 0 2px; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 0.8125rem; + } + + .datetime .timezonewarning { + display: block; + font-size: 0.6875rem; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding: 10px 10px 10px 55px; + background-position-x: 30px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #site-name { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content { + padding: 15px; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 1rem; + } + + /* Changelist */ + + #changelist .changelist-form-container { + flex-direction: column; + } + + #changelist .changelist-form-container:has(#changelist-filter) > div { + max-width: 100%; + width: 100%; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + width: 100%; + margin-top: 30px; + } + + .object-tools { + text-align: left; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + .flex-container { + flex-flow: column; + } + + .flex-container.checkbox-row { + flex-flow: row; + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + .aligned legend, + .aligned label { + width: 100%; + min-width: auto; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + font-size: 0.8125rem; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 0.8125rem; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul, + form .aligned ul.errorlist { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + flex: 1 0 auto; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + /* Selector */ + + .selector { + flex-direction: column; + gap: 10px 0; + } + + .selector-available, .selector-chosen { + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: flex; + width: 60px; + height: 30px; + padding: 0 2px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + :enabled.selector-remove:focus, :enabled.selector-remove:hover { + background-position: 0 -24px; + } + + .selector-add { + background-position: 0 -48px; + } + + :enabled.selector-add:focus, :enabled.selector-add:hover { + background-position: 0 -72px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px; + margin: 0 0 15px; + flex-direction: column; + gap: 8px; + } + + .submit-row input, .submit-row input.default, .submit-row a { + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + text-align: center; + } + + .submit-row a.deletelink { + margin: 0; + } + + /* Messages */ + + ul.messagelist li { + padding: 10px 10px 10px 40px; + background-position-x: 15px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 0.8125rem; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 0.75rem; + line-height: 0.75rem; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 0.8125rem; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 0.8125rem; + word-break: break-word; + } +} diff --git a/staticfiles/admin/css/responsive_rtl.css b/staticfiles/admin/css/responsive_rtl.css new file mode 100644 index 0000000..b336bbf --- /dev/null +++ b/staticfiles/admin/css/responsive_rtl.css @@ -0,0 +1,95 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions, + [dir="rtl"] #changelist-filter { + margin-left: 0; + } + + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } + + [dir="rtl"] ul.messagelist li { + padding: 10px 55px 10px 10px; + background-position-x: calc(100% - 30px); + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul, + [dir="rtl"] form .aligned ul.errorlist { + margin-right: 0; + } + + [dir="rtl"] #changelist-filter { + margin-left: 0; + margin-right: 0; + } + + [dir="rtl"] .object-tools { + text-align: right; + } + + [dir="rtl"] .aligned .vCheckboxLabel { + padding: 1px 5px 0 0; + } + + [dir="rtl"] .selector-remove { + background-position: 0 0; + } + + [dir="rtl"] :enabled.selector-remove:focus, :enabled.selector-remove:hover { + background-position: 0 -24px; + } + + [dir="rtl"] .selector-add { + background-position: 0 -48px; + } + + [dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover { + background-position: 0 -72px; + } + + [dir="rtl"] ul.messagelist li { + padding: 10px 40px 10px 10px; + background-position-x: calc(100% - 15px); + } +} diff --git a/staticfiles/admin/css/rtl.css b/staticfiles/admin/css/rtl.css new file mode 100644 index 0000000..713f9f4 --- /dev/null +++ b/staticfiles/admin/css/rtl.css @@ -0,0 +1,295 @@ +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink, .hidelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + text-align: left; +} + +.object-tools li + li { + margin-right: 15px; + margin-left: 0; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid var(--hairline-color); + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +.paginator ul { + margin-left: 6px; + margin-right: 0; +} + +.paginator input { + margin-left: 0; + margin-right: auto; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; +} + +.submit-row a.deletelink { + margin-left: 0; + margin-right: auto; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned ul { + margin-right: 163px; + padding-right: 10px; + margin-left: 0; + padding-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +form .aligned p.help, +form .aligned div.help { + margin-left: 0; + margin-right: 160px; + padding-right: 10px; +} + +form div.help ul, +form .aligned .checkbox-row + .help, +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-right: 0; + padding-right: 0; +} + +form .wide p.help, +form .wide ul.errorlist, +form .wide div.help { + padding-left: 0; + padding-right: 50px; +} + +.submit-row { + text-align: right; +} + +fieldset .fieldBox { + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; + background: url(../img/calendar-icons.svg) 0 -15px no-repeat; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; + background-size: 24px auto; +} + +:enabled.selector-add:focus, :enabled.selector-add:hover { + background-position: 0 -120px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -144px no-repeat; + background-size: 24px auto; +} + +:enabled.selector-remove:focus, :enabled.selector-remove:hover { + background-position: 0 -168px; +} + +:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover { + background-position: 100% -144px; +} + +:enabled.selector-clearall:focus, :enabled.selector-clearall:hover { + background-position: 0 -176px; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} + +.inline-group .tabular td.original p { + right: 0; +} + +.selector .selector-chooser { + margin: 0; +} + +ul.messagelist li { + padding: 10px 65px 10px 10px; + background-position-x: calc(100% - 40px); +} diff --git a/staticfiles/admin/css/unusable_password_field.css b/staticfiles/admin/css/unusable_password_field.css new file mode 100644 index 0000000..d46eb03 --- /dev/null +++ b/staticfiles/admin/css/unusable_password_field.css @@ -0,0 +1,19 @@ +/* Hide warnings fields if usable password is selected */ +form:has(#id_usable_password input[value="true"]:checked) .messagelist { + display: none; +} + +/* Hide password fields if unusable password is selected */ +form:has(#id_usable_password input[value="false"]:checked) .field-password1, +form:has(#id_usable_password input[value="false"]:checked) .field-password2 { + display: none; +} + +/* Select appropriate submit button */ +form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password { + display: none; +} + +form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password { + display: none; +} diff --git a/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000..8cb8a2b --- /dev/null +++ b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/staticfiles/admin/css/vendor/select2/select2.css b/staticfiles/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000..750b320 --- /dev/null +++ b/staticfiles/admin/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/staticfiles/admin/css/vendor/select2/select2.min.css b/staticfiles/admin/css/vendor/select2/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/staticfiles/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/staticfiles/admin/css/widgets.css b/staticfiles/admin/css/widgets.css new file mode 100644 index 0000000..43271f8 --- /dev/null +++ b/staticfiles/admin/css/widgets.css @@ -0,0 +1,606 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + display: flex; + flex: 1; + gap: 0 10px; +} + +.selector select { + height: 17.2em; + flex: 1 0 auto; + overflow: scroll; + width: 100%; +} + +.selector-available, .selector-chosen { + display: flex; + flex-direction: column; + flex: 1 1; +} + +.selector-available-title, .selector-chosen-title { + border: 1px solid var(--border-color); + border-radius: 4px 4px 0 0; +} + +.selector .helptext { + font-size: 0.6875rem; +} + +.selector-chosen .list-footer-display { + border: 1px solid var(--border-color); + border-top: none; + border-radius: 0 0 4px 4px; + margin: 0 0 10px; + padding: 8px; + text-align: center; + background: var(--primary); + color: var(--header-link-color); + cursor: pointer; +} +.selector-chosen .list-footer-display__clear { + color: var(--breadcrumbs-fg); +} + +.selector-chosen-title { + background: var(--secondary); + color: var(--header-link-color); + padding: 8px; +} + +.selector-chosen-title label { + color: var(--header-link-color); + width: 100%; +} + +.selector-available-title { + background: var(--darkened-bg); + color: var(--body-quiet-color); + padding: 8px; +} + +.selector-available-title label { + width: 100%; +} + +.selector .selector-filter { + border: 1px solid var(--border-color); + border-width: 0 1px; + padding: 8px; + color: var(--body-quiet-color); + font-size: 0.625rem; + margin: 0; + text-align: left; + display: flex; + gap: 8px; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; + min-width: auto; +} + +.selector-filter input { + flex-grow: 1; +} + +.selector ul.selector-chooser { + align-self: center; + width: 30px; + background-color: var(--selected-bg); + border-radius: 10px; + margin: 0; + padding: 0; + transform: translateY(-17px); +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} +.selector .selector-chosen--with-filtered select { + margin: 0; + border-radius: 0; + height: 14em; +} + +.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display { + display: none; +} + +.selector-add, .selector-remove { + width: 24px; + height: 24px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.55; + border: none; +} + +:enabled.selector-add, :enabled.selector-remove { + opacity: 1; +} + +:enabled.selector-add:hover, :enabled.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -144px no-repeat; + background-size: 24px auto; +} + +:enabled.selector-add:focus, :enabled.selector-add:hover { + background-position: 0 -168px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; + background-size: 24px auto; +} + +:enabled.selector-remove:focus, :enabled.selector-remove:hover { + background-position: 0 -120px; +} + +.selector-chooseall, .selector-clearall { + display: inline-block; + text-align: left; + padding: 4px 5px; + margin: 0 auto; + overflow: hidden; + color: var(--button-fg); + background-color: var(--button-bg); + text-decoration: none; + opacity: 0.55; + border: none; + border-radius: 4px; +} + +:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus, +:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover { + background-color: var(--button-hover-bg); +} + +:enabled.selector-chooseall, :enabled.selector-clearall { + opacity: 1; +} + +:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover { + cursor: pointer; +} + +:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover { + background-position: 100% -176px; +} + +:enabled.selector-clearall:focus, :enabled.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; + display: block; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + display: flex; + height: 30px; + width: 64px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; + transform: none; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -48px no-repeat; + background-size: 24px auto; + cursor: default; +} + +.stacked :enabled.selector-add { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked :enabled.selector-add:focus, .stacked :enabled.selector-add:hover { + background-position: 0 -72px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + background-size: 24px auto; + cursor: default; +} + +.stacked :enabled.selector-remove { + background-position: 0 0px; + cursor: pointer; +} + +.stacked :enabled.selector-remove:focus, .stacked :enabled.selector-remove:hover { + background-position: 0 -24px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 1.125rem; + width: 1.125rem; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +p.datetime label { + display: inline; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 0.6875rem; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 24px; + width: 24px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; + background-size: 24px auto; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -24px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + background-size: 24px auto; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -24px; +} + +.timezonewarning { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: var(--body-fg); + font-size: 0.6875rem; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 0.75rem; + width: 19em; + text-align: center; + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + font-weight: 700; + font-size: 0.75rem; + color: #333; + background: var(--accent); +} + +.calendar th { + padding: 8px 5px; + background: var(--darkened-bg); + border-bottom: 1px solid var(--border-color); + font-weight: 400; + font-size: 0.75rem; + text-align: center; + color: var(--body-quiet-color); +} + +.calendar td { + font-weight: 400; + font-size: 0.75rem; + text-align: center; + padding: 0; + border-top: 1px solid var(--hairline-color); + border-bottom: none; +} + +.calendar td.selected a { + background: var(--secondary); + color: var(--button-fg); +} + +.calendar td.nonday { + background: var(--darkened-bg); +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: var(--body-quiet-color); +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: var(--primary); + color: white; +} + +.calendar td a:active, .timelist a:active { + background: var(--header-bg); + color: white; +} + +.calendarnav { + font-size: 0.625rem; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: var(--body-quiet-color); +} + +.calendar-shortcuts { + background: var(--body-bg); + color: var(--body-quiet-color); + font-size: 0.6875rem; + line-height: 0.6875rem; + border-top: 1px solid var(--hairline-color); + padding: 8px 0; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -15px no-repeat; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 0.75rem; + background: var(--close-button-bg); + border-top: 1px solid var(--border-color); + color: var(--button-fg); +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: var(--close-button-hover-bg); +} + +.calendar-cancel a { + color: var(--button-fg); + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) center center no-repeat; + background-size: contain; + width: 1.5rem; + height: 1.5rem; + border: 0px none; + margin-bottom: .25rem; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + display: flex; + gap: 0 10px; + flex-grow: 1; + flex-wrap: wrap; + margin-bottom: 5px; +} + +.related-widget-wrapper-link { + opacity: .6; + filter: grayscale(1); +} + +.related-widget-wrapper-link:link { + opacity: 1; + filter: grayscale(0); +} + +/* GIS MAPS */ +.dj_map { + width: 600px; + height: 400px; +} diff --git a/staticfiles/admin/img/README.md b/staticfiles/admin/img/README.md new file mode 100644 index 0000000..e635dc1 --- /dev/null +++ b/staticfiles/admin/img/README.md @@ -0,0 +1,80 @@ +# Information about icons in this directory + +## License + +All icons in this directory are provided by +[Font Awesome Free](https://fontawesome.com), version 6.7.2. + +- The icons are licensed under the [Creative Commons Attribution 4.0 + International (CC-BY-4.0)](https://creativecommons.org/licenses/by/4.0/) + license. +- This license allows you to use, modify, and distribute the icons, provided + proper attribution is given. + +## Usage + +- You may use, modify, and distribute the icons in this repository in + compliance with the [Creative Commons Attribution 4.0 International + (CC-BY-4.0)](https://creativecommons.org/licenses/by/4.0/) license. + +## Modifications + +- These icons have been resized, recolored, or otherwise modified to fit the + requirements of this project. + +- These modifications alter the appearance of the original icons but remain + covered under the terms of the + [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/) license. + +## Contributing SVG Icons + +To ensure visual consistency, traceability, and proper license attribution, +follow these guidelines. This applies when adding or modifying icons. + +## ⚠️ Important: Changing Font Awesome Version + +If you update to a different Font Awesome version, you must **update all SVG +files** and **comments inside the files** to reflect the new version number and +licensing URL accordingly. For example: + +* Original: +```xml + +``` +* Updated: +```xml + +``` + +## Adding a new icon + +1. Use only [Font Awesome Free Icons](https://fontawesome.com/icons). +2. Save the icon as an .svg file in this directory. +3. Include the following attribution comment at the top of the file (do not + change it): +```xml + +``` +4. Right before the `` element, add the following metadata comment with + the appropriate values: +```xml + +``` + +### Example SVG Structure + +```xml + + + + + +``` diff --git a/staticfiles/admin/img/calendar-icons.svg b/staticfiles/admin/img/calendar-icons.svg new file mode 100644 index 0000000..7845abb --- /dev/null +++ b/staticfiles/admin/img/calendar-icons.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + diff --git a/staticfiles/admin/img/icon-addlink.svg b/staticfiles/admin/img/icon-addlink.svg new file mode 100644 index 0000000..20fb814 --- /dev/null +++ b/staticfiles/admin/img/icon-addlink.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-alert-dark.svg b/staticfiles/admin/img/icon-alert-dark.svg new file mode 100644 index 0000000..a6365f5 --- /dev/null +++ b/staticfiles/admin/img/icon-alert-dark.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-alert.svg b/staticfiles/admin/img/icon-alert.svg new file mode 100644 index 0000000..9b4ee36 --- /dev/null +++ b/staticfiles/admin/img/icon-alert.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-calendar.svg b/staticfiles/admin/img/icon-calendar.svg new file mode 100644 index 0000000..827ca5d --- /dev/null +++ b/staticfiles/admin/img/icon-calendar.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/staticfiles/admin/img/icon-changelink.svg b/staticfiles/admin/img/icon-changelink.svg new file mode 100644 index 0000000..6316702 --- /dev/null +++ b/staticfiles/admin/img/icon-changelink.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-clock.svg b/staticfiles/admin/img/icon-clock.svg new file mode 100644 index 0000000..51f4db4 --- /dev/null +++ b/staticfiles/admin/img/icon-clock.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/staticfiles/admin/img/icon-debug-dark.svg b/staticfiles/admin/img/icon-debug-dark.svg new file mode 100644 index 0000000..ad76594 --- /dev/null +++ b/staticfiles/admin/img/icon-debug-dark.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-debug.svg b/staticfiles/admin/img/icon-debug.svg new file mode 100644 index 0000000..c57d919 --- /dev/null +++ b/staticfiles/admin/img/icon-debug.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-deletelink.svg b/staticfiles/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..eac19d7 --- /dev/null +++ b/staticfiles/admin/img/icon-deletelink.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/staticfiles/admin/img/icon-hidelink.svg b/staticfiles/admin/img/icon-hidelink.svg new file mode 100644 index 0000000..9462691 --- /dev/null +++ b/staticfiles/admin/img/icon-hidelink.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-info-dark.svg b/staticfiles/admin/img/icon-info-dark.svg new file mode 100644 index 0000000..76fc142 --- /dev/null +++ b/staticfiles/admin/img/icon-info-dark.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-info.svg b/staticfiles/admin/img/icon-info.svg new file mode 100644 index 0000000..0a240ea --- /dev/null +++ b/staticfiles/admin/img/icon-info.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-no-dark.svg b/staticfiles/admin/img/icon-no-dark.svg new file mode 100644 index 0000000..bb55c52 --- /dev/null +++ b/staticfiles/admin/img/icon-no-dark.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-no.svg b/staticfiles/admin/img/icon-no.svg new file mode 100644 index 0000000..6c5b15d --- /dev/null +++ b/staticfiles/admin/img/icon-no.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-unknown-alt.svg b/staticfiles/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..a7a51e7 --- /dev/null +++ b/staticfiles/admin/img/icon-unknown-alt.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-unknown.svg b/staticfiles/admin/img/icon-unknown.svg new file mode 100644 index 0000000..3acf303 --- /dev/null +++ b/staticfiles/admin/img/icon-unknown.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-viewlink.svg b/staticfiles/admin/img/icon-viewlink.svg new file mode 100644 index 0000000..40c86be --- /dev/null +++ b/staticfiles/admin/img/icon-viewlink.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-yes-dark.svg b/staticfiles/admin/img/icon-yes-dark.svg new file mode 100644 index 0000000..482292c --- /dev/null +++ b/staticfiles/admin/img/icon-yes-dark.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/icon-yes.svg b/staticfiles/admin/img/icon-yes.svg new file mode 100644 index 0000000..71683dc --- /dev/null +++ b/staticfiles/admin/img/icon-yes.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/inline-delete.svg b/staticfiles/admin/img/inline-delete.svg new file mode 100644 index 0000000..93e7e9d --- /dev/null +++ b/staticfiles/admin/img/inline-delete.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/search.svg b/staticfiles/admin/img/search.svg new file mode 100644 index 0000000..75c21a5 --- /dev/null +++ b/staticfiles/admin/img/search.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/selector-icons.svg b/staticfiles/admin/img/selector-icons.svg new file mode 100644 index 0000000..a953b29 --- /dev/null +++ b/staticfiles/admin/img/selector-icons.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/staticfiles/admin/img/sorting-icons.svg b/staticfiles/admin/img/sorting-icons.svg new file mode 100644 index 0000000..c3baa4a --- /dev/null +++ b/staticfiles/admin/img/sorting-icons.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/staticfiles/admin/img/tooltag-add.svg b/staticfiles/admin/img/tooltag-add.svg new file mode 100644 index 0000000..49cce19 --- /dev/null +++ b/staticfiles/admin/img/tooltag-add.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/img/tooltag-arrowright.svg b/staticfiles/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000..55ed8e5 --- /dev/null +++ b/staticfiles/admin/img/tooltag-arrowright.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/staticfiles/admin/js/SelectBox.js b/staticfiles/admin/js/SelectBox.js new file mode 100644 index 0000000..3db4ec7 --- /dev/null +++ b/staticfiles/admin/js/SelectBox.js @@ -0,0 +1,116 @@ +'use strict'; +{ + const SelectBox = { + cache: {}, + init: function(id) { + const box = document.getElementById(id); + SelectBox.cache[id] = []; + const cache = SelectBox.cache[id]; + for (const node of box.options) { + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + const box = document.getElementById(id); + const scroll_value_from_top = box.scrollTop; + box.innerHTML = ''; + for (const node of SelectBox.cache[id]) { + if (node.displayed) { + const new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.title = node.text; + box.appendChild(new_option); + } + } + box.scrollTop = scroll_value_from_top; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + const tokens = text.toLowerCase().split(/\s+/); + for (const node of SelectBox.cache[id]) { + node.displayed = 1; + const node_text = node.text.toLowerCase(); + for (const token of tokens) { + if (!node_text.includes(token)) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + get_hidden_node_count(id) { + const cache = SelectBox.cache[id] || []; + return cache.filter(node => node.displayed === 0).length; + }, + delete_from_cache: function(id, value) { + let delete_index = null; + const cache = SelectBox.cache[id]; + for (const [i, node] of cache.entries()) { + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + for (const node of SelectBox.cache[id]) { + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } ); + }, + select_all: function(id) { + const box = document.getElementById(id); + for (const option of box.options) { + option.selected = true; + } + } + }; + window.SelectBox = SelectBox; +} diff --git a/staticfiles/admin/js/SelectFilter2.js b/staticfiles/admin/js/SelectFilter2.js new file mode 100644 index 0000000..2100280 --- /dev/null +++ b/staticfiles/admin/js/SelectFilter2.js @@ -0,0 +1,329 @@ +/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js and SelectBox.js. +*/ +'use strict'; +{ + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + const from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + from_box.setAttribute('aria-labelledby', field_id + '_from_label'); + from_box.setAttribute('aria-describedby', `${field_id}_helptext ${field_id}_choose_helptext`); + + for (const p of from_box.parentNode.getElementsByTagName('p')) { + if (p.classList.contains("info")) { + // Remove

    , because it just gets in the way. + from_box.parentNode.removeChild(p); + } else if (p.classList.contains("help")) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); + } + } + + //

    or
    + const selector_div = quickElement('div', from_box.parentNode); + // Make sure the selector div is at the beginning so that the + // add link would be displayed to the right of the widget. + from_box.parentNode.prepend(selector_div); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + //
    + const selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + const selector_available_title = quickElement('div', selector_available); + selector_available_title.id = field_id + '_from_title'; + selector_available_title.className = 'selector-available-title'; + quickElement( + 'label', + selector_available_title, + interpolate(gettext('Available %s') + ' ', [field_name]), + 'id', + field_id + '_from_label', + 'for', + field_id + '_from' + ); + quickElement( + 'p', + selector_available_title, + interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]), + 'id', `${field_id}_choose_helptext`, 'class', 'helptext' + ); + + const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'aria-label', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + const choose_all = quickElement( + 'button', + selector_available, + interpolate(gettext('Choose all %s'), [field_name]), + 'id', field_id + '_add_all', + 'class', 'selector-chooseall', + 'type', 'button' + ); + + //
      + const selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + const add_button = quickElement( + 'button', + quickElement('li', selector_chooser), + interpolate(gettext('Choose selected %s'), [field_name]), + 'id', field_id + '_add', + 'class', 'selector-add', + 'type', 'button' + ); + const remove_button = quickElement( + 'button', + quickElement('li', selector_chooser), + interpolate(gettext('Remove selected %s'), [field_name]), + 'id', field_id + '_remove', + 'class', 'selector-remove', + 'type', 'button' + ); + + //
      + const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen'); + selector_chosen.className = 'selector-chosen'; + const selector_chosen_title = quickElement('div', selector_chosen); + selector_chosen_title.className = 'selector-chosen-title'; + selector_chosen_title.id = field_id + '_to_title'; + quickElement( + 'label', + selector_chosen_title, + interpolate(gettext('Chosen %s') + ' ', [field_name]), + 'id', + field_id + '_to_label', + 'for', + field_id + '_to' + ); + quickElement( + 'p', + selector_chosen_title, + interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]), + 'id', `${field_id}_remove_helptext`, 'class', 'helptext' + ); + + const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected'); + filter_selected_p.className = 'selector-filter'; + + const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input'); + + quickElement( + 'span', search_filter_selected_label, '', + 'class', 'help-tooltip search-label-icon', + 'aria-label', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name]) + ); + + filter_selected_p.appendChild(document.createTextNode(' ')); + + const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_selected_input.id = field_id + '_selected_input'; + + quickElement( + 'select', + selector_chosen, + '', + 'id', field_id + '_to', + 'multiple', '', + 'size', from_box.size, + 'name', from_box.name, + 'aria-labelledby', field_id + '_to_label', + 'aria-describedby', `${field_id}_helptext ${field_id}_remove_helptext`, + 'class', 'filtered' + ); + const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display'); + quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text'); + quickElement('span', warning_footer, ' ' + gettext('(click to clear)'), 'class', 'list-footer-display__clear'); + const clear_all = quickElement( + 'button', + selector_chosen, + interpolate(gettext('Remove all %s'), [field_name]), + 'id', field_id + '_remove_all', + 'class', 'selector-clearall', + 'type', 'button' + ); + + from_box.name = from_box.name + '_old'; + + // Set up the JavaScript event handlers for the select box filter interface + const move_selection = function(e, elem, move_func, from, to) { + if (!elem.hasAttribute('disabled')) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_button.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_button.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + warning_footer.addEventListener('click', function(e) { + filter_selected_input.value = ''; + SelectBox.filter(field_id + '_to', ''); + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_from', '_to'); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_from'); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_from', '_to'); + }); + filter_selected_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_to', '_from'); + }); + filter_selected_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input'); + }); + filter_selected_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_to', '_from'); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + from_box.closest('form').addEventListener('submit', function() { + SelectBox.filter(field_id + '_to', ''); + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + // Temporarily add the required attribute and check validity. + field.required = true; + const any_selected = field.checkValidity(); + field.required = false; + return any_selected; + }, + refresh_filtered_warning: function(field_id) { + const count = SelectBox.get_hidden_node_count(field_id + '_to'); + const selector = document.getElementById(field_id + '_selector_chosen'); + const warning = document.getElementById(field_id + '_list-footer-display-text'); + selector.className = selector.className.replace('selector-chosen--with-filtered', ''); + warning.textContent = interpolate(ngettext( + '%s selected option not visible', + '%s selected options not visible', + count + ), [count]); + if(count > 0) { + selector.className += ' selector-chosen--with-filtered'; + } + }, + refresh_filtered_selects: function(field_id) { + SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value); + SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value); + }, + refresh_icons: function(field_id) { + const from = document.getElementById(field_id + '_from'); + const to = document.getElementById(field_id + '_to'); + // Disabled if no items are selected. + document.getElementById(field_id + '_add').disabled = !SelectFilter.any_selected(from); + document.getElementById(field_id + '_remove').disabled = !SelectFilter.any_selected(to); + // Disabled if the corresponding box is empty. + document.getElementById(field_id + '_add_all').disabled = !from.querySelector('option'); + document.getElementById(field_id + '_remove_all').disabled = !to.querySelector('option'); + }, + filter_key_press: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + source_box.selectedIndex = 0; + SelectBox.move(field_id + source, field_id + target); + source_box.selectedIndex = 0; + event.preventDefault(); + } + }, + filter_key_up: function(event, field_id, source, filter_input) { + const input = filter_input || '_input'; + const source_box = document.getElementById(field_id + source); + const temp = source_box.selectedIndex; + SelectBox.filter(field_id + source, document.getElementById(field_id + input).value); + source_box.selectedIndex = temp; + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }, + filter_key_down: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // right key (39) or left key (37) + const direction = source === '_from' ? 39 : 37; + // right arrow -- move across + if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) { + const old_index = source_box.selectedIndex; + SelectBox.move(field_id + source, field_id + target); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index; + return; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1; + } + } + }; + + window.addEventListener('load', function(e) { + document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { + const data = el.dataset; + SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); + }); + }); +} diff --git a/staticfiles/admin/js/actions.js b/staticfiles/admin/js/actions.js new file mode 100644 index 0000000..04b25e9 --- /dev/null +++ b/staticfiles/admin/js/actions.js @@ -0,0 +1,204 @@ +/*global gettext, interpolate, ngettext, Actions*/ +'use strict'; +{ + function show(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.remove('hidden'); + }); + } + + function hide(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.add('hidden'); + }); + } + + function showQuestion(options) { + hide(options.acrossClears); + show(options.acrossQuestions); + hide(options.allContainer); + } + + function showClear(options) { + show(options.acrossClears); + hide(options.acrossQuestions); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + show(options.allContainer); + hide(options.counterContainer); + } + + function reset(options) { + hide(options.acrossClears); + hide(options.acrossQuestions); + hide(options.allContainer); + show(options.counterContainer); + } + + function clearAcross(options) { + reset(options); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 0; + }); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + } + + function checker(actionCheckboxes, options, checked) { + if (checked) { + showQuestion(options); + } else { + reset(options); + } + actionCheckboxes.forEach(function(el) { + el.checked = checked; + el.closest('tr').classList.toggle(options.selectedClass, checked); + }); + } + + function updateCounter(actionCheckboxes, options) { + const sel = Array.from(actionCheckboxes).filter(function(el) { + return el.checked; + }).length; + const counter = document.querySelector(options.counterContainer); + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + const actions_icnt = Number(counter.dataset.actionsIcnt); + counter.textContent = interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true); + const allToggle = document.getElementById(options.allToggleId); + allToggle.checked = sel === actionCheckboxes.length; + if (allToggle.checked) { + showQuestion(options); + } else { + clearAcross(options); + } + } + + const defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggleId: "action-toggle", + selectedClass: "selected" + }; + + window.Actions = function(actionCheckboxes, options) { + options = Object.assign({}, defaults, options); + let list_editable_changed = false; + let lastChecked = null; + let shiftPressed = false; + + document.addEventListener('keydown', (event) => { + shiftPressed = event.shiftKey; + }); + + document.addEventListener('keyup', (event) => { + shiftPressed = event.shiftKey; + }); + + document.getElementById(options.allToggleId).addEventListener('click', function(event) { + checker(actionCheckboxes, options, this.checked); + updateCounter(actionCheckboxes, options); + }); + + document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 1; + }); + showClear(options); + }); + }); + + document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + document.getElementById(options.allToggleId).checked = false; + clearAcross(options); + checker(actionCheckboxes, options, false); + updateCounter(actionCheckboxes, options); + }); + }); + + function affectedCheckboxes(target, withModifier) { + const multiSelect = (lastChecked && withModifier && lastChecked !== target); + if (!multiSelect) { + return [target]; + } + const checkboxes = Array.from(actionCheckboxes); + const targetIndex = checkboxes.findIndex(el => el === target); + const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); + const startIndex = Math.min(targetIndex, lastCheckedIndex); + const endIndex = Math.max(targetIndex, lastCheckedIndex); + const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); + return filtered; + }; + + Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { + el.addEventListener('change', function(event) { + const target = event.target; + if (target.classList.contains('action-select')) { + const checkboxes = affectedCheckboxes(target, shiftPressed); + checker(checkboxes, options, target.checked); + updateCounter(actionCheckboxes, options); + lastChecked = target; + } else { + list_editable_changed = true; + } + }); + }); + + document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { + if (list_editable_changed) { + const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + if (!confirmed) { + event.preventDefault(); + } + } + }); + + const el = document.querySelector('#changelist-form input[name=_save]'); + // The button does not exist if no fields are editable. + if (el) { + el.addEventListener('click', function(event) { + if (document.querySelector('[name=action]').value) { + const text = list_editable_changed + ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") + : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); + if (!confirm(text)) { + event.preventDefault(); + } + } + }); + } + // Sync counter when navigating to the page, such as through the back + // button. + window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options)); + }; + + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + const actionsEls = document.querySelectorAll('tr input.action-select'); + if (actionsEls.length > 0) { + Actions(actionsEls); + } + }); +} diff --git a/staticfiles/admin/js/admin/DateTimeShortcuts.js b/staticfiles/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000..6251614 --- /dev/null +++ b/staticfiles/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,413 @@ +/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ +// Inserts shortcut buttons after all of the following: +// +// +'use strict'; +{ + const DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar
      that gets toggled + calendarDivName2: 'calendarin', // name of
      that contains calendar + calendarLinkName: 'calendarlink', // name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock
      that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + for (const inp of document.getElementsByTagName('input')) { + if (inp.type === 'text' && inp.classList.contains('vTimeField')) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.type === 'text' && inp.classList.contains('vDateField')) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localNow = new Date(); + const localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + const warningClass = DateTimeShortcuts.timezoneWarningClass; + let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + return; + } + + let message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + const warning = document.createElement('div'); + const id = inp.id; + const field_id = inp.closest('p.datetime') ? id.slice(0, id.lastIndexOf("_")) : id; + warning.classList.add('help', warningClass); + warning.id = `${field_id}_timezone_warning_helptext`; + warning.textContent = message; + inp.parentNode.appendChild(warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + const num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const now_link = document.createElement('a'); + now_link.href = "#"; + now_link.textContent = gettext('Now'); + now_link.role = 'button'; + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + const clock_link = document.createElement('a'); + clock_link.href = '#'; + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + //
      + //

      Choose a time

      + // + //

      Cancel

      + //
      + + const clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.id = DateTimeShortcuts.clockDivName + num; + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + const time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the . + const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'role', 'button', 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + const cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + let d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + const num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const today_link = document.createElement('a'); + today_link.href = '#'; + today_link.role = 'button'; + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + const cal_link = document.createElement('a'); + cal_link.href = '#'; + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + //
      + //

      + // + // February 2003 + //

      + //
      + // + //
      + //
      + // Yesterday | Today | Tomorrow + //
      + //

      Cancel

      + //
      + const cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.id = DateTimeShortcuts.calendarDivName1 + num; + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + const cal_nav = quickElement('div', cal_box); + const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + const shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'role', 'button', 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'role', 'button', 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'role', 'button', 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + const cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + const inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + const selected = inp.value.strptime(format); + const year = selected.getUTCFullYear(); + const month = selected.getUTCMonth() + 1; + const re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + const d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +} diff --git a/staticfiles/admin/js/admin/RelatedObjectLookups.js b/staticfiles/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..1fc03c6 --- /dev/null +++ b/staticfiles/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,252 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. +'use strict'; +{ + const $ = django.jQuery; + let popupIndex = 0; + const relatedWindows = []; + + function dismissChildPopups() { + relatedWindows.forEach(function(win) { + if(!win.closed) { + win.dismissChildPopups(); + win.close(); + } + }); + } + + function setPopupIndex() { + if(document.getElementsByName("_popup").length > 0) { + const index = window.name.lastIndexOf("__") + 2; + popupIndex = parseInt(window.name.substring(index)); + } else { + popupIndex = 0; + } + } + + function addPopupIndex(name) { + return name + "__" + (popupIndex + 1); + } + + function removePopupIndex(name) { + return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), ''); + } + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + const name = addPopupIndex(triggeringLink.id.replace(name_regexp, '')); + const href = new URL(triggeringLink.href); + if (add_popup) { + href.searchParams.set('_popup', 1); + } + const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + relatedWindows.push(win); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + chosenId; + } else { + elem.value = chosenId; + } + $(elem).trigger('change'); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + const $this = $(triggeringLink); + const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + const value = $this.val(); + if (value) { + siblings.each(function() { + const elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + elm.removeAttr('aria-disabled'); + }); + } else { + siblings.removeAttr('href'); + siblings.attr('aria-disabled', true); + } + } + + function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId, skipIds = []) { + // After create/edit a model from the options next to the current + // select (+ or :pencil:) update ForeignKey PK of the rest of selects + // in the page. + + const path = win.location.pathname; + // Extract the model from the popup url '...//add/' or + // '...///change/' depending the action (add or change). + const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)]; + // Select elements with a specific model reference and context of "available-source". + const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] [data-context="available-source"]`); + + selectsRelated.forEach(function(select) { + if (currentSelect === select || skipIds && skipIds.includes(select.id)) { + return; + } + + let option = select.querySelector(`option[value="${objId}"]`); + + if (!option) { + option = new Option(newRepr, newId); + select.options.add(option); + // Update SelectBox cache for related fields. + if (window.SelectBox !== undefined && !SelectBox.cache[currentSelect.id]) { + SelectBox.add_to_cache(select.id, option); + SelectBox.redisplay(select.id); + } + return; + } + + option.textContent = newRepr; + option.value = newId; + }); + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem) { + const elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + updateRelatedSelectsOptions(elem, win, null, newRepr, newId); + } else if (elemName === 'INPUT') { + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + const toId = name + "_to"; + const toElem = document.getElementById(toId); + const o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + if (toElem && toElem.nodeName.toUpperCase() === 'SELECT') { + const skipIds = [name + "_from"]; + updateRelatedSelectsOptions(toElem, win, null, newRepr, newId, skipIds); + } + } + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + const id = removePopupIndex(win.name.replace(/^edit_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }).trigger('change'); + updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + const id = removePopupIndex(win.name.replace(/^delete_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + window.dismissChildPopups = dismissChildPopups; + window.relatedWindows = relatedWindows; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + window.addEventListener('unload', function(evt) { + window.dismissChildPopups(); + }); + + $(document).ready(function() { + setPopupIndex(); + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) { + e.preventDefault(); + if (this.href) { + const event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + const event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + const event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); +} diff --git a/staticfiles/admin/js/autocomplete.js b/staticfiles/admin/js/autocomplete.js new file mode 100644 index 0000000..d3daeab --- /dev/null +++ b/staticfiles/admin/js/autocomplete.js @@ -0,0 +1,33 @@ +'use strict'; +{ + const $ = django.jQuery; + + $.fn.djangoAdminSelect2 = function() { + $.each(this, function(i, element) { + $(element).select2({ + ajax: { + data: (params) => { + return { + term: params.term, + page: params.page, + app_label: element.dataset.appLabel, + model_name: element.dataset.modelName, + field_name: element.dataset.fieldName + }; + } + } + }); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + document.addEventListener('formset:added', (event) => { + $(event.target).find('.admin-autocomplete').djangoAdminSelect2(); + }); +} diff --git a/staticfiles/admin/js/calendar.js b/staticfiles/admin/js/calendar.js new file mode 100644 index 0000000..b132420 --- /dev/null +++ b/staticfiles/admin/js/calendar.js @@ -0,0 +1,239 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ +'use strict'; +{ + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + const CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + monthsOfYearAbbrev: [ + pgettext('abbrev. month January', 'Jan'), + pgettext('abbrev. month February', 'Feb'), + pgettext('abbrev. month March', 'Mar'), + pgettext('abbrev. month April', 'Apr'), + pgettext('abbrev. month May', 'May'), + pgettext('abbrev. month June', 'Jun'), + pgettext('abbrev. month July', 'Jul'), + pgettext('abbrev. month August', 'Aug'), + pgettext('abbrev. month September', 'Sep'), + pgettext('abbrev. month October', 'Oct'), + pgettext('abbrev. month November', 'Nov'), + pgettext('abbrev. month December', 'Dec') + ], + daysOfWeek: [ + gettext('Sunday'), + gettext('Monday'), + gettext('Tuesday'), + gettext('Wednesday'), + gettext('Thursday'), + gettext('Friday'), + gettext('Saturday') + ], + daysOfWeekAbbrev: [ + pgettext('abbrev. day Sunday', 'Sun'), + pgettext('abbrev. day Monday', 'Mon'), + pgettext('abbrev. day Tuesday', 'Tue'), + pgettext('abbrev. day Wednesday', 'Wed'), + pgettext('abbrev. day Thursday', 'Thur'), + pgettext('abbrev. day Friday', 'Fri'), + pgettext('abbrev. day Saturday', 'Sat') + ], + daysOfWeekInitial: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + let days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + const today = new Date(); + const todayDay = today.getDate(); + const todayMonth = today.getMonth() + 1; + const todayYear = today.getFullYear(); + let todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + let isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + const calDiv = document.getElementById(div_id); + removeChildren(calDiv); + const calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + const tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + let tableRow = quickElement('tr', tableBody); + for (let i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + const days = CalendarNamespace.getDaysInMonth(month, year); + + let nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (let i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + let currentDay = 1; + for (let i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + const cell = quickElement('td', tableRow, '', 'class', todayClass); + const link = quickElement('a', cell, currentDay, 'role', 'button', 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +} diff --git a/staticfiles/admin/js/cancel.js b/staticfiles/admin/js/cancel.js new file mode 100644 index 0000000..3069c6f --- /dev/null +++ b/staticfiles/admin/js/cancel.js @@ -0,0 +1,29 @@ +'use strict'; +{ + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + function handleClick(event) { + event.preventDefault(); + const params = new URLSearchParams(window.location.search); + if (params.has('_popup')) { + window.close(); // Close the popup. + } else { + window.history.back(); // Otherwise, go back. + } + } + + document.querySelectorAll('.cancel-link').forEach(function(el) { + el.addEventListener('click', handleClick); + }); + }); +} diff --git a/staticfiles/admin/js/change_form.js b/staticfiles/admin/js/change_form.js new file mode 100644 index 0000000..96a4c62 --- /dev/null +++ b/staticfiles/admin/js/change_form.js @@ -0,0 +1,16 @@ +'use strict'; +{ + const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + const form = document.getElementById(modelName + '_form'); + for (const element of form.elements) { + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } + } + } +} diff --git a/staticfiles/admin/js/core.js b/staticfiles/admin/js/core.js new file mode 100644 index 0000000..10504d4 --- /dev/null +++ b/staticfiles/admin/js/core.js @@ -0,0 +1,184 @@ +// Core JavaScript helper functions +'use strict'; + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + const obj = document.createElement(arguments[0]); + if (arguments[2]) { + const textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + const len = arguments.length; + for (let i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + let curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - obj.scrollLeft; + obj = obj.offsetParent; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + let curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - obj.scrollTop; + obj = obj.offsetParent; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +{ + Date.prototype.getTwelveHours = function() { + return this.getHours() % 12 || 12; + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getAbbrevDayName = function() { + return typeof window.CalendarNamespace === "undefined" + ? '0' + this.getDay() + : window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()]; + }; + + Date.prototype.getFullDayName = function() { + return typeof window.CalendarNamespace === "undefined" + ? '0' + this.getDay() + : window.CalendarNamespace.daysOfWeek[this.getDay()]; + }; + + Date.prototype.getAbbrevMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()]; + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + const fields = { + a: this.getAbbrevDayName(), + A: this.getFullDayName(), + b: this.getAbbrevMonthName(), + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + let result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result += fields[format.charAt(i + 1)]; + ++i; + } + else { + result += format.charAt(i); + } + ++i; + } + return result; + }; + + // ---------------------------------------------------------------------------- + // String object extensions + // ---------------------------------------------------------------------------- + String.prototype.strptime = function(format) { + const split_format = format.split(/[.\-/]/); + const date = this.split(/[.\-/]/); + let i = 0; + let day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + // A %y value in the range of [00, 68] is in the current + // century, while [69, 99] is in the previous century, + // according to the Open Group Specification. + if (parseInt(date[i], 10) >= 69) { + year = date[i]; + } else { + year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; + } + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; +} diff --git a/staticfiles/admin/js/filters.js b/staticfiles/admin/js/filters.js new file mode 100644 index 0000000..f5536eb --- /dev/null +++ b/staticfiles/admin/js/filters.js @@ -0,0 +1,30 @@ +/** + * Persist changelist filters state (collapsed/expanded). + */ +'use strict'; +{ + // Init filters. + let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState')); + + if (!filters) { + filters = {}; + } + + Object.entries(filters).forEach(([key, value]) => { + const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`); + + // Check if the filter is present, it could be from other view. + if (detailElement) { + value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open'); + } + }); + + // Save filter state when clicks. + const details = document.querySelectorAll('details'); + details.forEach(detail => { + detail.addEventListener('toggle', event => { + filters[`${event.target.dataset.filterTitle}`] = detail.open; + sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters)); + }); + }); +} diff --git a/staticfiles/admin/js/inlines.js b/staticfiles/admin/js/inlines.js new file mode 100644 index 0000000..cd3726c --- /dev/null +++ b/staticfiles/admin/js/inlines.js @@ -0,0 +1,359 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +'use strict'; +{ + const $ = django.jQuery; + $.fn.formset = function(opts) { + const options = $.extend({}, $.fn.formset.defaults, opts); + const $this = $(this); + const $parent = $this.parent(); + const updateElementIndex = function(el, prefix, ndx) { + const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + const replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + let nextIndex = parseInt(totalForms.val(), 10); + const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); + let addButton; + + /** + * The "Add another MyModel" button below the inline forms. + */ + const addInlineAddButton = function() { + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + const numCols = $this.eq(-1).children().length; + $parent.append('' + options.addText + ""); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', addInlineClickHandler); + }; + + const addInlineClickHandler = function(e) { + e.preventDefault(); + const template = $("#" + options.prefix + "-empty"); + const row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + addInlineDeleteButton(row); + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited. + row.insertBefore($(template)); + // Update number of total forms. + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide the add button if there's a limit and it's been reached. + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // Show the remove buttons if there are more than min_num. + toggleDeleteButtonVisibility(row.closest('.inline-group')); + + // Pass the new form to the post-add callback, if provided. + if (options.added) { + options.added(row); + } + row.get(0).dispatchEvent(new CustomEvent("formset:added", { + bubbles: true, + detail: { + formsetName: options.prefix + } + })); + }; + + /** + * The "X" button that is part of every unsaved inline. + * (When saved, it is replaced with a "Delete" checkbox.) + */ + const addInlineDeleteButton = function(row) { + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an
    • after the last list item: + row.append('
    • ' + options.deleteText + "
    • "); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('' + options.deleteText + ""); + } + // Add delete handler for each row. + row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); + }; + + const inlineDeleteHandler = function(e1) { + e1.preventDefault(); + const deleteButton = $(e1.target); + const row = deleteButton.closest('.' + options.formCssClass); + const inlineGroup = row.closest('.inline-group'); + // Remove the parent form containing this button, + // and also remove the relevant row with non-field errors: + const prevRow = row.prev(); + if (prevRow.length && prevRow.hasClass('row-form-errors')) { + prevRow.remove(); + } + row.remove(); + nextIndex -= 1; + // Pass the deleted form to the post-delete callback, if provided. + if (options.removed) { + options.removed(row); + } + document.dispatchEvent(new CustomEvent("formset:removed", { + detail: { + formsetName: options.prefix + } + })); + // Update the TOTAL_FORMS form count. + const forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once below maximum number. + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Hide the remove buttons if at min_num. + toggleDeleteButtonVisibility(inlineGroup); + // Also, update names and ids for all remaining form controls so + // they remain in sequence: + let i, formCount; + const updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }; + + const toggleDeleteButtonVisibility = function(inlineGroup) { + if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { + inlineGroup.find('.inline-deletelink').hide(); + } else { + inlineGroup.find('.inline-deletelink').show(); + } + }; + + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + + // Create the delete buttons for all unsaved inlines: + $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { + addInlineDeleteButton($(this)); + }); + toggleDeleteButtonVisibility($this); + + // Create the add button, initially hidden. + addButton = options.addButton; + addInlineAddButton(); + + // Show the add button if allowed to add more items. + // Note that max_num = None translates to a blank string. + const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + if ($this.length && showAddButton) { + addButton.parent().show(); + } else { + addButton.parent().hide(); + } + + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + const $rows = $(this); + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $('.selectfilterstacked').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + const $rows = $(this); + const updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + const count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $(".selectfilterstacked").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + // Dependency in a fieldset. + let field_element = row.find('.form-row .field-' + field_name); + // Dependency without a fieldset. + if (!field_element.length) { + field_element = row.find('.form-row.field-' + field_name); + } + dependencies.push('#' + field_element.find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + const data = $(this).data(), + inlineOptions = data.inlineFormset; + let selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +} diff --git a/staticfiles/admin/js/jquery.init.js b/staticfiles/admin/js/jquery.init.js new file mode 100644 index 0000000..f40b27f --- /dev/null +++ b/staticfiles/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global jQuery:false*/ +'use strict'; +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/staticfiles/admin/js/nav_sidebar.js b/staticfiles/admin/js/nav_sidebar.js new file mode 100644 index 0000000..7e735db --- /dev/null +++ b/staticfiles/admin/js/nav_sidebar.js @@ -0,0 +1,79 @@ +'use strict'; +{ + const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); + if (toggleNavSidebar !== null) { + const navSidebar = document.getElementById('nav-sidebar'); + const main = document.getElementById('main'); + let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); + if (navSidebarIsOpen === null) { + navSidebarIsOpen = 'true'; + } + main.classList.toggle('shifted', navSidebarIsOpen === 'true'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + + toggleNavSidebar.addEventListener('click', function() { + if (navSidebarIsOpen === 'true') { + navSidebarIsOpen = 'false'; + } else { + navSidebarIsOpen = 'true'; + } + localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); + main.classList.toggle('shifted'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + }); + } + + function initSidebarQuickFilter() { + const options = []; + const navSidebar = document.getElementById('nav-sidebar'); + if (!navSidebar) { + return; + } + navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => { + options.push({title: container.innerHTML, node: container}); + }); + + function checkValue(event) { + let filterValue = event.target.value; + if (filterValue) { + filterValue = filterValue.toLowerCase(); + } + if (event.key === 'Escape') { + filterValue = ''; + event.target.value = ''; // clear input + } + let matches = false; + for (const o of options) { + let displayValue = ''; + if (filterValue) { + if (o.title.toLowerCase().indexOf(filterValue) === -1) { + displayValue = 'none'; + } else { + matches = true; + } + } + // show/hide parent + o.node.parentNode.parentNode.style.display = displayValue; + } + if (!filterValue || matches) { + event.target.classList.remove('no-results'); + } else { + event.target.classList.add('no-results'); + } + sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue); + } + + const nav = document.getElementById('nav-filter'); + nav.addEventListener('change', checkValue, false); + nav.addEventListener('input', checkValue, false); + nav.addEventListener('keyup', checkValue, false); + + const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue'); + if (storedValue) { + nav.value = storedValue; + checkValue({target: nav, key: ''}); + } + } + window.initSidebarQuickFilter = initSidebarQuickFilter; + initSidebarQuickFilter(); +} diff --git a/staticfiles/admin/js/popup_response.js b/staticfiles/admin/js/popup_response.js new file mode 100644 index 0000000..fecf0f4 --- /dev/null +++ b/staticfiles/admin/js/popup_response.js @@ -0,0 +1,15 @@ +'use strict'; +{ + const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +} diff --git a/staticfiles/admin/js/prepopulate.js b/staticfiles/admin/js/prepopulate.js new file mode 100644 index 0000000..89e95ab --- /dev/null +++ b/staticfiles/admin/js/prepopulate.js @@ -0,0 +1,43 @@ +/*global URLify*/ +'use strict'; +{ + const $ = django.jQuery; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + const prepopulatedField = $(this); + + const populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + const values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +} diff --git a/staticfiles/admin/js/prepopulate_init.js b/staticfiles/admin/js/prepopulate_init.js new file mode 100644 index 0000000..a58841f --- /dev/null +++ b/staticfiles/admin/js/prepopulate_init.js @@ -0,0 +1,15 @@ +'use strict'; +{ + const $ = django.jQuery; + const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); + $.each(fields, function(index, field) { + $( + '.empty-form .form-row .field-' + field.name + + ', .empty-form.form-row .field-' + field.name + + ', .empty-form .form-row.field-' + field.name + ).addClass('prepopulated_field'); + $(field.id).data('dependency_list', field.dependency_list).prepopulate( + field.dependency_ids, field.maxLength, field.allowUnicode + ); + }); +} diff --git a/staticfiles/admin/js/theme.js b/staticfiles/admin/js/theme.js new file mode 100644 index 0000000..e79d375 --- /dev/null +++ b/staticfiles/admin/js/theme.js @@ -0,0 +1,51 @@ +'use strict'; +{ + function setTheme(mode) { + if (mode !== "light" && mode !== "dark" && mode !== "auto") { + console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`); + mode = "auto"; + } + document.documentElement.dataset.theme = mode; + localStorage.setItem("theme", mode); + } + + function cycleTheme() { + const currentTheme = localStorage.getItem("theme") || "auto"; + const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; + + if (prefersDark) { + // Auto (dark) -> Light -> Dark + if (currentTheme === "auto") { + setTheme("light"); + } else if (currentTheme === "light") { + setTheme("dark"); + } else { + setTheme("auto"); + } + } else { + // Auto (light) -> Dark -> Light + if (currentTheme === "auto") { + setTheme("dark"); + } else if (currentTheme === "dark") { + setTheme("light"); + } else { + setTheme("auto"); + } + } + } + + function initTheme() { + // set theme defined in localStorage if there is one, or fallback to auto mode + const currentTheme = localStorage.getItem("theme"); + currentTheme ? setTheme(currentTheme) : setTheme("auto"); + } + + window.addEventListener('load', function(_) { + const buttons = document.getElementsByClassName("theme-toggle"); + Array.from(buttons).forEach((btn) => { + btn.addEventListener("click", cycleTheme); + }); + }); + + initTheme(); +} diff --git a/staticfiles/admin/js/urlify.js b/staticfiles/admin/js/urlify.js new file mode 100644 index 0000000..9fc0409 --- /dev/null +++ b/staticfiles/admin/js/urlify.js @@ -0,0 +1,169 @@ +/*global XRegExp*/ +'use strict'; +{ + const LATIN_MAP = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + const LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + const GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', + 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', + 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', + 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + const TURKISH_MAP = { + 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' + }; + const ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', + 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' + }; + const RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', + 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', + 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + const UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', + 'ї': 'yi', 'ґ': 'g' + }; + const CZECH_MAP = { + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', + 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', + 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' + }; + const SLOVAK_MAP = { + 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', + 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', + 'ú': 'u', 'ý': 'y', 'ž': 'z', + 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', + 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', + 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' + }; + const POLISH_MAP = { + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', + 'ź': 'z', 'ż': 'z', + 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', + 'Ź': 'Z', 'Ż': 'Z' + }; + const LATVIAN_MAP = { + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', + 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', + 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + const ARABIC_MAP = { + 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', + 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' + }; + const LITHUANIAN_MAP = { + 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', + 'ū': 'u', 'ž': 'z', + 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + const SERBIAN_MAP = { + 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', + 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Џ': 'Dz', 'Đ': 'Dj' + }; + const AZERBAIJANI_MAP = { + 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', + 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' + }; + const GEORGIAN_MAP = { + 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', + 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', + 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', + 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', + 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' + }; + + const ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + SLOVAK_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP, + GEORGIAN_MAP + ]; + + const Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + for (const lookup of ALL_DOWNCODE_MAPS) { + Object.assign(Downcoder.map, lookup); + } + Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + if (!allowUnicode) { + s = downcode(s); + } + s = s.toLowerCase(); // convert to lowercase + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.substring(0, num_chars); // trim to first num_chars chars + return s.replace(/-+$/g, ''); // trim any trailing hyphens + } + window.URLify = URLify; +} diff --git a/staticfiles/admin/js/vendor/jquery/LICENSE.txt b/staticfiles/admin/js/vendor/jquery/LICENSE.txt new file mode 100644 index 0000000..f642c3f --- /dev/null +++ b/staticfiles/admin/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/staticfiles/admin/js/vendor/jquery/jquery.js b/staticfiles/admin/js/vendor/jquery/jquery.js new file mode 100644 index 0000000..1a86433 --- /dev/null +++ b/staticfiles/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,10716 @@ +/*! + * jQuery JavaScript Library v3.7.1 + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-08-28T13:37Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var version = "3.7.1", + + rhtmlSuffix = /HTML$/i, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } + if ( nodeType === 1 || nodeType === 11 ) { + return elem.textContent; + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { + +var i, + Expr, + outermostContext, + sortInput, + hasDuplicate, + push = pushNative, + + // Local document vars + document, + documentElement, + documentIsHTML, + rbuggyQSA, + matches, + + // Instance-specific data + expando = jQuery.expando, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + needsContext: new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + if ( nonHex ) { + + // Strip the backslash prefix from a non-hex escape sequence + return nonHex; + } + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ + // Removing the function wrapper causes a "Permission Denied" + // error in IE/Edge. + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && nodeName( elem, "fieldset" ); + }, + { dir: "parentNode", next: "legend" } + ); + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android <=4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { + apply: function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); + } + }; +} + +function find( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + push.call( results, elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + find.contains( context, elem ) && + elem.id === m ) { + + push.call( results, elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = jQuery.escapeSelector( nid ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by jQuery selector module + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + return nodeName( elem, "input" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11+ + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a jQuery selector context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [node] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +function setDocument( node ) { + var subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); + + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); + } + + // Support: IE <10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; + } ); + + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); + } ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); + } ); + + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; + + // Class + Expr.find.CLASS = function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + rbuggyQSA = []; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + documentElement.appendChild( el ).innerHTML = + "" + + ""; + + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); + + if ( !support.cssHas ) { + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + }; + + return document; +} + +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); +}; + +find.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return find( expr, document, null, [ elem ] ).length > 0; +}; + +find.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return jQuery.contains( context, elem ); +}; + + +find.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (see trac-13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + if ( val !== undefined ) { + return val; + } + + return elem.getAttribute( name ); +}; + +find.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +jQuery.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + splice.call( results, duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); +}; + +Expr = jQuery.expr = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + ATTR: function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + CHILD: function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + return match; + }, + + PSEUDO: function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return nodeName( elem, expectedNodeName ); + }; + }, + + CLASS: function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && + classCache( className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + ATTR: function( name, operator, check ) { + return function( elem ) { + var result = find.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + + return false; + }; + }, + + CHILD: function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + outerCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + PSEUDO: function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // https://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + find.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as jQuery does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + not: markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + has: markFunction( function( selector ) { + return function( elem ) { + return find( selector, elem ).length > 0; + }; + } ), + + contains: markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + find.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + target: function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + root: function( elem ) { + return elem === documentElement; + }, + + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), + + checked: function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); + }, + + selected: function( elem ) { + + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + empty: function( elem ) { + + // https://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); + }, + + // Element/input types + header: function( elem ) { + return rheader.test( elem.nodeName ); + }, + + input: function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); + }, + + text: function( elem ) { + var attr; + return nodeName( elem, "input" ) && elem.type === "text" && + + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + first: createPositionalPseudo( function() { + return [ 0 ]; + } ), + + last: createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + even: createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + odd: createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos.nth = Expr.pseudos.eq; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrimCSS, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + if ( parseOnly ) { + return soFar.length; + } + + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + if ( skip && nodeName( elem, skip ) ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = outerCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + outerCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + find( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, matcherOut, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems; + + if ( matcher ) { + + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results; + + // Find primary matches + matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find.TAG( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: ) matching + // elements by id. (see trac-14142) + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + push.call( results, elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + jQuery.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +function compile( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +} + +/** + * A low-level selection function that works with jQuery's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with jQuery selector compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +} + +// One-time assignments + +// Support: Android <=4.0 - 4.1+ +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Initialize against the default document +setDocument(); + +// Support: Android <=4.0 - 4.1+ +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +jQuery.find = find; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.unique = jQuery.uniqueSort; + +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; +find.tokenize = tokenize; + +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + + /* eslint-enable */ + +} )(); + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to jQuery#find + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.error ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the error, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See trac-6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (trac-9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see trac-8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (trac-14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
      " ], + col: [ 2, "", "
      " ], + tr: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (trac-12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (trac-13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", true ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, isSetup ) { + + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + if ( !saved ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + this[ type ](); + result = dataPriv.get( this, type ); + dataPriv.set( this, type, false ); + + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + return result; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved ) { + + // ...and capture the result + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (trac-504, trac-13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { + + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. + + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; + + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { + + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); + } + } else { + + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); + } + } + + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + var attaches; + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, true ); + + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + + delegateType: delegateType + }; + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (trac-8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Re-enable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var rcustomProp = /^--/; + + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (trac-8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is `display: block` + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) + if ( computed ) { + + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ) || undefined; + } + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0, + marginDelta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). + if ( box === "margin" ) { + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta + marginDelta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (trac-7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug trac-9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (trac-7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // Use proper attribute retrieval (trac-12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + removeClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + + // This expression is here for better compressibility (see addClass) + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Remove *all* instances + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var classNames, className, i, self, + type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + + return this.each( function() { + if ( isValidValue ) { + + // Toggle individual class names + self = jQuery( this ); + + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (trac-14686, trac-14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (trac-2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (trac-6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // trac-7653, trac-8125, trac-8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes trac-9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket trac-12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // trac-9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (trac-11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // trac-1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see trac-8605, trac-14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // trac-14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "",rE:!0,sL:""}},s,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("autohotkey",function(e){var r={cN:"escape",b:"`[\\s\\S]"},c=e.C(";","$",{r:0}),n=[{cN:"built_in",b:"A_[a-zA-Z0-9]+"},{cN:"built_in",bK:"ComSpec Clipboard ClipboardAll ErrorLevel"}];return{cI:!0,k:{keyword:"Break Continue Else Gosub If Loop Return While",literal:"A true false NOT AND OR"},c:n.concat([r,e.inherit(e.QSM,{c:[r]}),c,{cN:"number",b:e.NR,r:0},{cN:"var_expand",b:"%",e:"%",i:"\\n",c:[r]},{cN:"label",c:[r],v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',r:0}]},{b:",\\s*,",r:10}])}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class namespace interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("nsis",function(e){var t={cN:"symbol",b:"\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)"},n={cN:"constant",b:"\\$+{[a-zA-Z0-9_]+}"},i={cN:"variable",b:"\\$+[a-zA-Z0-9_]+",i:"\\(\\){}"},r={cN:"constant",b:"\\$+\\([a-zA-Z0-9_]+\\)"},o={cN:"params",b:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},l={cN:"constant",b:"\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)"};return{cI:!1,k:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user "},c:[e.HCM,e.CBCM,{cN:"string",b:'"',e:'"',i:"\\n",c:[{cN:"symbol",b:"\\$(\\\\(n|r|t)|\\$)"},t,n,i,r]},e.C(";","$",{r:0}),{cN:"function",bK:"Function PageEx Section SectionGroup SubSection",e:"$"},l,n,i,r,o,e.NM,{cN:"literal",b:e.IR+"::"+e.IR}]}});hljs.registerLanguage("less",function(e){var r="[\\w-]+",t="("+r+"|@{"+r+"})",a=[],c=[],n=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},i=function(e,r,t){return{cN:e,b:r,r:t}},s=function(r,t,a){return e.inherit({cN:r,b:t+"\\(",e:"\\(",rB:!0,eE:!0,r:0},a)},b={b:"\\(",e:"\\)",c:c,r:0};c.push(e.CLCM,e.CBCM,n("'"),n('"'),e.CSSNM,i("hexcolor","#[0-9A-Fa-f]+\\b"),s("function","(url|data-uri)",{starts:{cN:"string",e:"[\\)\\n]",eE:!0}}),s("function",r),b,i("variable","@@?"+r,10),i("variable","@{"+r+"}"),i("built_in","~?`[^`]*?`"),{cN:"attribute",b:r+"\\s*:",e:":",rB:!0,eE:!0});var o=c.concat({b:"{",e:"}",c:a}),u={bK:"when",eW:!0,c:[{bK:"and not"}].concat(c)},C={cN:"attribute",b:t,e:":",eE:!0,c:[e.CLCM,e.CBCM],i:/\S/,starts:{e:"[;}]",rE:!0,c:c,i:"[<=$]"}},l={cN:"at_rule",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:c,r:0}},d={cN:"variable",v:[{b:"@"+r+"\\s*:",r:15},{b:"@"+r}],starts:{e:"[;}]",rE:!0,c:o}},p={v:[{b:"[\\.#:&\\[]",e:"[;{}]"},{b:t+"[^;]*{",e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",c:[e.CLCM,e.CBCM,u,i("keyword","all\\b"),i("variable","@{"+r+"}"),i("tag",t+"%?",0),i("id","#"+t),i("class","\\."+t,0),i("keyword","&",0),s("pseudo",":not"),s("keyword",":extend"),i("pseudo","::?"+t),{cN:"attr_selector",b:"\\[",e:"\\]"},{b:"\\(",e:"\\)",c:o},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,l,d,p,C),{cI:!0,i:"[=>'/<($\"]",c:a}});hljs.registerLanguage("pf",function(t){var o={cN:"variable",b:/\$[\w\d#@][\w\d_]*/},e={cN:"variable",b://};return{aliases:["pf.conf"],l:/[a-z0-9_<>-]+/,k:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},c:[t.HCM,t.NM,t.QSM,o,e]}});hljs.registerLanguage("lasso",function(e){var r="[a-zA-Z_][a-zA-Z0-9_.]*",a="<\\?(lasso(script)?|=)",t="\\]|\\?>",s={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited",keyword:"error_code error_msg error_pop error_push error_reset cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},n=e.C("",{r:0}),o={cN:"preprocessor",b:"\\[noprocess\\]",starts:{cN:"markup",e:"\\[/noprocess\\]",rE:!0,c:[n]}},i={cN:"preprocessor",b:"\\[/noprocess|"+a},l={cN:"variable",b:"'"+r+"'"},c=[e.CLCM,{cN:"javadoc",b:"/\\*\\*!",e:"\\*/",c:[e.PWM]},e.CBCM,e.inherit(e.CNM,{b:e.CNR+"|(-?infinity|nan)\\b"}),e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null}),{cN:"string",b:"`",e:"`"},{cN:"variable",v:[{b:"[#$]"+r},{b:"#",e:"\\d+",i:"\\W"}]},{cN:"tag",b:"::\\s*",e:r,i:"\\W"},{cN:"attribute",v:[{b:"-"+e.UIR,r:0},{b:"(\\.\\.\\.)"}]},{cN:"subst",v:[{b:"->\\s*",c:[l]},{b:":=|/(?!\\w)=?|[-+*%=<>&|!?\\\\]+",r:0}]},{cN:"built_in",b:"\\.\\.?\\s*",r:0,c:[l]},{cN:"class",bK:"define",rE:!0,e:"\\(|=>",c:[e.inherit(e.TM,{b:e.UIR+"(=(?!>))?"})]}];return{aliases:["ls","lassoscript"],cI:!0,l:r+"|&[lg]t;",k:s,c:[{cN:"preprocessor",b:t,r:0,starts:{cN:"markup",e:"\\[|"+a,rE:!0,r:0,c:[n]}},o,i,{cN:"preprocessor",b:"\\[no_square_brackets",starts:{e:"\\[/no_square_brackets\\]",l:r+"|&[lg]t;",k:s,c:[{cN:"preprocessor",b:t,r:0,starts:{cN:"markup",e:"\\[noprocess\\]|"+a,rE:!0,c:[n]}},o,i].concat(c)}},{cN:"preprocessor",b:"\\[",r:0},{cN:"shebang",b:"^#!.+lasso9\\b",r:10}].concat(c)}});hljs.registerLanguage("prolog",function(c){var r={cN:"atom",b:/[a-z][A-Za-z0-9_]*/,r:0},b={cN:"name",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],r:0},a={b:/\(/,e:/\)/,r:0},e={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[c.PWM]},t={cN:"string",b:/`/,e:/`/,c:[c.BE]},g={cN:"string",b:/0\'(\\\'|.)/},N={cN:"string",b:/0\'\\s/},o={b:/:-/},s=[r,b,a,o,e,n,c.CBCM,c.QSM,c.ASM,t,g,N,c.CNM];return a.c=s,e.c=s,{c:s.concat([{b:/\.$/}])}});hljs.registerLanguage("oxygene",function(e){var r="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",t=e.C("{","}",{r:0}),a=e.C("\\(\\*","\\*\\)",{r:10}),n={cN:"string",b:"'",e:"'",c:[{b:"''"}]},o={cN:"string",b:"(#\\d+)+"},i={cN:"function",bK:"function constructor destructor procedure method",e:"[:;]",k:"function constructor|10 destructor|10 procedure|10 method|10",c:[e.TM,{cN:"params",b:"\\(",e:"\\)",k:r,c:[n,o]},t,a]};return{cI:!0,k:r,i:'("|\\$[G-Zg-z]|\\/\\*||->)',c:[t,a,e.CLCM,n,o,e.NM,i,{cN:"class",b:"=\\bclass\\b",e:"end;",k:r,c:[n,o,t,a,e.CLCM,i]}]}});hljs.registerLanguage("applescript",function(e){var t=e.inherit(e.QSM,{i:""}),r={cN:"params",b:"\\(",e:"\\)",c:["self",e.CNM,t]},o=e.C("--","$"),n=e.C("\\(\\*","\\*\\)",{c:["self",o]}),a=[o,n,e.HCM];return{aliases:["osascript"],k:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",constant:"AppleScript false linefeed return pi quote result space tab true",type:"alias application boolean class constant date file integer list number real record string text",command:"activate beep count delay launch log offset read round run say summarize write",property:"character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},c:[t,e.CNM,{cN:"type",b:"\\bPOSIX file\\b"},{cN:"command",b:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{cN:"constant",b:"\\b(text item delimiters|current application|missing value)\\b"},{cN:"keyword",b:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\b"},{cN:"property",b:"\\b(POSIX path|(date|time) string|quoted form)\\b"},{cN:"function_start",bK:"on",i:"[${=;\\n]",c:[e.UTM,r]}].concat(a),i:"//|->|=>"}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("dust",function(e){var a="if eq ne lt lte gt gte select default math sep";return{aliases:["dst"],cI:!0,sL:"xml",subLanguageMode:"continuous",c:[{cN:"expression",b:"{",e:"}",r:0,c:[{cN:"begin-block",b:"#[a-zA-Z- .]+",k:a},{cN:"string",b:'"',e:'"'},{cN:"end-block",b:"\\/[a-zA-Z- .]+",k:a},{cN:"variable",b:"[a-zA-Z-.]+",k:a,r:0}]}]}});hljs.registerLanguage("clojure-repl",function(e){return{c:[{cN:"prompt",b:/^([\w.-]+|\s*#_)=>/,starts:{e:/$/,sL:"clojure",subLanguageMode:"continuous"}}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,{cN:"dartdoc",b:"/\\*\\*",e:"\\*/",sL:"markdown",subLanguageMode:"continuous"},{cN:"dartdoc",b:"///",e:"$",sL:"markdown",subLanguageMode:"continuous"},e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{b:"=>"}]}}); \ No newline at end of file diff --git a/staticfiles/rest_framework/docs/js/jquery.json-view.min.js b/staticfiles/rest_framework/docs/js/jquery.json-view.min.js new file mode 100644 index 0000000..ce3a604 --- /dev/null +++ b/staticfiles/rest_framework/docs/js/jquery.json-view.min.js @@ -0,0 +1,7 @@ +/** + * jquery.json-view - jQuery collapsible JSON plugin + * @version v1.0.0 + * @link http://github.com/bazh/jquery.json-view + * @license MIT + */ +!function(e){"use strict";var n=function(n){var a=e("",{"class":"collapser",on:{click:function(){var n=e(this);n.toggleClass("collapsed");var a=n.parent().children(".block"),p=a.children("ul");n.hasClass("collapsed")?(p.hide(),a.children(".dots, .comments").show()):(p.show(),a.children(".dots, .comments").hide())}}});return n&&a.addClass("collapsed"),a},a=function(a,p){var t=e.extend({},{nl2br:!0},p),r=function(e){return e.toString()?e.toString().replace(/&/g,"&").replace(/"/g,""").replace(//g,">"):""},s=function(n,a){return e("",{"class":a,html:r(n)})},l=function(a,p){switch(e.type(a)){case"object":p||(p=0);var c=e("",{"class":"block"}),d=Object.keys(a).length;if(!d)return c.append(s("{","b")).append(" ").append(s("}","b"));c.append(s("{","b"));var i=e("
        ",{"class":"obj collapsible level"+p});return e.each(a,function(a,t){d--;var r=e("
      • ").append(s('"',"q")).append(a).append(s('"',"q")).append(": ").append(l(t,p+1));-1===["object","array"].indexOf(e.type(t))||e.isEmptyObject(t)||r.prepend(n()),d>0&&r.append(","),i.append(r)}),c.append(i),c.append(s("...","dots")),c.append(s("}","b")),c.append(1===Object.keys(a).length?s("// 1 item","comments"):s("// "+Object.keys(a).length+" items","comments")),c;case"array":p||(p=0);var d=a.length,c=e("",{"class":"block"});if(!d)return c.append(s("[","b")).append(" ").append(s("]","b"));c.append(s("[","b"));var i=e("
          ",{"class":"obj collapsible level"+p});return e.each(a,function(a,t){d--;var r=e("
        • ").append(l(t,p+1));-1===["object","array"].indexOf(e.type(t))||e.isEmptyObject(t)||r.prepend(n()),d>0&&r.append(","),i.append(r)}),c.append(i),c.append(s("...","dots")),c.append(s("]","b")),c.append(1===a.length?s("// 1 item","comments"):s("// "+a.length+" items","comments")),c;case"string":if(a=r(a),/^(http|https|file):\/\/[^\s]+$/i.test(a))return e("").append(s('"',"q")).append(e("",{href:a,text:a})).append(s('"',"q"));if(t.nl2br){var o=/\n/g;o.test(a)&&(a=(a+"").replace(o,"
          "))}var u=e("",{"class":"str"}).html(a);return e("").append(s('"',"q")).append(u).append(s('"',"q"));case"number":return s(a.toString(),"num");case"undefined":return s("undefined","undef");case"null":return s("null","null");case"boolean":return s(a?"true":"false","bool")}};return l(a)};return e.fn.jsonView=function(n,p){var t=e(this);if(p=e.extend({},{nl2br:!0},p),"string"==typeof n)try{n=JSON.parse(n)}catch(r){}return t.append(e("
          ",{"class":"json-view"}).append(a(n,p))),t}}(jQuery); \ No newline at end of file diff --git a/staticfiles/rest_framework/fonts/fontawesome-webfont.eot b/staticfiles/rest_framework/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..7c79c6a Binary files /dev/null and b/staticfiles/rest_framework/fonts/fontawesome-webfont.eot differ diff --git a/staticfiles/rest_framework/fonts/fontawesome-webfont.svg b/staticfiles/rest_framework/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..4b2226d --- /dev/null +++ b/staticfiles/rest_framework/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/staticfiles/rest_framework/fonts/fontawesome-webfont.ttf b/staticfiles/rest_framework/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..e89738d Binary files /dev/null and b/staticfiles/rest_framework/fonts/fontawesome-webfont.ttf differ diff --git a/staticfiles/rest_framework/fonts/fontawesome-webfont.woff b/staticfiles/rest_framework/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..8c1748a Binary files /dev/null and b/staticfiles/rest_framework/fonts/fontawesome-webfont.woff differ diff --git a/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.eot b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.eot differ diff --git a/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.svg b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..187805a --- /dev/null +++ b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.ttf b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.ttf differ diff --git a/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff differ diff --git a/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff2 b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/staticfiles/rest_framework/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/staticfiles/rest_framework/img/glyphicons-halflings-white.png b/staticfiles/rest_framework/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 Binary files /dev/null and b/staticfiles/rest_framework/img/glyphicons-halflings-white.png differ diff --git a/staticfiles/rest_framework/img/glyphicons-halflings.png b/staticfiles/rest_framework/img/glyphicons-halflings.png new file mode 100644 index 0000000..36c3b1e Binary files /dev/null and b/staticfiles/rest_framework/img/glyphicons-halflings.png differ diff --git a/staticfiles/rest_framework/img/grid.png b/staticfiles/rest_framework/img/grid.png new file mode 100644 index 0000000..878c3ed Binary files /dev/null and b/staticfiles/rest_framework/img/grid.png differ diff --git a/staticfiles/rest_framework/js/ajax-form.js b/staticfiles/rest_framework/js/ajax-form.js new file mode 100644 index 0000000..dda5454 --- /dev/null +++ b/staticfiles/rest_framework/js/ajax-form.js @@ -0,0 +1,133 @@ +function replaceDocument(docString) { + var doc = document.open("text/html"); + + doc.write(docString); + doc.close(); + + if (window.djdt) { + // If Django Debug Toolbar is available, reinitialize it so that + // it can show updated panels from new `docString`. + window.addEventListener("load", djdt.init); + } +} + +function doAjaxSubmit(e) { + var form = $(this); + var btn = $(this.clk); + var method = ( + btn.data('method') || + form.data('method') || + form.attr('method') || 'GET' + ).toUpperCase(); + + if (method === 'GET') { + // GET requests can always use standard form submits. + return; + } + + var contentType = + form.find('input[data-override="content-type"]').val() || + form.find('select[data-override="content-type"] option:selected').text(); + + if (method === 'POST' && !contentType) { + // POST requests can use standard form submits, unless we have + // overridden the content type. + return; + } + + // At this point we need to make an AJAX form submission. + e.preventDefault(); + + var url = form.attr('action'); + var data; + + if (contentType) { + data = form.find('[data-override="content"]').val() || '' + + if (contentType === 'multipart/form-data') { + // We need to add a boundary parameter to the header + // We assume the first valid-looking boundary line in the body is correct + // regex is from RFC 2046 appendix A + var boundaryCharNoSpace = "0-9A-Z'()+_,-./:=?"; + var boundaryChar = boundaryCharNoSpace + ' '; + var re = new RegExp('^--([' + boundaryChar + ']{0,69}[' + boundaryCharNoSpace + '])[\\s]*?$', 'im'); + var boundary = data.match(re); + if (boundary !== null) { + contentType += '; boundary="' + boundary[1] + '"'; + } + // Fix textarea.value EOL normalisation (multipart/form-data should use CR+NL, not NL) + data = data.replace(/\n/g, '\r\n'); + } + } else { + contentType = form.attr('enctype') || form.attr('encoding') + + if (contentType === 'multipart/form-data') { + if (!window.FormData) { + alert('Your browser does not support AJAX multipart form submissions'); + return; + } + + // Use the FormData API and allow the content type to be set automatically, + // so it includes the boundary string. + // See https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects + contentType = false; + data = new FormData(form[0]); + } else { + contentType = 'application/x-www-form-urlencoded; charset=UTF-8' + data = form.serialize(); + } + } + + var ret = $.ajax({ + url: url, + method: method, + data: data, + contentType: contentType, + processData: false, + headers: { + 'Accept': 'text/html; q=1.0, */*' + }, + }); + + ret.always(function(data, textStatus, jqXHR) { + if (textStatus != 'success') { + jqXHR = data; + } + + var responseContentType = jqXHR.getResponseHeader("content-type") || ""; + + if (responseContentType.toLowerCase().indexOf('text/html') === 0) { + replaceDocument(jqXHR.responseText); + + try { + // Modify the location and scroll to top, as if after page load. + history.replaceState({}, '', url); + scroll(0, 0); + } catch (err) { + // History API not supported, so redirect. + window.location = url; + } + } else { + // Not HTML content. We can't open this directly, so redirect. + window.location = url; + } + }); + + return ret; +} + +function captureSubmittingElement(e) { + var target = e.target; + var form = this; + + form.clk = target; +} + +$.fn.ajaxForm = function() { + var options = {} + + return this + .unbind('submit.form-plugin click.form-plugin') + .bind('submit.form-plugin', options, doAjaxSubmit) + .bind('click.form-plugin', options, captureSubmittingElement); +}; diff --git a/staticfiles/rest_framework/js/bootstrap.min.js b/staticfiles/rest_framework/js/bootstrap.min.js new file mode 100644 index 0000000..eb0a8b4 --- /dev/null +++ b/staticfiles/rest_framework/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
          ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-dc.width?"left":"left"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, BasicAuthentication); + + var username = options.username; + var password = options.password; + var hash = window.btoa(username + ':' + password); + this.auth = 'Basic ' + hash; + } + + _createClass(BasicAuthentication, [{ + key: 'authenticate', + value: function authenticate(options) { + options.headers['Authorization'] = this.auth; + return options; + } + }]); + + return BasicAuthentication; +}(); + +module.exports = { + BasicAuthentication: BasicAuthentication +}; + +},{}],2:[function(require,module,exports){ +'use strict'; + +var basic = require('./basic'); +var session = require('./session'); +var token = require('./token'); + +module.exports = { + BasicAuthentication: basic.BasicAuthentication, + SessionAuthentication: session.SessionAuthentication, + TokenAuthentication: token.TokenAuthentication +}; + +},{"./basic":1,"./session":3,"./token":4}],3:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var utils = require('../utils'); + +function trim(str) { + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); +} + +function getCookie(cookieName, cookieString) { + cookieString = cookieString || window.document.cookie; + if (cookieString && cookieString !== '') { + var cookies = cookieString.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, cookieName.length + 1) === cookieName + '=') { + return decodeURIComponent(cookie.substring(cookieName.length + 1)); + } + } + } + return null; +} + +var SessionAuthentication = function () { + function SessionAuthentication() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, SessionAuthentication); + + this.csrfToken = getCookie(options.csrfCookieName, options.cookieString); + this.csrfHeaderName = options.csrfHeaderName; + } + + _createClass(SessionAuthentication, [{ + key: 'authenticate', + value: function authenticate(options) { + options.credentials = 'same-origin'; + if (this.csrfToken && !utils.csrfSafeMethod(options.method)) { + options.headers[this.csrfHeaderName] = this.csrfToken; + } + return options; + } + }]); + + return SessionAuthentication; +}(); + +module.exports = { + SessionAuthentication: SessionAuthentication +}; + +},{"../utils":15}],4:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var TokenAuthentication = function () { + function TokenAuthentication() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, TokenAuthentication); + + this.token = options.token; + this.scheme = options.scheme || 'Bearer'; + } + + _createClass(TokenAuthentication, [{ + key: 'authenticate', + value: function authenticate(options) { + options.headers['Authorization'] = this.scheme + ' ' + this.token; + return options; + } + }]); + + return TokenAuthentication; +}(); + +module.exports = { + TokenAuthentication: TokenAuthentication +}; + +},{}],5:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var document = require('./document'); +var codecs = require('./codecs'); +var errors = require('./errors'); +var transports = require('./transports'); +var utils = require('./utils'); + +function lookupLink(node, keys) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var key = _step.value; + + if (node instanceof document.Document) { + node = node.content[key]; + } else { + node = node[key]; + } + if (node === undefined) { + throw new errors.LinkLookupError('Invalid link lookup: ' + JSON.stringify(keys)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + if (!(node instanceof document.Link)) { + throw new errors.LinkLookupError('Invalid link lookup: ' + JSON.stringify(keys)); + } + return node; +} + +var Client = function () { + function Client() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, Client); + + var transportOptions = { + auth: options.auth || null, + headers: options.headers || {}, + requestCallback: options.requestCallback, + responseCallback: options.responseCallback + }; + + this.decoders = options.decoders || [new codecs.CoreJSONCodec(), new codecs.JSONCodec(), new codecs.TextCodec()]; + this.transports = options.transports || [new transports.HTTPTransport(transportOptions)]; + } + + _createClass(Client, [{ + key: 'action', + value: function action(document, keys) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var link = lookupLink(document, keys); + var transport = utils.determineTransport(this.transports, link.url); + return transport.action(link, this.decoders, params); + } + }, { + key: 'get', + value: function get(url) { + var link = new document.Link(url, 'get'); + var transport = utils.determineTransport(this.transports, url); + return transport.action(link, this.decoders); + } + }]); + + return Client; +}(); + +module.exports = { + Client: Client +}; + +},{"./codecs":7,"./document":10,"./errors":11,"./transports":14,"./utils":15}],6:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var document = require('../document'); +var URL = require('url-parse'); + +function unescapeKey(key) { + if (key.match(/__(type|meta)$/)) { + return key.substring(1); + } + return key; +} + +function getString(obj, key) { + var value = obj[key]; + if (typeof value === 'string') { + return value; + } + return ''; +} + +function getBoolean(obj, key) { + var value = obj[key]; + if (typeof value === 'boolean') { + return value; + } + return false; +} + +function getObject(obj, key) { + var value = obj[key]; + if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { + return value; + } + return {}; +} + +function getArray(obj, key) { + var value = obj[key]; + if (value instanceof Array) { + return value; + } + return []; +} + +function getContent(data, baseUrl) { + var excluded = ['_type', '_meta']; + var content = {}; + for (var property in data) { + if (data.hasOwnProperty(property) && !excluded.includes(property)) { + var key = unescapeKey(property); + var value = primitiveToNode(data[property], baseUrl); + content[key] = value; + } + } + return content; +} + +function primitiveToNode(data, baseUrl) { + var isObject = data instanceof Object && !(data instanceof Array); + + if (isObject && data._type === 'document') { + // Document + var meta = getObject(data, '_meta'); + var relativeUrl = getString(meta, 'url'); + var url = relativeUrl ? URL(relativeUrl, baseUrl).toString() : ''; + var title = getString(meta, 'title'); + var description = getString(meta, 'description'); + var content = getContent(data, url); + return new document.Document(url, title, description, content); + } else if (isObject && data._type === 'link') { + // Link + var _relativeUrl = getString(data, 'url'); + var _url = _relativeUrl ? URL(_relativeUrl, baseUrl).toString() : ''; + var method = getString(data, 'action') || 'get'; + var _title = getString(data, 'title'); + var _description = getString(data, 'description'); + var fieldsData = getArray(data, 'fields'); + var fields = []; + for (var idx = 0, len = fieldsData.length; idx < len; idx++) { + var value = fieldsData[idx]; + var name = getString(value, 'name'); + var required = getBoolean(value, 'required'); + var location = getString(value, 'location'); + var fieldDescription = getString(value, 'fieldDescription'); + var field = new document.Field(name, required, location, fieldDescription); + fields.push(field); + } + return new document.Link(_url, method, 'application/json', fields, _title, _description); + } else if (isObject) { + // Object + var _content = {}; + for (var key in data) { + if (data.hasOwnProperty(key)) { + _content[key] = primitiveToNode(data[key], baseUrl); + } + } + return _content; + } else if (data instanceof Array) { + // Object + var _content2 = []; + for (var _idx = 0, _len = data.length; _idx < _len; _idx++) { + _content2.push(primitiveToNode(data[_idx], baseUrl)); + } + return _content2; + } + // Primitive + return data; +} + +var CoreJSONCodec = function () { + function CoreJSONCodec() { + _classCallCheck(this, CoreJSONCodec); + + this.mediaType = 'application/coreapi+json'; + } + + _createClass(CoreJSONCodec, [{ + key: 'decode', + value: function decode(text) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var data = text; + if (options.preloaded === undefined || !options.preloaded) { + data = JSON.parse(text); + } + return primitiveToNode(data, options.url); + } + }]); + + return CoreJSONCodec; +}(); + +module.exports = { + CoreJSONCodec: CoreJSONCodec +}; + +},{"../document":10,"url-parse":19}],7:[function(require,module,exports){ +'use strict'; + +var corejson = require('./corejson'); +var json = require('./json'); +var text = require('./text'); + +module.exports = { + CoreJSONCodec: corejson.CoreJSONCodec, + JSONCodec: json.JSONCodec, + TextCodec: text.TextCodec +}; + +},{"./corejson":6,"./json":8,"./text":9}],8:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var JSONCodec = function () { + function JSONCodec() { + _classCallCheck(this, JSONCodec); + + this.mediaType = 'application/json'; + } + + _createClass(JSONCodec, [{ + key: 'decode', + value: function decode(text) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return JSON.parse(text); + } + }]); + + return JSONCodec; +}(); + +module.exports = { + JSONCodec: JSONCodec +}; + +},{}],9:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var TextCodec = function () { + function TextCodec() { + _classCallCheck(this, TextCodec); + + this.mediaType = 'text/*'; + } + + _createClass(TextCodec, [{ + key: 'decode', + value: function decode(text) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return text; + } + }]); + + return TextCodec; +}(); + +module.exports = { + TextCodec: TextCodec +}; + +},{}],10:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Document = function Document() { + var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var description = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; + var content = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + _classCallCheck(this, Document); + + this.url = url; + this.title = title; + this.description = description; + this.content = content; +}; + +var Link = function Link(url, method) { + var encoding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'application/json'; + var fields = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var title = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; + var description = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; + + _classCallCheck(this, Link); + + if (url === undefined) { + throw new Error('url argument is required'); + } + + if (method === undefined) { + throw new Error('method argument is required'); + } + + this.url = url; + this.method = method; + this.encoding = encoding; + this.fields = fields; + this.title = title; + this.description = description; +}; + +var Field = function Field(name) { + var required = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var location = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; + var description = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; + + _classCallCheck(this, Field); + + if (name === undefined) { + throw new Error('name argument is required'); + } + + this.name = name; + this.required = required; + this.location = location; + this.description = description; +}; + +module.exports = { + Document: Document, + Link: Link, + Field: Field +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ParameterError = function (_Error) { + _inherits(ParameterError, _Error); + + function ParameterError(message) { + _classCallCheck(this, ParameterError); + + var _this = _possibleConstructorReturn(this, (ParameterError.__proto__ || Object.getPrototypeOf(ParameterError)).call(this, message)); + + _this.message = message; + _this.name = 'ParameterError'; + return _this; + } + + return ParameterError; +}(Error); + +var LinkLookupError = function (_Error2) { + _inherits(LinkLookupError, _Error2); + + function LinkLookupError(message) { + _classCallCheck(this, LinkLookupError); + + var _this2 = _possibleConstructorReturn(this, (LinkLookupError.__proto__ || Object.getPrototypeOf(LinkLookupError)).call(this, message)); + + _this2.message = message; + _this2.name = 'LinkLookupError'; + return _this2; + } + + return LinkLookupError; +}(Error); + +var ErrorMessage = function (_Error3) { + _inherits(ErrorMessage, _Error3); + + function ErrorMessage(message, content) { + _classCallCheck(this, ErrorMessage); + + var _this3 = _possibleConstructorReturn(this, (ErrorMessage.__proto__ || Object.getPrototypeOf(ErrorMessage)).call(this, message)); + + _this3.message = message; + _this3.content = content; + _this3.name = 'ErrorMessage'; + return _this3; + } + + return ErrorMessage; +}(Error); + +module.exports = { + ParameterError: ParameterError, + LinkLookupError: LinkLookupError, + ErrorMessage: ErrorMessage +}; + +},{}],12:[function(require,module,exports){ +'use strict'; + +var auth = require('./auth'); +var client = require('./client'); +var codecs = require('./codecs'); +var document = require('./document'); +var errors = require('./errors'); +var transports = require('./transports'); +var utils = require('./utils'); + +var coreapi = { + Client: client.Client, + Document: document.Document, + Link: document.Link, + auth: auth, + codecs: codecs, + errors: errors, + transports: transports, + utils: utils +}; + +module.exports = coreapi; + +},{"./auth":2,"./client":5,"./codecs":7,"./document":10,"./errors":11,"./transports":14,"./utils":15}],13:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var fetch = require('isomorphic-fetch'); +var errors = require('../errors'); +var utils = require('../utils'); +var URL = require('url-parse'); +var urlTemplate = require('url-template'); + +var parseResponse = function parseResponse(response, decoders, responseCallback) { + return response.text().then(function (text) { + if (responseCallback) { + responseCallback(response, text); + } + var contentType = response.headers.get('Content-Type'); + var decoder = utils.negotiateDecoder(decoders, contentType); + var options = { url: response.url }; + return decoder.decode(text, options); + }); +}; + +var HTTPTransport = function () { + function HTTPTransport() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, HTTPTransport); + + this.schemes = ['http', 'https']; + this.auth = options.auth || null; + this.headers = options.headers || {}; + this.fetch = options.fetch || fetch; + this.FormData = options.FormData || window.FormData; + this.requestCallback = options.requestCallback; + this.responseCallback = options.responseCallback; + } + + _createClass(HTTPTransport, [{ + key: 'buildRequest', + value: function buildRequest(link, decoders) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var fields = link.fields; + var method = link.method.toUpperCase(); + var queryParams = {}; + var pathParams = {}; + var formParams = {}; + var fieldNames = []; + var hasBody = false; + + for (var idx = 0, len = fields.length; idx < len; idx++) { + var field = fields[idx]; + + // Ensure any required fields are included + if (!params.hasOwnProperty(field.name)) { + if (field.required) { + throw new errors.ParameterError('Missing required field: "' + field.name + '"'); + } else { + continue; + } + } + + fieldNames.push(field.name); + if (field.location === 'query') { + queryParams[field.name] = params[field.name]; + } else if (field.location === 'path') { + pathParams[field.name] = params[field.name]; + } else if (field.location === 'form') { + formParams[field.name] = params[field.name]; + hasBody = true; + } else if (field.location === 'body') { + formParams = params[field.name]; + hasBody = true; + } + } + + // Check for any parameters that did not have a matching field + for (var property in params) { + if (params.hasOwnProperty(property) && !fieldNames.includes(property)) { + throw new errors.ParameterError('Unknown parameter: "' + property + '"'); + } + } + + var requestOptions = { method: method, headers: {} }; + + Object.assign(requestOptions.headers, this.headers); + + if (hasBody) { + if (link.encoding === 'application/json') { + requestOptions.body = JSON.stringify(formParams); + requestOptions.headers['Content-Type'] = 'application/json'; + } else if (link.encoding === 'multipart/form-data') { + var form = new this.FormData(); + + for (var paramKey in formParams) { + form.append(paramKey, formParams[paramKey]); + } + requestOptions.body = form; + } else if (link.encoding === 'application/x-www-form-urlencoded') { + var formBody = []; + for (var _paramKey in formParams) { + var encodedKey = encodeURIComponent(_paramKey); + var encodedValue = encodeURIComponent(formParams[_paramKey]); + formBody.push(encodedKey + '=' + encodedValue); + } + formBody = formBody.join('&'); + + requestOptions.body = formBody; + requestOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + } + } + + if (this.auth) { + requestOptions = this.auth.authenticate(requestOptions); + } + + var parsedUrl = urlTemplate.parse(link.url); + parsedUrl = parsedUrl.expand(pathParams); + parsedUrl = new URL(parsedUrl); + parsedUrl.set('query', queryParams); + + return { + url: parsedUrl.toString(), + options: requestOptions + }; + } + }, { + key: 'action', + value: function action(link, decoders) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var responseCallback = this.responseCallback; + var request = this.buildRequest(link, decoders, params); + + if (this.requestCallback) { + this.requestCallback(request); + } + + return this.fetch(request.url, request.options).then(function (response) { + if (response.status === 204) { + return; + } + return parseResponse(response, decoders, responseCallback).then(function (data) { + if (response.ok) { + return data; + } else { + var title = response.status + ' ' + response.statusText; + var error = new errors.ErrorMessage(title, data); + return Promise.reject(error); + } + }); + }); + } + }]); + + return HTTPTransport; +}(); + +module.exports = { + HTTPTransport: HTTPTransport +}; + +},{"../errors":11,"../utils":15,"isomorphic-fetch":16,"url-parse":19,"url-template":21}],14:[function(require,module,exports){ +'use strict'; + +var http = require('./http'); + +module.exports = { + HTTPTransport: http.HTTPTransport +}; + +},{"./http":13}],15:[function(require,module,exports){ +'use strict'; + +var URL = require('url-parse'); + +var determineTransport = function determineTransport(transports, url) { + var parsedUrl = new URL(url); + var scheme = parsedUrl.protocol.replace(':', ''); + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = transports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var transport = _step.value; + + if (transport.schemes.includes(scheme)) { + return transport; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + throw Error('Unsupported scheme in URL: ' + url); +}; + +var negotiateDecoder = function negotiateDecoder(decoders, contentType) { + if (contentType === undefined || contentType === null) { + return decoders[0]; + } + + var fullType = contentType.toLowerCase().split(';')[0].trim(); + var mainType = fullType.split('/')[0] + '/*'; + var wildcardType = '*/*'; + var acceptableTypes = [fullType, mainType, wildcardType]; + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = decoders[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var decoder = _step2.value; + + if (acceptableTypes.includes(decoder.mediaType)) { + return decoder; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + throw Error('Unsupported media in Content-Type header: ' + contentType); +}; + +var csrfSafeMethod = function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method) + ); +}; + +module.exports = { + determineTransport: determineTransport, + negotiateDecoder: negotiateDecoder, + csrfSafeMethod: csrfSafeMethod +}; + +},{"url-parse":19}],16:[function(require,module,exports){ +// the whatwg-fetch polyfill installs the fetch() function +// on the global object (window or self) +// +// Return that as the export for use in Webpack, Browserify etc. +require('whatwg-fetch'); +module.exports = self.fetch.bind(self); + +},{"whatwg-fetch":22}],17:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +/** + * Simple query string parser. + * + * @param {String} query The query string that needs to be parsed. + * @returns {Object} + * @api public + */ +function querystring(query) { + var parser = /([^=?&]+)=?([^&]*)/g + , result = {} + , part; + + // + // Little nifty parsing hack, leverage the fact that RegExp.exec increments + // the lastIndex property so we can continue executing this loop until we've + // parsed all results. + // + for (; + part = parser.exec(query); + result[decodeURIComponent(part[1])] = decodeURIComponent(part[2]) + ); + + return result; +} + +/** + * Transform a query string to an object. + * + * @param {Object} obj Object that should be transformed. + * @param {String} prefix Optional prefix. + * @returns {String} + * @api public + */ +function querystringify(obj, prefix) { + prefix = prefix || ''; + + var pairs = []; + + // + // Optionally prefix with a '?' if needed + // + if ('string' !== typeof prefix) prefix = '?'; + + for (var key in obj) { + if (has.call(obj, key)) { + pairs.push(encodeURIComponent(key) +'='+ encodeURIComponent(obj[key])); + } + } + + return pairs.length ? prefix + pairs.join('&') : ''; +} + +// +// Expose the module. +// +exports.stringify = querystringify; +exports.parse = querystring; + +},{}],18:[function(require,module,exports){ +'use strict'; + +/** + * Check if we're required to add a port number. + * + * @see https://url.spec.whatwg.org/#default-port + * @param {Number|String} port Port number we need to check + * @param {String} protocol Protocol we need to check against. + * @returns {Boolean} Is it a default port for the given protocol + * @api private + */ +module.exports = function required(port, protocol) { + protocol = protocol.split(':')[0]; + port = +port; + + if (!port) return false; + + switch (protocol) { + case 'http': + case 'ws': + return port !== 80; + + case 'https': + case 'wss': + return port !== 443; + + case 'ftp': + return port !== 21; + + case 'gopher': + return port !== 70; + + case 'file': + return false; + } + + return port !== 0; +}; + +},{}],19:[function(require,module,exports){ +'use strict'; + +var required = require('requires-port') + , lolcation = require('./lolcation') + , qs = require('querystringify') + , protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\S\s]*)/i; + +/** + * These are the parse rules for the URL parser, it informs the parser + * about: + * + * 0. The char it Needs to parse, if it's a string it should be done using + * indexOf, RegExp using exec and NaN means set as current value. + * 1. The property we should set when parsing this value. + * 2. Indication if it's backwards or forward parsing, when set as number it's + * the value of extra chars that should be split off. + * 3. Inherit from location if non existing in the parser. + * 4. `toLowerCase` the resulting value. + */ +var rules = [ + ['#', 'hash'], // Extract from the back. + ['?', 'query'], // Extract from the back. + ['/', 'pathname'], // Extract from the back. + ['@', 'auth', 1], // Extract from the front. + [NaN, 'host', undefined, 1, 1], // Set left over value. + [/:(\d+)$/, 'port', undefined, 1], // RegExp the back. + [NaN, 'hostname', undefined, 1, 1] // Set left over. +]; + +/** + * @typedef ProtocolExtract + * @type Object + * @property {String} protocol Protocol matched in the URL, in lowercase. + * @property {Boolean} slashes `true` if protocol is followed by "//", else `false`. + * @property {String} rest Rest of the URL that is not part of the protocol. + */ + +/** + * Extract protocol information from a URL with/without double slash ("//"). + * + * @param {String} address URL we want to extract from. + * @return {ProtocolExtract} Extracted information. + * @api private + */ +function extractProtocol(address) { + var match = protocolre.exec(address); + + return { + protocol: match[1] ? match[1].toLowerCase() : '', + slashes: !!match[2], + rest: match[3] + }; +} + +/** + * Resolve a relative URL pathname against a base URL pathname. + * + * @param {String} relative Pathname of the relative URL. + * @param {String} base Pathname of the base URL. + * @return {String} Resolved pathname. + * @api private + */ +function resolve(relative, base) { + var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/')) + , i = path.length + , last = path[i - 1] + , unshift = false + , up = 0; + + while (i--) { + if (path[i] === '.') { + path.splice(i, 1); + } else if (path[i] === '..') { + path.splice(i, 1); + up++; + } else if (up) { + if (i === 0) unshift = true; + path.splice(i, 1); + up--; + } + } + + if (unshift) path.unshift(''); + if (last === '.' || last === '..') path.push(''); + + return path.join('/'); +} + +/** + * The actual URL instance. Instead of returning an object we've opted-in to + * create an actual constructor as it's much more memory efficient and + * faster and it pleases my OCD. + * + * @constructor + * @param {String} address URL we want to parse. + * @param {Object|String} location Location defaults for relative paths. + * @param {Boolean|Function} parser Parser for the query string. + * @api public + */ +function URL(address, location, parser) { + if (!(this instanceof URL)) { + return new URL(address, location, parser); + } + + var relative, extracted, parse, instruction, index, key + , instructions = rules.slice() + , type = typeof location + , url = this + , i = 0; + + // + // The following if statements allows this module two have compatibility with + // 2 different API: + // + // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments + // where the boolean indicates that the query string should also be parsed. + // + // 2. The `URL` interface of the browser which accepts a URL, object as + // arguments. The supplied object will be used as default values / fall-back + // for relative paths. + // + if ('object' !== type && 'string' !== type) { + parser = location; + location = null; + } + + if (parser && 'function' !== typeof parser) parser = qs.parse; + + location = lolcation(location); + + // + // Extract protocol information before running the instructions. + // + extracted = extractProtocol(address || ''); + relative = !extracted.protocol && !extracted.slashes; + url.slashes = extracted.slashes || relative && location.slashes; + url.protocol = extracted.protocol || location.protocol || ''; + address = extracted.rest; + + // + // When the authority component is absent the URL starts with a path + // component. + // + if (!extracted.slashes) instructions[2] = [/(.*)/, 'pathname']; + + for (; i < instructions.length; i++) { + instruction = instructions[i]; + parse = instruction[0]; + key = instruction[1]; + + if (parse !== parse) { + url[key] = address; + } else if ('string' === typeof parse) { + if (~(index = address.indexOf(parse))) { + if ('number' === typeof instruction[2]) { + url[key] = address.slice(0, index); + address = address.slice(index + instruction[2]); + } else { + url[key] = address.slice(index); + address = address.slice(0, index); + } + } + } else if (index = parse.exec(address)) { + url[key] = index[1]; + address = address.slice(0, index.index); + } + + url[key] = url[key] || ( + relative && instruction[3] ? location[key] || '' : '' + ); + + // + // Hostname, host and protocol should be lowercased so they can be used to + // create a proper `origin`. + // + if (instruction[4]) url[key] = url[key].toLowerCase(); + } + + // + // Also parse the supplied query string in to an object. If we're supplied + // with a custom parser as function use that instead of the default build-in + // parser. + // + if (parser) url.query = parser(url.query); + + // + // If the URL is relative, resolve the pathname against the base URL. + // + if ( + relative + && location.slashes + && url.pathname.charAt(0) !== '/' + && (url.pathname !== '' || location.pathname !== '') + ) { + url.pathname = resolve(url.pathname, location.pathname); + } + + // + // We should not add port numbers if they are already the default port number + // for a given protocol. As the host also contains the port number we're going + // override it with the hostname which contains no port number. + // + if (!required(url.port, url.protocol)) { + url.host = url.hostname; + url.port = ''; + } + + // + // Parse down the `auth` for the username and password. + // + url.username = url.password = ''; + if (url.auth) { + instruction = url.auth.split(':'); + url.username = instruction[0] || ''; + url.password = instruction[1] || ''; + } + + url.origin = url.protocol && url.host && url.protocol !== 'file:' + ? url.protocol +'//'+ url.host + : 'null'; + + // + // The href is just the compiled result. + // + url.href = url.toString(); +} + +/** + * This is convenience method for changing properties in the URL instance to + * insure that they all propagate correctly. + * + * @param {String} part Property we need to adjust. + * @param {Mixed} value The newly assigned value. + * @param {Boolean|Function} fn When setting the query, it will be the function + * used to parse the query. + * When setting the protocol, double slash will be + * removed from the final url if it is true. + * @returns {URL} + * @api public + */ +URL.prototype.set = function set(part, value, fn) { + var url = this; + + switch (part) { + case 'query': + if ('string' === typeof value && value.length) { + value = (fn || qs.parse)(value); + } + + url[part] = value; + break; + + case 'port': + url[part] = value; + + if (!required(value, url.protocol)) { + url.host = url.hostname; + url[part] = ''; + } else if (value) { + url.host = url.hostname +':'+ value; + } + + break; + + case 'hostname': + url[part] = value; + + if (url.port) value += ':'+ url.port; + url.host = value; + break; + + case 'host': + url[part] = value; + + if (/:\d+$/.test(value)) { + value = value.split(':'); + url.port = value.pop(); + url.hostname = value.join(':'); + } else { + url.hostname = value; + url.port = ''; + } + + break; + + case 'protocol': + url.protocol = value.toLowerCase(); + url.slashes = !fn; + break; + + case 'pathname': + url.pathname = value.length && value.charAt(0) !== '/' ? '/' + value : value; + + break; + + default: + url[part] = value; + } + + for (var i = 0; i < rules.length; i++) { + var ins = rules[i]; + + if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase(); + } + + url.origin = url.protocol && url.host && url.protocol !== 'file:' + ? url.protocol +'//'+ url.host + : 'null'; + + url.href = url.toString(); + + return url; +}; + +/** + * Transform the properties back in to a valid and full URL string. + * + * @param {Function} stringify Optional query stringify function. + * @returns {String} + * @api public + */ +URL.prototype.toString = function toString(stringify) { + if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify; + + var query + , url = this + , protocol = url.protocol; + + if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':'; + + var result = protocol + (url.slashes ? '//' : ''); + + if (url.username) { + result += url.username; + if (url.password) result += ':'+ url.password; + result += '@'; + } + + result += url.host + url.pathname; + + query = 'object' === typeof url.query ? stringify(url.query) : url.query; + if (query) result += '?' !== query.charAt(0) ? '?'+ query : query; + + if (url.hash) result += url.hash; + + return result; +}; + +// +// Expose the URL parser and some additional properties that might be useful for +// others or testing. +// +URL.extractProtocol = extractProtocol; +URL.location = lolcation; +URL.qs = qs; + +module.exports = URL; + +},{"./lolcation":20,"querystringify":17,"requires-port":18}],20:[function(require,module,exports){ +(function (global){ +'use strict'; + +var slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//; + +/** + * These properties should not be copied or inherited from. This is only needed + * for all non blob URL's as a blob URL does not include a hash, only the + * origin. + * + * @type {Object} + * @private + */ +var ignore = { hash: 1, query: 1 } + , URL; + +/** + * The location object differs when your code is loaded through a normal page, + * Worker or through a worker using a blob. And with the blobble begins the + * trouble as the location object will contain the URL of the blob, not the + * location of the page where our code is loaded in. The actual origin is + * encoded in the `pathname` so we can thankfully generate a good "default" + * location from it so we can generate proper relative URL's again. + * + * @param {Object|String} loc Optional default location object. + * @returns {Object} lolcation object. + * @api public + */ +module.exports = function lolcation(loc) { + loc = loc || global.location || {}; + URL = URL || require('./'); + + var finaldestination = {} + , type = typeof loc + , key; + + if ('blob:' === loc.protocol) { + finaldestination = new URL(unescape(loc.pathname), {}); + } else if ('string' === type) { + finaldestination = new URL(loc, {}); + for (key in ignore) delete finaldestination[key]; + } else if ('object' === type) { + for (key in loc) { + if (key in ignore) continue; + finaldestination[key] = loc[key]; + } + + if (finaldestination.slashes === undefined) { + finaldestination.slashes = slashes.test(loc.href); + } + } + + return finaldestination; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./":19}],21:[function(require,module,exports){ +(function (root, factory) { + if (typeof exports === 'object') { + module.exports = factory(); + } else if (typeof define === 'function' && define.amd) { + define([], factory); + } else { + root.urltemplate = factory(); + } +}(this, function () { + /** + * @constructor + */ + function UrlTemplate() { + } + + /** + * @private + * @param {string} str + * @return {string} + */ + UrlTemplate.prototype.encodeReserved = function (str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, '[').replace(/%5D/g, ']'); + } + return part; + }).join(''); + }; + + /** + * @private + * @param {string} str + * @return {string} + */ + UrlTemplate.prototype.encodeUnreserved = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); + } + + /** + * @private + * @param {string} operator + * @param {string} value + * @param {string} key + * @return {string} + */ + UrlTemplate.prototype.encodeValue = function (operator, value, key) { + value = (operator === '+' || operator === '#') ? this.encodeReserved(value) : this.encodeUnreserved(value); + + if (key) { + return this.encodeUnreserved(key) + '=' + value; + } else { + return value; + } + }; + + /** + * @private + * @param {*} value + * @return {boolean} + */ + UrlTemplate.prototype.isDefined = function (value) { + return value !== undefined && value !== null; + }; + + /** + * @private + * @param {string} + * @return {boolean} + */ + UrlTemplate.prototype.isKeyOperator = function (operator) { + return operator === ';' || operator === '&' || operator === '?'; + }; + + /** + * @private + * @param {Object} context + * @param {string} operator + * @param {string} key + * @param {string} modifier + */ + UrlTemplate.prototype.getValues = function (context, operator, key, modifier) { + var value = context[key], + result = []; + + if (this.isDefined(value) && value !== '') { + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + value = value.toString(); + + if (modifier && modifier !== '*') { + value = value.substring(0, parseInt(modifier, 10)); + } + + result.push(this.encodeValue(operator, value, this.isKeyOperator(operator) ? key : null)); + } else { + if (modifier === '*') { + if (Array.isArray(value)) { + value.filter(this.isDefined).forEach(function (value) { + result.push(this.encodeValue(operator, value, this.isKeyOperator(operator) ? key : null)); + }, this); + } else { + Object.keys(value).forEach(function (k) { + if (this.isDefined(value[k])) { + result.push(this.encodeValue(operator, value[k], k)); + } + }, this); + } + } else { + var tmp = []; + + if (Array.isArray(value)) { + value.filter(this.isDefined).forEach(function (value) { + tmp.push(this.encodeValue(operator, value)); + }, this); + } else { + Object.keys(value).forEach(function (k) { + if (this.isDefined(value[k])) { + tmp.push(this.encodeUnreserved(k)); + tmp.push(this.encodeValue(operator, value[k].toString())); + } + }, this); + } + + if (this.isKeyOperator(operator)) { + result.push(this.encodeUnreserved(key) + '=' + tmp.join(',')); + } else if (tmp.length !== 0) { + result.push(tmp.join(',')); + } + } + } + } else { + if (operator === ';') { + if (this.isDefined(value)) { + result.push(this.encodeUnreserved(key)); + } + } else if (value === '' && (operator === '&' || operator === '?')) { + result.push(this.encodeUnreserved(key) + '='); + } else if (value === '') { + result.push(''); + } + } + return result; + }; + + /** + * @param {string} template + * @return {function(Object):string} + */ + UrlTemplate.prototype.parse = function (template) { + var that = this; + var operators = ['+', '#', '.', '/', ';', '?', '&']; + + return { + expand: function (context) { + return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { + if (expression) { + var operator = null, + values = []; + + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + + expression.split(/,/g).forEach(function (variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push.apply(values, that.getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + }); + + if (operator && operator !== '+') { + var separator = ','; + + if (operator === '?') { + separator = '&'; + } else if (operator !== '#') { + separator = operator; + } + return (values.length !== 0 ? operator : '') + values.join(separator); + } else { + return values.join(','); + } + } else { + return that.encodeReserved(literal); + } + }); + } + }; + }; + + return new UrlTemplate(); +})); + +},{}],22:[function(require,module,exports){ +(function(self) { + 'use strict'; + + if (self.fetch) { + return + } + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: 'FileReader' in self && 'Blob' in self && (function() { + try { + new Blob() + return true + } catch(e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ] + + var isDataView = function(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + var isArrayBufferView = ArrayBuffer.isView || function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + } + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator + } + + function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var oldValue = this.map[name] + this.map[name] = oldValue ? oldValue+','+value : value + } + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] + } + + Headers.prototype.get = function(name) { + name = normalizeName(name) + return this.has(name) ? this.map[name] : null + } + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + } + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value) + } + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this) + } + } + } + + Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { items.push(name) }) + return iteratorFor(items) + } + + Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { items.push(value) }) + return iteratorFor(items) + } + + Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { items.push([name, value]) }) + return iteratorFor(items) + } + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsArrayBuffer(blob) + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsText(blob) + return promise + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength) + view.set(new Uint8Array(buf)) + return view.buffer + } + } + + function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + this._bodyInit = body + if (!body) { + this._bodyText = '' + } else if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer) + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]) + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body) + } else { + throw new Error('unsupported BodyInit type') + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + var view = new Uint8Array(this._bodyArrayBuffer) + var str = String.fromCharCode.apply(null, view) + return Promise.resolve(str) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + + if (support.arrayBuffer) { + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + + function normalizeMethod(method) { + var upcased = method.toUpperCase() + return (methods.indexOf(upcased) > -1) ? upcased : method + } + + function Request(input, options) { + options = options || {} + var body = options.body + + if (typeof input === 'string') { + this.url = input + } else { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + if (!body && input._bodyInit != null) { + body = input._bodyInit + input.bodyUsed = true + } + } + + this.credentials = options.credentials || this.credentials || 'omit' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + } + + Request.prototype.clone = function() { + return new Request(this, { body: this._bodyInit }) + } + + function decode(body) { + var form = new FormData() + body.trim().split('&').forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers() + rawHeaders.split('\r\n').forEach(function(line) { + var parts = line.split(':') + var key = parts.shift().trim() + if (key) { + var value = parts.join(':').trim() + headers.append(key, value) + } + }) + return headers + } + + Body.call(Request.prototype) + + function Response(bodyInit, options) { + if (!options) { + options = {} + } + + this.type = 'default' + this.status = 'status' in options ? options.status : 200 + this.ok = this.status >= 200 && this.status < 300 + this.statusText = 'statusText' in options ? options.statusText : 'OK' + this.headers = new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) + } + + Body.call(Response.prototype) + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + } + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response + } + + var redirectStatuses = [301, 302, 303, 307, 308] + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + } + + self.Headers = Headers + self.Request = Request + self.Response = Response + + self.fetch = function(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init) + var xhr = new XMLHttpRequest() + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + } + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL') + var body = 'response' in xhr ? xhr.response : xhr.responseText + resolve(new Response(body, options)) + } + + xhr.onerror = function() { + reject(new TypeError('Network request failed')) + } + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')) + } + + xhr.open(request.method, request.url, true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob' + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) + } + self.fetch.polyfill = true +})(typeof self !== 'undefined' ? self : this); + +},{}]},{},[12])(12) +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYXV0aC9iYXNpYy5qcyIsImxpYi9hdXRoL2luZGV4LmpzIiwibGliL2F1dGgvc2Vzc2lvbi5qcyIsImxpYi9hdXRoL3Rva2VuLmpzIiwibGliL2NsaWVudC5qcyIsImxpYi9jb2RlY3MvY29yZWpzb24uanMiLCJsaWIvY29kZWNzL2luZGV4LmpzIiwibGliL2NvZGVjcy9qc29uLmpzIiwibGliL2NvZGVjcy90ZXh0LmpzIiwibGliL2RvY3VtZW50LmpzIiwibGliL2Vycm9ycy5qcyIsImxpYi9pbmRleC5qcyIsImxpYi90cmFuc3BvcnRzL2h0dHAuanMiLCJsaWIvdHJhbnNwb3J0cy9pbmRleC5qcyIsImxpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9pc29tb3JwaGljLWZldGNoL2ZldGNoLW5wbS1icm93c2VyaWZ5LmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5naWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlcXVpcmVzLXBvcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdXJsLXBhcnNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3VybC1wYXJzZS9sb2xjYXRpb24uanMiLCJub2RlX21vZHVsZXMvdXJsLXRlbXBsYXRlL2xpYi91cmwtdGVtcGxhdGUuanMiLCJub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0lDQU0sbUI7QUFDSixpQ0FBMkI7QUFBQSxRQUFkLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDekIsUUFBTSxXQUFXLFFBQVEsUUFBekI7QUFDQSxRQUFNLFdBQVcsUUFBUSxRQUF6QjtBQUNBLFFBQU0sT0FBTyxPQUFPLElBQVAsQ0FBWSxXQUFXLEdBQVgsR0FBaUIsUUFBN0IsQ0FBYjtBQUNBLFNBQUssSUFBTCxHQUFZLFdBQVcsSUFBdkI7QUFDRDs7OztpQ0FFYSxPLEVBQVM7QUFDckIsY0FBUSxPQUFSLENBQWdCLGVBQWhCLElBQW1DLEtBQUssSUFBeEM7QUFDQSxhQUFPLE9BQVA7QUFDRDs7Ozs7O0FBR0gsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsdUJBQXFCO0FBRE4sQ0FBakI7Ozs7O0FDZEEsSUFBTSxRQUFRLFFBQVEsU0FBUixDQUFkO0FBQ0EsSUFBTSxVQUFVLFFBQVEsV0FBUixDQUFoQjtBQUNBLElBQU0sUUFBUSxRQUFRLFNBQVIsQ0FBZDs7QUFFQSxPQUFPLE9BQVAsR0FBaUI7QUFDZix1QkFBcUIsTUFBTSxtQkFEWjtBQUVmLHlCQUF1QixRQUFRLHFCQUZoQjtBQUdmLHVCQUFxQixNQUFNO0FBSFosQ0FBakI7Ozs7Ozs7OztBQ0pBLElBQU0sUUFBUSxRQUFRLFVBQVIsQ0FBZDs7QUFFQSxTQUFTLElBQVQsQ0FBZSxHQUFmLEVBQW9CO0FBQ2xCLFNBQU8sSUFBSSxPQUFKLENBQVksUUFBWixFQUFzQixFQUF0QixFQUEwQixPQUExQixDQUFrQyxRQUFsQyxFQUE0QyxFQUE1QyxDQUFQO0FBQ0Q7O0FBRUQsU0FBUyxTQUFULENBQW9CLFVBQXBCLEVBQWdDLFlBQWhDLEVBQThDO0FBQzVDLGlCQUFlLGdCQUFnQixPQUFPLFFBQVAsQ0FBZ0IsTUFBL0M7QUFDQSxNQUFJLGdCQUFnQixpQkFBaUIsRUFBckMsRUFBeUM7QUFDdkMsUUFBTSxVQUFVLGFBQWEsS0FBYixDQUFtQixHQUFuQixDQUFoQjtBQUNBLFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ3ZDLFVBQU0sU0FBUyxLQUFLLFFBQVEsQ0FBUixDQUFMLENBQWY7QUFDQTtBQUNBLFVBQUksT0FBTyxTQUFQLENBQWlCLENBQWpCLEVBQW9CLFdBQVcsTUFBWCxHQUFvQixDQUF4QyxNQUFnRCxhQUFhLEdBQWpFLEVBQXVFO0FBQ3JFLGVBQU8sbUJBQW1CLE9BQU8sU0FBUCxDQUFpQixXQUFXLE1BQVgsR0FBb0IsQ0FBckMsQ0FBbkIsQ0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU8sSUFBUDtBQUNEOztJQUVLLHFCO0FBQ0osbUNBQTJCO0FBQUEsUUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ3pCLFNBQUssU0FBTCxHQUFpQixVQUFVLFFBQVEsY0FBbEIsRUFBa0MsUUFBUSxZQUExQyxDQUFqQjtBQUNBLFNBQUssY0FBTCxHQUFzQixRQUFRLGNBQTlCO0FBQ0Q7Ozs7aUNBRWEsTyxFQUFTO0FBQ3JCLGNBQVEsV0FBUixHQUFzQixhQUF0QjtBQUNBLFVBQUksS0FBSyxTQUFMLElBQWtCLENBQUMsTUFBTSxjQUFOLENBQXFCLFFBQVEsTUFBN0IsQ0FBdkIsRUFBNkQ7QUFDM0QsZ0JBQVEsT0FBUixDQUFnQixLQUFLLGNBQXJCLElBQXVDLEtBQUssU0FBNUM7QUFDRDtBQUNELGFBQU8sT0FBUDtBQUNEOzs7Ozs7QUFHSCxPQUFPLE9BQVAsR0FBaUI7QUFDZix5QkFBdUI7QUFEUixDQUFqQjs7Ozs7Ozs7O0lDcENNLG1CO0FBQ0osaUNBQTJCO0FBQUEsUUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ3pCLFNBQUssS0FBTCxHQUFhLFFBQVEsS0FBckI7QUFDQSxTQUFLLE1BQUwsR0FBYyxRQUFRLE1BQVIsSUFBa0IsUUFBaEM7QUFDRDs7OztpQ0FFYSxPLEVBQVM7QUFDckIsY0FBUSxPQUFSLENBQWdCLGVBQWhCLElBQW1DLEtBQUssTUFBTCxHQUFjLEdBQWQsR0FBb0IsS0FBSyxLQUE1RDtBQUNBLGFBQU8sT0FBUDtBQUNEOzs7Ozs7QUFHSCxPQUFPLE9BQVAsR0FBaUI7QUFDZix1QkFBcUI7QUFETixDQUFqQjs7Ozs7Ozs7O0FDWkEsSUFBTSxXQUFXLFFBQVEsWUFBUixDQUFqQjtBQUNBLElBQU0sU0FBUyxRQUFRLFVBQVIsQ0FBZjtBQUNBLElBQU0sU0FBUyxRQUFRLFVBQVIsQ0FBZjtBQUNBLElBQU0sYUFBYSxRQUFRLGNBQVIsQ0FBbkI7QUFDQSxJQUFNLFFBQVEsUUFBUSxTQUFSLENBQWQ7O0FBRUEsU0FBUyxVQUFULENBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQy9CLHlCQUFnQixJQUFoQiw4SEFBc0I7QUFBQSxVQUFiLEdBQWE7O0FBQ3BCLFVBQUksZ0JBQWdCLFNBQVMsUUFBN0IsRUFBdUM7QUFDckMsZUFBTyxLQUFLLE9BQUwsQ0FBYSxHQUFiLENBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxlQUFPLEtBQUssR0FBTCxDQUFQO0FBQ0Q7QUFDRCxVQUFJLFNBQVMsU0FBYixFQUF3QjtBQUN0QixjQUFNLElBQUksT0FBTyxlQUFYLDJCQUFtRCxLQUFLLFNBQUwsQ0FBZSxJQUFmLENBQW5ELENBQU47QUFDRDtBQUNGO0FBVjhCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBVy9CLE1BQUksRUFBRSxnQkFBZ0IsU0FBUyxJQUEzQixDQUFKLEVBQXNDO0FBQ3BDLFVBQU0sSUFBSSxPQUFPLGVBQVgsMkJBQW1ELEtBQUssU0FBTCxDQUFlLElBQWYsQ0FBbkQsQ0FBTjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0lBRUssTTtBQUNKLG9CQUEyQjtBQUFBLFFBQWQsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUN6QixRQUFNLG1CQUFtQjtBQUN2QixZQUFNLFFBQVEsSUFBUixJQUFnQixJQURDO0FBRXZCLGVBQVMsUUFBUSxPQUFSLElBQW1CLEVBRkw7QUFHdkIsdUJBQWlCLFFBQVEsZUFIRjtBQUl2Qix3QkFBa0IsUUFBUTtBQUpILEtBQXpCOztBQU9BLFNBQUssUUFBTCxHQUFnQixRQUFRLFFBQVIsSUFBb0IsQ0FBQyxJQUFJLE9BQU8sYUFBWCxFQUFELEVBQTZCLElBQUksT0FBTyxTQUFYLEVBQTdCLEVBQXFELElBQUksT0FBTyxTQUFYLEVBQXJELENBQXBDO0FBQ0EsU0FBSyxVQUFMLEdBQWtCLFFBQVEsVUFBUixJQUFzQixDQUFDLElBQUksV0FBVyxhQUFmLENBQTZCLGdCQUE3QixDQUFELENBQXhDO0FBQ0Q7Ozs7MkJBRU8sUSxFQUFVLEksRUFBbUI7QUFBQSxVQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDbkMsVUFBTSxPQUFPLFdBQVcsUUFBWCxFQUFxQixJQUFyQixDQUFiO0FBQ0EsVUFBTSxZQUFZLE1BQU0sa0JBQU4sQ0FBeUIsS0FBSyxVQUE5QixFQUEwQyxLQUFLLEdBQS9DLENBQWxCO0FBQ0EsYUFBTyxVQUFVLE1BQVYsQ0FBaUIsSUFBakIsRUFBdUIsS0FBSyxRQUE1QixFQUFzQyxNQUF0QyxDQUFQO0FBQ0Q7Ozt3QkFFSSxHLEVBQUs7QUFDUixVQUFNLE9BQU8sSUFBSSxTQUFTLElBQWIsQ0FBa0IsR0FBbEIsRUFBdUIsS0FBdkIsQ0FBYjtBQUNBLFVBQU0sWUFBWSxNQUFNLGtCQUFOLENBQXlCLEtBQUssVUFBOUIsRUFBMEMsR0FBMUMsQ0FBbEI7QUFDQSxhQUFPLFVBQVUsTUFBVixDQUFpQixJQUFqQixFQUF1QixLQUFLLFFBQTVCLENBQVA7QUFDRDs7Ozs7O0FBR0gsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsVUFBUTtBQURPLENBQWpCOzs7Ozs7Ozs7OztBQ2pEQSxJQUFNLFdBQVcsUUFBUSxhQUFSLENBQWpCO0FBQ0EsSUFBTSxNQUFNLFFBQVEsV0FBUixDQUFaOztBQUVBLFNBQVMsV0FBVCxDQUFzQixHQUF0QixFQUEyQjtBQUN6QixNQUFJLElBQUksS0FBSixDQUFVLGdCQUFWLENBQUosRUFBaUM7QUFDL0IsV0FBTyxJQUFJLFNBQUosQ0FBYyxDQUFkLENBQVA7QUFDRDtBQUNELFNBQU8sR0FBUDtBQUNEOztBQUVELFNBQVMsU0FBVCxDQUFvQixHQUFwQixFQUF5QixHQUF6QixFQUE4QjtBQUM1QixNQUFNLFFBQVEsSUFBSSxHQUFKLENBQWQ7QUFDQSxNQUFJLE9BQVEsS0FBUixLQUFtQixRQUF2QixFQUFpQztBQUMvQixXQUFPLEtBQVA7QUFDRDtBQUNELFNBQU8sRUFBUDtBQUNEOztBQUVELFNBQVMsVUFBVCxDQUFxQixHQUFyQixFQUEwQixHQUExQixFQUErQjtBQUM3QixNQUFNLFFBQVEsSUFBSSxHQUFKLENBQWQ7QUFDQSxNQUFJLE9BQVEsS0FBUixLQUFtQixTQUF2QixFQUFrQztBQUNoQyxXQUFPLEtBQVA7QUFDRDtBQUNELFNBQU8sS0FBUDtBQUNEOztBQUVELFNBQVMsU0FBVCxDQUFvQixHQUFwQixFQUF5QixHQUF6QixFQUE4QjtBQUM1QixNQUFNLFFBQVEsSUFBSSxHQUFKLENBQWQ7QUFDQSxNQUFJLFFBQVEsS0FBUix5Q0FBUSxLQUFSLE9BQW1CLFFBQXZCLEVBQWlDO0FBQy9CLFdBQU8sS0FBUDtBQUNEO0FBQ0QsU0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBUyxRQUFULENBQW1CLEdBQW5CLEVBQXdCLEdBQXhCLEVBQTZCO0FBQzNCLE1BQU0sUUFBUSxJQUFJLEdBQUosQ0FBZDtBQUNBLE1BQUksaUJBQWlCLEtBQXJCLEVBQTRCO0FBQzFCLFdBQU8sS0FBUDtBQUNEO0FBQ0QsU0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBUyxVQUFULENBQXFCLElBQXJCLEVBQTJCLE9BQTNCLEVBQW9DO0FBQ2xDLE1BQU0sV0FBVyxDQUFDLE9BQUQsRUFBVSxPQUFWLENBQWpCO0FBQ0EsTUFBSSxVQUFVLEVBQWQ7QUFDQSxPQUFLLElBQUksUUFBVCxJQUFxQixJQUFyQixFQUEyQjtBQUN6QixRQUFJLEtBQUssY0FBTCxDQUFvQixRQUFwQixLQUFpQyxDQUFDLFNBQVMsUUFBVCxDQUFrQixRQUFsQixDQUF0QyxFQUFtRTtBQUNqRSxVQUFNLE1BQU0sWUFBWSxRQUFaLENBQVo7QUFDQSxVQUFNLFFBQVEsZ0JBQWdCLEtBQUssUUFBTCxDQUFoQixFQUFnQyxPQUFoQyxDQUFkO0FBQ0EsY0FBUSxHQUFSLElBQWUsS0FBZjtBQUNEO0FBQ0Y7QUFDRCxTQUFPLE9BQVA7QUFDRDs7QUFFRCxTQUFTLGVBQVQsQ0FBMEIsSUFBMUIsRUFBZ0MsT0FBaEMsRUFBeUM7QUFDdkMsTUFBTSxXQUFXLGdCQUFnQixNQUFoQixJQUEwQixFQUFFLGdCQUFnQixLQUFsQixDQUEzQzs7QUFFQSxNQUFJLFlBQVksS0FBSyxLQUFMLEtBQWUsVUFBL0IsRUFBMkM7QUFDekM7QUFDQSxRQUFNLE9BQU8sVUFBVSxJQUFWLEVBQWdCLE9BQWhCLENBQWI7QUFDQSxRQUFNLGNBQWMsVUFBVSxJQUFWLEVBQWdCLEtBQWhCLENBQXBCO0FBQ0EsUUFBTSxNQUFNLGNBQWMsSUFBSSxXQUFKLEVBQWlCLE9BQWpCLEVBQTBCLFFBQTFCLEVBQWQsR0FBcUQsRUFBakU7QUFDQSxRQUFNLFFBQVEsVUFBVSxJQUFWLEVBQWdCLE9BQWhCLENBQWQ7QUFDQSxRQUFNLGNBQWMsVUFBVSxJQUFWLEVBQWdCLGFBQWhCLENBQXBCO0FBQ0EsUUFBTSxVQUFVLFdBQVcsSUFBWCxFQUFpQixHQUFqQixDQUFoQjtBQUNBLFdBQU8sSUFBSSxTQUFTLFFBQWIsQ0FBc0IsR0FBdEIsRUFBMkIsS0FBM0IsRUFBa0MsV0FBbEMsRUFBK0MsT0FBL0MsQ0FBUDtBQUNELEdBVEQsTUFTTyxJQUFJLFlBQVksS0FBSyxLQUFMLEtBQWUsTUFBL0IsRUFBdUM7QUFDNUM7QUFDQSxRQUFNLGVBQWMsVUFBVSxJQUFWLEVBQWdCLEtBQWhCLENBQXBCO0FBQ0EsUUFBTSxPQUFNLGVBQWMsSUFBSSxZQUFKLEVBQWlCLE9BQWpCLEVBQTBCLFFBQTFCLEVBQWQsR0FBcUQsRUFBakU7QUFDQSxRQUFNLFNBQVMsVUFBVSxJQUFWLEVBQWdCLFFBQWhCLEtBQTZCLEtBQTVDO0FBQ0EsUUFBTSxTQUFRLFVBQVUsSUFBVixFQUFnQixPQUFoQixDQUFkO0FBQ0EsUUFBTSxlQUFjLFVBQVUsSUFBVixFQUFnQixhQUFoQixDQUFwQjtBQUNBLFFBQU0sYUFBYSxTQUFTLElBQVQsRUFBZSxRQUFmLENBQW5CO0FBQ0EsUUFBSSxTQUFTLEVBQWI7QUFDQSxTQUFLLElBQUksTUFBTSxDQUFWLEVBQWEsTUFBTSxXQUFXLE1BQW5DLEVBQTJDLE1BQU0sR0FBakQsRUFBc0QsS0FBdEQsRUFBNkQ7QUFDM0QsVUFBSSxRQUFRLFdBQVcsR0FBWCxDQUFaO0FBQ0EsVUFBSSxPQUFPLFVBQVUsS0FBVixFQUFpQixNQUFqQixDQUFYO0FBQ0EsVUFBSSxXQUFXLFdBQVcsS0FBWCxFQUFrQixVQUFsQixDQUFmO0FBQ0EsVUFBSSxXQUFXLFVBQVUsS0FBVixFQUFpQixVQUFqQixDQUFmO0FBQ0EsVUFBSSxtQkFBbUIsVUFBVSxLQUFWLEVBQWlCLGtCQUFqQixDQUF2QjtBQUNBLFVBQUksUUFBUSxJQUFJLFNBQVMsS0FBYixDQUFtQixJQUFuQixFQUF5QixRQUF6QixFQUFtQyxRQUFuQyxFQUE2QyxnQkFBN0MsQ0FBWjtBQUNBLGFBQU8sSUFBUCxDQUFZLEtBQVo7QUFDRDtBQUNELFdBQU8sSUFBSSxTQUFTLElBQWIsQ0FBa0IsSUFBbEIsRUFBdUIsTUFBdkIsRUFBK0Isa0JBQS9CLEVBQW1ELE1BQW5ELEVBQTJELE1BQTNELEVBQWtFLFlBQWxFLENBQVA7QUFDRCxHQW5CTSxNQW1CQSxJQUFJLFFBQUosRUFBYztBQUNuQjtBQUNBLFFBQUksV0FBVSxFQUFkO0FBQ0EsU0FBSyxJQUFJLEdBQVQsSUFBZ0IsSUFBaEIsRUFBc0I7QUFDcEIsVUFBSSxLQUFLLGNBQUwsQ0FBb0IsR0FBcEIsQ0FBSixFQUE4QjtBQUM1QixpQkFBUSxHQUFSLElBQWUsZ0JBQWdCLEtBQUssR0FBTCxDQUFoQixFQUEyQixPQUEzQixDQUFmO0FBQ0Q7QUFDRjtBQUNELFdBQU8sUUFBUDtBQUNELEdBVE0sTUFTQSxJQUFJLGdCQUFnQixLQUFwQixFQUEyQjtBQUNoQztBQUNBLFFBQUksWUFBVSxFQUFkO0FBQ0EsU0FBSyxJQUFJLE9BQU0sQ0FBVixFQUFhLE9BQU0sS0FBSyxNQUE3QixFQUFxQyxPQUFNLElBQTNDLEVBQWdELE1BQWhELEVBQXVEO0FBQ3JELGdCQUFRLElBQVIsQ0FBYSxnQkFBZ0IsS0FBSyxJQUFMLENBQWhCLEVBQTJCLE9BQTNCLENBQWI7QUFDRDtBQUNELFdBQU8sU0FBUDtBQUNEO0FBQ0Q7QUFDQSxTQUFPLElBQVA7QUFDRDs7SUFFSyxhO0FBQ0osMkJBQWU7QUFBQTs7QUFDYixTQUFLLFNBQUwsR0FBaUIsMEJBQWpCO0FBQ0Q7Ozs7MkJBRU8sSSxFQUFvQjtBQUFBLFVBQWQsT0FBYyx1RUFBSixFQUFJOztBQUMxQixVQUFJLE9BQU8sSUFBWDtBQUNBLFVBQUksUUFBUSxTQUFSLEtBQXNCLFNBQXRCLElBQW1DLENBQUMsUUFBUSxTQUFoRCxFQUEyRDtBQUN6RCxlQUFPLEtBQUssS0FBTCxDQUFXLElBQVgsQ0FBUDtBQUNEO0FBQ0QsYUFBTyxnQkFBZ0IsSUFBaEIsRUFBc0IsUUFBUSxHQUE5QixDQUFQO0FBQ0Q7Ozs7OztBQUdILE9BQU8sT0FBUCxHQUFpQjtBQUNmLGlCQUFlO0FBREEsQ0FBakI7Ozs7O0FDekhBLElBQU0sV0FBVyxRQUFRLFlBQVIsQ0FBakI7QUFDQSxJQUFNLE9BQU8sUUFBUSxRQUFSLENBQWI7QUFDQSxJQUFNLE9BQU8sUUFBUSxRQUFSLENBQWI7O0FBRUEsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsaUJBQWUsU0FBUyxhQURUO0FBRWYsYUFBVyxLQUFLLFNBRkQ7QUFHZixhQUFXLEtBQUs7QUFIRCxDQUFqQjs7Ozs7Ozs7O0lDSk0sUztBQUNKLHVCQUFlO0FBQUE7O0FBQ2IsU0FBSyxTQUFMLEdBQWlCLGtCQUFqQjtBQUNEOzs7OzJCQUVPLEksRUFBb0I7QUFBQSxVQUFkLE9BQWMsdUVBQUosRUFBSTs7QUFDMUIsYUFBTyxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQVA7QUFDRDs7Ozs7O0FBR0gsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsYUFBVztBQURJLENBQWpCOzs7Ozs7Ozs7SUNWTSxTO0FBQ0osdUJBQWU7QUFBQTs7QUFDYixTQUFLLFNBQUwsR0FBaUIsUUFBakI7QUFDRDs7OzsyQkFFTyxJLEVBQW9CO0FBQUEsVUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQzFCLGFBQU8sSUFBUDtBQUNEOzs7Ozs7QUFHSCxPQUFPLE9BQVAsR0FBaUI7QUFDZixhQUFXO0FBREksQ0FBakI7Ozs7Ozs7SUNWTSxRLEdBQ0osb0JBQW1FO0FBQUEsTUFBdEQsR0FBc0QsdUVBQWhELEVBQWdEO0FBQUEsTUFBNUMsS0FBNEMsdUVBQXBDLEVBQW9DO0FBQUEsTUFBaEMsV0FBZ0MsdUVBQWxCLEVBQWtCO0FBQUEsTUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ2pFLE9BQUssR0FBTCxHQUFXLEdBQVg7QUFDQSxPQUFLLEtBQUwsR0FBYSxLQUFiO0FBQ0EsT0FBSyxXQUFMLEdBQW1CLFdBQW5CO0FBQ0EsT0FBSyxPQUFMLEdBQWUsT0FBZjtBQUNELEM7O0lBR0csSSxHQUNKLGNBQWEsR0FBYixFQUFrQixNQUFsQixFQUFvRztBQUFBLE1BQTFFLFFBQTBFLHVFQUEvRCxrQkFBK0Q7QUFBQSxNQUEzQyxNQUEyQyx1RUFBbEMsRUFBa0M7QUFBQSxNQUE5QixLQUE4Qix1RUFBdEIsRUFBc0I7QUFBQSxNQUFsQixXQUFrQix1RUFBSixFQUFJOztBQUFBOztBQUNsRyxNQUFJLFFBQVEsU0FBWixFQUF1QjtBQUNyQixVQUFNLElBQUksS0FBSixDQUFVLDBCQUFWLENBQU47QUFDRDs7QUFFRCxNQUFJLFdBQVcsU0FBZixFQUEwQjtBQUN4QixVQUFNLElBQUksS0FBSixDQUFVLDZCQUFWLENBQU47QUFDRDs7QUFFRCxPQUFLLEdBQUwsR0FBVyxHQUFYO0FBQ0EsT0FBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLE9BQUssUUFBTCxHQUFnQixRQUFoQjtBQUNBLE9BQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxPQUFLLEtBQUwsR0FBYSxLQUFiO0FBQ0EsT0FBSyxXQUFMLEdBQW1CLFdBQW5CO0FBQ0QsQzs7SUFHRyxLLEdBQ0osZUFBYSxJQUFiLEVBQXNFO0FBQUEsTUFBbkQsUUFBbUQsdUVBQXhDLEtBQXdDO0FBQUEsTUFBakMsUUFBaUMsdUVBQXRCLEVBQXNCO0FBQUEsTUFBbEIsV0FBa0IsdUVBQUosRUFBSTs7QUFBQTs7QUFDcEUsTUFBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsVUFBTSxJQUFJLEtBQUosQ0FBVSwyQkFBVixDQUFOO0FBQ0Q7O0FBRUQsT0FBSyxJQUFMLEdBQVksSUFBWjtBQUNBLE9BQUssUUFBTCxHQUFnQixRQUFoQjtBQUNBLE9BQUssUUFBTCxHQUFnQixRQUFoQjtBQUNBLE9BQUssV0FBTCxHQUFtQixXQUFuQjtBQUNELEM7O0FBR0gsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsWUFBVSxRQURLO0FBRWYsUUFBTSxJQUZTO0FBR2YsU0FBTztBQUhRLENBQWpCOzs7Ozs7Ozs7OztJQ3pDTSxjOzs7QUFDSiwwQkFBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEsZ0lBQ2QsT0FEYzs7QUFFcEIsVUFBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLFVBQUssSUFBTCxHQUFZLGdCQUFaO0FBSG9CO0FBSXJCOzs7RUFMMEIsSzs7SUFRdkIsZTs7O0FBQ0osMkJBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLG1JQUNkLE9BRGM7O0FBRXBCLFdBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxXQUFLLElBQUwsR0FBWSxpQkFBWjtBQUhvQjtBQUlyQjs7O0VBTDJCLEs7O0lBUXhCLFk7OztBQUNKLHdCQUFhLE9BQWIsRUFBc0IsT0FBdEIsRUFBK0I7QUFBQTs7QUFBQSw2SEFDdkIsT0FEdUI7O0FBRTdCLFdBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxXQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsV0FBSyxJQUFMLEdBQVksY0FBWjtBQUo2QjtBQUs5Qjs7O0VBTndCLEs7O0FBUzNCLE9BQU8sT0FBUCxHQUFpQjtBQUNmLGtCQUFnQixjQUREO0FBRWYsbUJBQWlCLGVBRkY7QUFHZixnQkFBYztBQUhDLENBQWpCOzs7OztBQ3pCQSxJQUFNLE9BQU8sUUFBUSxRQUFSLENBQWI7QUFDQSxJQUFNLFNBQVMsUUFBUSxVQUFSLENBQWY7QUFDQSxJQUFNLFNBQVMsUUFBUSxVQUFSLENBQWY7QUFDQSxJQUFNLFdBQVcsUUFBUSxZQUFSLENBQWpCO0FBQ0EsSUFBTSxTQUFTLFFBQVEsVUFBUixDQUFmO0FBQ0EsSUFBTSxhQUFhLFFBQVEsY0FBUixDQUFuQjtBQUNBLElBQU0sUUFBUSxRQUFRLFNBQVIsQ0FBZDs7QUFFQSxJQUFNLFVBQVU7QUFDZCxVQUFRLE9BQU8sTUFERDtBQUVkLFlBQVUsU0FBUyxRQUZMO0FBR2QsUUFBTSxTQUFTLElBSEQ7QUFJZCxRQUFNLElBSlE7QUFLZCxVQUFRLE1BTE07QUFNZCxVQUFRLE1BTk07QUFPZCxjQUFZLFVBUEU7QUFRZCxTQUFPO0FBUk8sQ0FBaEI7O0FBV0EsT0FBTyxPQUFQLEdBQWlCLE9BQWpCOzs7Ozs7Ozs7QUNuQkEsSUFBTSxRQUFRLFFBQVEsa0JBQVIsQ0FBZDtBQUNBLElBQU0sU0FBUyxRQUFRLFdBQVIsQ0FBZjtBQUNBLElBQU0sUUFBUSxRQUFRLFVBQVIsQ0FBZDtBQUNBLElBQU0sTUFBTSxRQUFRLFdBQVIsQ0FBWjtBQUNBLElBQU0sY0FBYyxRQUFRLGNBQVIsQ0FBcEI7O0FBRUEsSUFBTSxnQkFBZ0IsU0FBaEIsYUFBZ0IsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixnQkFBckIsRUFBMEM7QUFDOUQsU0FBTyxTQUFTLElBQVQsR0FBZ0IsSUFBaEIsQ0FBcUIsZ0JBQVE7QUFDbEMsUUFBSSxnQkFBSixFQUFzQjtBQUNwQix1QkFBaUIsUUFBakIsRUFBMkIsSUFBM0I7QUFDRDtBQUNELFFBQU0sY0FBYyxTQUFTLE9BQVQsQ0FBaUIsR0FBakIsQ0FBcUIsY0FBckIsQ0FBcEI7QUFDQSxRQUFNLFVBQVUsTUFBTSxnQkFBTixDQUF1QixRQUF2QixFQUFpQyxXQUFqQyxDQUFoQjtBQUNBLFFBQU0sVUFBVSxFQUFDLEtBQUssU0FBUyxHQUFmLEVBQWhCO0FBQ0EsV0FBTyxRQUFRLE1BQVIsQ0FBZSxJQUFmLEVBQXFCLE9BQXJCLENBQVA7QUFDRCxHQVJNLENBQVA7QUFTRCxDQVZEOztJQVlNLGE7QUFDSiwyQkFBMkI7QUFBQSxRQUFkLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDekIsU0FBSyxPQUFMLEdBQWUsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUFmO0FBQ0EsU0FBSyxJQUFMLEdBQVksUUFBUSxJQUFSLElBQWdCLElBQTVCO0FBQ0EsU0FBSyxPQUFMLEdBQWUsUUFBUSxPQUFSLElBQW1CLEVBQWxDO0FBQ0EsU0FBSyxLQUFMLEdBQWEsUUFBUSxLQUFSLElBQWlCLEtBQTlCO0FBQ0EsU0FBSyxRQUFMLEdBQWdCLFFBQVEsUUFBUixJQUFvQixPQUFPLFFBQTNDO0FBQ0EsU0FBSyxlQUFMLEdBQXVCLFFBQVEsZUFBL0I7QUFDQSxTQUFLLGdCQUFMLEdBQXdCLFFBQVEsZ0JBQWhDO0FBQ0Q7Ozs7aUNBRWEsSSxFQUFNLFEsRUFBdUI7QUFBQSxVQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDekMsVUFBTSxTQUFTLEtBQUssTUFBcEI7QUFDQSxVQUFNLFNBQVMsS0FBSyxNQUFMLENBQVksV0FBWixFQUFmO0FBQ0EsVUFBSSxjQUFjLEVBQWxCO0FBQ0EsVUFBSSxhQUFhLEVBQWpCO0FBQ0EsVUFBSSxhQUFhLEVBQWpCO0FBQ0EsVUFBSSxhQUFhLEVBQWpCO0FBQ0EsVUFBSSxVQUFVLEtBQWQ7O0FBRUEsV0FBSyxJQUFJLE1BQU0sQ0FBVixFQUFhLE1BQU0sT0FBTyxNQUEvQixFQUF1QyxNQUFNLEdBQTdDLEVBQWtELEtBQWxELEVBQXlEO0FBQ3ZELFlBQU0sUUFBUSxPQUFPLEdBQVAsQ0FBZDs7QUFFQTtBQUNBLFlBQUksQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsTUFBTSxJQUE1QixDQUFMLEVBQXdDO0FBQ3RDLGNBQUksTUFBTSxRQUFWLEVBQW9CO0FBQ2xCLGtCQUFNLElBQUksT0FBTyxjQUFYLCtCQUFzRCxNQUFNLElBQTVELE9BQU47QUFDRCxXQUZELE1BRU87QUFDTDtBQUNEO0FBQ0Y7O0FBRUQsbUJBQVcsSUFBWCxDQUFnQixNQUFNLElBQXRCO0FBQ0EsWUFBSSxNQUFNLFFBQU4sS0FBbUIsT0FBdkIsRUFBZ0M7QUFDOUIsc0JBQVksTUFBTSxJQUFsQixJQUEwQixPQUFPLE1BQU0sSUFBYixDQUExQjtBQUNELFNBRkQsTUFFTyxJQUFJLE1BQU0sUUFBTixLQUFtQixNQUF2QixFQUErQjtBQUNwQyxxQkFBVyxNQUFNLElBQWpCLElBQXlCLE9BQU8sTUFBTSxJQUFiLENBQXpCO0FBQ0QsU0FGTSxNQUVBLElBQUksTUFBTSxRQUFOLEtBQW1CLE1BQXZCLEVBQStCO0FBQ3BDLHFCQUFXLE1BQU0sSUFBakIsSUFBeUIsT0FBTyxNQUFNLElBQWIsQ0FBekI7QUFDQSxvQkFBVSxJQUFWO0FBQ0QsU0FITSxNQUdBLElBQUksTUFBTSxRQUFOLEtBQW1CLE1BQXZCLEVBQStCO0FBQ3BDLHVCQUFhLE9BQU8sTUFBTSxJQUFiLENBQWI7QUFDQSxvQkFBVSxJQUFWO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBLFdBQUssSUFBSSxRQUFULElBQXFCLE1BQXJCLEVBQTZCO0FBQzNCLFlBQUksT0FBTyxjQUFQLENBQXNCLFFBQXRCLEtBQW1DLENBQUMsV0FBVyxRQUFYLENBQW9CLFFBQXBCLENBQXhDLEVBQXVFO0FBQ3JFLGdCQUFNLElBQUksT0FBTyxjQUFYLDBCQUFpRCxRQUFqRCxPQUFOO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJLGlCQUFpQixFQUFDLFFBQVEsTUFBVCxFQUFpQixTQUFTLEVBQTFCLEVBQXJCOztBQUVBLGFBQU8sTUFBUCxDQUFjLGVBQWUsT0FBN0IsRUFBc0MsS0FBSyxPQUEzQzs7QUFFQSxVQUFJLE9BQUosRUFBYTtBQUNYLFlBQUksS0FBSyxRQUFMLEtBQWtCLGtCQUF0QixFQUEwQztBQUN4Qyx5QkFBZSxJQUFmLEdBQXNCLEtBQUssU0FBTCxDQUFlLFVBQWYsQ0FBdEI7QUFDQSx5QkFBZSxPQUFmLENBQXVCLGNBQXZCLElBQXlDLGtCQUF6QztBQUNELFNBSEQsTUFHTyxJQUFJLEtBQUssUUFBTCxLQUFrQixxQkFBdEIsRUFBNkM7QUFDbEQsY0FBSSxPQUFPLElBQUksS0FBSyxRQUFULEVBQVg7O0FBRUEsZUFBSyxJQUFJLFFBQVQsSUFBcUIsVUFBckIsRUFBaUM7QUFDL0IsaUJBQUssTUFBTCxDQUFZLFFBQVosRUFBc0IsV0FBVyxRQUFYLENBQXRCO0FBQ0Q7QUFDRCx5QkFBZSxJQUFmLEdBQXNCLElBQXRCO0FBQ0QsU0FQTSxNQU9BLElBQUksS0FBSyxRQUFMLEtBQWtCLG1DQUF0QixFQUEyRDtBQUNoRSxjQUFJLFdBQVcsRUFBZjtBQUNBLGVBQUssSUFBSSxTQUFULElBQXFCLFVBQXJCLEVBQWlDO0FBQy9CLGdCQUFNLGFBQWEsbUJBQW1CLFNBQW5CLENBQW5CO0FBQ0EsZ0JBQU0sZUFBZSxtQkFBbUIsV0FBVyxTQUFYLENBQW5CLENBQXJCO0FBQ0EscUJBQVMsSUFBVCxDQUFjLGFBQWEsR0FBYixHQUFtQixZQUFqQztBQUNEO0FBQ0QscUJBQVcsU0FBUyxJQUFULENBQWMsR0FBZCxDQUFYOztBQUVBLHlCQUFlLElBQWYsR0FBc0IsUUFBdEI7QUFDQSx5QkFBZSxPQUFmLENBQXVCLGNBQXZCLElBQXlDLG1DQUF6QztBQUNEO0FBQ0Y7O0FBRUQsVUFBSSxLQUFLLElBQVQsRUFBZTtBQUNiLHlCQUFpQixLQUFLLElBQUwsQ0FBVSxZQUFWLENBQXVCLGNBQXZCLENBQWpCO0FBQ0Q7O0FBRUQsVUFBSSxZQUFZLFlBQVksS0FBWixDQUFrQixLQUFLLEdBQXZCLENBQWhCO0FBQ0Esa0JBQVksVUFBVSxNQUFWLENBQWlCLFVBQWpCLENBQVo7QUFDQSxrQkFBWSxJQUFJLEdBQUosQ0FBUSxTQUFSLENBQVo7QUFDQSxnQkFBVSxHQUFWLENBQWMsT0FBZCxFQUF1QixXQUF2Qjs7QUFFQSxhQUFPO0FBQ0wsYUFBSyxVQUFVLFFBQVYsRUFEQTtBQUVMLGlCQUFTO0FBRkosT0FBUDtBQUlEOzs7MkJBRU8sSSxFQUFNLFEsRUFBdUI7QUFBQSxVQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDbkMsVUFBTSxtQkFBbUIsS0FBSyxnQkFBOUI7QUFDQSxVQUFNLFVBQVUsS0FBSyxZQUFMLENBQWtCLElBQWxCLEVBQXdCLFFBQXhCLEVBQWtDLE1BQWxDLENBQWhCOztBQUVBLFVBQUksS0FBSyxlQUFULEVBQTBCO0FBQ3hCLGFBQUssZUFBTCxDQUFxQixPQUFyQjtBQUNEOztBQUVELGFBQU8sS0FBSyxLQUFMLENBQVcsUUFBUSxHQUFuQixFQUF3QixRQUFRLE9BQWhDLEVBQ0osSUFESSxDQUNDLFVBQVUsUUFBVixFQUFvQjtBQUN4QixZQUFJLFNBQVMsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUMzQjtBQUNEO0FBQ0QsZUFBTyxjQUFjLFFBQWQsRUFBd0IsUUFBeEIsRUFBa0MsZ0JBQWxDLEVBQ0osSUFESSxDQUNDLFVBQVUsSUFBVixFQUFnQjtBQUNwQixjQUFJLFNBQVMsRUFBYixFQUFpQjtBQUNmLG1CQUFPLElBQVA7QUFDRCxXQUZELE1BRU87QUFDTCxnQkFBTSxRQUFRLFNBQVMsTUFBVCxHQUFrQixHQUFsQixHQUF3QixTQUFTLFVBQS9DO0FBQ0EsZ0JBQU0sUUFBUSxJQUFJLE9BQU8sWUFBWCxDQUF3QixLQUF4QixFQUErQixJQUEvQixDQUFkO0FBQ0EsbUJBQU8sUUFBUSxNQUFSLENBQWUsS0FBZixDQUFQO0FBQ0Q7QUFDRixTQVRJLENBQVA7QUFVRCxPQWZJLENBQVA7QUFnQkQ7Ozs7OztBQUdILE9BQU8sT0FBUCxHQUFpQjtBQUNmLGlCQUFlO0FBREEsQ0FBakI7Ozs7O0FDOUlBLElBQU0sT0FBTyxRQUFRLFFBQVIsQ0FBYjs7QUFFQSxPQUFPLE9BQVAsR0FBaUI7QUFDZixpQkFBZSxLQUFLO0FBREwsQ0FBakI7Ozs7O0FDRkEsSUFBTSxNQUFNLFFBQVEsV0FBUixDQUFaOztBQUVBLElBQU0scUJBQXFCLFNBQXJCLGtCQUFxQixDQUFVLFVBQVYsRUFBc0IsR0FBdEIsRUFBMkI7QUFDcEQsTUFBTSxZQUFZLElBQUksR0FBSixDQUFRLEdBQVIsQ0FBbEI7QUFDQSxNQUFNLFNBQVMsVUFBVSxRQUFWLENBQW1CLE9BQW5CLENBQTJCLEdBQTNCLEVBQWdDLEVBQWhDLENBQWY7O0FBRm9EO0FBQUE7QUFBQTs7QUFBQTtBQUlwRCx5QkFBc0IsVUFBdEIsOEhBQWtDO0FBQUEsVUFBekIsU0FBeUI7O0FBQ2hDLFVBQUksVUFBVSxPQUFWLENBQWtCLFFBQWxCLENBQTJCLE1BQTNCLENBQUosRUFBd0M7QUFDdEMsZUFBTyxTQUFQO0FBQ0Q7QUFDRjtBQVJtRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVVwRCxRQUFNLHNDQUFvQyxHQUFwQyxDQUFOO0FBQ0QsQ0FYRDs7QUFhQSxJQUFNLG1CQUFtQixTQUFuQixnQkFBbUIsQ0FBVSxRQUFWLEVBQW9CLFdBQXBCLEVBQWlDO0FBQ3hELE1BQUksZ0JBQWdCLFNBQWhCLElBQTZCLGdCQUFnQixJQUFqRCxFQUF1RDtBQUNyRCxXQUFPLFNBQVMsQ0FBVCxDQUFQO0FBQ0Q7O0FBRUQsTUFBTSxXQUFXLFlBQVksV0FBWixHQUEwQixLQUExQixDQUFnQyxHQUFoQyxFQUFxQyxDQUFyQyxFQUF3QyxJQUF4QyxFQUFqQjtBQUNBLE1BQU0sV0FBVyxTQUFTLEtBQVQsQ0FBZSxHQUFmLEVBQW9CLENBQXBCLElBQXlCLElBQTFDO0FBQ0EsTUFBTSxlQUFlLEtBQXJCO0FBQ0EsTUFBTSxrQkFBa0IsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixZQUFyQixDQUF4Qjs7QUFSd0Q7QUFBQTtBQUFBOztBQUFBO0FBVXhELDBCQUFvQixRQUFwQixtSUFBOEI7QUFBQSxVQUFyQixPQUFxQjs7QUFDNUIsVUFBSSxnQkFBZ0IsUUFBaEIsQ0FBeUIsUUFBUSxTQUFqQyxDQUFKLEVBQWlEO0FBQy9DLGVBQU8sT0FBUDtBQUNEO0FBQ0Y7QUFkdUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFnQnhELFFBQU0scURBQW1ELFdBQW5ELENBQU47QUFDRCxDQWpCRDs7QUFtQkEsSUFBTSxpQkFBaUIsU0FBakIsY0FBaUIsQ0FBVSxNQUFWLEVBQWtCO0FBQ3ZDO0FBQ0EsU0FBUSw4QkFBNkIsSUFBN0IsQ0FBa0MsTUFBbEM7QUFBUjtBQUNELENBSEQ7O0FBS0EsT0FBTyxPQUFQLEdBQWlCO0FBQ2Ysc0JBQW9CLGtCQURMO0FBRWYsb0JBQWtCLGdCQUZIO0FBR2Ysa0JBQWdCO0FBSEQsQ0FBakI7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiY2xhc3MgQmFzaWNBdXRoZW50aWNhdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB1c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWVcbiAgICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcbiAgICBjb25zdCBoYXNoID0gd2luZG93LmJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZClcbiAgICB0aGlzLmF1dGggPSAnQmFzaWMgJyArIGhhc2hcbiAgfVxuXG4gIGF1dGhlbnRpY2F0ZSAob3B0aW9ucykge1xuICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gdGhpcy5hdXRoXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQmFzaWNBdXRoZW50aWNhdGlvbjogQmFzaWNBdXRoZW50aWNhdGlvblxufVxuIiwiY29uc3QgYmFzaWMgPSByZXF1aXJlKCcuL2Jhc2ljJylcbmNvbnN0IHNlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24nKVxuY29uc3QgdG9rZW4gPSByZXF1aXJlKCcuL3Rva2VuJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJhc2ljQXV0aGVudGljYXRpb246IGJhc2ljLkJhc2ljQXV0aGVudGljYXRpb24sXG4gIFNlc3Npb25BdXRoZW50aWNhdGlvbjogc2Vzc2lvbi5TZXNzaW9uQXV0aGVudGljYXRpb24sXG4gIFRva2VuQXV0aGVudGljYXRpb246IHRva2VuLlRva2VuQXV0aGVudGljYXRpb25cbn1cbiIsImNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKVxuXG5mdW5jdGlvbiB0cmltIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKVxufVxuXG5mdW5jdGlvbiBnZXRDb29raWUgKGNvb2tpZU5hbWUsIGNvb2tpZVN0cmluZykge1xuICBjb29raWVTdHJpbmcgPSBjb29raWVTdHJpbmcgfHwgd2luZG93LmRvY3VtZW50LmNvb2tpZVxuICBpZiAoY29va2llU3RyaW5nICYmIGNvb2tpZVN0cmluZyAhPT0gJycpIHtcbiAgICBjb25zdCBjb29raWVzID0gY29va2llU3RyaW5nLnNwbGl0KCc7JylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IHRyaW0oY29va2llc1tpXSlcbiAgICAgIC8vIERvZXMgdGhpcyBjb29raWUgc3RyaW5nIGJlZ2luIHdpdGggdGhlIG5hbWUgd2Ugd2FudD9cbiAgICAgIGlmIChjb29raWUuc3Vic3RyaW5nKDAsIGNvb2tpZU5hbWUubGVuZ3RoICsgMSkgPT09IChjb29raWVOYW1lICsgJz0nKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZS5zdWJzdHJpbmcoY29va2llTmFtZS5sZW5ndGggKyAxKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY2xhc3MgU2Vzc2lvbkF1dGhlbnRpY2F0aW9uIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuY3NyZlRva2VuID0gZ2V0Q29va2llKG9wdGlvbnMuY3NyZkNvb2tpZU5hbWUsIG9wdGlvbnMuY29va2llU3RyaW5nKVxuICAgIHRoaXMuY3NyZkhlYWRlck5hbWUgPSBvcHRpb25zLmNzcmZIZWFkZXJOYW1lXG4gIH1cblxuICBhdXRoZW50aWNhdGUgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmNyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJ1xuICAgIGlmICh0aGlzLmNzcmZUb2tlbiAmJiAhdXRpbHMuY3NyZlNhZmVNZXRob2Qob3B0aW9ucy5tZXRob2QpKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbdGhpcy5jc3JmSGVhZGVyTmFtZV0gPSB0aGlzLmNzcmZUb2tlblxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTZXNzaW9uQXV0aGVudGljYXRpb246IFNlc3Npb25BdXRoZW50aWNhdGlvblxufVxuIiwiY2xhc3MgVG9rZW5BdXRoZW50aWNhdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLnRva2VuID0gb3B0aW9ucy50b2tlblxuICAgIHRoaXMuc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgJ0JlYXJlcidcbiAgfVxuXG4gIGF1dGhlbnRpY2F0ZSAob3B0aW9ucykge1xuICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gdGhpcy5zY2hlbWUgKyAnICcgKyB0aGlzLnRva2VuXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVG9rZW5BdXRoZW50aWNhdGlvbjogVG9rZW5BdXRoZW50aWNhdGlvblxufVxuIiwiY29uc3QgZG9jdW1lbnQgPSByZXF1aXJlKCcuL2RvY3VtZW50JylcbmNvbnN0IGNvZGVjcyA9IHJlcXVpcmUoJy4vY29kZWNzJylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IHRyYW5zcG9ydHMgPSByZXF1aXJlKCcuL3RyYW5zcG9ydHMnKVxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuZnVuY3Rpb24gbG9va3VwTGluayAobm9kZSwga2V5cykge1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgZG9jdW1lbnQuRG9jdW1lbnQpIHtcbiAgICAgIG5vZGUgPSBub2RlLmNvbnRlbnRba2V5XVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbm9kZVtrZXldXG4gICAgfVxuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTGlua0xvb2t1cEVycm9yKGBJbnZhbGlkIGxpbmsgbG9va3VwOiAke0pTT04uc3RyaW5naWZ5KGtleXMpfWApXG4gICAgfVxuICB9XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBkb2N1bWVudC5MaW5rKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTGlua0xvb2t1cEVycm9yKGBJbnZhbGlkIGxpbmsgbG9va3VwOiAke0pTT04uc3RyaW5naWZ5KGtleXMpfWApXG4gIH1cbiAgcmV0dXJuIG5vZGVcbn1cblxuY2xhc3MgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSB7XG4gICAgICBhdXRoOiBvcHRpb25zLmF1dGggfHwgbnVsbCxcbiAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fSxcbiAgICAgIHJlcXVlc3RDYWxsYmFjazogb3B0aW9ucy5yZXF1ZXN0Q2FsbGJhY2ssXG4gICAgICByZXNwb25zZUNhbGxiYWNrOiBvcHRpb25zLnJlc3BvbnNlQ2FsbGJhY2tcbiAgICB9XG5cbiAgICB0aGlzLmRlY29kZXJzID0gb3B0aW9ucy5kZWNvZGVycyB8fCBbbmV3IGNvZGVjcy5Db3JlSlNPTkNvZGVjKCksIG5ldyBjb2RlY3MuSlNPTkNvZGVjKCksIG5ldyBjb2RlY3MuVGV4dENvZGVjKCldXG4gICAgdGhpcy50cmFuc3BvcnRzID0gb3B0aW9ucy50cmFuc3BvcnRzIHx8IFtuZXcgdHJhbnNwb3J0cy5IVFRQVHJhbnNwb3J0KHRyYW5zcG9ydE9wdGlvbnMpXVxuICB9XG5cbiAgYWN0aW9uIChkb2N1bWVudCwga2V5cywgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCBsaW5rID0gbG9va3VwTGluayhkb2N1bWVudCwga2V5cylcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB1dGlscy5kZXRlcm1pbmVUcmFuc3BvcnQodGhpcy50cmFuc3BvcnRzLCBsaW5rLnVybClcbiAgICByZXR1cm4gdHJhbnNwb3J0LmFjdGlvbihsaW5rLCB0aGlzLmRlY29kZXJzLCBwYXJhbXMpXG4gIH1cblxuICBnZXQgKHVybCkge1xuICAgIGNvbnN0IGxpbmsgPSBuZXcgZG9jdW1lbnQuTGluayh1cmwsICdnZXQnKVxuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHV0aWxzLmRldGVybWluZVRyYW5zcG9ydCh0aGlzLnRyYW5zcG9ydHMsIHVybClcbiAgICByZXR1cm4gdHJhbnNwb3J0LmFjdGlvbihsaW5rLCB0aGlzLmRlY29kZXJzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDbGllbnQ6IENsaWVudFxufVxuIiwiY29uc3QgZG9jdW1lbnQgPSByZXF1aXJlKCcuLi9kb2N1bWVudCcpXG5jb25zdCBVUkwgPSByZXF1aXJlKCd1cmwtcGFyc2UnKVxuXG5mdW5jdGlvbiB1bmVzY2FwZUtleSAoa2V5KSB7XG4gIGlmIChrZXkubWF0Y2goL19fKHR5cGV8bWV0YSkkLykpIHtcbiAgICByZXR1cm4ga2V5LnN1YnN0cmluZygxKVxuICB9XG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nIChvYmosIGtleSkge1xuICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG4gIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gZ2V0Qm9vbGVhbiAob2JqLCBrZXkpIHtcbiAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZXRPYmplY3QgKG9iaiwga2V5KSB7XG4gIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cbiAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIHJldHVybiB7fVxufVxuXG5mdW5jdGlvbiBnZXRBcnJheSAob2JqLCBrZXkpIHtcbiAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50IChkYXRhLCBiYXNlVXJsKSB7XG4gIGNvbnN0IGV4Y2x1ZGVkID0gWydfdHlwZScsICdfbWV0YSddXG4gIHZhciBjb250ZW50ID0ge31cbiAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSAmJiAhZXhjbHVkZWQuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgICBjb25zdCBrZXkgPSB1bmVzY2FwZUtleShwcm9wZXJ0eSlcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlVG9Ob2RlKGRhdGFbcHJvcGVydHldLCBiYXNlVXJsKVxuICAgICAgY29udGVudFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRcbn1cblxuZnVuY3Rpb24gcHJpbWl0aXZlVG9Ob2RlIChkYXRhLCBiYXNlVXJsKSB7XG4gIGNvbnN0IGlzT2JqZWN0ID0gZGF0YSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKGRhdGEgaW5zdGFuY2VvZiBBcnJheSlcblxuICBpZiAoaXNPYmplY3QgJiYgZGF0YS5fdHlwZSA9PT0gJ2RvY3VtZW50Jykge1xuICAgIC8vIERvY3VtZW50XG4gICAgY29uc3QgbWV0YSA9IGdldE9iamVjdChkYXRhLCAnX21ldGEnKVxuICAgIGNvbnN0IHJlbGF0aXZlVXJsID0gZ2V0U3RyaW5nKG1ldGEsICd1cmwnKVxuICAgIGNvbnN0IHVybCA9IHJlbGF0aXZlVXJsID8gVVJMKHJlbGF0aXZlVXJsLCBiYXNlVXJsKS50b1N0cmluZygpIDogJydcbiAgICBjb25zdCB0aXRsZSA9IGdldFN0cmluZyhtZXRhLCAndGl0bGUnKVxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZ2V0U3RyaW5nKG1ldGEsICdkZXNjcmlwdGlvbicpXG4gICAgY29uc3QgY29udGVudCA9IGdldENvbnRlbnQoZGF0YSwgdXJsKVxuICAgIHJldHVybiBuZXcgZG9jdW1lbnQuRG9jdW1lbnQodXJsLCB0aXRsZSwgZGVzY3JpcHRpb24sIGNvbnRlbnQpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QgJiYgZGF0YS5fdHlwZSA9PT0gJ2xpbmsnKSB7XG4gICAgLy8gTGlua1xuICAgIGNvbnN0IHJlbGF0aXZlVXJsID0gZ2V0U3RyaW5nKGRhdGEsICd1cmwnKVxuICAgIGNvbnN0IHVybCA9IHJlbGF0aXZlVXJsID8gVVJMKHJlbGF0aXZlVXJsLCBiYXNlVXJsKS50b1N0cmluZygpIDogJydcbiAgICBjb25zdCBtZXRob2QgPSBnZXRTdHJpbmcoZGF0YSwgJ2FjdGlvbicpIHx8ICdnZXQnXG4gICAgY29uc3QgdGl0bGUgPSBnZXRTdHJpbmcoZGF0YSwgJ3RpdGxlJylcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGdldFN0cmluZyhkYXRhLCAnZGVzY3JpcHRpb24nKVxuICAgIGNvbnN0IGZpZWxkc0RhdGEgPSBnZXRBcnJheShkYXRhLCAnZmllbGRzJylcbiAgICB2YXIgZmllbGRzID0gW11cbiAgICBmb3IgKGxldCBpZHggPSAwLCBsZW4gPSBmaWVsZHNEYXRhLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgICAgbGV0IHZhbHVlID0gZmllbGRzRGF0YVtpZHhdXG4gICAgICBsZXQgbmFtZSA9IGdldFN0cmluZyh2YWx1ZSwgJ25hbWUnKVxuICAgICAgbGV0IHJlcXVpcmVkID0gZ2V0Qm9vbGVhbih2YWx1ZSwgJ3JlcXVpcmVkJylcbiAgICAgIGxldCBsb2NhdGlvbiA9IGdldFN0cmluZyh2YWx1ZSwgJ2xvY2F0aW9uJylcbiAgICAgIGxldCBmaWVsZERlc2NyaXB0aW9uID0gZ2V0U3RyaW5nKHZhbHVlLCAnZmllbGREZXNjcmlwdGlvbicpXG4gICAgICBsZXQgZmllbGQgPSBuZXcgZG9jdW1lbnQuRmllbGQobmFtZSwgcmVxdWlyZWQsIGxvY2F0aW9uLCBmaWVsZERlc2NyaXB0aW9uKVxuICAgICAgZmllbGRzLnB1c2goZmllbGQpXG4gICAgfVxuICAgIHJldHVybiBuZXcgZG9jdW1lbnQuTGluayh1cmwsIG1ldGhvZCwgJ2FwcGxpY2F0aW9uL2pzb24nLCBmaWVsZHMsIHRpdGxlLCBkZXNjcmlwdGlvbilcbiAgfSBlbHNlIGlmIChpc09iamVjdCkge1xuICAgIC8vIE9iamVjdFxuICAgIGxldCBjb250ZW50ID0ge31cbiAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb250ZW50W2tleV0gPSBwcmltaXRpdmVUb05vZGUoZGF0YVtrZXldLCBiYXNlVXJsKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udGVudFxuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIC8vIE9iamVjdFxuICAgIGxldCBjb250ZW50ID0gW11cbiAgICBmb3IgKGxldCBpZHggPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgICAgY29udGVudC5wdXNoKHByaW1pdGl2ZVRvTm9kZShkYXRhW2lkeF0sIGJhc2VVcmwpKVxuICAgIH1cbiAgICByZXR1cm4gY29udGVudFxuICB9XG4gIC8vIFByaW1pdGl2ZVxuICByZXR1cm4gZGF0YVxufVxuXG5jbGFzcyBDb3JlSlNPTkNvZGVjIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMubWVkaWFUeXBlID0gJ2FwcGxpY2F0aW9uL2NvcmVhcGkranNvbidcbiAgfVxuXG4gIGRlY29kZSAodGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSB0ZXh0XG4gICAgaWYgKG9wdGlvbnMucHJlbG9hZGVkID09PSB1bmRlZmluZWQgfHwgIW9wdGlvbnMucHJlbG9hZGVkKSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gcHJpbWl0aXZlVG9Ob2RlKGRhdGEsIG9wdGlvbnMudXJsKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDb3JlSlNPTkNvZGVjOiBDb3JlSlNPTkNvZGVjXG59XG4iLCJjb25zdCBjb3JlanNvbiA9IHJlcXVpcmUoJy4vY29yZWpzb24nKVxuY29uc3QganNvbiA9IHJlcXVpcmUoJy4vanNvbicpXG5jb25zdCB0ZXh0ID0gcmVxdWlyZSgnLi90ZXh0JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENvcmVKU09OQ29kZWM6IGNvcmVqc29uLkNvcmVKU09OQ29kZWMsXG4gIEpTT05Db2RlYzoganNvbi5KU09OQ29kZWMsXG4gIFRleHRDb2RlYzogdGV4dC5UZXh0Q29kZWNcbn1cbiIsImNsYXNzIEpTT05Db2RlYyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1lZGlhVHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJ1xuICB9XG5cbiAgZGVjb2RlICh0ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBKU09OQ29kZWM6IEpTT05Db2RlY1xufVxuIiwiY2xhc3MgVGV4dENvZGVjIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMubWVkaWFUeXBlID0gJ3RleHQvKidcbiAgfVxuXG4gIGRlY29kZSAodGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRleHRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVGV4dENvZGVjOiBUZXh0Q29kZWNcbn1cbiIsImNsYXNzIERvY3VtZW50IHtcbiAgY29uc3RydWN0b3IgKHVybCA9ICcnLCB0aXRsZSA9ICcnLCBkZXNjcmlwdGlvbiA9ICcnLCBjb250ZW50ID0ge30pIHtcbiAgICB0aGlzLnVybCA9IHVybFxuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnRcbiAgfVxufVxuXG5jbGFzcyBMaW5rIHtcbiAgY29uc3RydWN0b3IgKHVybCwgbWV0aG9kLCBlbmNvZGluZyA9ICdhcHBsaWNhdGlvbi9qc29uJywgZmllbGRzID0gW10sIHRpdGxlID0gJycsIGRlc2NyaXB0aW9uID0gJycpIHtcbiAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXJsIGFyZ3VtZW50IGlzIHJlcXVpcmVkJylcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGFyZ3VtZW50IGlzIHJlcXVpcmVkJylcbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybFxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nXG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHNcbiAgICB0aGlzLnRpdGxlID0gdGl0bGVcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25cbiAgfVxufVxuXG5jbGFzcyBGaWVsZCB7XG4gIGNvbnN0cnVjdG9yIChuYW1lLCByZXF1aXJlZCA9IGZhbHNlLCBsb2NhdGlvbiA9ICcnLCBkZXNjcmlwdGlvbiA9ICcnKSB7XG4gICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduYW1lIGFyZ3VtZW50IGlzIHJlcXVpcmVkJylcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkXG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERvY3VtZW50OiBEb2N1bWVudCxcbiAgTGluazogTGluayxcbiAgRmllbGQ6IEZpZWxkXG59XG4iLCJjbGFzcyBQYXJhbWV0ZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSAnUGFyYW1ldGVyRXJyb3InXG4gIH1cbn1cblxuY2xhc3MgTGlua0xvb2t1cEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9ICdMaW5rTG9va3VwRXJyb3InXG4gIH1cbn1cblxuY2xhc3MgRXJyb3JNZXNzYWdlIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29udGVudCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnRcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JNZXNzYWdlJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQYXJhbWV0ZXJFcnJvcjogUGFyYW1ldGVyRXJyb3IsXG4gIExpbmtMb29rdXBFcnJvcjogTGlua0xvb2t1cEVycm9yLFxuICBFcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZVxufVxuIiwiY29uc3QgYXV0aCA9IHJlcXVpcmUoJy4vYXV0aCcpXG5jb25zdCBjbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCBjb2RlY3MgPSByZXF1aXJlKCcuL2NvZGVjcycpXG5jb25zdCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vZG9jdW1lbnQnKVxuY29uc3QgZXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgdHJhbnNwb3J0cyA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0cycpXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5jb25zdCBjb3JlYXBpID0ge1xuICBDbGllbnQ6IGNsaWVudC5DbGllbnQsXG4gIERvY3VtZW50OiBkb2N1bWVudC5Eb2N1bWVudCxcbiAgTGluazogZG9jdW1lbnQuTGluayxcbiAgYXV0aDogYXV0aCxcbiAgY29kZWNzOiBjb2RlY3MsXG4gIGVycm9yczogZXJyb3JzLFxuICB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzLFxuICB1dGlsczogdXRpbHNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlYXBpXG4iLCJjb25zdCBmZXRjaCA9IHJlcXVpcmUoJ2lzb21vcnBoaWMtZmV0Y2gnKVxuY29uc3QgZXJyb3JzID0gcmVxdWlyZSgnLi4vZXJyb3JzJylcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKVxuY29uc3QgVVJMID0gcmVxdWlyZSgndXJsLXBhcnNlJylcbmNvbnN0IHVybFRlbXBsYXRlID0gcmVxdWlyZSgndXJsLXRlbXBsYXRlJylcblxuY29uc3QgcGFyc2VSZXNwb25zZSA9IChyZXNwb25zZSwgZGVjb2RlcnMsIHJlc3BvbnNlQ2FsbGJhY2spID0+IHtcbiAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKHRleHQgPT4ge1xuICAgIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgICByZXNwb25zZUNhbGxiYWNrKHJlc3BvbnNlLCB0ZXh0KVxuICAgIH1cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKVxuICAgIGNvbnN0IGRlY29kZXIgPSB1dGlscy5uZWdvdGlhdGVEZWNvZGVyKGRlY29kZXJzLCBjb250ZW50VHlwZSlcbiAgICBjb25zdCBvcHRpb25zID0ge3VybDogcmVzcG9uc2UudXJsfVxuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZSh0ZXh0LCBvcHRpb25zKVxuICB9KVxufVxuXG5jbGFzcyBIVFRQVHJhbnNwb3J0IHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuc2NoZW1lcyA9IFsnaHR0cCcsICdodHRwcyddXG4gICAgdGhpcy5hdXRoID0gb3B0aW9ucy5hdXRoIHx8IG51bGxcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB0aGlzLmZldGNoID0gb3B0aW9ucy5mZXRjaCB8fCBmZXRjaFxuICAgIHRoaXMuRm9ybURhdGEgPSBvcHRpb25zLkZvcm1EYXRhIHx8IHdpbmRvdy5Gb3JtRGF0YVxuICAgIHRoaXMucmVxdWVzdENhbGxiYWNrID0gb3B0aW9ucy5yZXF1ZXN0Q2FsbGJhY2tcbiAgICB0aGlzLnJlc3BvbnNlQ2FsbGJhY2sgPSBvcHRpb25zLnJlc3BvbnNlQ2FsbGJhY2tcbiAgfVxuXG4gIGJ1aWxkUmVxdWVzdCAobGluaywgZGVjb2RlcnMsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgZmllbGRzID0gbGluay5maWVsZHNcbiAgICBjb25zdCBtZXRob2QgPSBsaW5rLm1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0ge31cbiAgICBsZXQgcGF0aFBhcmFtcyA9IHt9XG4gICAgbGV0IGZvcm1QYXJhbXMgPSB7fVxuICAgIGxldCBmaWVsZE5hbWVzID0gW11cbiAgICBsZXQgaGFzQm9keSA9IGZhbHNlXG5cbiAgICBmb3IgKGxldCBpZHggPSAwLCBsZW4gPSBmaWVsZHMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpZHhdXG5cbiAgICAgIC8vIEVuc3VyZSBhbnkgcmVxdWlyZWQgZmllbGRzIGFyZSBpbmNsdWRlZFxuICAgICAgaWYgKCFwYXJhbXMuaGFzT3duUHJvcGVydHkoZmllbGQubmFtZSkpIHtcbiAgICAgICAgaWYgKGZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5QYXJhbWV0ZXJFcnJvcihgTWlzc2luZyByZXF1aXJlZCBmaWVsZDogXCIke2ZpZWxkLm5hbWV9XCJgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkLm5hbWUpXG4gICAgICBpZiAoZmllbGQubG9jYXRpb24gPT09ICdxdWVyeScpIHtcbiAgICAgICAgcXVlcnlQYXJhbXNbZmllbGQubmFtZV0gPSBwYXJhbXNbZmllbGQubmFtZV1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQubG9jYXRpb24gPT09ICdwYXRoJykge1xuICAgICAgICBwYXRoUGFyYW1zW2ZpZWxkLm5hbWVdID0gcGFyYW1zW2ZpZWxkLm5hbWVdXG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLmxvY2F0aW9uID09PSAnZm9ybScpIHtcbiAgICAgICAgZm9ybVBhcmFtc1tmaWVsZC5uYW1lXSA9IHBhcmFtc1tmaWVsZC5uYW1lXVxuICAgICAgICBoYXNCb2R5ID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChmaWVsZC5sb2NhdGlvbiA9PT0gJ2JvZHknKSB7XG4gICAgICAgIGZvcm1QYXJhbXMgPSBwYXJhbXNbZmllbGQubmFtZV1cbiAgICAgICAgaGFzQm9keSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgYW55IHBhcmFtZXRlcnMgdGhhdCBkaWQgbm90IGhhdmUgYSBtYXRjaGluZyBmaWVsZFxuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHBhcmFtcykge1xuICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgIWZpZWxkTmFtZXMuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuUGFyYW1ldGVyRXJyb3IoYFVua25vd24gcGFyYW1ldGVyOiBcIiR7cHJvcGVydHl9XCJgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHttZXRob2Q6IG1ldGhvZCwgaGVhZGVyczoge319XG5cbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMsIHRoaXMuaGVhZGVycylcblxuICAgIGlmIChoYXNCb2R5KSB7XG4gICAgICBpZiAobGluay5lbmNvZGluZyA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShmb3JtUGFyYW1zKVxuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfSBlbHNlIGlmIChsaW5rLmVuY29kaW5nID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpIHtcbiAgICAgICAgbGV0IGZvcm0gPSBuZXcgdGhpcy5Gb3JtRGF0YSgpXG5cbiAgICAgICAgZm9yIChsZXQgcGFyYW1LZXkgaW4gZm9ybVBhcmFtcykge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKHBhcmFtS2V5LCBmb3JtUGFyYW1zW3BhcmFtS2V5XSlcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChsaW5rLmVuY29kaW5nID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICBsZXQgZm9ybUJvZHkgPSBbXVxuICAgICAgICBmb3IgKGxldCBwYXJhbUtleSBpbiBmb3JtUGFyYW1zKSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZEtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbUtleSlcbiAgICAgICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZm9ybVBhcmFtc1twYXJhbUtleV0pXG4gICAgICAgICAgZm9ybUJvZHkucHVzaChlbmNvZGVkS2V5ICsgJz0nICsgZW5jb2RlZFZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIGZvcm1Cb2R5ID0gZm9ybUJvZHkuam9pbignJicpXG5cbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IGZvcm1Cb2R5XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdXRoKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucyA9IHRoaXMuYXV0aC5hdXRoZW50aWNhdGUocmVxdWVzdE9wdGlvbnMpXG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZFVybCA9IHVybFRlbXBsYXRlLnBhcnNlKGxpbmsudXJsKVxuICAgIHBhcnNlZFVybCA9IHBhcnNlZFVybC5leHBhbmQocGF0aFBhcmFtcylcbiAgICBwYXJzZWRVcmwgPSBuZXcgVVJMKHBhcnNlZFVybClcbiAgICBwYXJzZWRVcmwuc2V0KCdxdWVyeScsIHF1ZXJ5UGFyYW1zKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogcGFyc2VkVXJsLnRvU3RyaW5nKCksXG4gICAgICBvcHRpb25zOiByZXF1ZXN0T3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIGFjdGlvbiAobGluaywgZGVjb2RlcnMsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgcmVzcG9uc2VDYWxsYmFjayA9IHRoaXMucmVzcG9uc2VDYWxsYmFja1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmJ1aWxkUmVxdWVzdChsaW5rLCBkZWNvZGVycywgcGFyYW1zKVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdENhbGxiYWNrKSB7XG4gICAgICB0aGlzLnJlcXVlc3RDYWxsYmFjayhyZXF1ZXN0KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZldGNoKHJlcXVlc3QudXJsLCByZXF1ZXN0Lm9wdGlvbnMpXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlUmVzcG9uc2UocmVzcG9uc2UsIGRlY29kZXJzLCByZXNwb25zZUNhbGxiYWNrKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gcmVzcG9uc2Uuc3RhdHVzICsgJyAnICsgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBlcnJvcnMuRXJyb3JNZXNzYWdlKHRpdGxlLCBkYXRhKVxuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhUVFBUcmFuc3BvcnQ6IEhUVFBUcmFuc3BvcnRcbn1cbiIsImNvbnN0IGh0dHAgPSByZXF1aXJlKCcuL2h0dHAnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSFRUUFRyYW5zcG9ydDogaHR0cC5IVFRQVHJhbnNwb3J0XG59XG4iLCJjb25zdCBVUkwgPSByZXF1aXJlKCd1cmwtcGFyc2UnKVxuXG5jb25zdCBkZXRlcm1pbmVUcmFuc3BvcnQgPSBmdW5jdGlvbiAodHJhbnNwb3J0cywgdXJsKSB7XG4gIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKVxuICBjb25zdCBzY2hlbWUgPSBwYXJzZWRVcmwucHJvdG9jb2wucmVwbGFjZSgnOicsICcnKVxuXG4gIGZvciAobGV0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgaWYgKHRyYW5zcG9ydC5zY2hlbWVzLmluY2x1ZGVzKHNjaGVtZSkpIHtcbiAgICAgIHJldHVybiB0cmFuc3BvcnRcbiAgICB9XG4gIH1cblxuICB0aHJvdyBFcnJvcihgVW5zdXBwb3J0ZWQgc2NoZW1lIGluIFVSTDogJHt1cmx9YClcbn1cblxuY29uc3QgbmVnb3RpYXRlRGVjb2RlciA9IGZ1bmN0aW9uIChkZWNvZGVycywgY29udGVudFR5cGUpIHtcbiAgaWYgKGNvbnRlbnRUeXBlID09PSB1bmRlZmluZWQgfHwgY29udGVudFR5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZGVjb2RlcnNbMF1cbiAgfVxuXG4gIGNvbnN0IGZ1bGxUeXBlID0gY29udGVudFR5cGUudG9Mb3dlckNhc2UoKS5zcGxpdCgnOycpWzBdLnRyaW0oKVxuICBjb25zdCBtYWluVHlwZSA9IGZ1bGxUeXBlLnNwbGl0KCcvJylbMF0gKyAnLyonXG4gIGNvbnN0IHdpbGRjYXJkVHlwZSA9ICcqLyonXG4gIGNvbnN0IGFjY2VwdGFibGVUeXBlcyA9IFtmdWxsVHlwZSwgbWFpblR5cGUsIHdpbGRjYXJkVHlwZV1cblxuICBmb3IgKGxldCBkZWNvZGVyIG9mIGRlY29kZXJzKSB7XG4gICAgaWYgKGFjY2VwdGFibGVUeXBlcy5pbmNsdWRlcyhkZWNvZGVyLm1lZGlhVHlwZSkpIHtcbiAgICAgIHJldHVybiBkZWNvZGVyXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIG1lZGlhIGluIENvbnRlbnQtVHlwZSBoZWFkZXI6ICR7Y29udGVudFR5cGV9YClcbn1cblxuY29uc3QgY3NyZlNhZmVNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgcmV0dXJuICgvXihHRVR8SEVBRHxPUFRJT05TfFRSQUNFKSQvLnRlc3QobWV0aG9kKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRldGVybWluZVRyYW5zcG9ydDogZGV0ZXJtaW5lVHJhbnNwb3J0LFxuICBuZWdvdGlhdGVEZWNvZGVyOiBuZWdvdGlhdGVEZWNvZGVyLFxuICBjc3JmU2FmZU1ldGhvZDogY3NyZlNhZmVNZXRob2Rcbn1cbiIsIi8vIHRoZSB3aGF0d2ctZmV0Y2ggcG9seWZpbGwgaW5zdGFsbHMgdGhlIGZldGNoKCkgZnVuY3Rpb25cbi8vIG9uIHRoZSBnbG9iYWwgb2JqZWN0ICh3aW5kb3cgb3Igc2VsZilcbi8vXG4vLyBSZXR1cm4gdGhhdCBhcyB0aGUgZXhwb3J0IGZvciB1c2UgaW4gV2VicGFjaywgQnJvd3NlcmlmeSBldGMuXG5yZXF1aXJlKCd3aGF0d2ctZmV0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gc2VsZi5mZXRjaC5iaW5kKHNlbGYpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/Jl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICAvL1xuICAvLyBMaXR0bGUgbmlmdHkgcGFyc2luZyBoYWNrLCBsZXZlcmFnZSB0aGUgZmFjdCB0aGF0IFJlZ0V4cC5leGVjIGluY3JlbWVudHNcbiAgLy8gdGhlIGxhc3RJbmRleCBwcm9wZXJ0eSBzbyB3ZSBjYW4gY29udGludWUgZXhlY3V0aW5nIHRoaXMgbG9vcCB1bnRpbCB3ZSd2ZVxuICAvLyBwYXJzZWQgYWxsIHJlc3VsdHMuXG4gIC8vXG4gIGZvciAoO1xuICAgIHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSk7XG4gICAgcmVzdWx0W2RlY29kZVVSSUNvbXBvbmVudChwYXJ0WzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFydFsyXSlcbiAgKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHF1ZXJ5IHN0cmluZyB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IE9wdGlvbmFsIHByZWZpeC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZ2lmeShvYmosIHByZWZpeCkge1xuICBwcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgdmFyIHBhaXJzID0gW107XG5cbiAgLy9cbiAgLy8gT3B0aW9uYWxseSBwcmVmaXggd2l0aCBhICc/JyBpZiBuZWVkZWRcbiAgLy9cbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgcHJlZml4KSBwcmVmaXggPSAnPyc7XG5cbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHBhaXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyc9JysgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtrZXldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmxlbmd0aCA/IHByZWZpeCArIHBhaXJzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBxdWVyeXN0cmluZ2lmeTtcbmV4cG9ydHMucGFyc2UgPSBxdWVyeXN0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBsb2xjYXRpb24gPSByZXF1aXJlKCcuL2xvbGNhdGlvbicpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZ2lmeScpXG4gICwgcHJvdG9jb2xyZSA9IC9eKFthLXpdW2EtejAtOS4rLV0qOik/KFxcL1xcLyk/KFtcXFNcXHNdKikvaTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWycvJywgJ3BhdGhuYW1lJ10sICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnQCcsICdhdXRoJywgMV0sICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBmcm9udC5cbiAgW05hTiwgJ2hvc3QnLCB1bmRlZmluZWQsIDEsIDFdLCAgICAgICAvLyBTZXQgbGVmdCBvdmVyIHZhbHVlLlxuICBbLzooXFxkKykkLywgJ3BvcnQnLCB1bmRlZmluZWQsIDFdLCAgICAvLyBSZWdFeHAgdGhlIGJhY2suXG4gIFtOYU4sICdob3N0bmFtZScsIHVuZGVmaW5lZCwgMSwgMV0gICAgLy8gU2V0IGxlZnQgb3Zlci5cbl07XG5cbi8qKlxuICogQHR5cGVkZWYgUHJvdG9jb2xFeHRyYWN0XG4gKiBAdHlwZSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCBtYXRjaGVkIGluIHRoZSBVUkwsIGluIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2xhc2hlcyBgdHJ1ZWAgaWYgcHJvdG9jb2wgaXMgZm9sbG93ZWQgYnkgXCIvL1wiLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdCBSZXN0IG9mIHRoZSBVUkwgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgcHJvdG9jb2wuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGZyb20gYSBVUkwgd2l0aC93aXRob3V0IGRvdWJsZSBzbGFzaCAoXCIvL1wiKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBleHRyYWN0IGZyb20uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcykge1xuICB2YXIgbWF0Y2ggPSBwcm90b2NvbHJlLmV4ZWMoYWRkcmVzcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgc2xhc2hlczogISFtYXRjaFsyXSxcbiAgICByZXN0OiBtYXRjaFszXVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jYXRpb24gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBwYXJzZXIgUGFyc2VyIGZvciB0aGUgcXVlcnkgc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gVVJMKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICByZXR1cm4gbmV3IFVSTChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycpO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKCFleHRyYWN0ZWQuc2xhc2hlcykgaW5zdHJ1Y3Rpb25zWzJdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaWYgKH4oaW5kZXggPSBhZGRyZXNzLmluZGV4T2YocGFyc2UpKSkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGV4ID0gcGFyc2UuZXhlYyhhZGRyZXNzKSkge1xuICAgICAgdXJsW2tleV0gPSBpbmRleFsxXTtcbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4LmluZGV4KTtcbiAgICB9XG5cbiAgICB1cmxba2V5XSA9IHVybFtrZXldIHx8IChcbiAgICAgIHJlbGF0aXZlICYmIGluc3RydWN0aW9uWzNdID8gbG9jYXRpb25ba2V5XSB8fCAnJyA6ICcnXG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gSG9zdG5hbWUsIGhvc3QgYW5kIHByb3RvY29sIHNob3VsZCBiZSBsb3dlcmNhc2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG9cbiAgICAvLyBjcmVhdGUgYSBwcm9wZXIgYG9yaWdpbmAuXG4gICAgLy9cbiAgICBpZiAoaW5zdHJ1Y3Rpb25bNF0pIHVybFtrZXldID0gdXJsW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIEFsc28gcGFyc2UgdGhlIHN1cHBsaWVkIHF1ZXJ5IHN0cmluZyBpbiB0byBhbiBvYmplY3QuIElmIHdlJ3JlIHN1cHBsaWVkXG4gIC8vIHdpdGggYSBjdXN0b20gcGFyc2VyIGFzIGZ1bmN0aW9uIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnVpbGQtaW5cbiAgLy8gcGFyc2VyLlxuICAvL1xuICBpZiAocGFyc2VyKSB1cmwucXVlcnkgPSBwYXJzZXIodXJsLnF1ZXJ5KTtcblxuICAvL1xuICAvLyBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCByZXNvbHZlIHRoZSBwYXRobmFtZSBhZ2FpbnN0IHRoZSBiYXNlIFVSTC5cbiAgLy9cbiAgaWYgKFxuICAgICAgcmVsYXRpdmVcbiAgICAmJiBsb2NhdGlvbi5zbGFzaGVzXG4gICAgJiYgdXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgJiYgKHVybC5wYXRobmFtZSAhPT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgIT09ICcnKVxuICApIHtcbiAgICB1cmwucGF0aG5hbWUgPSByZXNvbHZlKHVybC5wYXRobmFtZSwgbG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIGluc3RydWN0aW9uID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB1cmwudXNlcm5hbWUgPSBpbnN0cnVjdGlvblswXSB8fCAnJztcbiAgICB1cmwucGFzc3dvcmQgPSBpbnN0cnVjdGlvblsxXSB8fCAnJztcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5VUkwucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICgvOlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgICAgdXJsLnBhdGhuYW1lID0gdmFsdWUubGVuZ3RoICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gJy8nID8gJy8nICsgdmFsdWUgOiB2YWx1ZTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlucyA9IHJ1bGVzW2ldO1xuXG4gICAgaWYgKGluc1s0XSkgdXJsW2luc1sxXV0gPSB1cmxbaW5zWzFdXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAmJiB1cmwuaG9zdCAmJiB1cmwucHJvdG9jb2wgIT09ICdmaWxlOidcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xuXG4gIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2w7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLmNoYXJBdChwcm90b2NvbC5sZW5ndGggLSAxKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgdmFyIHJlc3VsdCA9IHByb3RvY29sICsgKHVybC5zbGFzaGVzID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIHJlc3VsdCArPSB1cmwuaG9zdCArIHVybC5wYXRobmFtZTtcblxuICBxdWVyeSA9ICdvYmplY3QnID09PSB0eXBlb2YgdXJsLnF1ZXJ5ID8gc3RyaW5naWZ5KHVybC5xdWVyeSkgOiB1cmwucXVlcnk7XG4gIGlmIChxdWVyeSkgcmVzdWx0ICs9ICc/JyAhPT0gcXVlcnkuY2hhckF0KDApID8gJz8nKyBxdWVyeSA6IHF1ZXJ5O1xuXG4gIGlmICh1cmwuaGFzaCkgcmVzdWx0ICs9IHVybC5oYXNoO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVSTC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VUkwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VUkwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVUkw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vO1xuXG4vKipcbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQgb3IgaW5oZXJpdGVkIGZyb20uIFRoaXMgaXMgb25seSBuZWVkZWRcbiAqIGZvciBhbGwgbm9uIGJsb2IgVVJMJ3MgYXMgYSBibG9iIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgaGFzaCwgb25seSB0aGVcbiAqIG9yaWdpbi5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xudmFyIGlnbm9yZSA9IHsgaGFzaDogMSwgcXVlcnk6IDEgfVxuICAsIFVSTDtcblxuLyoqXG4gKiBUaGUgbG9jYXRpb24gb2JqZWN0IGRpZmZlcnMgd2hlbiB5b3VyIGNvZGUgaXMgbG9hZGVkIHRocm91Z2ggYSBub3JtYWwgcGFnZSxcbiAqIFdvcmtlciBvciB0aHJvdWdoIGEgd29ya2VyIHVzaW5nIGEgYmxvYi4gQW5kIHdpdGggdGhlIGJsb2JibGUgYmVnaW5zIHRoZVxuICogdHJvdWJsZSBhcyB0aGUgbG9jYXRpb24gb2JqZWN0IHdpbGwgY29udGFpbiB0aGUgVVJMIG9mIHRoZSBibG9iLCBub3QgdGhlXG4gKiBsb2NhdGlvbiBvZiB0aGUgcGFnZSB3aGVyZSBvdXIgY29kZSBpcyBsb2FkZWQgaW4uIFRoZSBhY3R1YWwgb3JpZ2luIGlzXG4gKiBlbmNvZGVkIGluIHRoZSBgcGF0aG5hbWVgIHNvIHdlIGNhbiB0aGFua2Z1bGx5IGdlbmVyYXRlIGEgZ29vZCBcImRlZmF1bHRcIlxuICogbG9jYXRpb24gZnJvbSBpdCBzbyB3ZSBjYW4gZ2VuZXJhdGUgcHJvcGVyIHJlbGF0aXZlIFVSTCdzIGFnYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jIE9wdGlvbmFsIGRlZmF1bHQgbG9jYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gbG9sY2F0aW9uIG9iamVjdC5cbiAqIEBhcGkgcHVibGljXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbG9sY2F0aW9uKGxvYykge1xuICBsb2MgPSBsb2MgfHwgZ2xvYmFsLmxvY2F0aW9uIHx8IHt9O1xuICBVUkwgPSBVUkwgfHwgcmVxdWlyZSgnLi8nKTtcblxuICB2YXIgZmluYWxkZXN0aW5hdGlvbiA9IHt9XG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY1xuICAgICwga2V5O1xuXG4gIGlmICgnYmxvYjonID09PSBsb2MucHJvdG9jb2wpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVSTCh1bmVzY2FwZShsb2MucGF0aG5hbWUpLCB7fSk7XG4gIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGUpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVSTChsb2MsIHt9KTtcbiAgICBmb3IgKGtleSBpbiBpZ25vcmUpIGRlbGV0ZSBmaW5hbGRlc3RpbmF0aW9uW2tleV07XG4gIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGUpIHtcbiAgICBmb3IgKGtleSBpbiBsb2MpIHtcbiAgICAgIGlmIChrZXkgaW4gaWdub3JlKSBjb250aW51ZTtcbiAgICAgIGZpbmFsZGVzdGluYXRpb25ba2V5XSA9IGxvY1trZXldO1xuICAgIH1cblxuICAgIGlmIChmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID0gc2xhc2hlcy50ZXN0KGxvYy5ocmVmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmluYWxkZXN0aW5hdGlvbjtcbn07XG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC51cmx0ZW1wbGF0ZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZnVuY3Rpb24gVXJsVGVtcGxhdGUoKSB7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBVcmxUZW1wbGF0ZS5wcm90b3R5cGUuZW5jb2RlUmVzZXJ2ZWQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgJ1snKS5yZXBsYWNlKC8lNUQvZywgJ10nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJ0O1xuICAgIH0pLmpvaW4oJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIFVybFRlbXBsYXRlLnByb3RvdHlwZS5lbmNvZGVVbnJlc2VydmVkID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBVcmxUZW1wbGF0ZS5wcm90b3R5cGUuZW5jb2RlVmFsdWUgPSBmdW5jdGlvbiAob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgICB2YWx1ZSA9IChvcGVyYXRvciA9PT0gJysnIHx8IG9wZXJhdG9yID09PSAnIycpID8gdGhpcy5lbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiB0aGlzLmVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgJz0nICsgdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIFVybFRlbXBsYXRlLnByb3RvdHlwZS5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBVcmxUZW1wbGF0ZS5wcm90b3R5cGUuaXNLZXlPcGVyYXRvciA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvciA9PT0gJzsnIHx8IG9wZXJhdG9yID09PSAnJicgfHwgb3BlcmF0b3IgPT09ICc/JztcbiAgfTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGlmaWVyXG4gICAqL1xuICBVcmxUZW1wbGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gICAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIGlmICh0aGlzLmlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09ICcqJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIHRoaXMuaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBudWxsKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobW9kaWZpZXIgPT09ICcqJykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZmlsdGVyKHRoaXMuaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgdGhpcy5pc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IG51bGwpKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0bXAgPSBbXTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZmlsdGVyKHRoaXMuaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICB0bXAucHVzaCh0aGlzLmVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgICB0bXAucHVzaCh0aGlzLmVuY29kZVVucmVzZXJ2ZWQoaykpO1xuICAgICAgICAgICAgICAgIHRtcC5wdXNoKHRoaXMuZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgJz0nICsgdG1wLmpvaW4oJywnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0bXAuam9pbignLCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wZXJhdG9yID09PSAnOycpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9wZXJhdG9yID09PSAnJicgfHwgb3BlcmF0b3IgPT09ICc/JykpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lbmNvZGVVbnJlc2VydmVkKGtleSkgKyAnPScpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAgICogQHJldHVybiB7ZnVuY3Rpb24oT2JqZWN0KTpzdHJpbmd9XG4gICAqL1xuICBVcmxUZW1wbGF0ZS5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgdmFyIG9wZXJhdG9ycyA9IFsnKycsICcjJywgJy4nLCAnLycsICc7JywgJz8nLCAnJiddO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4cGFuZDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZywgZnVuY3Rpb24gKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgICAgIHZhbHVlcy5wdXNoLmFwcGx5KHZhbHVlcywgdGhhdC5nZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gJysnKSB7XG4gICAgICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSAnLCc7XG5cbiAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSAnJic7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09ICcjJykge1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogJycpICsgdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuam9pbignLCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhhdC5lbmNvZGVSZXNlcnZlZChsaXRlcmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBVcmxUZW1wbGF0ZSgpO1xufSkpO1xuIiwiKGZ1bmN0aW9uKHNlbGYpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmIChzZWxmLmZldGNoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIHNlbGYsXG4gICAgaXRlcmFibGU6ICdTeW1ib2wnIGluIHNlbGYgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gICAgYmxvYjogJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiYgJ0Jsb2InIGluIHNlbGYgJiYgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gc2VsZixcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBzZWxmXG4gIH1cblxuICBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICAgIF1cblxuICAgIHZhciBpc0RhdGFWaWV3ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgICB9XG5cbiAgICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPSBBcnJheUJ1ZmZlci5pc1ZpZXcgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUnKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuICBmdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICAgIHZhciBpdGVyYXRvciA9IHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvclxuICB9XG5cbiAgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdGhpcy5tYXAgPSB7fVxuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICB9LCB0aGlzKVxuXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICAgIH0sIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICAgIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUrJywnK3ZhbHVlIDogdmFsdWVcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICAgIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2gobmFtZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkgeyBpdGVtcy5wdXNoKHZhbHVlKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgeyBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgICB9XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gICAgaWYgKGJ1Zi5zbGljZSkge1xuICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZScpXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIHZhciBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHZpZXcpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICByZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy51cmwgPSBpbnB1dFxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgIH1cbiAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICB9XG4gICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnb21pdCdcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSlcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTogdGhpcy5fYm9keUluaXQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGJvZHkudHJpbSgpLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICByYXdIZWFkZXJzLnNwbGl0KCdcXHJcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICAgIHRoaXMuc3RhdHVzID0gJ3N0YXR1cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdHVzIDogMjAwXG4gICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJ1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG4gIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgdXJsOiB0aGlzLnVybFxuICAgIH0pXG4gIH1cblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH1cblxuICBzZWxmLkhlYWRlcnMgPSBIZWFkZXJzXG4gIHNlbGYuUmVxdWVzdCA9IFJlcXVlc3RcbiAgc2VsZi5SZXNwb25zZSA9IFJlc3BvbnNlXG5cbiAgc2VsZi5mZXRjaCA9IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH1cblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QudXJsLCB0cnVlKVxuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuXG4gICAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICAgIH0pXG4gIH1cbiAgc2VsZi5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzKTtcbiJdfQ== \ No newline at end of file diff --git a/staticfiles/rest_framework/js/csrf.js b/staticfiles/rest_framework/js/csrf.js new file mode 100644 index 0000000..0d8444f --- /dev/null +++ b/staticfiles/rest_framework/js/csrf.js @@ -0,0 +1,53 @@ +function getCookie(name) { + var cookieValue = null; + + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + + return cookieValue; +} + +function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); +} + +function sameOrigin(url) { + // test that a given url is a same-origin URL + // url could be relative or scheme relative or absolute + var host = document.location.host; // host + port + var protocol = document.location.protocol; + var sr_origin = '//' + host; + var origin = protocol + sr_origin; + + // Allow absolute or scheme relative URLs to same origin + return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || + (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || + // or any other URL that isn't scheme relative or absolute i.e relative. + !(/^(\/\/|http:|https:).*/.test(url)); +} + +window.drf = JSON.parse(document.getElementById('drf_csrf').textContent); +var csrftoken = window.drf.csrfToken; + +$.ajaxSetup({ + beforeSend: function(xhr, settings) { + if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) { + // Send the token to same-origin, relative URLs only. + // Send the token only if the method warrants CSRF protection + // Using the CSRFToken value acquired earlier + xhr.setRequestHeader(window.drf.csrfHeaderName, csrftoken); + } + } +}); diff --git a/staticfiles/rest_framework/js/default.js b/staticfiles/rest_framework/js/default.js new file mode 100644 index 0000000..bec2e4f --- /dev/null +++ b/staticfiles/rest_framework/js/default.js @@ -0,0 +1,47 @@ +$(document).ready(function() { + // JSON highlighting. + prettyPrint(); + + // Bootstrap tooltips. + $('.js-tooltip').tooltip({ + delay: 1000, + container: 'body' + }); + + // Deal with rounded tab styling after tab clicks. + $('a[data-toggle="tab"]:first').on('shown', function(e) { + $(e.target).parents('.tabbable').addClass('first-tab-active'); + }); + + $('a[data-toggle="tab"]:not(:first)').on('shown', function(e) { + $(e.target).parents('.tabbable').removeClass('first-tab-active'); + }); + + $('a[data-toggle="tab"]').click(function() { + document.cookie = "tabstyle=" + this.name + "; path=/"; + }); + + // Store tab preference in cookies & display appropriate tab on load. + var selectedTab = null; + var selectedTabName = getCookie('tabstyle'); + + if (selectedTabName) { + selectedTabName = selectedTabName.replace(/[^a-z-]/g, ''); + } + + if (selectedTabName) { + selectedTab = $('.form-switcher a[name=' + selectedTabName + ']'); + } + + if (selectedTab && selectedTab.length > 0) { + // Display whichever tab is selected. + selectedTab.tab('show'); + } else { + // If no tab selected, display rightmost tab. + $('.form-switcher a:first').tab('show'); + } + + $(window).on('load', function() { + $('#errorModal').modal('show'); + }); +}); diff --git a/staticfiles/rest_framework/js/jquery-3.7.1.min.js b/staticfiles/rest_framework/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/staticfiles/rest_framework/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="
          ",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
          "],col:[2,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
          ",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p { + checkAuth(); + checkOAuthCallback(); +}); + +// Check if user is authenticated +function checkAuth() { + const accessToken = localStorage.getItem('access_token'); + + if (accessToken) { + // User is logged in, show dashboard + loadUserProfile(); + } else { + // User is not logged in, show login page + showLogin(); + } +} + +// Check for OAuth callback parameters +function checkOAuthCallback() { + const urlParams = new URLSearchParams(window.location.search); + const access = urlParams.get('access'); + const refresh = urlParams.get('refresh'); + + if (access && refresh) { + // Save tokens from OAuth callback + localStorage.setItem('access_token', access); + localStorage.setItem('refresh_token', refresh); + + // Clean URL + window.history.replaceState({}, document.title, window.location.pathname); + + // Load user profile + loadUserProfile(); + } +} + +// Show login page +function showLogin() { + document.getElementById('loginPage').style.display = 'flex'; + document.getElementById('registerPage').style.display = 'none'; + document.getElementById('dashboardPage').style.display = 'none'; + document.getElementById('navbar').style.display = 'none'; +} + +// Show register page +function showRegister() { + document.getElementById('loginPage').style.display = 'none'; + document.getElementById('registerPage').style.display = 'flex'; + document.getElementById('dashboardPage').style.display = 'none'; + document.getElementById('navbar').style.display = 'none'; +} + +// Show dashboard +function showDashboard() { + document.getElementById('loginPage').style.display = 'none'; + document.getElementById('registerPage').style.display = 'none'; + document.getElementById('dashboardPage').style.display = 'flex'; + document.getElementById('navbar').style.display = 'block'; +} + +// Show loading +function showLoading() { + document.getElementById('loadingOverlay').style.display = 'flex'; +} + +// Hide loading +function hideLoading() { + document.getElementById('loadingOverlay').style.display = 'none'; +} + +// Show error +function showError(message) { + const errorAlert = document.getElementById('errorAlert'); + errorAlert.textContent = message; + errorAlert.style.display = 'block'; + + setTimeout(() => { + errorAlert.style.display = 'none'; + }, 5000); +} + +// Handle login form submit +async function handleLogin(event) { + event.preventDefault(); + + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + showLoading(); + + try { + const response = await fetch(`${API_BASE}/auth/jwt/create/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email, password }) + }); + + const data = await response.json(); + + if (response.ok) { + // Save tokens + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + // Load profile + await loadUserProfile(); + } else { + hideLoading(); + showError(data.detail || 'Login failed. Please check your credentials.'); + } + } catch (error) { + hideLoading(); + showError('Network error. Please try again.'); + } +} + +// Handle register form submit +async function handleRegister(event) { + event.preventDefault(); + + const email = document.getElementById('regEmail').value; + const password = document.getElementById('regPassword').value; + const passwordConfirm = document.getElementById('regPasswordConfirm').value; + const firstName = document.getElementById('firstName').value; + const lastName = document.getElementById('lastName').value; + + if (password !== passwordConfirm) { + showError('Passwords do not match!'); + return; + } + + showLoading(); + + try { + const response = await fetch(`${API_BASE}/auth/users/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + email, + password, + re_password: passwordConfirm, + first_name: firstName, + last_name: lastName + }) + }); + + const data = await response.json(); + hideLoading(); + + if (response.ok) { + // Show success message + document.getElementById('registerSuccess').style.display = 'block'; + document.getElementById('registerForm').reset(); + + // Redirect to login after 3 seconds + setTimeout(() => { + showLogin(); + document.getElementById('registerSuccess').style.display = 'none'; + }, 3000); + } else { + const errorMsg = Object.values(data).flat().join(', '); + showError(errorMsg || 'Registration failed.'); + } + } catch (error) { + hideLoading(); + showError('Network error. Please try again.'); + } +} + +// Load user profile +async function loadUserProfile() { + showLoading(); + + const accessToken = localStorage.getItem('access_token'); + + try { + const response = await fetch(`${API_BASE}/auth/users/me/`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + if (response.ok) { + const user = await response.json(); + + // Update UI with user data + document.getElementById('userEmail').textContent = user.email; + document.getElementById('profileName').textContent = + `${user.first_name} ${user.last_name}` || user.email; + document.getElementById('profileEmail').textContent = user.email; + document.getElementById('userEmailStat').textContent = user.email; + document.getElementById('profileStatus').textContent = + user.is_active ? '✅ Active' : '❌ Inactive'; + + // Format date + const joinDate = new Date(user.date_joined); + document.getElementById('joinedDate').textContent = + joinDate.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }); + + // Show tokens + document.getElementById('accessToken').value = localStorage.getItem('access_token'); + document.getElementById('refreshToken').value = localStorage.getItem('refresh_token'); + + hideLoading(); + showDashboard(); + } else { + // Token expired or invalid + logout(); + } + } catch (error) { + hideLoading(); + showError('Failed to load profile.'); + logout(); + } +} + +// Logout +function logout() { + localStorage.removeItem('access_token'); + localStorage.removeItem('refresh_token'); + showLogin(); +} + +// Copy token to clipboard +function copyToken(type) { + const token = type === 'access' + ? document.getElementById('accessToken').value + : document.getElementById('refreshToken').value; + + navigator.clipboard.writeText(token) + .then(() => alert(`${type} token copied to clipboard!`)) + .catch(() => alert('Failed to copy token')); +} + +// ============================================================================ +// SOCIAL AUTH - TOKEN-BASED FLOW (like Nuxt/Next.js) +// ============================================================================ + +// Google Login (Token-Based) +function loginWithGoogle() { + // Trigger Google One Tap or popup + google.accounts.id.prompt(); +} + +// Handle Google OAuth callback +async function handleGoogleCallback(response) { + console.log('[Google OAuth] Credential received:', response.credential); + + showLoading(); + + try { + // Send Google's ID token to Django backend + const result = await fetch(`${API_BASE}/auth/social/google-oauth2/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + access_token: response.credential, // Google's ID token + id_token: response.credential + }) + }); + + const data = await result.json(); + console.log('[Django Response]:', data); + + hideLoading(); + + if (result.ok) { + // Save JWT tokens from Django + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + console.log('[Success] JWT tokens saved to localStorage'); + + // Load user profile + await loadUserProfile(); + } else { + showError(data.error || 'Google login failed'); + } + } catch (error) { + hideLoading(); + console.error('[Error]:', error); + showError('Network error during Google login'); + } +} + +// GitHub Login (Token-Based) +async function loginWithGitHub() { + alert(` +⚠️ GitHub Token-Based Flow için: + +1. GitHub Personal Access Token oluşturun: + https://github.com/settings/tokens + +2. Scopes: user, user:email + +3. Token'ı prompt'a girin + +NOT: Production'da OAuth2 PKCE flow kullanılmalı. +Bu sadece test için! + `); + + const token = prompt('GitHub Personal Access Token girin:'); + if (!token) return; + + showLoading(); + + try { + const result = await fetch(`${API_BASE}/auth/social/github/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + access_token: token + }) + }); + + const data = await result.json(); + console.log('[Django Response]:', data); + + hideLoading(); + + if (result.ok) { + // Save JWT tokens from Django + localStorage.setItem('access_token', data.access); + localStorage.setItem('refresh_token', data.refresh); + + console.log('[Success] JWT tokens saved to localStorage'); + + // Load user profile + await loadUserProfile(); + } else { + showError(data.error || 'GitHub login failed'); + } + } catch (error) { + hideLoading(); + console.error('[Error]:', error); + showError('Network error during GitHub login'); + } +} + +// Test protected endpoint +async function testProtectedEndpoint() { + showLoading(); + + const accessToken = localStorage.getItem('access_token'); + + try { + const response = await fetch(`${API_BASE}/auth/users/me/`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + hideLoading(); + + if (response.ok) { + alert('✅ Protected endpoint access successful!\n\nYour JWT token is working correctly.'); + } else { + alert('❌ Protected endpoint access failed.\n\nToken may be expired or invalid.'); + } + } catch (error) { + hideLoading(); + alert('❌ Network error while testing endpoint.'); + } +} + diff --git a/staticfiles/tinymce/icons/default/icons.min.js b/staticfiles/tinymce/icons/default/icons.min.js new file mode 100644 index 0000000..620f554 --- /dev/null +++ b/staticfiles/tinymce/icons/default/icons.min.js @@ -0,0 +1 @@ +tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"accordion-toggle":'',accordion:'',"action-next":'',"action-prev":'',addtag:'',"ai-prompt":'',ai:'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-style":'',"border-width":'',brightness:'',browse:'',cancel:'',"cell-background-color":'',"cell-border-color":'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',export:'',fill:'',"flip-horizontally":'',"flip-vertically":'',footnote:'',"format-code":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',language:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"math-equation":'',mentions:'',minus:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"export-pdf":'',"export-word":'',"import-word":'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"revision-history":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',send:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-caption":'',"table-cell-classes":'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-classes":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-numbering-rtl":'',"table-row-numbering":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',"template-add":'',template:'',"temporary-placeholder":'',"text-color":'',"text-size-decrease":'',"text-size-increase":'',toc:'',translate:'',typography:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',"add-file":'',adjustments:'',"alt-text":'',"auto-image-enhancement":'',blur:'',box:'',camera:'',caption:'',dropbox:'',evernote:'',exposure:'',fb:'',flickr:'',folder:'',"google-drive":'',"google-photos":'',grayscale:'',huddle:'',"image-decorative":'',"image-enhancements":'',instagram:'',onedrive:'',"photo-filter":'',"revert-changes":'',saturation:'',"transform-image":'',vibrance:'',vk:'',warmth:'',user:'',"vertical-align":'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/README.md b/staticfiles/tinymce/langs/README.md new file mode 100644 index 0000000..cd93d8c --- /dev/null +++ b/staticfiles/tinymce/langs/README.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly, use this service instead: https://crowdin.com/project/tinymce diff --git a/staticfiles/tinymce/langs/ar.js b/staticfiles/tinymce/langs/ar.js new file mode 100644 index 0000000..bae6856 --- /dev/null +++ b/staticfiles/tinymce/langs/ar.js @@ -0,0 +1 @@ +tinymce.addI18n("ar",{"#":"#","Accessibility":"\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0648\u0635\u0648\u0644","Accordion":"\u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646","Accordion body...":"\u0646\u0635 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646...","Accordion summary...":"\u0645\u0644\u062e\u0635 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646...","Action":"\u0627\u0644\u0625\u062c\u0631\u0627\u0621","Activity":"\u0627\u0644\u0646\u0634\u0627\u0637","Address":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","Advanced":"\u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629","Align":"\u0645\u062d\u0627\u0630\u0627\u0629","Align center":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u0645\u0646\u062a\u0635\u0641","Align left":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631","Align right":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646","Alignment":"\u0645\u062d\u0627\u0630\u0627\u0629","Alignment {0}":"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629 {0}","All":"\u0627\u0644\u0643\u0644","Alternative description":"\u0627\u0644\u0648\u0635\u0641 \u0627\u0644\u0628\u062f\u064a\u0644","Alternative source":"\u0645\u0635\u062f\u0631 \u0628\u062f\u064a\u0644","Alternative source URL":"\u0631\u0627\u0628\u0637 \u0644\u0644\u0645\u0635\u062f\u0631 \u0627\u0644\u0628\u062f\u064a\u0644","Anchor":"\u0631\u0627\u0628\u0637","Anchor...":"\u0645\u0631\u0633\u0627\u0629...","Anchors":"\u0645\u0631\u0627\u0633","Animals and Nature":"\u0627\u0644\u062d\u064a\u0648\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u0637\u0628\u064a\u0639\u0629","Arrows":"\u0627\u0644\u0623\u0633\u0647\u0645","B":"\u0623\u0632\u0631\u0642","Background color":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629","Background color {0}":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 {0}","Black":"\u0623\u0633\u0648\u062f","Block":"\u062d\u0638\u0631","Block {0}":"\u0627\u0644\u0643\u062a\u0644\u0629 {0}","Blockquote":"\u0627\u0642\u062a\u0628\u0627\u0633","Blocks":"\u0627\u0644\u0643\u062a\u0644","Blue":"\u0623\u0632\u0631\u0642","Blue component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u0632\u0631\u0642","Body":"\u0627\u0644\u0646\u0635","Bold":"\u063a\u0627\u0645\u0642","Border":"\u0627\u0644\u062d\u062f","Border color":"\u0644\u0648\u0646 \u0627\u0644\u062d\u062f","Border style":"\u0646\u0645\u0637 \u0627\u0644\u062d\u062f","Border width":"\u0639\u0631\u0636 \u0627\u0644\u062d\u062f","Bottom":"\u0623\u0633\u0641\u0644","Browse files":"\u062a\u0635\u0641\u062d \u0627\u0644\u0645\u0644\u0641\u0627\u062a","Browse for an image":"\u0627\u0633\u062a\u0639\u0631\u0627\u0636 \u0635\u0648\u0631\u0629","Browse links":"\u062a\u0635\u0641\u062d \u0627\u0644\u0631\u0648\u0627\u0628\u0637","Bullet list":"\u0642\u0627\u0626\u0645\u0629 \u062a\u0639\u062f\u0627\u062f \u0646\u0642\u0637\u064a","Cancel":"\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0623\u0645\u0631","Caption":"\u0627\u0644\u0634\u0631\u062d","Cell":"\u062e\u0644\u064a\u0629","Cell padding":"\u062a\u0628\u0637\u064a\u0646 \u0627\u0644\u062e\u0644\u064a\u0629","Cell properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062e\u0644\u064a\u0629","Cell spacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u0627\u064a\u0627","Cell styles":"\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u062e\u0644\u064a\u0629","Cell type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629","Center":"\u062a\u0648\u0633\u064a\u0637","Characters":"\u0627\u0644\u0623\u062d\u0631\u0641","Characters (no spaces)":"\u0627\u0644\u0623\u062d\u0631\u0641 (\u062f\u0648\u0646 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a)","Circle":"\u062f\u0627\u0626\u0631\u0629","Class":"\u0627\u0644\u0641\u0626\u0629","Clear formatting":"\u0645\u0633\u062d \u0627\u0644\u062a\u0646\u0633\u064a\u0642","Close":"\u0625\u063a\u0644\u0627\u0642","Code":"\u0627\u0644\u0643\u0648\u062f","Code sample...":"\u0639\u064a\u0646\u0629 \u0627\u0644\u0643\u0648\u062f...","Code view":"\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0645\u0648\u0632","Color Picker":"\u0645\u0646\u062a\u0642\u064a \u0627\u0644\u0623\u0644\u0648\u0627\u0646","Color swatch":"\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","Cols":"\u0623\u0639\u0645\u062f\u0629","Column":"\u0639\u0645\u0648\u062f","Column clipboard actions":"\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u0645\u062d\u0641\u0638\u0629 \u0627\u0644\u0639\u0645\u0648\u062f","Column group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0623\u0639\u0645\u062f\u0629","Column header":"\u0631\u0623\u0633 \u0627\u0644\u0639\u0645\u0648\u062f","Constrain proportions":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u062a\u0646\u0627\u0633\u0628","Copy":"\u0646\u0633\u062e","Copy column":"\u0646\u0633\u062e \u0627\u0644\u0639\u0645\u0648\u062f","Copy row":"\u0646\u0633\u062e \u0627\u0644\u0635\u0641","Could not find the specified string.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u062d\u062f\u062f.","Could not load emojis":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0629","Count":"\u0627\u0644\u0639\u062f\u062f","Currency":"\u0627\u0644\u0639\u0645\u0644\u0629","Current window":"\u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629","Custom color":"\u0644\u0648\u0646 \u0645\u062e\u0635\u0635","Custom...":"\u0645\u062e\u0635\u0635...","Cut":"\u0642\u0635","Cut column":"\u0642\u0635 \u0627\u0644\u0639\u0645\u0648\u062f","Cut row":"\u0642\u0635 \u0627\u0644\u0635\u0641","Dark Blue":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","Dark Gray":"\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646","Dark Green":"\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646","Dark Orange":"\u0628\u0631\u062a\u0642\u0627\u0644\u064a \u062f\u0627\u0643\u0646","Dark Purple":"\u0623\u0631\u062c\u0648\u0627\u0646\u064a \u062f\u0627\u0643\u0646","Dark Red":"\u0623\u062d\u0645\u0631 \u062f\u0627\u0643\u0646","Dark Turquoise":"\u0641\u064a\u0631\u0648\u0632\u064a \u062f\u0627\u0643\u0646","Dark Yellow":"\u0623\u0635\u0641\u0631 \u062f\u0627\u0643\u0646","Dashed":"\u0645\u062a\u0642\u0637\u0639","Date/time":"\u0627\u0644\u062a\u0627\u0631\u064a\u062e/\u0627\u0644\u0648\u0642\u062a","Decrease indent":"\u062a\u0642\u0644\u064a\u0644 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","Default":"\u0627\u0641\u062a\u0631\u0627\u0636\u064a","Delete accordion":"\u062d\u0630\u0641 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646","Delete column":"\u062d\u0630\u0641 \u0639\u0645\u0648\u062f","Delete row":"\u062d\u0630\u0641 \u0635\u0641","Delete table":"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","Dimensions":"\u0627\u0644\u0623\u0628\u0639\u0627\u062f","Disc":"\u0642\u0631\u0635","Div":"Div","Document":"\u0627\u0644\u0645\u0633\u062a\u0646\u062f","Dotted":"\u0645\u0646\u0642\u0637","Double":"\u0645\u0632\u062f\u0648\u062c","Drop an image here":"\u0627\u0641\u0644\u062a \u0635\u0648\u0631\u0629 \u0647\u0646\u0627","Dropped file type is not supported":"\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645","Edit":"\u062a\u062d\u0631\u064a\u0631","Embed":"\u062a\u0636\u0645\u064a\u0646","Emojis":"\u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0629","Emojis...":"\u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0629...","Error":"\u062e\u0637\u0623","Error: Form submit field collision.":"\u062e\u0637\u0623: \u062a\u0636\u0627\u0631\u0628 \u0641\u064a \u062d\u0642\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.","Error: No form element found.":"\u062e\u0637\u0623: \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631 \u0646\u0645\u0648\u0630\u062c.","Extended Latin":"\u0627\u0644\u0644\u0627\u062a\u064a\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0633\u0639\u0629","Failed to initialize plugin: {0}":"\u062a\u0639\u0630\u0631 \u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0645\u0643\u0648\u0646 : {0}","Failed to load plugin url: {0}":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0631\u0627\u0628\u0637 \u0644\u0644\u0645\u0643\u0648\u0646 : {0}","Failed to load plugin: {0} from url {1}":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 : {0} \u0645\u0646 \u200f{1}","Failed to upload image: {0}":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629: {0}","File":"\u0645\u0644\u0641","Find":"\u0628\u062d\u062b","Find (if searchreplace plugin activated)":"\u0627\u0644\u0628\u062d\u062b (\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0643\u0648\u0646 \u0627\u0644\u0628\u062d\u062b \u0645\u0641\u0639\u0644)","Find and Replace":"\u0628\u062d\u062b \u0648\u0627\u0633\u062a\u0628\u062f\u0627\u0644","Find and replace...":"\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644...","Find in selection":"\u0627\u0644\u0628\u062d\u062b \u0628\u0627\u0644\u0645\u062d\u062f\u062f","Find whole words only":"\u0628\u062d\u062b \u0628\u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0643\u0627\u0645\u0644\u0647 \u0641\u0642\u0637","Flags":"\u0627\u0644\u0623\u0639\u0644\u0627\u0645","Focus to contextual toolbar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0643\u062a\u0627\u0628\u0629","Focus to element path":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0639\u0646\u0635\u0631","Focus to menubar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645","Focus to toolbar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","Font":"\u0627\u0644\u062e\u0637","Font size {0}":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637 {0}","Font sizes":"\u0623\u062d\u062c\u0627\u0645 \u0627\u0644\u062e\u0637\u0648\u0637","Font {0}":"\u0627\u0644\u062e\u0637 {0}","Fonts":"\u0627\u0644\u062e\u0637\u0648\u0637","Food and Drink":"\u0627\u0644\u0623\u0637\u0639\u0645\u0629 \u0648\u0627\u0644\u0645\u0634\u0631\u0648\u0628\u0627\u062a","Footer":"\u0627\u0644\u062a\u0630\u064a\u064a\u0644","Format":"\u062a\u0646\u0633\u064a\u0642","Format {0}":"\u0627\u0644\u062a\u0646\u0633\u064a\u0642 {0}","Formats":"\u0627\u0644\u062a\u0646\u0633\u064a\u0642\u0627\u062a","Fullscreen":"\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629","G":"\u0623\u062e\u0636\u0631","General":"\u0639\u0627\u0645","Gray":"\u0631\u0645\u0627\u062f\u064a","Green":"\u0623\u062e\u0636\u0631","Green component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u062e\u0636\u0631","Groove":"\u0641\u062c\u0648\u0629","Handy Shortcuts":"\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0645\u0633\u0627\u0639\u062f\u0629","Header":"\u0627\u0644\u062a\u0631\u0648\u064a\u0633\u0629","Header cell":"\u062e\u0644\u064a\u0629 \u0627\u0644\u0639\u0646\u0648\u0627\u0646","Heading 1":"\u0639\u0646\u0648\u0627\u0646 1","Heading 2":"\u0639\u0646\u0648\u0627\u0646 2","Heading 3":"\u0639\u0646\u0648\u0627\u0646 3","Heading 4":"\u0639\u0646\u0648\u0627\u0646 4","Heading 5":"\u0639\u0646\u0648\u0627\u0646 5","Heading 6":"\u0639\u0646\u0648\u0627\u0646 6","Headings":"\u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646","Height":"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639","Help":"\u062a\u0639\u0644\u064a\u0645\u0627\u062a","Hex color code":"\u0631\u0645\u0632 \u0627\u0644\u0644\u0648\u0646","Hidden":"\u0645\u062e\u0641\u064a","Horizontal align":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0623\u0641\u0642\u064a\u0629","Horizontal line":"\u062e\u0637 \u0623\u0641\u0642\u064a","Horizontal space":"\u0645\u0633\u0627\u0641\u0629 \u0623\u0641\u0642\u064a\u0629","ID":"\u0627\u0644\u0645\u0639\u0631\u0641","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0628\u062f\u0623 \u0627\u0644\u0645\u0639\u0631\u0641 \u0628\u062d\u0631\u0641\u060c \u0645\u062a\u0628\u0648\u0639 \u0641\u0642\u0637 \u0628\u0623\u062d\u0631\u0641 \u0623\u0648 \u0623\u0631\u0642\u0627\u0645 \u0623\u0648 \u0634\u0631\u0637\u0627\u062a \u0623\u0648 \u0646\u0642\u0637 \u0623\u0648 \u0634\u0631\u0637\u0627\u062a \u0633\u0641\u0644\u064a\u0629.","Image is decorative":"\u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0632\u062e\u0631\u0641\u0629","Image list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631","Image title":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629","Image...":"\u0635\u0648\u0631\u0629...","ImageProxy HTTP error: Could not find Image Proxy":"\u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u0635\u0648\u0631 : \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0635\u0648\u0631\u0629","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631 : \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629 \u062e\u0627\u0637\u0626","ImageProxy HTTP error: Rejected request":"\u062e\u0637\u0623 \u0641\u064a \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629, \u0627\u0644\u0637\u0644\u0628 \u0645\u0631\u0641\u0648\u0636","ImageProxy HTTP error: Unknown ImageProxy error":"\u062e\u0637\u0623 \u0641\u064a \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631 \u0635\u0648\u0631\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641","Increase indent":"\u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","Inline":"\u062f\u0627\u062e\u0644\u064a","Insert":"\u0625\u062f\u0631\u0627\u062c","Insert Template":"\u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628","Insert accordion":"\u202b\u0625\u062f\u0631\u0627\u062c\u202c \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646","Insert column after":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0628\u0639\u062f","Insert column before":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0642\u0628\u0644","Insert date/time":"\u0625\u062f\u0631\u0627\u062c \u062a\u0627\u0631\u064a\u062e/\u0648\u0642\u062a","Insert image":"\u0625\u062f\u0631\u0627\u062c \u0635\u0648\u0631\u0629","Insert link (if link plugin activated)":"\u0625\u062f\u0631\u0627\u062c \u0631\u0627\u0628\u0637 (\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0643\u0648\u0646 \u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0645\u0641\u0639\u0644)","Insert row after":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0628\u0639\u062f","Insert row before":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0642\u0628\u0644","Insert table":"\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644","Insert template...":"\u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628...","Insert video":"\u0625\u062f\u0631\u0627\u062c \u0641\u064a\u062f\u064a\u0648","Insert/Edit code sample":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0639\u064a\u0646\u0629 \u0627\u0644\u0631\u0645\u0632","Insert/edit image":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0635\u0648\u0631\u0629","Insert/edit link":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0627\u0631\u062a\u0628\u0627\u0637","Insert/edit media":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629","Insert/edit video":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0641\u064a\u062f\u064a\u0648","Inset":"\u0627\u062f\u0631\u062c","Invalid hex color code: {0}":"\u0631\u0645\u0632 \u0627\u0644\u0644\u0648\u0646 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d: {0}","Invalid input":"\u0645\u062f\u062e\u0644 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d","Italic":"\u0645\u0627\u0626\u0644","Justify":"\u0636\u0628\u0637","Keyboard Navigation":"\u0627\u0644\u062a\u0646\u0642\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d","Language":"\u0627\u0644\u0644\u063a\u0629","Learn more...":"\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f...","Left":"\u064a\u0633\u0627\u0631","Left to right":"\u064a\u0633\u0627\u0631 \u0644\u064a\u0645\u064a\u0646","Light Blue":"\u0623\u0632\u0631\u0642 \u0641\u0627\u062a\u062d","Light Gray":"\u0631\u0645\u0627\u062f\u064a \u0641\u0627\u062a\u062d","Light Green":"\u0623\u062e\u0636\u0631 \u0641\u0627\u062a\u062d","Light Purple":"\u0628\u0646\u0641\u0633\u062c\u064a \u0641\u0627\u062a\u062d","Light Red":"\u0623\u062d\u0645\u0631 \u0641\u0627\u062a\u062d","Light Yellow":"\u0623\u0635\u0641\u0631 \u0641\u0627\u062a\u062d","Line height":"\u0627\u0631\u062a\u0641\u0627\u0639 \u0627\u0644\u062e\u0637","Link list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637","Link...":"\u0631\u0627\u0628\u0637...","List Properties":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062e\u0635\u0627\u0626\u0635","List properties...":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062e\u0635\u0627\u0626\u0635...","Loading emojis...":"\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0629...","Loading...":"\u062a\u062d\u0645\u064a\u0644...","Lower Alpha":"\u062d\u0631\u0641 \u0623\u0628\u062c\u062f\u064a \u0635\u063a\u064a\u0631","Lower Greek":"\u062d\u0631\u0648\u0641 \u064a\u0648\u0646\u0627\u0646\u064a\u0629 \u0635\u063a\u064a\u0631\u0629","Lower Roman":"\u062d\u0631\u0641 \u0644\u0627\u062a\u064a\u0646\u064a \u0635\u063a\u064a\u0631","Match case":"\u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u062d\u0627\u0644\u0629","Mathematical":"\u0631\u064a\u0627\u0636\u064a\u0627\u062a","Media poster (Image URL)":"\u0645\u0644\u0635\u0642 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 (\u0631\u0627\u0628\u0637 \u0644\u0644\u0635\u0648\u0631\u0629)","Media...":"\u0627\u0644\u0648\u0633\u0627\u0626\u0637...","Medium Blue":"\u0623\u0632\u0631\u0642 \u0645\u062a\u0648\u0633\u0637","Medium Gray":"\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637","Medium Purple":"\u0628\u0646\u0641\u0633\u062c\u064a \u0645\u062a\u0648\u0633\u0637","Merge cells":"\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627","Middle":"\u062a\u0648\u0633\u064a\u0637","Midnight Blue":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","More...":"\u0627\u0644\u0645\u0632\u064a\u062f...","Name":"\u0627\u0644\u0627\u0633\u0645","Navy Blue":"\u0623\u0632\u0631\u0642 \u0646\u064a\u0644\u064a","New document":"\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f","New window":"\u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629","Next":"\u0627\u0644\u062a\u0627\u0644\u064a","No":"\u0644\u0627","No alignment":"\u062f\u0648\u0646 \u0645\u062d\u0627\u0630\u0627\u0629","No color":"\u062f\u0648\u0646 \u0644\u0648\u0646","Nonbreaking space":"\u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629","None":"\u0644\u0627 \u0634\u064a\u0621","Numbered list":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u0642\u0645\u0651\u064e\u0629","OR":"\u0623\u0648","Objects":"\u0643\u0627\u0626\u0646\u0627\u062a","Ok":"\u0645\u0648\u0627\u0641\u0642","Open help dialog":"\u0627\u0641\u062a\u062d \u062d\u0648\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a","Open link":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637","Open link in...":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u064a...","Open popup menu for split buttons":"\u0627\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629 \u0644\u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0627\u0646\u0642\u0633\u0627\u0645","Orange":"\u0628\u0631\u062a\u0642\u0627\u0644\u064a","Outset":"\u0623\u0644\u0627\u0633\u062a\u0647\u0644\u0627\u0644\u0647","Page break":"\u0641\u0627\u0635\u0644 \u0635\u0641\u062d\u0627\u062a","Paragraph":"\u0627\u0644\u0641\u0642\u0631\u0629","Paste":"\u0644\u0635\u0642","Paste as text":"\u0644\u0635\u0642 \u0643\u0646\u0635","Paste column after":"\u0644\u0635\u0642 \u0627\u0644\u0639\u0645\u0648\u062f \u0628\u0639\u062f","Paste column before":"\u0644\u0635\u0642 \u0627\u0644\u0639\u0645\u0648\u062f \u0642\u0628\u0644","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0644\u0635\u0642 \u062a\u062a\u0645 \u062d\u0627\u0644\u064a\u064b\u0627 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a. \u0633\u064a\u0628\u0642\u0649 \u0627\u0644\u0646\u0635 \u0639\u0627\u062f\u064a\u0627\u064b \u062d\u062a\u0649 \u062a\u0642\u0648\u0645 \u0628\u062a\u0639\u0637\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631.","Paste or type a link":"\u0627\u0644\u0635\u0642 \u0627\u0644\u0631\u0627\u0628\u0637 \u0623\u0648 \u0627\u0643\u062a\u0628\u0647","Paste row after":"\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0628\u0639\u062f","Paste row before":"\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0642\u0628\u0644","Paste your embed code below:":"\u0644\u0635\u0642 \u0643\u0648\u062f \u0627\u0644\u062a\u0636\u0645\u064a\u0646 \u0623\u062f\u0646\u0627\u0647:","People":"\u0627\u0644\u0623\u0634\u062e\u0627\u0635","Plugins":"\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629","Plugins installed ({0}):":"\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062a \u0627\u0644\u0645\u062b\u0628\u062a\u0629 ({0}):","Powered by {0}":"\u0628\u0648\u0627\u0633\u0637\u0629 {0}","Pre":"\u0642\u0628\u0644","Preferences":"\u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a","Preformatted":"\u0645\u0646\u0633\u0642 \u0645\u0633\u0628\u0642\u064b\u0627","Premium plugins:":"\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629 \u0627\u0644\u0645\u0645\u064a\u0632\u0629:","Press the Up and Down arrow keys to resize the editor.":"\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u0633\u0647\u0645\u064a\u0646 \u0644\u0623\u0639\u0644\u0649 \u0648\u0623\u0633\u0641\u0644 \u0644\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645 \u0627\u0644\u0645\u062d\u0631\u0631.","Press the arrow keys to resize the editor.":"\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u0623\u0633\u0647\u0645 \u0644\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645 \u0627\u0644\u0645\u062d\u0631\u0631.","Press {0} for help":"\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 {0} \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629","Preview":"\u0645\u0639\u0627\u064a\u0646\u0629","Previous":"\u0627\u0644\u0633\u0627\u0628\u0642","Print":"\u0637\u0628\u0627\u0639\u0629","Print...":"\u0637\u0628\u0627\u0639\u0629...","Purple":"\u0628\u0646\u0641\u0633\u062c\u064a","Quotations":"\u0627\u0644\u0627\u0642\u062a\u0628\u0627\u0633\u0627\u062a","R":"\u0623\u062d\u0645\u0631","Range 0 to 255":"\u0645\u0646 0 \u0625\u0644\u0649 255","Red":"\u0623\u062d\u0645\u0631","Red component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u062d\u0645\u0631","Redo":"\u0625\u0639\u0627\u062f\u0629","Remove":"\u0625\u0632\u0627\u0644\u0629","Remove color":"\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0644\u0648\u0646","Remove link":"\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0631\u0627\u0628\u0637","Replace":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644","Replace all":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644","Replace with":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0628\u0640","Resize":"\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u062d\u062c\u0645","Restore last draft":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0622\u062e\u0631 \u0645\u0633\u0648\u062f\u0629","Reveal or hide additional toolbar items":"\u0625\u0638\u0647\u0627\u0631 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a \u0623\u0648 \u0625\u062e\u0641\u0627\u0624\u0647","Rich Text Area":"\u0645\u0633\u0627\u062d\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642","Rich Text Area. Press ALT-0 for help.":"\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0646\u0635 \u0645\u0646\u0633\u0642. ALT-F9 \u0644\u0644\u0642\u0627\u0626\u0645\u0629. ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a. ALT-0 \u0644\u0644\u0645\u0633\u0627\u0639\u062f\u0629","Ridge":"\u062a\u0645\u062f\u064a\u062f \u0644\u0644\u0646\u0647\u0627\u064a\u0629","Right":"\u064a\u0645\u064a\u0646","Right to left":"\u064a\u0645\u064a\u0646 \u0644\u064a\u0633\u0627\u0631","Row":"\u0635\u0641","Row clipboard actions":"\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u0645\u062d\u0641\u0638\u0629 \u0627\u0644\u0635\u0641","Row group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0635\u0641\u0648\u0641","Row header":"\u0631\u0623\u0633 \u0627\u0644\u0635\u0641","Row properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0641","Row type":"\u0646\u0648\u0639 \u0627\u0644\u0635\u0641","Rows":"\u0635\u0641\u0648\u0641","Save":"\u062d\u0641\u0638","Save (if save plugin activated)":"\u062d\u0641\u0638 (\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0643\u0648\u0646 \u0627\u0644\u062d\u0641\u0638 \u0645\u0641\u0639\u0644)","Scope":"\u0627\u0644\u0646\u0637\u0627\u0642","Search":"\u0628\u062d\u062b","Select all":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644","Select...":"\u062a\u062d\u062f\u064a\u062f...","Selection":"\u0627\u0644\u062a\u062d\u062f\u064a\u062f","Shortcut":"\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631","Show blocks":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u062a\u0644","Show caption":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0634\u0631\u062d","Show invisible characters":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u062d\u0631\u0641 \u063a\u064a\u0631 \u0627\u0644\u0645\u0631\u0626\u064a\u0629","Size":"\u0627\u0644\u062d\u062c\u0645","Solid":"\u062b\u062e\u064a\u0646","Source":"\u0627\u0644\u0645\u0635\u062f\u0631","Source code":"\u0643\u0648\u062f \u0627\u0644\u0645\u0635\u062f\u0631","Special Character":"\u0631\u0645\u0632 \u062e\u0627\u0635","Special character...":"\u0631\u0645\u0632 \u062e\u0627\u0635...","Split cell":"\u062a\u0642\u0633\u064a\u0645 \u062e\u0644\u064a\u0629","Square":"\u0645\u0631\u0628\u0639","Start list at number":"\u0628\u062f\u0621 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0628\u0627\u0644\u0631\u0642\u0645","Strikethrough":"\u064a\u062a\u0648\u0633\u0637\u0647 \u062e\u0637","Style":"\u0627\u0644\u0646\u0645\u0637","Subscript":"\u0645\u0646\u062e\u0641\u0636","Superscript":"\u0645\u0631\u062a\u0641\u0639","Switch to or from fullscreen mode":"\u0627\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0623\u0648 \u0645\u0646 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629","Symbols":"\u0627\u0644\u0631\u0645\u0648\u0632","System Font":"\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645","Table":"\u062c\u062f\u0648\u0644","Table caption":"\u0634\u0631\u062d \u0627\u0644\u062c\u062f\u0648\u0644","Table properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644","Table styles":"\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u062c\u062f\u0648\u0644","Template":"\u0627\u0644\u0642\u0627\u0644\u0628","Templates":"\u0627\u0644\u0642\u0648\u0627\u0644\u0628","Text":"\u0627\u0644\u0646\u0635","Text color":"\u0644\u0648\u0646 \u0627\u0644\u0646\u0635","Text color {0}":"\u0644\u0648\u0646 \u0627\u0644\u0646\u0635 {0}","Text to display":"\u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u0639\u0631\u0648\u0636","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 \u0628\u0631\u064a\u062f .\u064a\u0641\u0636\u0644 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 mailto: \u061f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 http:// \u0644\u0644\u0631\u0627\u0628\u0637\u061f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 https:// \u0644\u0644\u0631\u0627\u0628\u0637\u061f","Title":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","To open the popup, press Shift+Enter":"\u0644\u0641\u062a\u062d \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629\u060c \u0627\u0636\u063a\u0637 Shift\u200f+Enter","Toggle accordion":"\u062a\u0628\u062f\u064a\u0644 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646","Tools":"\u0627\u0644\u0623\u062f\u0648\u0627\u062a","Top":"\u0623\u0639\u0644\u0649","Travel and Places":"\u0627\u0644\u0633\u0641\u0631 \u0648\u0627\u0644\u0623\u0645\u0627\u0643\u0646","Turquoise":"\u0641\u064a\u0631\u0648\u0632\u064a","Underline":"\u062a\u0633\u0637\u064a\u0631","Undo":"\u062a\u0631\u0627\u062c\u0639","Upload":"\u062a\u062d\u0645\u064a\u0644","Uploading image":"\u0631\u0641\u0639 \u0635\u0648\u0631\u0629","Upper Alpha":"\u062d\u0631\u0641 \u0623\u0628\u062c\u062f\u064a \u0643\u0628\u064a\u0631","Upper Roman":"\u062d\u0631\u0641 \u0644\u0627\u062a\u064a\u0646\u064a \u0643\u0628\u064a\u0631","Url":"\u0627\u0644\u0631\u0627\u0628\u0637","User Defined":"\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645","Valid":"\u0635\u062d\u064a\u062d","Version":"\u0627\u0644\u0625\u0635\u062f\u0627\u0631","Vertical align":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0639\u0645\u0648\u062f\u064a\u0629","Vertical space":"\u0645\u0633\u0627\u0641\u0629 \u0639\u0645\u0648\u062f\u064a\u0629","View":"\u0639\u0631\u0636","Visual aids":"\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u0635\u0631\u064a\u0629","Warn":"\u062a\u062d\u0630\u064a\u0631","White":"\u0623\u0628\u064a\u0636","Width":"\u0627\u0644\u0639\u0631\u0636","Word count":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a","Words":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a","Words: {0}":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a: {0}","Yellow":"\u0623\u0635\u0641\u0631","Yes":"\u0646\u0639\u0645","You are using {0}":"\u0623\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0644\u062f\u064a\u0643 \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0645 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627, \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0644\u062e\u0631\u0648\u062c\u061f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629. \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Ctrl+X/C/V \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.","_dir":"rtl","alignment":"\u0645\u062d\u0627\u0630\u0627\u0629","austral sign":"\u0631\u0645\u0632 \u0627\u0644\u0623\u0648\u0633\u062a\u0631\u0627\u0644","cedi sign":"\u0631\u0645\u0632 \u0627\u0644\u0633\u064a\u062f\u064a","colon sign":"\u0631\u0645\u0632 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646","cruzeiro sign":"\u0631\u0645\u0632 \u0627\u0644\u0643\u0631\u0648\u0632\u064a\u0631\u0648","currency sign":"\u0631\u0645\u0632 \u0639\u0645\u0644\u0629","dollar sign":"\u0631\u0645\u0632 \u0627\u0644\u062f\u0648\u0644\u0627\u0631","dong sign":"\u0631\u0645\u0632 \u0627\u0644\u062f\u0648\u0646\u062c","drachma sign":"\u0631\u0645\u0632 \u0627\u0644\u062f\u0631\u0627\u062e\u0645\u0627","euro-currency sign":"\u0631\u0645\u0632 \u064a\u0648\u0631\u0648","example":"\u0645\u062b\u0627\u0644","formatting":"\u062a\u0646\u0633\u064a\u0642","french franc sign":"\u0631\u0645\u0632 \u0627\u0644\u0641\u0631\u0646\u0643","german penny symbol":"\u0631\u0645\u0632 \u0627\u0644\u0628\u0646\u0633 \u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a","guarani sign":"\u0631\u0645\u0632 \u0627\u0644\u062c\u0648\u0627\u0631\u0627\u0646\u064a","history":"\u0627\u0644\u0633\u062c\u0644","hryvnia sign":"\u0631\u0645\u0632 \u0627\u0644\u0647\u0631\u064a\u0641\u0646\u064a\u0627","indentation":"\u0645\u0633\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629","indian rupee sign":"\u0631\u0645\u0632 \u0627\u0644\u0631\u0648\u0628\u064a\u0629 \u0627\u0644\u0647\u0646\u062f\u064a\u0629","kip sign":"\u0631\u0645\u0632 \u0627\u0644\u0643\u064a\u0628","lira sign":"\u0631\u0645\u0632 \u0627\u0644\u0644\u064a\u0631\u0629","livre tournois sign":"\u0631\u0645\u0632 \u0644\u064a\u0641\u0631 \u062a\u0648\u0631\u0646\u0648\u064a\u0632","manat sign":"\u0631\u0645\u0632 \u0627\u0644\u0645\u0627\u0646\u0627\u062a","mill sign":"\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064a\u062f","naira sign":"\u0631\u0645\u0632 \u0627\u0644\u0646\u064a\u0631\u0629","new sheqel sign":"\u0631\u0645\u0632 \u0627\u0644\u0634\u064a\u0643\u0644 \u0627\u0644\u062c\u062f\u064a\u062f","nordic mark sign":"\u0631\u0645\u0632 \u0627\u0644\u0646\u0648\u0631\u062f\u0643","peseta sign":"\u0631\u0645\u0632 \u0627\u0644\u0628\u064a\u0632\u064a\u062a\u0627","peso sign":"\u0631\u0645\u0632 \u0627\u0644\u0628\u064a\u0632\u0648","ruble sign":"\u0631\u0645\u0632 \u0627\u0644\u0631\u0648\u0628\u0644","rupee sign":"\u0631\u0645\u0632 \u0627\u0644\u0631\u0648\u0628\u064a\u0629","spesmilo sign":"\u0631\u0645\u0632 \u0627\u0644\u0627\u0633\u0628\u064a\u0632\u0645\u0627\u064a\u0644\u0648","styles":"\u0627\u0644\u0623\u0646\u0645\u0627\u0637","tenge sign":"\u0631\u0645\u0632 \u0627\u0644\u062a\u064a\u0646\u062c","tugrik sign":"\u0631\u0645\u0632 \u0627\u0644\u062a\u0648\u063a\u0631\u064a\u0643","turkish lira sign":"\u0631\u0645\u0632 \u0627\u0644\u0644\u064a\u0631\u0629 \u0627\u0644\u062a\u0631\u0643\u064a\u0629","won sign":"\u0631\u0645\u0632 \u0627\u0644\u0648\u0646","yen character":"\u0631\u0645\u0632 \u0627\u0644\u064a\u0646","yen/yuan character variant one":"\u0631\u0645\u0632 \u0627\u0644\u0628\u062f\u064a\u0644\u0629 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646/\u0627\u0644\u064a\u0648\u0627\u0646","yuan character":"\u0631\u0645\u0632 \u0627\u0644\u064a\u0648\u0627\u0646","yuan character, in hong kong and taiwan":"\u0631\u0645\u0632 \u064a\u0648\u0627\u0646 \u0641\u064a \u0647\u0648\u0646\u062c \u0643\u0648\u0646\u062c \u0648\u062a\u0627\u064a\u0648\u0627\u0646","{0} characters":"{0} \u0623\u062d\u0631\u0641","{0} columns, {1} rows":"{0} \u0639\u0645\u0648\u062f \u0648{1} \u0635\u0641","{0} words":"{0} \u0643\u0644\u0645\u0627\u062a"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ar_SA.js b/staticfiles/tinymce/langs/ar_SA.js new file mode 100644 index 0000000..99e56fe --- /dev/null +++ b/staticfiles/tinymce/langs/ar_SA.js @@ -0,0 +1 @@ +tinymce.addI18n("ar_SA",{"#":"#","Accessibility":"\u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u0644\u0648\u0635\u0648\u0644","Accordion":"","Accordion body...":"\u0645\u0644\u062e\u0635 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646...","Accordion summary...":"\u0646\u0635 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646...","Action":"\u0627\u0644\u0625\u062c\u0631\u0627\u0621","Activity":"\u0627\u0644\u0646\u0634\u0627\u0637","Address":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","Advanced":"\u0645\u062a\u0642\u062f\u0645","Align":"\u0645\u062d\u0627\u0630\u0627\u0629","Align center":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u0645\u0646\u062a\u0635\u0641","Align left":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u064a\u0633\u0627\u0631","Align right":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u064a\u0645\u064a\u0646","Alignment":"\u0645\u062d\u0627\u0630\u0627\u0629","Alignment {0}":"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629 {0}","All":"\u0627\u0644\u0643\u0644","Alternative description":"\u0627\u0644\u0648\u0635\u0641 \u0627\u0644\u0628\u062f\u064a\u0644","Alternative source":"\u0645\u0635\u062f\u0631 \u0628\u062f\u064a\u0644","Alternative source URL":"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0645\u0635\u062f\u0631 \u0627\u0644\u0628\u062f\u064a\u0644","Anchor":"\u0625\u0631\u062a\u0633\u0627\u0621","Anchor...":"\u0645\u0631\u0633\u0627\u0629...","Anchors":"\u0631\u0627\u0633\u064a\u0629","Animals and Nature":"\u0627\u0644\u062d\u064a\u0648\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u0637\u0628\u064a\u0639\u0629","Arrows":"\u0627\u0644\u0623\u0633\u0647\u0645","B":"\u0627\u0644\u0623\u0632\u0631\u0642","Background color":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629","Background color {0}":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0651\u0629 {0}","Black":"\u0623\u0633\u0648\u062f","Block":"\u062d\u0638\u0631","Block {0}":"\u0627\u0644\u0643\u062a\u0644\u0629 {0}","Blockquote":"\u0625\u0642\u062a\u0628\u0627\u0633 \u062e\u0627\u0631\u062c\u064a","Blocks":"\u0627\u0644\u0628\u0644\u0648\u0643\u0627\u062a","Blue":"\u0623\u0632\u0631\u0642","Blue component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u0632\u0631\u0642","Body":"\u0627\u0644\u0646\u0635","Bold":"\u0639\u0631\u064a\u0636","Border":"\u0627\u0644\u062d\u062f\u0648\u062f","Border color":"\u0644\u0648\u0646 \u0627\u0644\u062d\u062f","Border style":"\u0646\u0645\u0637 \u0627\u0644\u062d\u062f","Border width":"\u0639\u0631\u0636 \u0627\u0644\u062d\u062f","Bottom":"\u0623\u0633\u0641\u0644","Browse files":"\u062a\u0635\u0641\u0651\u062d \u0627\u0644\u0645\u0644\u0641\u0651\u0627\u062a","Browse for an image":"\u0627\u0633\u062a\u0639\u0631\u0627\u0636 \u0635\u0648\u0631\u0629","Browse links":"\u062a\u0635\u0641\u0651\u062d \u0627\u0644\u0631\u0648\u0627\u0628\u0637","Bullet list":"\u0644\u0627\u0626\u062d\u0629 \u0645\u0646\u0642\u0651\u0637\u0629","Cancel":"\u0625\u0644\u063a\u0627\u0621","Caption":"\u062a\u0633\u0645\u064a\u0629 \u062a\u0648\u0636\u064a\u062d\u064a\u0629","Cell":"\u062e\u0644\u064a\u0629","Cell padding":"\u062a\u0628\u0637\u064a\u0646 \u0627\u0644\u062e\u0644\u064a\u0629","Cell properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062e\u0644\u064a\u0629","Cell spacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u0627\u064a\u0627","Cell styles":"\u0623\u0646\u0645\u0627\u0637 \u0627\u0644\u062e\u0644\u0627\u064a\u0627","Cell type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629","Center":"\u0648\u0633\u0637","Characters":"\u0627\u0644\u0623\u062d\u0631\u0641","Characters (no spaces)":"\u0627\u0644\u0623\u062d\u0631\u0641 (\u062f\u0648\u0646 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a)","Circle":"\u062f\u0627\u0626\u0631\u0629","Class":"\u0627\u0644\u0641\u0626\u0629","Clear formatting":"\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062a\u0646\u0633\u064a\u0642","Close":"\u0623\u063a\u0644\u0642","Code":"\u0643\u0648\u062f","Code sample...":"\u0639\u064a\u0646\u0629 \u0627\u0644\u0631\u0645\u0632...","Code view":"\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0645\u0648\u0632","Color Picker":"\u0645\u0646\u062a\u0642\u064a \u0627\u0644\u0623\u0644\u0648\u0627\u0646","Color swatch":"\u0639\u064a\u0646\u0627\u062a \u0627\u0644\u0623\u0644\u0648\u0627\u0646","Cols":"\u0623\u0639\u0645\u062f\u0629","Column":"\u0639\u0645\u0648\u062f","Column clipboard actions":"\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u0627\u0644\u062d\u0627\u0641\u0638\u0629 \u0641\u064a \u0627\u0644\u0639\u0645\u0648\u062f","Column group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0623\u0639\u0645\u062f\u0629","Column header":"\u0631\u0623\u0633 \u0627\u0644\u0639\u0645\u0648\u062f","Constrain proportions":"\u0648\u0636\u0639 \u062d\u062f \u0639\u0644\u0649 \u062a\u0646\u0627\u0633\u0628 \u0627\u0644\u0623\u0628\u0639\u0627\u062f","Copy":"\u0646\u0633\u062e","Copy column":"\u0646\u0633\u062e \u0627\u0644\u0639\u0627\u0645\u0648\u062f","Copy row":"\u0646\u0633\u062e \u0627\u0644\u0635\u0641","Could not find the specified string.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u062d\u062f\u062f.","Could not load emojis":"\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0629","Count":"\u0627\u0644\u0639\u062f\u062f","Currency":"\u0627\u0644\u0639\u0645\u0644\u0629","Current window":"\u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629","Custom color":"\u0644\u0648\u0646 \u0645\u062e\u0635\u0635","Custom...":"\u062a\u062e\u0635\u064a\u0635...","Cut":"\u0642\u0635","Cut column":"\u0642\u0635 \u0627\u0644\u0639\u0627\u0645\u0648\u062f","Cut row":"\u0642\u0635 \u0627\u0644\u0635\u0641","Dark Blue":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","Dark Gray":"\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646","Dark Green":"\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646","Dark Orange":"\u0628\u0631\u062a\u0642\u0627\u0644\u064a \u062f\u0627\u0643\u0646","Dark Purple":"\u0623\u0631\u062c\u0648\u0627\u0646\u064a \u062f\u0627\u0643\u0646","Dark Red":"\u0623\u062d\u0645\u0631 \u062f\u0627\u0643\u0646","Dark Turquoise":"\u0641\u064a\u0631\u0648\u0632\u064a \u062f\u0627\u0643\u0646","Dark Yellow":"\u0623\u0635\u0641\u0631 \u062f\u0627\u0643\u0646","Dashed":"\u0645\u062a\u0642\u0637\u0639","Date/time":"\u0627\u0644\u062a\u0627\u0631\u064a\u062e/\u0627\u0644\u0648\u0642\u062a","Decrease indent":"\u062a\u0642\u0644\u064a\u0635 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","Default":"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a","Delete accordion":"\u062d\u0630\u0641 \u0627\u0644\u0623\u0643\u0648\u0631\u062f\u064a\u0648\u0646","Delete column":"\u062d\u0630\u0641 \u0639\u0645\u0648\u062f","Delete row":"\u062d\u0630\u0641 \u0635\u0641","Delete table":"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","Dimensions":"\u0623\u0628\u0639\u0627\u062f \u0627\u0644\u0635\u0648\u0631\u0629","Disc":"\u0642\u0631\u0635","Div":"\u062a\u0642\u0633\u064a\u0645","Document":"\u0627\u0644\u0645\u0633\u062a\u0646\u062f","Dotted":"\u0645\u0646\u0642\u0637","Double":"\u0645\u0632\u062f\u0648\u062c","Drop an image here":"\u0625\u0641\u0644\u0627\u062a \u0635\u0648\u0631\u0629 \u0647\u0646\u0627","Dropped file type is not supported":"\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0630\u064a \u062a\u0645 \u0627\u0633\u0642\u0627\u0637\u0647 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645","Edit":"\u062a\u062d\u0631\u064a\u0631","Embed":"\u062f\u0645\u062c","Emojis":"\u0623\u064a\u0642\u0648\u0646\u0627\u062a \u062a\u0639\u0628\u064a\u0631\u064a\u0629","Emojis...":"\u0648\u062c\u0648\u0647 \u062a\u0639\u0628\u064a\u0631\u064a\u0647...","Error":"\u062e\u0637\u0623","Error: Form submit field collision.":"\u062e\u0637\u0623: \u062a\u0636\u0627\u0631\u0628 \u0641\u064a \u062d\u0642\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.","Error: No form element found.":"\u0627\u0644\u062e\u0637\u0623: \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631 \u0646\u0645\u0648\u0630\u062c.","Extended Latin":"\u0627\u0644\u0644\u0627\u062a\u064a\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0633\u0639\u0629","Failed to initialize plugin: {0}":"\u0641\u0634\u0644\u062a \u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}","Failed to load plugin url: {0}":"\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 url \u0644\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}","Failed to load plugin: {0} from url {1}":"\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0} \u0645\u0646 url \u200f{1}","Failed to upload image: {0}":"\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629: {0}","File":"\u0645\u0644\u0641","Find":"\u0628\u062d\u062b","Find (if searchreplace plugin activated)":"\u0627\u0644\u0628\u062d\u062b (\u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a \u0644\u0644\u0628\u062d\u062b \u0645\u0641\u0639\u0644\u0627\u064b)","Find and Replace":"\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644","Find and replace...":"\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644...","Find in selection":"\u0627\u0644\u0628\u062d\u062b \u0628\u0627\u0644\u0645\u062d\u062f\u062f","Find whole words only":"\u0628\u062d\u062b \u0643\u0644\u0645\u0627\u062a \u0628\u0623\u0643\u0645\u0644\u0647\u0627 \u0641\u0642\u0637","Flags":"\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062a","Focus to contextual toolbar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u0642","Focus to element path":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0639\u0646\u0635\u0631","Focus to menubar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645","Focus to toolbar":"\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","Font":"\u0627\u0644\u062e\u0637","Font size {0}":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637 {0}","Font sizes":"\u0623\u062d\u062c\u0627\u0645 \u0627\u0644\u062e\u0637\u0648\u0637","Font {0}":"\u0627\u0644\u062e\u0637 {0}","Fonts":"\u0627\u0644\u062e\u0637\u0648\u0637","Food and Drink":"\u0627\u0644\u0623\u0637\u0639\u0645\u0629 \u0648\u0627\u0644\u0645\u0634\u0631\u0648\u0628\u0627\u062a","Footer":"\u062a\u0630\u064a\u064a\u0644","Format":"\u062a\u0646\u0633\u064a\u0642","Format {0}":"\u0627\u0644\u062a\u0646\u0633\u064a\u0642 {0}","Formats":"\u0627\u0644\u062a\u0646\u0633\u064a\u0642\u0627\u062a","Fullscreen":"\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629","G":"\u0627\u0644\u0623\u062e\u0636\u0631","General":"\u0639\u0627\u0645","Gray":"\u0631\u0645\u0627\u062f\u064a","Green":"\u0623\u062e\u0636\u0631","Green component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u062e\u0636\u0631","Groove":"\u0641\u062c\u0648\u0629","Handy Shortcuts":"\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0645\u0633\u0627\u0639\u0650\u062f\u0629","Header":"\u0627\u0644\u0631\u0623\u0633","Header cell":"\u062e\u0644\u064a\u0629 \u0627\u0644\u0639\u0646\u0648\u0627\u0646","Heading 1":"\u0631\u0623\u0633 \u0642\u0644\u0645 1","Heading 2":"\u0631\u0623\u0633 \u0642\u0644\u0645 2","Heading 3":"\u0631\u0623\u0633 \u0642\u0644\u0645 3","Heading 4":"\u0631\u0623\u0633 \u0642\u0644\u0645 4","Heading 5":"\u0631\u0623\u0633 \u0642\u0644\u0645 5","Heading 6":"\u0631\u0623\u0633 \u0642\u0644\u0645 6","Headings":"\u0631\u0624\u0648\u0633 \u0623\u0642\u0644\u0627\u0645","Height":"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639","Help":"\u062a\u0639\u0644\u064a\u0645\u0627\u062a","Hex color code":"\u0643\u0648\u062f \u0627\u0644\u0644\u0648\u0646 \u0628\u0635\u064a\u063a\u0629 Hex","Hidden":"\u0645\u062e\u0641\u064a","Horizontal align":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0623\u0641\u0642\u064a\u0629","Horizontal line":"\u062e\u0637 \u0623\u0641\u0642\u064a","Horizontal space":"\u0627\u0644\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0623\u0641\u0642\u064a\u0629","ID":"\u0627\u0644\u0645\u0639\u0631\u0651\u0641","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0628\u062f\u0623 \u0627\u0644\u0645\u0639\u0631\u0651\u0641 \u0628\u062d\u0631\u0641\u060c \u0645\u062a\u0628\u0648\u0639\u064b\u0627 \u0641\u0642\u0637 \u0628\u0623\u062d\u0631\u0641 \u0623\u0648 \u0623\u0631\u0642\u0627\u0645 \u0623\u0648 \u0634\u0631\u0637\u0627\u062a \u0623\u0648 \u0646\u0642\u0627\u0637 \u0623\u0648 \u0646\u0642\u0637\u062a\u0627\u0646 \u0623\u0648 \u0634\u0631\u0637\u0627\u062a \u0633\u0641\u0644\u064a\u0629.","Image is decorative":"\u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0632\u062e\u0631\u0641\u0629","Image list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631","Image title":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629","Image...":"\u0635\u0648\u0631\u0629...","ImageProxy HTTP error: Could not find Image Proxy":"\u062e\u0637\u0623 \u0641\u064a ImageProxy HTTP: \u062a\u0639\u0630\u0651\u064e\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u0643\u064a\u0644 \u0627\u0644\u0635\u0648\u0631","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u0639\u0646\u0648\u0627\u0646 \u0648\u0643\u064a\u0644 \u0627\u0644\u0635\u0648\u0631 \u0644\u0640HTTP: \u0639\u0646\u0648\u0627\u0646 \u0648\u0643\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629 \u062e\u0627\u0637\u0626","ImageProxy HTTP error: Rejected request":"\u062e\u0637\u0623 \u0641\u064a ImageProxy HTTP: \u0637\u0644\u0628 \u0645\u0631\u0641\u0648\u0636","ImageProxy HTTP error: Unknown ImageProxy error":"\u062e\u0637\u0623 \u0641\u064a \u0639\u0646\u0648\u0627\u0646 \u0648\u0643\u064a\u0644 \u0627\u0644\u0635\u0648\u0631 \u0644\u0640HTTP: \u0648\u0643\u064a\u0644 \u0635\u0648\u0631\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641","Increase indent":"\u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","Inline":"\u0639\u0644\u0649 \u062e\u0637 \u0648\u0627\u062d\u062f","Insert":"\u0625\u062f\u0631\u0627\u062c","Insert Template":"\u0625\u062f\u062e\u0627\u0644 \u0642\u0627\u0644\u0628","Insert accordion":"","Insert column after":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0628\u0639\u062f","Insert column before":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0642\u0628\u0644","Insert date/time":"\u0625\u062f\u0631\u0627\u062c \u062a\u0627\u0631\u064a\u062e/\u0648\u0642\u062a","Insert image":"\u0625\u062f\u0631\u0627\u062c \u0635\u0648\u0631\u0629","Insert link (if link plugin activated)":"\u0625\u062f\u0631\u0627\u062c \u0627\u0631\u062a\u0628\u0627\u0637 (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a \u0644\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u0641\u0639\u0644\u0627\u064b)","Insert row after":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0628\u0639\u062f","Insert row before":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0642\u0628\u0644","Insert table":"\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644","Insert template...":"\u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628...","Insert video":"\u0625\u062f\u0631\u0627\u062c \u0641\u064a\u062f\u064a\u0648","Insert/Edit code sample":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0643\u0648\u062f \u0628\u0631\u0645\u062c\u064a","Insert/edit image":"\u0625\u062f\u0631\u0627\u062c/\u062a\u0639\u062f\u064a\u0644 \u0635\u0648\u0631\u0629","Insert/edit link":"\u0627\u062f\u0631\u0627\u062c / \u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","Insert/edit media":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629","Insert/edit video":"\u0625\u062f\u0631\u0627\u062c/\u062a\u062d\u0631\u064a\u0631 \u0641\u064a\u062f\u064a\u0648","Inset":"\u0645\u062c\u0645\u0648\u0639\u0629 \u062f\u0627\u062e\u0644\u064a\u0629","Invalid hex color code: {0}":"\u0643\u0648\u062f \u0627\u0644\u0644\u0648\u0646 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d: {0}","Invalid input":"\u0645\u062f\u062e\u0644 \u063a\u064a\u0631 \u0633\u0644\u064a\u0645","Italic":"\u0645\u0627\u0626\u0644","Justify":"\u0627\u0644\u0645\u0633\u0627\u0648\u0627\u0629","Keyboard Navigation":"\u0627\u0644\u062a\u0646\u0642\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d","Language":"\u0627\u0644\u0644\u063a\u0629","Learn more...":"\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f...","Left":"\u064a\u0633\u0627\u0631","Left to right":"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u064a \u0627\u0644\u064a\u0645\u064a\u0646","Light Blue":"\u0623\u0632\u0631\u0642 \u0641\u0627\u062a\u062d","Light Gray":"\u0631\u0645\u0627\u062f\u064a \u0641\u0627\u062a\u062d","Light Green":"\u0623\u062e\u0636\u0631 \u0641\u0627\u062a\u062d","Light Purple":"\u0628\u0646\u0641\u0633\u062c\u064a \u0641\u0627\u062a\u062d","Light Red":"\u0623\u062d\u0645\u0631 \u0641\u0627\u062a\u062d","Light Yellow":"\u0623\u0635\u0641\u0631 \u0641\u0627\u062a\u062d","Line height":"\u0627\u0631\u062a\u0641\u0627\u0639 \u0627\u0644\u062e\u0637","Link list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637","Link...":"\u0631\u0627\u0628\u0637...","List Properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0627\u0626\u0645\u0629","List properties...":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0627\u0626\u0645\u0629...","Loading emojis...":"\u062c\u0627\u0631 \u062a\u062d\u0645\u064a\u0644 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u062a\u0639\u0628\u064a\u0631\u064a\u0629...","Loading...":"\u062a\u062d\u0645\u064a\u0644...","Lower Alpha":"\u062d\u0631\u0641 \u0623\u0628\u062c\u062f\u064a \u0635\u063a\u064a\u0631","Lower Greek":"\u062d\u0631\u0648\u0641 \u064a\u0648\u0646\u0627\u0646\u064a\u0629 \u0635\u063a\u064a\u0631\u0629","Lower Roman":"\u0644\u0627\u062a\u064a\u0646\u064a \u0635\u063a\u064a\u0631","Match case":"\u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u062d\u0627\u0644\u0629","Mathematical":"\u0631\u064a\u0627\u0636\u064a\u0629","Media poster (Image URL)":"\u0645\u0644\u0635\u0642 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 (\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0629)","Media...":"\u0627\u0644\u0648\u0633\u0627\u0626\u0637...","Medium Blue":"\u0623\u0632\u0631\u0642 \u0645\u062a\u0648\u0633\u0637","Medium Gray":"\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637","Medium Purple":"\u0628\u0646\u0641\u0633\u062c\u064a \u0645\u062a\u0648\u0633\u0637","Merge cells":"\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627","Middle":"\u0648\u0633\u0637","Midnight Blue":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646 \u062c\u062f\u0627\u064b","More...":"\u0627\u0644\u0645\u0632\u064a\u062f...","Name":"\u0627\u0644\u0627\u0633\u0645","Navy Blue":"\u0623\u0632\u0631\u0642 \u0646\u064a\u0644\u064a","New document":"\u0645\u0644\u0641 \u062c\u062f\u064a\u062f","New window":"\u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629","Next":"\u0627\u0644\u062a\u0627\u0644\u064a","No":"\u0644\u0627","No alignment":"\u0628\u0644\u0627 \u0645\u062d\u0627\u0630\u0627\u0629","No color":"\u0628\u0644\u0627 \u0644\u0648\u0646","Nonbreaking space":"\u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629","None":"\u0644\u0627 \u0634\u064a\u0621","Numbered list":"\u0644\u0627\u0626\u062d\u0629 \u0645\u0631\u0642\u0651\u0645\u0629","OR":"\u0623\u0648","Objects":"\u0643\u0627\u0626\u0646\u0627\u062a","Ok":"\u062d\u0633\u0646\u0627\u064b","Open help dialog":"\u0627\u0641\u062a\u062d \u062d\u0648\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a","Open link":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637","Open link in...":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u064a...","Open popup menu for split buttons":"\u0627\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629 \u0644\u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0627\u0646\u0642\u0633\u0627\u0645","Orange":"\u0628\u0631\u062a\u0642\u0627\u0644\u064a","Outset":"\u0645\u062c\u0645\u0648\u0639\u0629 \u062e\u0627\u0631\u062c\u064a\u0629","Page break":"\u0641\u0627\u0635\u0644 \u0635\u0641\u062d\u0627\u062a","Paragraph":"\u0641\u0642\u0631\u0629","Paste":"\u0644\u0635\u0642","Paste as text":"\u0644\u0635\u0642 \u0643\u0646\u0635","Paste column after":"\u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u0645\u0648\u062f \u0628\u0639\u062f","Paste column before":"\u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u0645\u0648\u062f \u0642\u0628\u0644","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0644\u0635\u0642 \u062d\u0627\u0644\u064a\u0627\u064b \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u062e\u0627\u0644\u064a \u0645\u0646 \u0627\u0644\u062a\u0646\u0633\u064a\u0642. \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0633\u064a\u062a\u0645 \u0644\u0635\u0642\u0647\u0627 \u0645\u0646 \u063a\u064a\u0631 \u062a\u0646\u0633\u064a\u0642 \u062d\u062a\u0649 \u062a\u0642\u0648\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631.","Paste or type a link":"\u0627\u0644\u0635\u0642 \u0627\u0631\u062a\u0628\u0627\u0637 \u0623\u0648 \u0627\u0643\u062a\u0628\u0647","Paste row after":"\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0628\u0639\u062f","Paste row before":"\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0642\u0628\u0644","Paste your embed code below:":"\u0644\u0635\u0642 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0645\u062f\u0645\u062c \u0623\u062f\u0646\u0627\u0647:","People":"\u0623\u0634\u062e\u0627\u0635","Plugins":"\u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629","Plugins installed ({0}):":"\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629 \u0627\u0644\u0645\u062b\u0628\u062a\u0629 ({0}):","Powered by {0}":"\u0645\u062f\u0639\u0648\u0645 \u0628\u0648\u0627\u0633\u0637\u0629 {0}","Pre":"\u0645\u0627\u0642\u0628\u0644","Preferences":"\u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a","Preformatted":"\u0645\u0646\u0633\u0642 \u0645\u0633\u0628\u0642\u064b\u0627","Premium plugins:":"\u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629 \u0627\u0644\u0645\u0645\u064a\u0632\u0629:","Press the Up and Down arrow keys to resize the editor.":".","Press the arrow keys to resize the editor.":".","Press {0} for help":"\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 {0} \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629","Preview":"\u0639\u0631\u0636","Previous":"\u0627\u0644\u0633\u0627\u0628\u0642","Print":"\u0637\u0628\u0627\u0639\u0629","Print...":"\u0637\u0628\u0627\u0639\u0629...","Purple":"\u0628\u0646\u0641\u0633\u062c\u064a","Quotations":"\u0639\u0631\u0648\u0636 \u0627\u0644\u0623\u0633\u0639\u0627\u0631","R":"\u0627\u0644\u0623\u062d\u0645\u0631","Range 0 to 255":"\u0627\u0644\u0645\u062f\u0649 \u0645\u0646 0 \u0625\u0644\u0649 255","Red":"\u0623\u062d\u0645\u0631","Red component":"\u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u062d\u0645\u0631","Redo":"\u0625\u0639\u0627\u062f\u0629","Remove":"\u0625\u0632\u0627\u0644\u0629","Remove color":"\u0625\u0632\u0627\u0644\u0629 \u0644\u0648\u0646","Remove link":"\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0631\u0627\u0628\u0637","Replace":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644","Replace all":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644","Replace with":"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0628\u0640","Resize":"\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u062d\u062c\u0645","Restore last draft":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0623\u062e\u0631 \u0645\u0633\u0648\u062f\u0629","Reveal or hide additional toolbar items":"\u0625\u0638\u0647\u0627\u0631 \u0639\u0646\u0627\u0635\u0631 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629 \u0623\u0648 \u0625\u062e\u0641\u0627\u0624\u0647\u0627","Rich Text Area":"\u0645\u0633\u0627\u062d\u0629 \u0646\u064e\u0635 \u0645\u0646\u0633\u0642","Rich Text Area. Press ALT-0 for help.":"\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-F9 \u0644\u0644\u0642\u0627\u0626\u0645\u0629. \u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629","Ridge":"\u0646\u062a\u0648\u0621","Right":"\u064a\u0645\u064a\u0646","Right to left":"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u064a \u0627\u0644\u064a\u0633\u0627\u0631","Row":"\u0635\u0641","Row clipboard actions":"\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u0627\u0644\u062d\u0627\u0641\u0638\u0629 \u0641\u064a \u0627\u0644\u0635\u0641","Row group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0635\u0641\u0648\u0641","Row header":"\u0631\u0623\u0633 \u0627\u0644\u0635\u0641","Row properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0641","Row type":"\u0646\u0648\u0639 \u0627\u0644\u0635\u0641","Rows":"\u0635\u0641\u0648\u0641","Save":"\u062d\u0641\u0638","Save (if save plugin activated)":"\u062d\u0641\u0638 (\u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a \u0644\u0644\u062d\u0641\u0638 \u0645\u0641\u0639\u0644\u0627\u064b)","Scope":"\u0627\u0644\u0646\u0637\u0627\u0642","Search":"\u0628\u062d\u062b","Select all":"\u0623\u062e\u062a\u0631 \u0627\u0644\u0643\u0644","Select...":"\u062a\u062d\u062f\u064a\u062f...","Selection":"\u0627\u0644\u062a\u062d\u062f\u064a\u062f","Shortcut":"\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631","Show blocks":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u062a\u0644","Show caption":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629","Show invisible characters":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u062d\u0631\u0641 \u063a\u064a\u0631 \u0627\u0644\u0645\u0631\u0626\u064a\u0629","Size":"\u0627\u0644\u062d\u062c\u0645","Solid":"\u0633\u0645\u064a\u0643","Source":"\u0645\u0635\u062f\u0631 \u0627\u0644\u0635\u0648\u0631\u0629","Source code":"\u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0645\u0635\u062f\u0631\u064a","Special Character":"\u062d\u0631\u0641 \u062e\u0627\u0635","Special character...":"\u062d\u0631\u0641 \u062e\u0627\u0635...","Split cell":"\u062a\u0642\u0633\u064a\u0645 \u062e\u0644\u064a\u0629","Square":"\u0645\u0631\u0628\u0639","Start list at number":"\u0628\u062f\u0621 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0639\u0646\u062f \u0627\u0644\u0631\u0642\u0645","Strikethrough":"\u0639\u0644\u064a\u0647 \u062e\u0637","Style":"\u0627\u0644\u0623\u0633\u0644\u0648\u0628","Subscript":"\u062a\u062d\u062a \u0627\u0644\u0646\u0635","Superscript":"\u0641\u0648\u0642 \u0627\u0644\u0646\u0635","Switch to or from fullscreen mode":"\u0627\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0623\u0648 \u0645\u0646 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629","Symbols":"\u0627\u0644\u0631\u0645\u0648\u0632","System Font":"\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645","Table":"\u062c\u062f\u0648\u0644","Table caption":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","Table properties":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644","Table styles":"\u0623\u0646\u0645\u0627\u0637 \u0627\u0644\u062c\u062f\u0627\u0648\u0644","Template":"\u0627\u0644\u0642\u0627\u0644\u0628","Templates":"\u0627\u0644\u0642\u0648\u0627\u0644\u0628","Text":"\u0627\u0644\u0646\u0635","Text color":"\u0644\u0648\u0646 \u0627\u0644\u0646\u0635","Text color {0}":"\u0644\u0648\u0646 \u0627\u0644\u0646\u0635\u0651 {0}","Text to display":"\u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u0639\u0631\u0648\u0636","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u0644\u0630\u064a \u0642\u0645\u062a \u0628\u0625\u062f\u0631\u0627\u062c\u0647 \u064a\u0634\u0628\u0647 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 mailto: \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u064a\u0628\u062f\u0648 \u0623\u0646 \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0631\u062a\u0628\u0627\u0637 \u062e\u0627\u0631\u062c\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 http:// \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u064a\u0628\u062f\u0648 \u0623\u0646 \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0631\u062a\u0628\u0627\u0637 \u062e\u0627\u0631\u062c\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 https:// \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","Title":"\u0639\u0646\u0648\u0627\u0646","To open the popup, press Shift+Enter":"\u0644\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629\u060c \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 Shift\u200f+Enter","Toggle accordion":"","Tools":"\u0627\u0644\u0623\u062f\u0648\u0627\u062a","Top":"\u0623\u0639\u0644\u0649","Travel and Places":"\u0627\u0644\u0633\u0641\u0631 \u0648\u0627\u0644\u0623\u0645\u0627\u0643\u0646 \u0633\u064a\u0627\u062d\u064a\u0629","Turquoise":"\u0641\u064a\u0631\u0648\u0632\u064a","Underline":"\u062a\u062d\u062a\u0647 \u062e\u0637","Undo":"\u062a\u0631\u0627\u062c\u0639","Upload":"\u0631\u0641\u0639","Uploading image":"\u0631\u0641\u0639 \u0635\u0648\u0631\u0629","Upper Alpha":"\u062d\u0631\u0641 \u0623\u0628\u062c\u062f\u064a \u0643\u0628\u064a\u0631","Upper Roman":"\u0644\u0627\u062a\u064a\u0646\u064a \u0643\u0628\u064a\u0631","Url":"\u0631\u0627\u0628\u0637","User Defined":"\u0645\u0639\u0631\u0651\u064e\u0641 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645","Valid":"\u0635\u062d\u064a\u062d","Version":"\u0627\u0644\u0625\u0635\u062f\u0627\u0631","Vertical align":"\u0645\u062d\u0627\u0630\u0627\u0629 \u0639\u0645\u0648\u062f\u064a\u0629","Vertical space":"\u0627\u0644\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0629","View":"\u0639\u0631\u0636","Visual aids":"\u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0627\u062a \u0627\u0644\u0628\u0635\u0631\u064a\u0629","Warn":"\u062a\u062d\u0630\u064a\u0631","White":"\u0623\u0628\u064a\u0636","Width":"\u0627\u0644\u0639\u0631\u0636","Word count":"\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a","Words":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a","Words: {0}":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a: {0}","Yellow":"\u0623\u0635\u0641\u0631","Yes":"\u0646\u0639\u0645","You are using {0}":"\u0623\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0644\u062f\u064a\u0643 \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0645 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u061f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629. \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Ctrl+X/C/V \u0628\u062f\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643.","_dir":"rtl","alignment":"\u0645\u062d\u0627\u0630\u0627\u0629","austral sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0623\u0648\u0633\u062a\u0631\u0627\u0644","cedi sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0633\u064a\u062f\u064a","colon sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646","cruzeiro sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0643\u0631\u0648\u0632\u064a\u0631\u0648","currency sign":"\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629","dollar sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0644\u0627\u0631","dong sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0646\u062c","drachma sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0631\u0627\u062e\u0645\u0627","euro-currency sign":"\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629 \u0627\u0644\u064a\u0648\u0631\u0648","example":"\u0645\u062b\u0627\u0644","formatting":"\u062a\u0646\u0633\u064a\u0642","french franc sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0641\u0631\u0646\u0643 \u0627\u0644\u0641\u0631\u0646\u0633\u064a","german penny symbol":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u0646\u0633 \u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a","guarani sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062c\u0648\u0627\u0631\u0627\u0646\u064a","history":"\u0627\u0644\u0645\u062d\u0641\u0648\u0638\u0627\u062a","hryvnia sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0647\u0631\u064a\u0641\u0646\u064a\u0627","indentation":"\u0645\u0633\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629","indian rupee sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629 \u0627\u0644\u0647\u0646\u062f\u064a\u0629","kip sign":"\u0639\u0645\u0644\u0629 \u0627\u0644\u0643\u064a\u0628","lira sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629","livre tournois sign":"\u0639\u0644\u0627\u0645\u0629 \u0644\u064a\u0641\u0631 \u062a\u0648\u0631\u0646\u0648\u064a\u0632","manat sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0646\u0627\u062a","mill sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0644","naira sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u064a\u0631\u0629","new sheqel sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0634\u064a\u0643\u0644 \u0627\u0644\u062c\u062f\u064a\u062f","nordic mark sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0648\u0631\u062f\u0643","peseta sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u064a\u062a\u0627","peso sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u0648","ruble sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u0644","rupee sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629","spesmilo sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0627\u0633\u0628\u064a\u0632\u0645\u0627\u064a\u0644\u0648","styles":"\u0627\u0644\u0623\u0646\u0645\u0627\u0637","tenge sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u064a\u0646\u062c","tugrik sign":"\u0639\u0645\u0644\u0629 \u0627\u0644\u062a\u0648\u063a\u0631\u064a\u0643","turkish lira sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629 \u0627\u0644\u062a\u0631\u0643\u064a\u0629","won sign":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0648\u0646","yen character":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646","yen/yuan character variant one":"\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u062f\u064a\u0644\u0629 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646/\u0627\u0644\u064a\u0648\u0627\u0646","yuan character":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646","yuan character, in hong kong and taiwan":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646 \u0641\u064a \u0647\u0648\u0646\u062c \u0643\u0648\u0646\u062c \u0648\u062a\u0627\u064a\u0648\u0627\u0646","{0} characters":"{0} \u0631\u0645\u0648\u0632","{0} columns, {1} rows":"","{0} words":"{0} \u0645\u0646 \u0627\u0644\u0643\u0644\u0645\u0627\u062a"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/az.js b/staticfiles/tinymce/langs/az.js new file mode 100644 index 0000000..c9d28e8 --- /dev/null +++ b/staticfiles/tinymce/langs/az.js @@ -0,0 +1 @@ +tinymce.addI18n("az",{"#":"#","Accessibility":"\u018fl\xe7atanl\u0131q","Accordion":"Akkordion","Accordion body...":"Akkordion m\u0259tni...","Accordion summary...":"Akkordion \u015f\u0259rhi...","Action":"\u018fmr","Activity":"F\u0259aliyy\u0259t","Address":"Adres","Advanced":"Geni\u015fl\u0259nmi\u015f","Align":"D\xfczl\u0259ndir","Align center":"M\u0259rk\u0259z \xfczr\u0259","Align left":"Sol t\u0259r\u0259f \xfczr\u0259","Align right":"Sa\u011f t\u0259r\u0259f \xfczr\u0259","Alignment":"D\xfczl\u0259ndirm\u0259","Alignment {0}":"Yerl\u0259\u015fdirm\u0259 {0}","All":"Ham\u0131s\u0131","Alternative description":"Alternativ t\u0259svir","Alternative source":"Alternativ m\u0259nb\u0259","Alternative source URL":"Alternativ m\u0259nb\u0259 URL-i","Anchor":"L\xf6vb\u0259r","Anchor...":"Anchor","Anchors":"L\xf6vb\u0259rl\u0259r","Animals and Nature":"Heyvanlar v\u0259 t\u0259bi\u0259t","Arrows":"Oxlar","B":"B","Background color":"Arxafon r\u0259ngi","Background color {0}":"Arxa plan r\u0259ngi {0}","Black":"Qara","Block":"Blokla","Block {0}":"Blok {0}","Blockquote":"Sitat","Blocks":"Bloklar","Blue":"Mavi","Blue component":"G\xf6y komponent","Body":"K\xfctl\u0259","Bold":"Qal\u0131n","Border":"\xc7\u0259r\xe7iv\u0259","Border color":"\xc7\u0259r\xe7iv\u0259 r\u0259ngi","Border style":"K\u0259narl\u0131q stili","Border width":"K\u0259narl\u0131q geni\u015fliyi","Bottom":"A\u015fa\u011f\u0131","Browse files":"Fayllar\u0131 g\xf6zd\u0259n ke\xe7ir","Browse for an image":"\u015e\u0259kil se\xe7","Browse links":"Linkl\u0259ri g\xf6zd\u0259n g\xf6zd\u0259n ke\xe7ir","Bullet list":"G\xfcll\u0259 siyah\u0131","Cancel":"L\u0259\u011fv et","Caption":"Ba\u015flan\u011f\u0131c","Cell":"H\xfccr\u0259","Cell padding":"H\xfccr\u0259l\u0259rin sah\u0259l\u0259ri","Cell properties":"H\xfccr\u0259nin x\xfcsusiyy\u0259tl\u0259ri","Cell spacing":"H\xfccr\u0259l\u0259rin aras\u0131nda m\u0259saf\u0259","Cell styles":"Xana still\u0259ri","Cell type":"H\xfccr\u0259nin tipi","Center":"M\u0259rk\u0259z \xfczr\u0259","Characters":"Simvollar","Characters (no spaces)":"Simvollar (bo\u015fluqsuz)","Circle":"Dair\u0259","Class":"Sinif","Clear formatting":"Format\u0131 t\u0259mizl\u0259","Close":"Ba\u011fla","Code":"Kod","Code sample...":"Kod n\xfcmun\u0259si","Code view":"Kod g\xf6r\xfcn\xfc\u015f\xfc","Color Picker":"R\u0259ng se\xe7ici","Color swatch":"R\u0259ng n\xfcmun\u0259si","Cols":"S\xfctunlar","Column":"S\xfctun","Column clipboard actions":"S\xfctun m\xfcbadil\u0259 buferi h\u0259r\u0259k\u0259tl\u0259ri","Column group":"S\xfctunun qrupu","Column header":"S\xfctun ba\u015fl\u0131\u011f\u0131","Constrain proportions":"Nisb\u0259tl\u0259rin saxlan\u0131lmas\u0131","Copy":"K\xf6\xe7\xfcr","Copy column":"S\xfctunu kopyala","Copy row":"S\u0259tiri k\xf6\xe7\xfcr","Could not find the specified string.":"G\xf6st\u0259ril\u0259n s\u0259tiri tapmaq olmur","Could not load emojis":"Emoji y\xfckl\u0259m\u0259k m\xfcmk\xfcn olmad\u0131","Count":"Say","Currency":"Valyuta","Current window":"Cari p\u0259nc\u0259r\u0259","Custom color":"\xc7\u0259kilm\u0259 r\u0259ng","Custom...":"\xc7\u0259kilm\u0259...","Cut":"K\u0259s","Cut column":"S\xfctunu k\u0259s","Cut row":"S\u0259tiri k\u0259s","Dark Blue":"T\xfcnd g\xf6y","Dark Gray":"T\xfcnd boz","Dark Green":"T\xfcnd ya\u015f\u0131l","Dark Orange":"T\xfcnd nar\u0131nc\u0131","Dark Purple":"T\xfcnd b\u0259n\xf6v\u015f\u0259yi","Dark Red":"T\xfcnd q\u0131rm\u0131z\u0131","Dark Turquoise":"T\xfcnd firuz\u0259yi","Dark Yellow":"T\xfcnd sar\u0131","Dashed":"S\u0131n\u0131q x\u0259tli","Date/time":"Tarix/saat","Decrease indent":"Bo\u015flu\u011fu azalt","Default":"Susmaya g\xf6r\u0259","Delete accordion":"Akkordionu silin","Delete column":"S\xfctunu sil","Delete row":"S\u0259tri sil","Delete table":"C\u0259dv\u0259li sil","Dimensions":"\xd6l\xe7\xfcl\u0259r","Disc":"Disk","Div":"Div","Document":"S\u0259n\u0259d","Dotted":"N\xf6qt\u0259li","Double":"\u0130kiqat","Drop an image here":"\u015e\u0259kli buraya s\xfcr\xfckl\u0259yin","Dropped file type is not supported":"Se\xe7ilmi\u015f fayl n\xf6v\xfc d\u0259st\u0259kl\u0259nmir","Edit":"Redakt\u0259 et","Embed":"\u018flav\u0259 etm\u0259k \xfc\xe7\xfcn kod","Emojis":"Emoji","Emojis...":"Emojil\u0259r...","Error":"X\u0259ta","Error: Form submit field collision.":"X\u0259ta: Forma g\xf6nd\u0259rm\u0259 sah\u0259sind\u0259 toqqu\u015fma.","Error: No form element found.":"X\u0259ta: He\xe7 bir forma elementi tap\u0131lmad\u0131.","Extended Latin":"Geni\u015fl\u0259ndirilmi\u015f Lat\u0131n","Failed to initialize plugin: {0}":"Qo\u015fman\u0131 i\u015f\u0259 salmaq al\u0131nmad\u0131: {0}","Failed to load plugin url: {0}":"Qo\u015fma url-i y\xfckl\u0259nm\u0259di: {0}","Failed to load plugin: {0} from url {1}":"Qo\u015fma y\xfckl\u0259nm\u0259di: {0} urldan {1}","Failed to upload image: {0}":"\u015e\u0259kil y\xfckl\u0259nm\u0259di: {0}","File":"Fayl","Find":"Tap","Find (if searchreplace plugin activated)":"Tap (\u0259g\u0259r axtar\u0131\u015f \u0259lav\u0259si aktivdirs\u0259)","Find and Replace":"Tap v\u0259 d\u0259yi\u015fdir","Find and replace...":"Tap\u0131n v\u0259 d\u0259yi\u015fdirin","Find in selection":"Se\xe7imd\u0259 tap","Find whole words only":"Yaln\u0131z b\xfct\xf6v s\xf6zl\u0259ri tap\u0131n","Flags":"Bayraqlar","Focus to contextual toolbar":"Kontekst menyuya diqq\u0259t et","Focus to element path":"Elementin m\u0259nb\u0259yin\u0259 diqq\u0259t et","Focus to menubar":"Menyu \xe7ubu\u011funa diqq\u0259t et","Focus to toolbar":"Al\u0259tl\u0259r \xe7ubu\u011funa diqq\u0259t et","Font":"\u015erift","Font size {0}":"M\u0259tn \xf6l\xe7\xfcs\xfc","Font sizes":"\u015erift \xf6l\xe7\xfcl\u0259ri","Font {0}":"\u015erift {0}","Fonts":"Fontlar","Food and Drink":"Yem\u0259k v\u0259 i\xe7ki","Footer":"\u018fn a\u015fa\u011f\u0131","Format":"Format","Format {0}":"Format {0}","Formats":"Formatlar","Fullscreen":"Tam ekran rejimi","G":"G","General":"\xdcmumi","Gray":"Boz","Green":"Ya\u015f\u0131l","Green component":"Ya\u015f\u0131l komponent","Groove":"\xc7uxurlu","Handy Shortcuts":"Laz\u0131ml\u0131 q\u0131sayollar","Header":"Ba\u015fl\u0131q","Header cell":"H\xfccr\u0259nin ba\u015fl\u0131\u011f\u0131","Heading 1":"Ba\u015fl\u0131q 1","Heading 2":"Ba\u015fl\u0131q 2","Heading 3":"Ba\u015fl\u0131q 3","Heading 4":"Ba\u015fl\u0131q 4","Heading 5":"Ba\u015fl\u0131q 5","Heading 6":"Ba\u015fl\u0131q 6","Headings":"Ba\u015fl\u0131qlar","Height":"H\xfcnd\xfcrl\xfcy\xfc","Help":"K\xf6m\u0259k","Hex color code":"Hex r\u0259ng kodu","Hidden":"Gizli","Horizontal align":"\xdcf\xfcqi d\xfczl\u0259ndirm\u0259","Horizontal line":"Horizontal x\u0259tt","Horizontal space":"Horizontal sah\u0259","ID":"\u0130D","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u0130D h\u0259rfl\u0259 ba\u015flamal\u0131, ondan sonra yaln\u0131z h\u0259rfl\u0259r, r\u0259q\u0259ml\u0259r, tire, n\xf6qt\u0259, iki n\xf6qt\u0259 v\u0259 ya alt x\u0259tt olmal\u0131d\u0131r.","Image is decorative":"T\u0259svir dekorativdir","Image list":"\u015e\u0259kil listi","Image title":"\u015e\u0259kil ba\u015fl\u0131\u011f\u0131","Image...":"\u015e\u0259kil","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP x\u0259tas\u0131: \u015e\u0259kil Proksisini tapmaq m\xfcmk\xfcn olmad\u0131","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP x\u0259tas\u0131: Yanl\u0131\u015f \u015e\u0259kil Proksi URL-i","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP x\u0259tas\u0131: R\u0259dd edilmi\u015f sor\u011fu","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP x\u0259tas\u0131: Nam\u0259lum ImageProxy x\u0259tas\u0131","Increase indent":"Bo\u015flu\u011fu art\u0131r","Inline":"S\u0259tir i\xe7i","Insert":"\u018flav\u0259 et","Insert Template":"\u015eablon daxil et","Insert accordion":"Akkordiona \u0259lav\u0259 edin","Insert column after":"\u018fvv\u0259lin\u0259 s\xfctun \u0259lav\u0259 et","Insert column before":"\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et","Insert date/time":"G\xfcn/tarix \u0259lav\u0259 et","Insert image":"\u015e\u0259kil yerl\u0259\u015fdir","Insert link (if link plugin activated)":"Link \u0259lav\u0259 et (\u0259g\u0259r link \u0259lav\u0259si aktivdirs\u0259)","Insert row after":"Sonras\u0131na s\u0259tir \u0259lav\u0259 et","Insert row before":"\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et","Insert table":"S\u0259tir \u0259lav\u0259 et","Insert template...":"\u015eablon daxil edin","Insert video":"Videonun \u0259lav\u0259 edilm\u0259si","Insert/Edit code sample":"Kod n\xfcmun\u0259sin\u0259 \u0259lav\u0259/d\xfcz\u0259li\u015f et","Insert/edit image":"\u015e\u0259kilin \u0259lav\u0259/redakt\u0259 edilm\u0259si","Insert/edit link":"Linkin \u0259lav\u0259/redakt\u0259 edilm\u0259si","Insert/edit media":"Media \u0259lav\u0259/d\xfcz\u0259li\u015f et","Insert/edit video":"Videonun \u0259lav\u0259/redakt\u0259 edilm\u0259si","Inset":"\u0130\xe7","Invalid hex color code: {0}":"Yanl\u0131\u015f hex r\u0259ng kodu: {0}","Invalid input":"Yaln\u0131\u015f daxiletm\u0259","Italic":"Maili","Justify":"H\u0259r iki t\u0259r\u0259f \xfczr\u0259","Keyboard Navigation":"Klaviatura naviqasiyas\u0131","Language":"Dil","Learn more...":"Daha \xe7ox \xf6yr\u0259n...","Left":"Sol t\u0259r\u0259f \xfczr\u0259","Left to right":"Soldan sa\u011fa","Light Blue":"A\xe7\u0131q mavi","Light Gray":"A\xe7\u0131q boz","Light Green":"A\xe7\u0131q ya\u015f\u0131l","Light Purple":"A\xe7\u0131q b\u0259n\xf6v\u015f\u0259yi","Light Red":"A\xe7\u0131q q\u0131rm\u0131z\u0131","Light Yellow":"A\xe7\u0131q sar\u0131","Line height":"S\u0259tir h\xfcnd\xfcrl\xfcy\xfc","Link list":"Ke\xe7id listi","Link...":"Ba\u011flant\u0131","List Properties":"Siyah\u0131 x\xfcsusiyy\u0259tl\u0259ri","List properties...":"Siyah\u0131 x\xfcsusiyy\u0259tl\u0259ri...","Loading emojis...":"Emojil\u0259r y\xfckl\u0259nir...","Loading...":"Y\xfckl\u0259nir...","Lower Alpha":"Ki\xe7ik Alfa \u0259lifbas\u0131","Lower Greek":"Ki\xe7ik Yunan \u0259lifbas\u0131","Lower Roman":"Ki\xe7ik Roma \u0259lifbas\u0131","Match case":"Registri n\u0259z\u0259r\u0259 al","Mathematical":"Riyazi","Media poster (Image URL)":"Media afi\u015fas\u0131 (\u015e\u0259kil URL)","Media...":"Media","Medium Blue":"Orta mavi","Medium Gray":"Orta boz","Medium Purple":"Orta b\u0259n\xf6v\u015f\u0259yi","Merge cells":"H\xfccr\u0259l\u0259ri birl\u0259\u015ftir","Middle":"Orta","Midnight Blue":"Gec\u0259 mavisi","More...":"Daha \xe7ox...","Name":"Ad","Navy Blue":"T\xfcnd g\xf6y","New document":"Yeni s\u0259n\u0259d","New window":"Yeni p\u0259nc\u0259r\u0259d\u0259 a\xe7\u0131ls\u0131n","Next":"N\xf6vb\u0259ti","No":"Xeyr","No alignment":"Yerl\u0259\u015fdirm\u0259siz","No color":"R\u0259ngsiz","Nonbreaking space":"Q\u0131r\u0131lmaz sah\u0259","None":"Yoxdur","Numbered list":"N\xf6mr\u0259l\u0259nmi\u015f siyah\u0131","OR":"V\u018f YA","Objects":"\u018f\u015fyalar","Ok":"Oldu","Open help dialog":"K\xf6m\u0259k p\u0259nc\u0259r\u0259sini a\xe7","Open link":"Ke\xe7idi a\xe7","Open link in...":"Ba\u011flant\u0131y\u0131 a\xe7\u0131n","Open popup menu for split buttons":"B\xf6lm\u0259 d\xfcym\u0259l\u0259ri \xfc\xe7\xfcn a\xe7\u0131lan menyunu a\xe7\u0131n","Orange":"Nar\u0131nc\u0131","Outset":"Xarici","Page break":"S\u0259hif\u0259nin q\u0131r\u0131lmas\u0131","Paragraph":"Paraqraf","Paste":"Yazd\u0131r","Paste as text":"M\u0259tn kimi \u0259lav\u0259 et","Paste column after":"S\xfctundan sonra yap\u0131\u015fd\u0131r","Paste column before":"S\xfctundan \u0259vv\u0259l yap\u0131\u015fd\u0131r","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Hal-haz\u0131rda adi m\u0259tn rejimind\u0259 yerl\u0259\u015fdirilir. M\u0259zmun sad\u0259 m\u0259tn \u015f\u0259klind\u0259 yerl\u0259\u015fdiril\u0259c\u0259k, h\u0259l\u0259 bu se\xe7imi d\u0259yi\u015fdirm\u0259.","Paste or type a link":"Ke\xe7idi yerl\u0259\u015fdirin v\u0259 ya yaz\u0131n","Paste row after":"Sonras\u0131na s\u0259tir \u0259lav\u0259 et","Paste row before":"\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et","Paste your embed code below:":"\xd6z kodunuzu a\u015fa\u011f\u0131 \u0259lav\u0259 edin:","People":"\u0130nsanlar","Plugins":"\u018flav\u0259l\u0259r","Plugins installed ({0}):":"\u018flav\u0259l\u0259r y\xfckl\u0259ndi ({0}):","Powered by {0}":"{0} t\u0259r\u0259find\u0259n t\u0259chiz edilib","Pre":"\xd6n","Preferences":"T\u0259nziml\u0259m\u0259l\u0259r","Preformatted":"\u018fvv\u0259lc\u0259d\u0259n formatland\u0131r\u0131lm\u0131\u015f","Premium plugins:":"Premium \u0259lav\u0259l\u0259r","Press the Up and Down arrow keys to resize the editor.":"Yuxar\u0131 v\u0259 a\u015fa\u011f\u0131 d\xfcym\u0259y\u0259 basaraq redaktorun \xf6l\xe7\xfcs\xfcn\xfc d\u0259yi\u015fin.","Press the arrow keys to resize the editor.":"Ox i\u015far\u0259l\u0259rin\u0259 basaraq redaktorunuzu yenid\u0259n \xf6l\xe7\xfcl\u0259ndirin.","Press {0} for help":"K\xf6m\u0259k \xfc\xe7\xfcn {0} bas\u0131n","Preview":"\u0130lkinbax\u0131\u015f","Previous":"\u018fvv\u0259lki","Print":"\xc7ap","Print...":"\xc7ap et","Purple":"B\u0259n\xf6v\u015f\u0259yi","Quotations":"T\u0259klifl\u0259r","R":"R","Range 0 to 255":"0-dan 255-\u0259 q\u0259d\u0259r diapazon","Red":"Q\u0131rm\u0131z\u0131","Red component":"Q\u0131rm\u0131z\u0131 komponent","Redo":"\u0130r\u0259li","Remove":"Sil","Remove color":"R\u0259ngi silin","Remove link":"Linki sil","Replace":"D\u0259yi\u015fdir","Replace all":"Ham\u0131s\u0131n\u0131 d\u0259yi\u015fdir","Replace with":"Bununla d\u0259yi\u015fdir","Resize":"\xd6l\xe7\xfcl\u0259ri d\u0259yi\u015f","Restore last draft":"Son layih\u0259nin b\u0259rpas\u0131","Reveal or hide additional toolbar items":"\u0130\xe7 panelinin \u0259\u015fyalar\u0131n\u0131 g\xf6st\u0259rin v\u0259 ya gizl\u0259din","Rich Text Area":"Z\u0259ngin m\u0259tn redaktoru","Rich Text Area. Press ALT-0 for help.":"Z\u0259ngin M\u0259tn Sah\u0259si. Yard\u0131m \xfc\xe7\xfcn ALT-0 d\xfcym\u0259sin\u0259 bas\u0131n.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"B\xf6y\xfck m\u0259tn sah\u0259si \u0259lav\u0259 edilib. Menyu \xfc\xe7\xfcn ALT-F9 d\xfcym\u0259sini bas\u0131n. Al\u0259tl\u0259r paneli \xfc\xe7\xfcn ALT-F10 d\xfcym\u0259sini bas\u0131n. K\xf6m\u0259k \xfc\xe7\xfcn ALT-0 d\xfcym\u0259l\u0259rin bas\u0131n.","Ridge":"U\xe7urum","Right":"Sa\u011f t\u0259r\u0259f \xfczr\u0259","Right to left":"Sa\u011fdan sola","Row":"S\u0259tir","Row clipboard actions":"S\u0259tir m\xfcbadil\u0259 buferi h\u0259r\u0259k\u0259tl\u0259ri","Row group":"S\u0259tirin qrupu","Row header":"S\u0259tir ba\u015fl\u0131\u011f\u0131","Row properties":"S\u0259trin x\xfcsusiyy\u0259tl\u0259ri","Row type":"S\u0259tirin tipi","Rows":"S\u0259tirl\u0259r","Save":"Yadda saxla","Save (if save plugin activated)":"Yadda\u015fa yaz (\u0259g\u0259r yadda\u015fa yaz \u0259lav\u0259si aktivdirs\u0259)","Scope":"Sfera","Search":"Axtar","Select all":"H\u0259r birini se\xe7","Select...":"Se\xe7...","Selection":"Se\xe7im","Shortcut":"Q\u0131sayol","Show blocks":"Bloklar\u0131 g\xf6st\u0259r","Show caption":"Ba\u015fl\u0131\u011f\u0131 g\xf6st\u0259r","Show invisible characters":"G\xf6r\xfcnm\u0259y\u0259n simvollar\u0131 g\xf6st\u0259r","Size":"\xd6l\xe7\xfc","Solid":"Qat\u0131","Source":"M\u0259nb\u0259","Source code":"M\u0259nb\u0259 kodu","Special Character":"X\xfcsusi simvol","Special character...":"X\xfcsusi simvol","Split cell":"H\xfccr\u0259l\u0259rin say\u0131","Square":"Sah\u0259","Start list at number":"Siyahinizi n\xf6mr\u0259l\u0259r il\u0259 ba\u015flay\u0131n","Strikethrough":"\xdcst\xfcnd\u0259n x\u0259tt","Style":"Stil","Subscript":"A\u015fa\u011f\u0131 indeks","Superscript":"Yuxar\u0131 indeks","Switch to or from fullscreen mode":"Tam ekran rejimin ke\xe7in v\u0259 ya \xe7\u0131x\u0131n","Symbols":"Simvollar","System Font":"Sistem Fontu","Table":"C\u0259dv\u0259l","Table caption":"C\u0259dv\u0259l ba\u015fl\u0131\u011f\u0131","Table properties":"C\u0259dv\u0259lin x\xfcsusiyy\u0259tl\u0259ri","Table styles":"C\u0259dv\u0259l still\u0259ri","Template":"\u015eablon","Templates":"\u015eablonlar","Text":"M\u0259tn","Text color":"M\u0259tnin r\u0259ngi","Text color {0}":"M\u0259tn r\u0259ngi {0}","Text to display":"G\xf6r\xfcn\u0259n yaz\u0131n\u0131n t\u0259sviri","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Daxil etdiyiniz URL bir e-mail kimi g\xf6r\xfcn\xfcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Daxil etdiyiniz URL bir e-mail kimi g\xf6r\xfcn\xfcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Yazd\u0131\u011f\u0131n\u0131z URL linki xarici linkdir. https:// g\u0259r\u0259k\xe7\u0259sini \u0259lav\u0259 ed\u0259kmi?","Title":"Ba\u015fl\u0131q","To open the popup, press Shift+Enter":"A\xe7\u0131lan p\u0259nc\u0259r\u0259ni a\xe7maq \xfc\xe7\xfcn Shift + Enter d\xfcym\u0259l\u0259rini bas\u0131n","Toggle accordion":"Akkordionu a\xe7\u0131n","Tools":"Al\u0259tl\u0259r","Top":"Yuxar\u0131","Travel and Places":"S\u0259yah\u0259t v\u0259 m\u0259kanlar","Turquoise":"Firuz\u0259yi","Underline":"Alt x\u0259ttli","Undo":"Geri","Upload":"Y\xfckl\u0259","Uploading image":"\u015e\u0259kil y\xfckl\u0259m\u0259","Upper Alpha":"B\xf6y\xfck Alfa \u0259lifbas\u0131","Upper Roman":"B\xf6y\xfck Roma \u0259lifbas\u0131","Url":"Linkin \xfcnvan\u0131","User Defined":"M\xfc\u0259yy\u0259n edilmi\u015f istifad\u0259\xe7i","Valid":"Etibarl\u0131d\u0131r","Version":"Versiya","Vertical align":"\u015eaquli d\xfczl\u0259ndirm\u0259","Vertical space":"Vertikal sah\u0259","View":"G\xf6r\xfcn\xfc\u015f","Visual aids":"Konturlar\u0131 g\xf6st\u0259r","Warn":"X\u0259b\u0259rdar et","White":"A\u011f","Width":"Eni","Word count":"S\xf6z say\u0131","Words":"S\xf6zl\u0259r","Words: {0}":"S\xf6zl\u0259r: {0}","Yellow":"Sar\u0131","Yes":"B\u0259li","You are using {0}":"Siz {0} istifad\u0259 edirsiniz","You have unsaved changes are you sure you want to navigate away?":"Sizd\u0259 yadda saxlan\u0131lmayan d\u0259yi\u015fiklikl\u0259r var \u0259minsiniz ki, getm\u0259k ist\u0259yirsiniz?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Sizin brauzeriniz m\xfcbadil\u0259 buferin\u0259 birba\u015fa yolu d\u0259st\u0259kl\u0259mir. Z\u0259hm\u0259t olmasa, bunun yerin\u0259 klaviaturan\u0131n Ctrl+X/C/V d\xfcym\u0259l\u0259rind\u0259n istifad\u0259 edin.","alignment":"d\xfczl\u0259ndirm\u0259","austral sign":"avstral simvolu","cedi sign":"sedi simvolu","colon sign":"qo\u015fa n\xf6qt\u0259","cruzeiro sign":"cruzeiro i\u015far\u0259si","currency sign":"valyuta i\u015far\u0259si","dollar sign":"dollar i\u015far\u0259si","dong sign":"donq simvolu","drachma sign":"draxma simolu","euro-currency sign":"avro-valyuta simvolu","example":"n\xfcmun\u0259","formatting":"formatla\u015fd\u0131rma","french franc sign":"frans\u0131z frank\u0131 i\u015far\u0259si","german penny symbol":"alman funt sterlinqi simvolu","guarani sign":"guarani simvolu","history":"tarix\xe7\u0259","hryvnia sign":"qrivna simvolu","indentation":"girinti","indian rupee sign":"hindistan rupisi simvolu","kip sign":"kip simvolu","lira sign":"lir\u0259 simvolu","livre tournois sign":"tur livri simvolu","manat sign":"manat simvolu","mill sign":"mil simvolu","naira sign":"nayra simvolu","new sheqel sign":"yeni \u015fekel simvolu","nordic mark sign":"skandinav mark\u0131 simvolu","peseta sign":"peseta simvolu","peso sign":"peso simvolu","ruble sign":"rubl simvolu","rupee sign":"rupi simvolu","spesmilo sign":"spesmilo simvolu","styles":"still\u0259r","tenge sign":"tenqe simvolu","tugrik sign":"tuqrik simvolu","turkish lira sign":"t\xfcrkiy\u0259 lir\u0259si simvolu","won sign":"von simvolu","yen character":"ye simvolu","yen/yuan character variant one":"yen/yuan simvolu variant\u0131","yuan character":"yuan simvolu","yuan character, in hong kong and taiwan":"yuan simvolu, Hong Kong v\u0259 Tayvanda","{0} characters":"{0} simvol","{0} columns, {1} rows":"{0} s\xfctunlar, {1} s\u0131ralar","{0} words":"{0} s\xf6z"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/be.js b/staticfiles/tinymce/langs/be.js new file mode 100644 index 0000000..16b0b72 --- /dev/null +++ b/staticfiles/tinymce/langs/be.js @@ -0,0 +1 @@ +tinymce.addI18n("be",{"#":"","Accessibility":"\u0421\u043f\u0435\u0446\u044b\u044f\u043b\u044c\u043d\u044b\u044f \u043c\u0430\u0433\u0447\u044b\u043c\u0430\u0441\u0446\u0456","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0414\u0437\u0435\u044f\u043d\u043d\u0435","Activity":"","Address":"\u0410\u0434\u0440\u0430\u0441","Advanced":"\u041f\u0430\u0448\u044b\u0440\u0430\u043d\u0430\u0435","Align":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","Align center":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","Align left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","Align right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","Alignment":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","Alignment {0}":"","All":"\u0423\u0441\u0435","Alternative description":"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u0435 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u0435","Alternative source":"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430","Alternative source URL":"URL \u0430\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u0439 \u043a\u0440\u044b\u043d\u0456\u0446\u044b","Anchor":"\u042f\u043a\u0430\u0440","Anchor...":"\u042f\u043a\u0430\u0440...","Anchors":"\u042f\u043a\u0430\u0440\u044b","Animals and Nature":"","Arrows":"\u0421\u0442\u0440\u044d\u043b\u043a\u0456","B":"B","Background color":"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443","Background color {0}":"","Black":"","Block":"\u0417\u0430\u0431\u043b\u0430\u043a\u0430\u0432\u0430\u0446\u044c","Block {0}":"","Blockquote":"\u0426\u044b\u0442\u0430\u0442\u0430","Blocks":"\u0411\u043b\u043e\u043a\u0456","Blue":"","Blue component":"","Body":"\u0426\u0435\u043b\u0430","Bold":"\u0422\u043b\u0443\u0441\u0442\u044b","Border":"\u041c\u044f\u0436\u0430","Border color":"\u041a\u043e\u043b\u0435\u0440 \u043c\u044f\u0436\u044b","Border style":"\u0421\u0442\u044b\u043b\u044c \u043c\u044f\u0436\u044b","Border width":"\u0428\u044b\u0440\u044b\u043d\u044f \u043c\u044f\u0436\u044b","Bottom":"\u041d\u0456\u0437","Browse files":"","Browse for an image":"\u041f\u043e\u0448\u0443\u043a \u0432\u044b\u044f\u0432\u044b","Browse links":"","Bullet list":"\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","Cancel":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c","Caption":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","Cell":"\u042f\u0447\u044d\u0439\u043a\u0430","Cell padding":"\u0423\u043d\u0443\u0442\u0440\u0430\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f","Cell properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u044d\u0439\u043a\u0456","Cell spacing":"\u0417\u043d\u0435\u0448\u043d\u0456 \u0432\u043e\u0434\u0441\u0442\u0443\u043f","Cell styles":"\u0421\u0442\u044b\u043b\u0456 \u044f\u0447\u044d\u0439\u043a\u0456","Cell type":"\u0422\u044b\u043f \u044f\u0447\u044d\u0439\u043a\u0456","Center":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","Characters":"","Characters (no spaces)":"","Circle":"\u0410\u043a\u0440\u0443\u0436\u043d\u0430\u0441\u0446\u0456","Class":"\u041a\u043b\u0430\u0441","Clear formatting":"\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0444\u0430\u0440\u043c\u0430\u0442","Close":"\u0417\u0430\u0447\u044b\u043d\u0456\u0446\u044c","Code":"\u041a\u043e\u0434","Code sample...":"\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443...","Code view":"","Color Picker":"","Color swatch":"","Cols":"\u0421\u043b\u0443\u043f\u043a\u0456","Column":"\u0421\u043b\u0443\u043f\u043e\u043a","Column clipboard actions":"\u0414\u0437\u0435\u044f\u043d\u043d\u0456 \u0437 \u0431\u0443\u0444\u0435\u0440\u0430\u043c \u0430\u0431\u043c\u0435\u043d\u0443 \u0434\u043b\u044f \u0441\u043b\u0443\u043f\u043a\u0430","Column group":"\u0413\u0440\u0443\u043f\u0430 \u0441\u043b\u0443\u043f\u043a\u043e\u045e","Column header":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a \u0441\u043b\u0443\u043f\u043a\u0430","Constrain proportions":"\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456","Copy":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c","Copy column":"\u0417\u0440\u0430\u0431\u0456\u0446\u044c \u043a\u043e\u043f\u0456\u044e \u0441\u043b\u0443\u043f\u043a\u0430","Copy row":"\u041a\u0430\u043f\u0456\u044f\u0432\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","Could not find the specified string.":"\u0417\u0430\u0434\u0430\u0434\u0437\u0435\u043d\u044b \u0440\u0430\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u043e\u0439\u0434\u0437\u0435\u043d\u044b","Could not load emojis":"","Count":"\u041a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c","Currency":"\u0412\u0430\u043b\u044e\u0442\u0430","Current window":"\u0411\u044f\u0433\u0443\u0447\u0430\u0435 \u0430\u043a\u043d\u043e","Custom color":"\u041a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u043a\u0456 \u043a\u043e\u043b\u0435\u0440","Custom...":"\u041a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u043a\u0456...","Cut":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c","Cut column":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a","Cut row":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","Dark Blue":"","Dark Gray":"","Dark Green":"","Dark Orange":"","Dark Purple":"","Dark Red":"","Dark Turquoise":"","Dark Yellow":"","Dashed":"\u0420\u044b\u0441\u043a\u0430\u043c\u0456","Date/time":"\u0414\u0430\u0442\u0430/\u0447\u0430\u0441","Decrease indent":"\u041f\u0430\u043c\u0435\u043d\u0448\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","Default":"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b","Delete accordion":"","Delete column":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a","Delete row":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a","Delete table":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443","Dimensions":"\u041f\u0430\u043c\u0435\u0440","Disc":"\u041a\u0440\u0443\u0433\u0456","Div":"\u0411\u043b\u043e\u043a","Document":"\u0414\u0430\u043a\u0443\u043c\u0435\u043d\u0442","Dotted":"\u041a\u0440\u043e\u043f\u043a\u0430\u043c\u0456","Double":"\u041f\u0430\u0434\u0432\u043e\u0439\u043d\u044b","Drop an image here":"\u0410\u0434\u043a\u0456\u043d\u044c\u0446\u0435 \u0432\u044b\u044f\u0432\u0443 \u0442\u0443\u0442","Dropped file type is not supported":"\u0422\u044b\u043f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u0430\u0434\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0435\u0446\u0446\u0430","Edit":"\u0417\u043c\u044f\u043d\u0456\u0446\u044c","Embed":"\u041a\u043e\u0434 \u0434\u043b\u044f \u045e\u0441\u0442\u0430\u045e\u043a\u0456","Emojis":"","Emojis...":"","Error":"\u041f\u0430\u043c\u044b\u043b\u043a\u0430","Error: Form submit field collision.":"","Error: No form element found.":"","Extended Latin":"\u041f\u0430\u0448\u044b\u0440\u0430\u043d\u0430\u044f \u043b\u0430\u0446\u0456\u043d\u043a\u0430","Failed to initialize plugin: {0}":"\u041d\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u043b\u0430\u0441\u044f \u0456\u043d\u0456\u0446\u044b\u044f\u043b\u0456\u0437\u0430\u0432\u0430\u0446\u044c \u043f\u043b\u0430\u0433\u0456\u043d: {0}","Failed to load plugin url: {0}":"\u041d\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u043b\u0430\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0456\u0446\u044c url \u043f\u043b\u0430\u0433\u0456\u043d\u0430: {0}","Failed to load plugin: {0} from url {1}":"\u041d\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u043b\u0430\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0456\u0446\u044c \u043f\u043b\u0430\u0433\u0456\u043d: {0} \u0437 url {1}","Failed to upload image: {0}":"\u041d\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u043b\u0430\u0441\u044f \u0437\u0430\u043f\u0430\u043c\u043f\u0430\u0432\u0430\u0446\u044c \u0432\u044b\u044f\u0432\u0443: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456","Find (if searchreplace plugin activated)":"\u0428\u0443\u043a\u0430\u0446\u044c (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)","Find and Replace":"\u041f\u043e\u0448\u0443\u043a \u0456 \u0417\u0430\u043c\u0435\u043d\u0430","Find and replace...":"\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0435\u043d\u0430...","Find in selection":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456 \u045e \u0432\u044b\u043b\u0443\u0447\u0430\u043d\u044b\u043c","Find whole words only":"\u0428\u0443\u043a\u0430\u0446\u044c \u0442\u043e\u043b\u044c\u043a\u0456 \u0446\u044d\u043b\u044b\u044f \u0441\u043b\u043e\u0432\u044b","Flags":"","Focus to contextual toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u0430\u043d\u0442\u044d\u043a\u0441\u0442\u043d\u0443\u044e \u043f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e","Focus to element path":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","Focus to menubar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0440\u0430\u0434\u043e\u043a \u043c\u0435\u043d\u044e","Focus to toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e","Font":"","Font size {0}":"","Font sizes":"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0443","Font {0}":"","Fonts":"\u0428\u0440\u044b\u0444\u0442\u044b","Food and Drink":"","Footer":"\u041d\u0456\u0437","Format":"\u0424\u0430\u0440\u043c\u0430\u0442","Format {0}":"","Formats":"\u0424\u0430\u0440\u043c\u0430\u0442","Fullscreen":"\u041f\u043e\u045e\u043d\u0430\u044d\u043a\u0440\u0430\u043d\u043d\u044b \u0440\u044d\u0436\u044b\u043c","G":"G","General":"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435","Gray":"","Green":"","Green component":"","Groove":"\u0420\u0430\u0432\u043e\u043a","Handy Shortcuts":"\u0417\u0440\u0443\u0447\u043d\u044b\u044f \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b","Header":"\u0428\u0430\u043f\u043a\u0430","Header cell":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","Heading 1":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 1","Heading 2":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 2","Heading 3":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 3","Heading 4":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 4","Heading 5":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 5","Heading 6":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 6","Headings":"\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043a\u0456","Height":"\u0412\u044b\u0448\u044b\u043d\u044f","Help":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430","Hex color code":"","Hidden":"\u0421\u0445\u0430\u0432\u0430\u043d\u044b","Horizontal align":"\u0420\u0430\u045e\u043d\u0430\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u0456","Horizontal line":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0456\u043d\u0456\u044f","Horizontal space":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0456\u043d\u0442\u044d\u0440\u0432\u0430\u043b","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID \u043f\u0430\u0432\u0456\u043d\u0435\u043d \u043f\u0430\u0447\u044b\u043d\u0430\u0446\u0446\u0430 \u0437 \u043b\u0456\u0442\u0430\u0440\u044b, \u0437\u0430 \u044f\u043a\u043e\u0439 \u0456\u0434\u0443\u0446\u044c \u0442\u043e\u043b\u044c\u043a\u0456 \u043b\u0456\u0442\u0430\u0440\u044b, \u043b\u0456\u0447\u0431\u044b, \u0437\u043b\u0443\u0447\u043a\u0456, \u043a\u0440\u043e\u043f\u043a\u0456, \u043a\u043e\u0441\u043a\u0456 \u0430\u0431\u043e \u0437\u043d\u0430\u043a\u0456 \u043f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0456\u0432\u0430\u043d\u043d\u044f.","Image is decorative":"\u0412\u044b\u044f\u0432\u0430 \u0437'\u044f\u045e\u043b\u044f\u0435\u0446\u0446\u0430 \u0434\u044d\u043a\u0430\u0440\u0430\u0442\u044b\u045e\u043d\u0430\u0439","Image list":"\u0421\u043f\u0456\u0441 \u0432\u044b\u044f\u045e","Image title":"\u041d\u0430\u0437\u0432\u0430 \u0432\u044b\u044f\u0432\u044b","Image...":"\u0412\u044b\u044f\u0432\u0430...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u041f\u0430\u0432\u044f\u043b\u0456\u0447\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","Inline":"\u0420\u0430\u0434\u043a\u043e\u0432\u044b","Insert":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c","Insert Template":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0423\u0437\u043e\u0440","Insert accordion":"","Insert column after":"\u0414\u0430\u0434\u0430\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u0441\u043f\u0440\u0430\u0432\u0430","Insert column before":"\u0414\u0430\u0434\u0430\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u0437\u043b\u0435\u0432\u0430","Insert date/time":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0434\u0430\u0442\u0443/\u0447\u0430\u0441","Insert image":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0432\u044b\u044f\u0432\u0443","Insert link (if link plugin activated)":"\u040e\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)","Insert row after":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443","Insert row before":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443","Insert table":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443","Insert template...":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0443\u0437\u043e\u0440...","Insert video":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0432\u0456\u0434\u044d\u0430","Insert/Edit code sample":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043a\u043e\u0434","Insert/edit image":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0432\u044b\u044f\u0432\u0443","Insert/edit link":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","Insert/edit media":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f","Insert/edit video":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0432\u0456\u0434\u044d\u0430","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u041a\u0443\u0440\u0441\u0456\u045e","Justify":"\u041f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456","Keyboard Navigation":"","Language":"\u041c\u043e\u0432\u0430","Learn more...":"\u041f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0435\u0439 ...","Left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","Left to right":"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","Light Blue":"","Light Gray":"","Light Green":"","Light Purple":"","Light Red":"","Light Yellow":"","Line height":"\u0412\u044b\u0448\u044b\u043d\u044f \u0440\u0430\u0434\u043a\u0443","Link list":"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","Link...":"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...","Lower Alpha":"\u041c\u0430\u043b\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","Lower Greek":"\u041c\u0430\u043b\u044b\u044f \u0433\u0440\u044d\u0447\u0430\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","Lower Roman":"\u041c\u0430\u043b\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b","Match case":"\u0423\u043b\u0456\u0447\u0432\u0430\u0446\u044c \u0440\u044d\u0433\u0456\u0441\u0442\u0440","Mathematical":"\u041c\u0430\u0442\u044d\u043c\u0430\u0442\u044b\u0447\u043d\u044b\u044f","Media poster (Image URL)":"\u041f\u043e\u0441\u0442\u044d\u0440 \u043c\u0435\u0434\u044b\u044f (URL \u0432\u044b\u044f\u0432\u044b)","Media...":"\u041c\u0435\u0434\u044b\u044f...","Medium Blue":"","Medium Gray":"","Medium Purple":"","Merge cells":"\u0410\u0431'\u044f\u0434\u043d\u0430\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456","Middle":"\u0421\u044f\u0440\u044d\u0434\u0437\u0456\u043d\u0430","Midnight Blue":"","More...":"","Name":"\u0406\u043c\u044f","Navy Blue":"","New document":"\u041d\u043e\u0432\u044b \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442","New window":"\u0423 \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435","Next":"\u0423\u043d\u0456\u0437","No":"","No alignment":"\u0411\u0435\u0437 \u0440\u0430\u045e\u043d\u0430\u0432\u0430\u043d\u043d\u044f","No color":"\u0411\u0435\u0437 \u043a\u043e\u043b\u0435\u0440\u0443","Nonbreaking space":"\u041d\u0435\u043f\u0430\u0440\u044b\u045e\u043d\u044b \u043f\u0440\u0430\u0431\u0435\u043b","None":"\u041d\u044f\u043c\u0430","Numbered list":"\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","OR":"\u0410\u0411\u041e","Objects":"","Ok":"\u0414\u043e\u0431\u0440\u0430","Open help dialog":"","Open link":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","Open link in...":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 \u0443...","Open popup menu for split buttons":"","Orange":"","Outset":"","Page break":"\u0420\u0430\u0437\u0440\u044b\u045e \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456","Paragraph":"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444","Paste":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c","Paste as text":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u044f\u043a \u0442\u044d\u043a\u0441\u0442","Paste column after":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0430\u0441\u043b\u044f","Paste column before":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0435\u0440\u0430\u0434","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0430\u0436\u044b\u0446\u0446\u044f\u045e\u043b\u044f\u0435\u0446\u0446\u0430 \u045e \u0432\u044b\u0433\u043b\u044f\u0434\u0437\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443, \u043f\u0430\u043a\u0443\u043b\u044c \u043d\u0435 \u0430\u0434\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u0434\u0430\u0434\u0437\u0435\u043d\u0443\u044e \u043e\u043f\u0446\u044b\u044e.","Paste or type a link":"\u0423\u0441\u0442\u0430\u045e\u0446\u0435 \u0430\u0431\u043e \u045e\u0432\u044f\u0434\u0437\u0456\u0446\u0435 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","Paste row after":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443","Paste row before":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443","Paste your embed code below:":"\u0423\u0441\u0442\u0430\u045e\u0446\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0456\u0436\u044d\u0439:","People":"","Plugins":"\u041f\u043b\u0430\u0433\u0456\u043d\u044b","Plugins installed ({0}):":"\u0423\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u043d\u0430 \u043f\u043b\u0430\u0433\u0456\u043d\u0430\u045e ({0}):","Powered by {0}":"\u041f\u0440\u0430\u0446\u0443\u0435 \u043d\u0430 {0}","Pre":"\u041f\u0440\u0430\u0434\u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u043d\u0435","Preferences":"","Preformatted":"\u0412\u044b\u0440\u0430\u045e\u043d\u0430\u0432\u0430\u043d\u044b","Premium plugins:":"\u041f\u0440\u044d\u043c\u0456\u044f\u043b\u044c\u043d\u044b\u044f \u043f\u043b\u0430\u0433\u0456\u043d\u044b:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u041f\u0440\u0430\u0434\u043f\u0440\u0430\u0433\u043b\u044f\u0434","Previous":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456","Print":"\u0414\u0440\u0443\u043a","Print...":"\u0414\u0440\u0443\u043a...","Purple":"","Quotations":"\u0426\u044b\u0442\u0430\u0442\u044b","R":"R","Range 0 to 255":"","Red":"","Red component":"","Redo":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c","Remove":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c","Remove color":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u043a\u043e\u043b\u0435\u0440","Remove link":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","Replace":"\u0417\u043c\u044f\u043d\u0456\u0446\u044c","Replace all":"\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0435","Replace with":"\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u043d\u0430","Resize":"\u0417\u043c\u044f\u043d\u0456\u0446\u044c \u043f\u0430\u043c\u0435\u0440","Restore last draft":"\u0410\u0434\u043d\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0430\u043f\u043e\u0448\u043d\u044f\u0433\u0430 \u043f\u0440\u0430\u0435\u043a\u0442\u0430","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0422\u044d\u043a\u0441\u0442\u0430\u0432\u0430\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-F9, \u043a\u0430\u0431 \u0432\u044b\u043a\u043b\u0456\u043a\u0430\u0446\u044c \u043c\u0435\u043d\u044e, ALT-F10 - \u043f\u0430\u043d\u044d\u043b\u044c \u043f\u0440\u044b\u043b\u0430\u0434\u0430\u045e, ALT-0 - \u0434\u043b\u044f \u0432\u044b\u043a\u043b\u0456\u043a\u0443 \u0434\u0430\u043f\u0430\u043c\u043e\u0433\u0456.","Ridge":"Ridge","Right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","Right to left":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","Row":"\u0420\u0430\u0434\u043e\u043a","Row clipboard actions":"\u0414\u0437\u0435\u044f\u043d\u043d\u0456 \u0437 \u0431\u0443\u0444\u0435\u0440\u0430\u043c \u0430\u0431\u043c\u0435\u043d\u0443 \u0434\u043b\u044f \u0440\u0430\u0434\u043a\u0443","Row group":"\u0413\u0440\u0443\u043f\u0430 \u0440\u0430\u0434\u043a\u043e\u045e","Row header":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a \u0440\u0430\u0434\u043a\u0443","Row properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0434\u043a\u0430","Row type":"\u0422\u044b\u043f \u0440\u0430\u0434\u043a\u0430","Rows":"\u0420\u0430\u0434\u043a\u0456","Save":"\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c","Save (if save plugin activated)":"\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c (\u043a\u0430\u043b\u0456 \u043f\u043b\u0430\u0433\u0456\u043d \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u044f \u0430\u043a\u0442\u044b\u0432\u0430\u0432\u0430\u043d\u044b)","Scope":"\u0421\u0444\u0435\u0440\u0430","Search":"\u041f\u043e\u0448\u0443\u043a","Select all":"\u0412\u044b\u043b\u0443\u0447\u044b\u0446\u044c \u0443\u0441\u0451","Select...":"","Selection":"\u0412\u044b\u0431\u0430\u0440","Shortcut":"\u0428\u043e\u0440\u0442\u043a\u0430\u0442","Show blocks":"\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u0431\u043b\u043e\u043a\u0456","Show caption":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043d\u0430\u0434\u043f\u0456\u0441","Show invisible characters":"\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u043d\u044f\u0431\u0430\u0447\u043d\u044b\u044f \u0441\u0456\u043c\u0432\u0430\u043b\u044b","Size":"","Solid":"\u0421\u0443\u0446\u044d\u043b\u044c\u043d\u044b","Source":"\u041a\u0440\u044b\u043d\u0456\u0446\u0430","Source code":"\u0417\u044b\u0445\u043e\u0434\u043d\u044b \u043a\u043e\u0434","Special Character":"\u0421\u043f\u0435\u0446\u044b\u044f\u043b\u044c\u043d\u044b \u0421\u0456\u043c\u0432\u0430\u043b","Special character...":"\u0421\u043f\u0435\u0446\u044b\u044f\u043b\u044c\u043d\u044b \u0441\u0456\u043c\u0432\u0430\u043b...","Split cell":"\u0420\u0430\u0437\u0431\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0443","Square":"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b","Start list at number":"","Strikethrough":"\u0417\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","Style":"\u0421\u0442\u044b\u043b\u044c","Subscript":"\u041d\u0456\u0436\u043d\u0456 \u0456\u043d\u0434\u044d\u043a\u0441","Superscript":"\u0412\u0435\u0440\u0445\u043d\u0456 \u0456\u043d\u0434\u044d\u043a\u0441","Switch to or from fullscreen mode":"","Symbols":"\u0421\u0456\u043c\u0432\u0430\u043b\u044b","System Font":"\u0421\u0456\u0441\u0442\u044d\u043c\u043d\u044b \u0428\u0440\u044b\u0444\u0442","Table":"\u0422\u0430\u0431\u043b\u0456\u0446\u0430","Table caption":"\u041d\u0430\u0434\u043f\u0456\u0441 \u0434\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","Table properties":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","Table styles":"\u0421\u0442\u044b\u043b\u0456 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","Template":"\u0428\u0430\u0431\u043b\u043e\u043d","Templates":"\u0428\u0430\u0431\u043b\u043e\u043d\u044b","Text":"\u0422\u044d\u043a\u0441\u0442","Text color":"\u041a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443","Text color {0}":"","Text to display":"\u0422\u044d\u043a\u0441\u0442 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0430\u0434\u0440\u0430\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u0439 \u043f\u043e\u0448\u0442\u044b. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b mailto: \u043f\u0440\u044d\u0444\u0456\u043a\u0441?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0437\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b http:// \u043f\u0440\u044d\u0444\u0456\u043a\u0441?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0412\u044b \u045e\u0432\u044f\u043b\u0456 URL \u044f\u043a\u0456 \u0432\u044b\u0433\u043b\u044f\u0434\u0430\u0435 \u044f\u043a \u0432\u043e\u043d\u043a\u0430\u0432\u0430\u044f \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0430. \u0426\u0456 \u0445\u043e\u0447\u0430\u0446\u0435 \u0432\u044b \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b \u043f\u0440\u044d\u0444\u0456\u043a\u0441 https:// ?","Title":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","To open the popup, press Shift+Enter":"\u041a\u0430\u0431 \u0430\u0434\u043a\u0440\u044b\u0446\u044c \u0443\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0447\u0430\u0435 \u0430\u043a\u0435\u043d\u0446\u0430, \u043d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 Shift+Enter","Toggle accordion":"","Tools":"\u041f\u0440\u044b\u043b\u0430\u0434\u044b","Top":"\u0412\u0435\u0440\u0445","Travel and Places":"","Turquoise":"","Underline":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","Undo":"\u0412\u044f\u0440\u043d\u0443\u0446\u044c","Upload":"\u0417\u0430\u043f\u0430\u043c\u043f\u0430\u0432\u0430\u0446\u044c","Uploading image":"\u0417\u0430\u043f\u0430\u043c\u043f\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u0432\u044b\u044f\u0432\u044b","Upper Alpha":"\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043d\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","Upper Roman":"\u0417\u0430\u0433\u0430\u043b\u043e\u045e\u043d\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b","Url":"\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","User Defined":"\u0412\u044b\u0437\u043d\u0430\u0447\u0430\u043d\u0430 \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c","Valid":"\u0421\u0430\u043f\u0440\u0430\u045e\u0434\u043d\u0430\u0435","Version":"","Vertical align":"\u0420\u0430\u045e\u043d\u0430\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0432\u0435\u0440\u0442\u044b\u043a\u043e\u043b\u0456","Vertical space":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0456\u043d\u0442\u044d\u0440\u0432\u0430\u043b","View":"\u0412\u044b\u0433\u043b\u044f\u0434","Visual aids":"\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u043a\u043e\u043d\u0442\u0443\u0440\u044b","Warn":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u0436\u0430\u043d\u043d\u0435","White":"","Width":"\u0428\u044b\u0440\u044b\u043d\u044f","Word count":"\u041a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0441\u043b\u043e\u045e","Words":"\u0421\u043b\u043e\u0432\u044b","Words: {0}":"\u041a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0441\u043b\u043e\u045e: {0}","Yellow":"","Yes":"","You are using {0}":"\u0412\u044b \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0435\u0446\u0435\u0441\u044f {0}","You have unsaved changes are you sure you want to navigate away?":"\u0423 \u0432\u0430\u0441 \u0451\u0441\u0446\u044c \u043d\u0435\u0437\u0430\u0445\u0430\u0432\u0430\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b. \u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0445\u043e\u0447\u0430\u0446\u0435 \u0432\u044b\u0439\u0441\u0446\u0456?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0412\u0430\u0448 \u0431\u0440\u0430\u045e\u0437\u044d\u0440 \u043d\u0435 \u043f\u0430\u0434\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0435 \u043f\u0440\u0430\u043c\u044b \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0430\u0431\u043c\u0435\u043d\u0443. \u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u044b\u044f \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448: Ctrl + X/C/V.","alignment":"","austral sign":"","cedi sign":"","colon sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u0434\u0432\u0443\u0445\u043a\u0440\u043e\u043f'\u044f","cruzeiro sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u043a\u0440\u0443\u0437\u044d\u0439\u0440\u0430","currency sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u0432\u0430\u043b\u044e\u0442\u044b","dollar sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u0434\u043e\u043b\u0430\u0440\u0430","dong sign":"","drachma sign":"","euro-currency sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u044d\u045e\u0440\u0430","example":"\u043f\u0440\u044b\u043a\u043b\u0430\u0434","formatting":"","french franc sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0430\u0433\u0430 \u0444\u0440\u0430\u043d\u043a\u0430","german penny symbol":"","guarani sign":"","history":"","hryvnia sign":"","indentation":"","indian rupee sign":"","kip sign":"","lira sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u043b\u0456\u0440\u044b","livre tournois sign":"","manat sign":"","mill sign":"\u0437\u043d\u0430\u0447\u043e\u043a \u043c\u0456\u043b\u044e","naira sign":"","new sheqel sign":"","nordic mark sign":"","peseta sign":"","peso sign":"","ruble sign":"","rupee sign":"","spesmilo sign":"","styles":"","tenge sign":"","tugrik sign":"","turkish lira sign":"","won sign":"","yen character":"","yen/yuan character variant one":"","yuan character":"","yuan character, in hong kong and taiwan":"","{0} characters":"","{0} columns, {1} rows":"","{0} words":"{0} \u0441\u043b\u043e\u045e"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/bg_BG.js b/staticfiles/tinymce/langs/bg_BG.js new file mode 100644 index 0000000..4f8d6bb --- /dev/null +++ b/staticfiles/tinymce/langs/bg_BG.js @@ -0,0 +1 @@ +tinymce.addI18n("bg_BG",{"#":"#","Accessibility":"\u0414\u043e\u0441\u0442\u044a\u043f\u043d\u043e\u0441\u0442","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435","Activity":"\u0414\u0435\u0439\u043d\u043e\u0441\u0442\u0438","Address":"\u0410\u0434\u0440\u0435\u0441","Advanced":"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e","Align":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","Align center":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u0435","Align left":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u043b\u044f\u0432\u043e","Align right":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u0434\u044f\u0441\u043d\u043e","Alignment":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","Alignment {0}":"","All":"\u0412\u0441\u0438\u0447\u043a\u0438","Alternative description":"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","Alternative source":"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441","Alternative source URL":"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441 URL","Anchor":"\u0418\u043c\u0435 \u043d\u0430 \u043b\u0438\u043d\u043a","Anchor...":"\u041a\u043e\u0442\u0432\u0430...","Anchors":"\u041a\u043e\u0442\u0432\u0438","Animals and Nature":"\u0416\u0438\u0432\u043e\u0442\u043d\u0438 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430","Arrows":"\u0421\u0442\u0440\u0435\u043b\u043a\u0438","B":"B","Background color":"\u0424\u043e\u043d\u043e\u0432 \u0446\u0432\u044f\u0442","Background color {0}":"","Black":"\u0427\u0435\u0440\u043d\u043e","Block":"\u0411\u043b\u043e\u043a","Block {0}":"","Blockquote":"\u0426\u0438\u0442\u0430\u0442","Blocks":"\u0411\u043b\u043e\u043a\u043e\u0432\u0435","Blue":"\u0421\u0438\u043d\u044c\u043e","Blue component":"\u0421\u0438\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Body":"\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 (body)","Bold":"\u0423\u0434\u0435\u0431\u0435\u043b\u0435\u043d (\u043f\u043e\u043b\u0443\u0447\u0435\u0440)","Border":"\u041a\u0430\u043d\u0442 (\u0440\u0430\u043c\u043a\u0430)","Border color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430","Border style":"\u0421\u0442\u0438\u043b \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430","Border width":"\u0428\u0438\u0440\u0438\u043d\u0430 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430","Bottom":"\u0414\u043e\u043b\u0443","Browse files":"","Browse for an image":"\u041f\u043e\u0442\u044a\u0440\u0441\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Browse links":"","Bullet list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0432\u043e\u0434\u0430\u0447\u0438","Cancel":"\u041e\u0442\u043a\u0430\u0437","Caption":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","Cell":"\u041a\u043b\u0435\u0442\u043a\u0430","Cell padding":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e","Cell properties":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","Cell spacing":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","Cell styles":"\u0421\u0442\u0438\u043b\u043e\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","Cell type":"\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","Center":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u043e","Characters":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438","Characters (no spaces)":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0438)","Circle":"\u041e\u043a\u0440\u044a\u0436\u043d\u043e\u0441\u0442\u0438","Class":"\u041a\u043b\u0430\u0441","Clear formatting":"\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e","Close":"\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435","Code":"\u041a\u043e\u0434","Code sample...":"\u041f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434...","Code view":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043a\u043e\u0434","Color Picker":"\u0418\u0437\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u044f\u0442","Color swatch":"\u0426\u0432\u0435\u0442\u043d\u0430 \u043c\u043e\u0441\u0442\u0440\u0430","Cols":"\u041a\u043e\u043b\u043e\u043d\u0438","Column":"\u041a\u043e\u043b\u043e\u043d\u0430","Column clipboard actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u043a\u043b\u0438\u043f\u0431\u043e\u0440\u0434\u0430 \u0437\u0430 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430","Column group":"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u0438","Column header":"\u0425\u0435\u0434\u044a\u0440 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430","Constrain proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435","Copy":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435","Copy column":"\u041a\u043e\u043f\u0438\u0440\u0430\u0439 \u043a\u043e\u043b\u043e\u043d\u0430","Copy row":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434","Could not find the specified string.":"\u0422\u044a\u0440\u0441\u0435\u043d\u0438\u044f\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.","Could not load emojis":"\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0434\u0436\u0438\u0442\u0430","Count":"\u0411\u0440\u043e\u0439","Currency":"\u0412\u0430\u043b\u0443\u0442\u0430","Current window":"\u0422\u0435\u043a\u0443\u0449 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","Custom color":"\u0426\u0432\u044f\u0442 \u043f\u043e \u0438\u0437\u0431\u043e\u0440","Custom...":"\u0418\u0437\u0431\u0440\u0430\u043d...","Cut":"\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435","Cut column":"\u0418\u0437\u0440\u0435\u0436\u0438 \u043a\u043e\u043b\u043e\u043d\u0430","Cut row":"\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434","Dark Blue":"\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u043d","Dark Gray":"\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u0432\u043e","Dark Green":"\u0422\u044a\u043c\u043d\u043e\u0437\u0435\u043b\u0435\u043d\u043e","Dark Orange":"\u0422\u044a\u043c\u043d\u043e\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u043e","Dark Purple":"\u0422\u044a\u043c\u043d\u043e\u043b\u0438\u043b\u0430\u0432","Dark Red":"\u0422\u044a\u043c\u043d\u043e\u0447\u0435\u0440\u0432\u0435\u043d\u043e","Dark Turquoise":"\u0422\u044a\u043c\u043d\u043e\u0442\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e","Dark Yellow":"\u0422\u044a\u043c\u043d\u043e\u0436\u044a\u043b\u0442\u043e","Dashed":"\u041f\u0443\u043d\u043a\u0442\u0438\u0440\u0430\u043d","Date/time":"\u0414\u0430\u0442\u0430/\u0447\u0430\u0441","Decrease indent":"\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","Default":"\u041f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435","Delete accordion":"","Delete column":"\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430","Delete row":"\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434\u0430","Delete table":"\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","Dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440","Disc":"\u041a\u0440\u044a\u0433\u0447\u0435\u0442\u0430","Div":"\u0411\u043b\u043e\u043a","Document":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442","Dotted":"\u041f\u0443\u043d\u043a\u0442\u0438\u0440\u0430\u043d","Double":"\u0414\u0432\u043e\u0435\u043d","Drop an image here":"\u041f\u0443\u0441\u043d\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0442\u0443\u043a","Dropped file type is not supported":"\u0422\u0438\u043f\u0430 \u043d\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438\u044f\u0442 \u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430","Edit":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435","Embed":"\u0412\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435","Emojis":"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438","Emojis...":"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438...","Error":"\u0413\u0440\u0435\u0448\u043a\u0430","Error: Form submit field collision.":"\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435\u0441\u044a\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u0435 \u043f\u0440\u0438 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440.","Error: No form element found.":"\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435 \u0435 \u043e\u0442\u043a\u0440\u0438\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440\u0430.","Extended Latin":"\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","Failed to initialize plugin: {0}":"\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}","Failed to load plugin url: {0}":"\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 URL \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}","Failed to load plugin: {0} from url {1}":"\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d {0} \u043e\u0442 URL {1}","Failed to upload image: {0}":"\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0437\u0430","Find (if searchreplace plugin activated)":"\u041d\u0430\u043c\u0438\u0440\u0430\u043d\u0435 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u044a\u0442 \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435/\u0437\u0430\u043c\u044f\u043d\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)","Find and Replace":"\u041d\u0430\u043c\u0435\u0440\u0438 \u0438 \u0417\u0430\u043c\u0435\u043d\u0438","Find and replace...":"\u041d\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0438 \u0437\u0430\u043c\u044f\u043d\u0430...","Find in selection":"\u041d\u0430\u043c\u0435\u0440\u0438 \u0432 \u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0440\u0430\u043d\u0438\u044f\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442","Find whole words only":"\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0441\u0430\u043c\u043e \u043d\u0430 \u0446\u0435\u043b\u0438 \u0434\u0443\u043c\u0438","Flags":"\u0417\u043d\u0430\u043c\u0435\u043d\u0430","Focus to contextual toolbar":"\u0424\u043e\u043a\u0443\u0441\u0438\u0440\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0430\u0442\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","Focus to element path":"\u0424\u043e\u043a\u0443\u0441\u0438\u0440\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u043f\u044a\u0442\u044f \u0434\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442","Focus to menubar":"\u0424\u043e\u043a\u0443\u0441\u0438\u0440\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0441 \u043c\u0435\u043d\u044e\u0442\u0430","Focus to toolbar":"\u0424\u043e\u043a\u0443\u0441\u0438\u0440\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","Font":"\u0428\u0440\u0438\u0444\u0442","Font size {0}":"","Font sizes":"\u0420\u0430\u0437\u043c\u0435\u0440\u0438 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","Font {0}":"","Fonts":"\u0428\u0440\u0438\u0444\u0442\u043e\u0432\u0435","Food and Drink":"\u0425\u0440\u0430\u043d\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438","Footer":"\u0414\u043e\u043b\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (footer)","Format":"\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435","Format {0}":"","Formats":"\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435","Fullscreen":"\u041d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d","G":"G","General":"\u041e\u0431\u0449\u043e","Gray":"\u0421\u0438\u0432\u043e","Green":"\u0417\u0435\u043b\u0435\u043d\u043e","Green component":"\u0417\u0435\u043b\u0435\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Groove":"\u0416\u043b\u0435\u0431","Handy Shortcuts":"\u041f\u043e\u043b\u0435\u0437\u043d\u0438 \u0431\u044a\u0440\u0437\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438","Header":"\u0413\u043e\u0440\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (header)","Header cell":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430 (\u0430\u043d\u0442\u0435\u0442\u043a\u0430)","Heading 1":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1","Heading 2":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2","Heading 3":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3","Heading 4":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4","Heading 5":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5","Heading 6":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6","Headings":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u044f","Height":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430","Help":"\u041f\u043e\u043c\u043e\u0449","Hex color code":"\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0435\u0441\u0435\u0442\u0438\u0447\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u0446\u0432\u0435\u0442\u0430","Hidden":"\u0421\u043a\u0440\u0438\u0442","Horizontal align":"\u0425\u0438\u0440\u043e\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","Horizontal line":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u0447\u0435\u0440\u0442\u0430","Horizontal space":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID-\u0442\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441 \u0431\u0443\u043a\u0432\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u043e \u0441\u0430\u043c\u043e \u043e\u0442 \u0431\u0443\u043a\u0432\u0438, \u0446\u0438\u0444\u0440\u0438, \u0442\u0438\u0440\u0435\u0442\u0430, \u0442\u043e\u0447\u043a\u0438, \u0442\u043e\u0447\u043a\u0430 \u0438 \u0437\u0430\u043f\u0435\u0442\u0430\u044f \u0438 \u0434\u043e\u043b\u043d\u0438 \u0447\u0435\u0440\u0442\u0438.","Image is decorative":"\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0435 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e","Image list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","Image title":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e","Image...":"\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP \u0433\u0440\u0435\u0448\u043a\u0430: \u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0430\u043c\u0435\u0440\u0438 Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP \u0433\u0440\u0435\u0448\u043a\u0430: \u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e Image Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP \u0433\u0440\u0435\u0448\u043a\u0430: \u041e\u0442\u0445\u0432\u044a\u0440\u043b\u0435\u043d\u0430 \u0437\u0430\u044f\u0432\u043a\u0430","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP \u0433\u0440\u0435\u0448\u043a\u0430: \u041d\u0435\u043f\u043e\u0437\u043d\u0430\u0442\u0430 ImageProxy \u0433\u0440\u0435\u0448\u043a\u0430","Increase indent":"\u0423\u0432\u0435\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","Inline":"\u041d\u0430 \u0435\u0434\u0438\u043d \u0440\u0435\u0434","Insert":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435","Insert Template":"\u0414\u043e\u0431\u0430\u0432\u0438 \u0448\u0430\u0431\u043b\u043e\u043d","Insert accordion":"","Insert column after":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u0441\u043b\u0435\u0434","Insert column before":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0438","Insert date/time":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0430\u0442\u0430/\u0447\u0430\u0441","Insert image":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Insert link (if link plugin activated)":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u044a\u0442 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)","Insert row after":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","Insert row before":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438","Insert table":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","Insert template...":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d...","Insert video":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u043b\u0438\u043f","Insert/Edit code sample":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434","Insert/edit image":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Insert/edit link":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)","Insert/edit media":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043c\u0435\u0434\u0438\u044f","Insert/edit video":"\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u043b\u0438\u043f","Inset":"\u0412\u044a\u0442\u0440\u0435\u0448\u0435\u043d","Invalid hex color code: {0}":"\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0435\u0441\u0435\u0442\u0438\u0447\u0435\u043d (HEX) \u043a\u043e\u0434 \u043d\u0430 \u0446\u0432\u044f\u0442: {0}","Invalid input":"\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0432\u0445\u043e\u0434","Italic":"\u041d\u0430\u043a\u043b\u043e\u043d\u0435\u043d (\u043a\u0443\u0440\u0441\u0438\u0432)","Justify":"\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","Keyboard Navigation":"\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430","Language":"\u0415\u0437\u0438\u043a","Learn more...":"\u041d\u0430\u0443\u0447\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435...","Left":"\u041b\u044f\u0432\u043e","Left to right":"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430\u0434\u044f\u0441\u043d\u043e","Light Blue":"\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u043d","Light Gray":"\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u0432\u043e","Light Green":"\u0421\u0432\u0435\u0442\u043b\u043e\u0437\u0435\u043b\u0435\u043d","Light Purple":"\u0421\u0432\u0435\u0442\u043b\u043e\u043b\u0438\u043b\u0430\u0432","Light Red":"\u0421\u0432\u0435\u0442\u043b\u043e\u0447\u0435\u0440\u0432\u0435\u043d","Light Yellow":"\u0421\u0432\u0435\u0442\u043b\u043e\u0436\u044a\u043b\u0442","Line height":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","Link list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438","Link...":"\u0425\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430...","List Properties":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u0438","List properties...":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u0438...","Loading emojis...":"\u0417\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0434\u0436\u0438\u0442\u0430...","Loading...":"\u0417\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435...","Lower Alpha":"\u041c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","Lower Greek":"\u041c\u0430\u043b\u043a\u0438 \u0433\u0440\u044a\u0446\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","Lower Roman":"\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","Match case":"\u0421\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u044a\u0440\u0430 (\u043c\u0430\u043b\u043a\u0438/\u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438)","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438","Media poster (Image URL)":"\u041c\u0435\u0434\u0438\u0435\u043d \u043f\u043b\u0430\u043a\u0430\u0442 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 URL)","Media...":"\u041c\u0435\u0434\u0438\u044f...","Medium Blue":"\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u043d\u044c\u043e","Medium Gray":"\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u0432\u043e","Medium Purple":"\u0421\u0440\u0435\u0434\u043d\u043e\u043b\u0438\u043b\u0430\u0432\u043e","Merge cells":"\u0421\u043b\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","Middle":"\u041f\u043e \u0441\u0440\u0435\u0434\u0430\u0442\u0430","Midnight Blue":"\u0421\u0440\u0435\u0434\u043d\u043e\u0449\u043d\u043e \u0441\u0438\u043d\u044c\u043e","More...":"\u041e\u0449\u0435...","Name":"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435","Navy Blue":"\u041c\u043e\u0440\u0441\u043a\u043e\u0441\u0438\u043d\u044c\u043e","New document":"\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","New window":"\u0412 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 (\u043f\u043e\u0434\u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446)","Next":"\u0421\u043b\u0435\u0434\u0432\u0430\u0449","No":"\u041d\u0435","No alignment":"\u0411\u0435\u0437 \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","No color":"\u0411\u0435\u0437 \u0446\u0432\u044f\u0442","Nonbreaking space":"\u0422\u0432\u044a\u0440\u0434 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b","None":"\u0411\u0435\u0437","Numbered list":"\u041d\u043e\u043c\u0435\u0440\u0438\u0440\u0430\u043d \u0441\u043f\u0438\u0441\u044a\u043a","OR":"\u0418\u041b\u0418","Objects":"\u041f\u0440\u0435\u0434\u043c\u0435\u0442\u0438","Ok":"\u0414\u043e\u0431\u0440\u0435","Open help dialog":"\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449","Open link":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430","Open link in...":"\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 \u0432...","Open popup menu for split buttons":"\u041e\u0442\u0432\u043e\u0440\u0438 \u043f\u043e\u043f-\u044a\u043f \u043c\u0435\u043d\u044e\u0442\u043e \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0438","Orange":"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e","Outset":"\u0412\u044a\u043d\u0448\u0435\u043d","Page break":"\u041d\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","Paragraph":"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444","Paste":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435","Paste as text":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442","Paste column after":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430 \u0441\u043b\u0435\u0434","Paste column before":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u0438","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435\u0442\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0436\u0438\u043c. \u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u0441\u0435\u0433\u0430 \u0449\u0435 \u0431\u044a\u0434\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442, \u0434\u043e\u043a\u0430\u0442\u043e \u043d\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0442\u0430\u0437\u0438 \u043e\u043f\u0446\u0438\u044f.","Paste or type a link":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","Paste row after":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","Paste row before":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438","Paste your embed code below:":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043a\u043e\u0434\u0430 \u0437\u0430 \u0432\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u043f\u043e-\u0434\u043e\u043b\u0443:","People":"\u0425\u043e\u0440\u0430","Plugins":"\u041f\u043b\u044a\u0433\u0438\u043d\u0438","Plugins installed ({0}):":"\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438 ({0}):","Powered by {0}":"\u0421\u044a\u0437\u0434\u0430\u0434\u0435\u043d\u043e \u0441(\u044a\u0441) {0}","Pre":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0435\u043d \u0442\u0435\u043a\u0441\u0442","Preferences":"\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u044f","Preformatted":"\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d","Premium plugins:":"\u0414\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434","Previous":"\u041f\u0440\u0435\u0434\u0438\u0448\u0435\u043d","Print":"\u041f\u0440\u0438\u043d\u0442\u0438\u0440\u0430\u0439","Print...":"\u041e\u0442\u043f\u0435\u0447\u0430\u0442\u0432\u0430\u043d\u0435...","Purple":"\u041b\u0438\u043b\u0430\u0432\u043e","Quotations":"\u0426\u0438\u0442\u0430\u0442\u0438","R":"R","Range 0 to 255":"\u041e\u0442 0 \u0434\u043e 255","Red":"\u0427\u0435\u0440\u0432\u0435\u043d\u043e","Red component":"\u0427\u0435\u0440\u0432\u0435\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Redo":"\u041e\u0442\u043c\u0435\u043d\u044f\u043d\u0435","Remove":"\u0418\u0437\u0442\u0440\u0438\u0439","Remove color":"\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u0435\u0442\u0430","Remove link":"\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","Replace":"\u0417\u0430\u043c\u044f\u043d\u0430","Replace all":"\u0417\u0430\u043c\u044f\u043d\u0430 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0441\u0440\u0435\u0449\u0430\u043d\u0438\u044f","Replace with":"\u0417\u0430\u043c\u044f\u043d\u0430 \u0441(\u044a\u0441)","Resize":"\u041f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u044f\u0432\u0430\u043d\u0435","Restore last draft":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0447\u0435\u0440\u043d\u043e\u0432\u0430","Reveal or hide additional toolbar items":"","Rich Text Area":"\u041e\u0431\u043b\u0430\u0441\u0442 \u0441 \u043e\u0431\u043e\u0433\u0430\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442","Rich Text Area. Press ALT-0 for help.":"\u041f\u043e\u043b\u0435 \u0437\u0430 \u043e\u0431\u043e\u0433\u0430\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u041f\u043e\u043b\u0435 \u0437\u0430 \u043e\u0431\u043e\u0433\u0430\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Alt+F9 \u0437\u0430 \u043c\u0435\u043d\u044e, Alt+F10 \u0437\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438, Alt+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449","Ridge":"\u0420\u044a\u0431","Right":"\u0414\u044f\u0441\u043d\u043e","Right to left":"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430\u043b\u044f\u0432\u043e","Row":"\u0420\u0435\u0434","Row clipboard actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u043a\u043b\u0438\u043f\u0431\u043e\u0440\u0434\u0430 \u0437\u0430 \u0440\u0435\u0434\u0430","Row group":"\u0413\u0440\u0443\u043f\u0430 \u0440\u0435\u0434\u043e\u0432\u0435","Row header":"\u0425\u0435\u0434\u044a\u0440 \u043d\u0430 \u0440\u0435\u0434","Row properties":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","Row type":"\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434\u0430","Rows":"\u0420\u0435\u0434\u043e\u0432\u0435","Save":"\u0421\u044a\u0445\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435","Save (if save plugin activated)":"\u0417\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u044a\u0442 \u0437\u0430 \u0437\u0430\u043f\u0438\u0441 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)","Scope":"\u041e\u0431\u0445\u0432\u0430\u0442","Search":"\u0422\u044a\u0440\u0441\u0435\u043d\u0435","Select all":"\u041c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435","Select...":"\u0418\u0437\u0431\u0435\u0440\u0438...","Selection":"\u0418\u0437\u0431\u0440\u0430\u043d\u043e","Shortcut":"\u0411\u044a\u0440\u0437 \u043a\u043b\u0430\u0432\u0438\u0448","Show blocks":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u043e\u0432\u0435\u0442\u0435","Show caption":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441","Show invisible characters":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c\u0438 \u0437\u043d\u0430\u0446\u0438","Size":"\u0420\u0430\u0437\u043c\u0435\u0440","Solid":"\u0421\u043e\u043b\u0438\u0434\u0435\u043d","Source":"\u0410\u0434\u0440\u0435\u0441","Source code":"\u0418\u0437\u0445\u043e\u0434\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 HTML","Special Character":"\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0437\u043d\u0430\u043a","Special character...":"\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b...","Split cell":"\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430","Square":"\u0417\u0430\u043f\u044a\u043b\u043d\u0435\u043d\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438","Start list at number":"\u0417\u0430\u043f\u043e\u0447\u043d\u0438 \u0441\u043f\u0438\u0441\u044a\u043a\u0430 \u043e\u0442 \u043d\u043e\u043c\u0435\u0440","Strikethrough":"\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435","Style":"\u0421\u0442\u0438\u043b","Subscript":"\u0414\u043e\u043b\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","Superscript":"\u0413\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","Switch to or from fullscreen mode":"\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u0438\u043b\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d","Symbols":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438","System Font":"\u0421\u0438\u0441\u0442\u0435\u043c\u0435\u043d \u0448\u0440\u0438\u0444\u0442","Table":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430","Table caption":"\u041d\u0430\u0434\u043f\u0438\u0441 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","Table properties":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","Table styles":"\u0421\u0442\u0438\u043b\u043e\u0432\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0438","Template":"\u0428\u0430\u0431\u043b\u043e\u043d","Templates":"\u0428\u0430\u0431\u043b\u043e\u043d\u0438","Text":"\u0422\u0435\u043a\u0441\u0442","Text color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","Text color {0}":"","Text to display":"\u0422\u0435\u043a\u0441\u0442 \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435, \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u043d\u0430 \u0438\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435, \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u043d\u0430 \u0432\u044a\u043d\u0448\u0435\u043d \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0412\u044a\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u0442 URL \u0430\u0434\u0440\u0435\u0441 \u0435 \u0432\u044a\u043d\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u0438 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0438\u044f\u0442 https:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","Title":"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435","To open the popup, press Shift+Enter":"\u0417\u0430 \u0434\u0430 \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435 \u0438\u0437\u0441\u043a\u0430\u0447\u0430\u0449\u0438\u044f \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Shift+Enter","Toggle accordion":"","Tools":"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","Top":"\u0413\u043e\u0440\u0435","Travel and Places":"\u041f\u044a\u0442\u0443\u0432\u0430\u043d\u0435 \u0438 \u043c\u0435\u0441\u0442\u0430","Turquoise":"\u0422\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e","Underline":"\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435","Undo":"\u0412\u0440\u044a\u0449\u0430\u043d\u0435","Upload":"\u041a\u0430\u0447\u0432\u0430\u043d\u0435","Uploading image":"\u041a\u0430\u0447\u0438 \u0441\u043d\u0438\u043c\u043a\u0430","Upper Alpha":"\u0413\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438","Upper Roman":"\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438","Url":"\u0410\u0434\u0440\u0435\u0441 (URL)","User Defined":"\u0417\u0430\u0434\u0430\u0434\u0435\u043d\u0438 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f","Valid":"\u0412\u0430\u043b\u0438\u0434\u043d\u043e","Version":"\u0412\u0435\u0440\u0441\u0438\u044f","Vertical align":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","Vertical space":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e","View":"\u0418\u0437\u0433\u043b\u0435\u0434","Visual aids":"\u0412\u0438\u0437\u0443\u0430\u043b\u043d\u043e \u043e\u0442\u043a\u0440\u043e\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0438 \u0431\u0435\u0437 \u043a\u0430\u043d\u0442\u043e\u0432\u0435 (\u0440\u0430\u043c\u043a\u0438)","Warn":"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435","White":"\u0411\u044f\u043b\u043e","Width":"\u0428\u0438\u0440\u0438\u043d\u0430","Word count":"\u0411\u0440\u043e\u0435\u043d\u0435 \u043d\u0430 \u0434\u0443\u043c\u0438","Words":"\u0414\u0443\u043c\u0438","Words: {0}":"\u0414\u0443\u043c\u0438: {0}","Yellow":"\u0416\u044a\u043b\u0442\u043e","Yes":"\u0414\u0430","You are using {0}":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0430 \u043d\u0435\u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438. \u0429\u0435 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u043b\u0438?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0412\u0430\u0448\u0438\u044f\u0442 \u0431\u0440\u0430\u0443\u0437\u044a\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0435\u043d \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u043a\u043b\u0438\u043f\u0431\u043e\u0440\u0434\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 Ctrl+X (\u0437\u0430 \u0438\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435), Ctrl+C (\u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0435) \u0438 Ctrl+V (\u0437\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435).","alignment":"\u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","austral sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0430\u0443\u0441\u0442\u0440\u0430\u043b","cedi sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u0435\u0434\u0438","colon sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u043b\u043e\u043d","cruzeiro sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e","currency sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0430\u043b\u0443\u0442\u0430","dollar sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u043e\u043b\u0430\u0440","dong sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043d\u0433","drachma sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u0440\u0430\u0445\u043c\u0430","euro-currency sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0435\u0432\u0440\u043e \u0432\u0430\u043b\u0443\u0442\u0430","example":"\u043f\u0440\u0438\u043c\u0435\u0440","formatting":"\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435","french franc sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0444\u0440\u0435\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a","german penny symbol":"\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0433\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u043e \u043f\u0435\u043d\u0438","guarani sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0443\u0430\u0440\u0430\u043d\u0438","history":"\u0438\u0441\u0442\u043e\u0440\u0438\u044f","hryvnia sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0440\u0438\u0432\u043d\u044f","indentation":"\u043e\u0442\u0441\u0442\u044a\u043f","indian rupee sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f","kip sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f","lira sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0440\u0430","livre tournois sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0432\u0440 \u0442\u0443\u0440\u043d\u0443\u0430","manat sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0430\u043d\u0430\u0442","mill sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0438\u043b","naira sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u0430\u0439\u0440\u0430","new sheqel sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0432 \u0448\u0435\u043a\u0435\u043b","nordic mark sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0440\u0434\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430","peseta sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u0435\u0442\u0430","peso sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u043e","ruble sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u0431\u043b\u0430","rupee sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u043f\u0438\u044f","spesmilo sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e","styles":"\u0441\u0442\u0438\u043b\u043e\u0432\u0435","tenge sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0435\u043d\u0433\u0435","tugrik sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u043e\u043d\u0433\u043e\u043b\u0441\u043a\u0438 \u0442\u0443\u0433\u0440\u0438\u043a","turkish lira sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430","won sign":"\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438 \u0432\u043e\u043d","yen character":"\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430","yen/yuan character variant one":"\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430/\u044e\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0434\u043d\u043e","yuan character":"\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d","yuan character, in hong kong and taiwan":"\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d \u0432 \u0425\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d","{0} characters":"{0} \u0441\u0438\u043c\u0432\u043e\u043b\u0430","{0} columns, {1} rows":"","{0} words":"{0} \u0434\u0443\u043c\u0438"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/bn_BD.js b/staticfiles/tinymce/langs/bn_BD.js new file mode 100644 index 0000000..0808730 --- /dev/null +++ b/staticfiles/tinymce/langs/bn_BD.js @@ -0,0 +1 @@ +tinymce.addI18n("bn_BD",{"#":"#","Accessibility":"\u0985\u09cd\u09af\u09be\u0995\u09cd\u09b8\u09c7\u09b8\u09af\u09cb\u0997\u09cd\u09af\u09a4\u09be","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0995\u09b0\u09cd\u09ae","Activity":"\u0995\u09be\u09b0\u09cd\u09af\u0995\u09b2\u09be\u09aa","Address":"\u09a0\u09bf\u0995\u09be\u09a8\u09be","Advanced":"\u0985\u0997\u09cd\u09b0\u09b8\u09b0","Align":"\u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u09b0\u09a8","Align center":"\u09ae\u09a7\u09cd\u09af\u09b8\u09cd\u09a5\u09be\u09a8\u09c7 \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u0995\u09b0\u09a3","Align left":"\u09ac\u09be\u09ae\u09c7 \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u0995\u09b0\u09a3","Align right":"\u09a1\u09be\u09a8\u09c7 \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u0995\u09b0\u09a3","Alignment":"\u09b6\u09cd\u09b0\u09c7\u09a3\u09c0\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8","Alignment {0}":"","All":"\u09b8\u0995\u09b2","Alternative description":"\u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u09ac\u09b0\u09cd\u09a3\u09a8\u09be","Alternative source":"\u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u0989\u09ce\u09b8","Alternative source URL":"\u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u0989\u09ce\u09b8 \u0987\u0989\u0986\u09b0\u098f\u09b2","Anchor":"\u098f\u0999\u09cd\u0995\u09b0","Anchor...":"\u098f\u0999\u09cd\u0995\u09b0...","Anchors":"\u09a8\u09cb\u0999\u09cd\u0997\u09b0","Animals and Nature":"\u09aa\u09cd\u09b0\u09be\u09a3\u09c0 \u098f\u09ac\u0982 \u09aa\u09cd\u09b0\u0995\u09c3\u09a4\u09bf","Arrows":"\u09a4\u09c0\u09b0","B":"\u09a8\u09c0","Background color":"\u09aa\u09c7\u099b\u09a8\u09c7\u09b0 \u09b0\u0982","Background color {0}":"","Black":"\u0995\u09be\u09b2\u09cb","Block":"\u09ac\u09cd\u09b2\u0995","Block {0}":"","Blockquote":"\u09ac\u09cd\u09b2\u0995\u0995\u09cb\u099f","Blocks":"\u09b8\u09cd\u09a5\u09c2\u09b2 ","Blue":"\u09a8\u09c0\u09b2","Blue component":"\u09a8\u09c0\u09b2 \u0989\u09aa\u09be\u09a6\u09be\u09a8","Body":"\u09ac\u09a1\u09bf","Bold":"\u09b8\u09cd\u09a5\u09c2\u09b2","Border":"\u09b8\u09c0\u09ae\u09be\u09a8\u09cd\u09a4","Border color":"\u09b8\u09c0\u09ae\u09be\u09a8\u09cd\u09a4 \u09b0\u0999","Border style":"\u09b8\u09c0\u09ae\u09be\u09a8\u09be \u09b6\u09c8\u09b2\u09c0","Border width":"\u09b8\u09c0\u09ae\u09be\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09b6\u09b8\u09cd\u09a5\u09a4\u09be","Bottom":"\u09a8\u09bf\u099a\u09c7","Browse files":"","Browse for an image":"\u098f\u0995\u099f\u09bf \u099b\u09ac\u09bf \u09ac\u09cd\u09b0\u09be\u0989\u099c \u0995\u09b0\u09c1\u09a8","Browse links":"","Bullet list":"\u09ac\u09c1\u09b2\u09c7\u099f \u09a4\u09be\u09b2\u09bf\u0995\u09be","Cancel":"\u09ac\u09be\u09a4\u09bf\u09b2","Caption":"\u0995\u09cd\u09af\u09be\u09aa\u09b6\u09a8","Cell":"\u09b8\u09c7\u09b2","Cell padding":"\u09b8\u09c7\u09b2 \u09aa\u09cd\u09af\u09be\u09a1\u09bf\u0982","Cell properties":"\u09b8\u09c7\u09b2 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af","Cell spacing":"\u09b8\u09c7\u09b2 \u09ab\u09be\u0981\u0995\u09be","Cell styles":"\u09b8\u09c7\u09b2 \u09b6\u09c8\u09b2\u09c0","Cell type":"\u09b8\u09c7\u09b2 \u099f\u09be\u0987\u09aa","Center":"\u0995\u09c7\u09a8\u09cd\u09a6\u09cd\u09b0","Characters":"\u0985\u0995\u09cd\u09b7\u09b0","Characters (no spaces)":"\u0985\u0995\u09cd\u09b7\u09b0 (\u0995\u09cb\u09a8\u0993 \u09b8\u09cd\u09aa\u09c7\u09b8 \u09a8\u09c7\u0987)","Circle":"\u09ac\u09c3\u09a4\u09cd\u09a4","Class":"\u0995\u09cd\u09b2\u09be\u09b8","Clear formatting":"\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8 \u0985\u09aa\u09b8\u09be\u09b0\u09a3","Close":"\u09ac\u09a8\u09cd\u09a7","Code":"\u09b8\u0982\u0995\u09c7\u09a4\u09b2\u09bf\u09aa\u09bf","Code sample...":"\u09a8\u09ae\u09c1\u09a8\u09be \u0995\u09cb\u09a1","Code view":"\u0995\u09cb\u09a1 \u09a6\u09c7\u0996\u09c1\u09a8","Color Picker":"\u09b0\u0999 \u099a\u09af\u09bc\u09a8\u0995\u09be\u09b0\u09c0","Color swatch":"\u09b0\u0999\u09cd\u0997\u09c7\u09b0 \u09aa\u09cd\u09b2\u09c7\u099f","Cols":"\u0995\u09b2\u09be\u09ae\u0997\u09c1\u09b2\u09cb","Column":"\u0995\u09b2\u09be\u09ae","Column clipboard actions":"\u0995\u09b2\u09be\u09ae \u0995\u09cd\u09b2\u09bf\u09aa\u09ac\u09cb\u09b0\u09cd\u09a1 \u0995\u09b0\u09cd\u09ae","Column group":"\u0995\u09b2\u09be\u09ae \u0997\u09cd\u09b0\u09c1\u09aa","Column header":"\u0995\u09b2\u09be\u09ae \u09b6\u09bf\u09b0\u09a8\u09be\u09ae","Constrain proportions":"\u0985\u09a8\u09c1\u09aa\u09be\u09a4 \u09b8\u09c0\u09ae\u09be\u09ac\u09a6\u09cd\u09a7","Copy":"\u0985\u09a8\u09c1\u0995\u09b0\u09a3","Copy column":"\u0995\u09b2\u09be\u09ae \u0985\u09a8\u09c1\u09b2\u09bf\u09aa\u09bf \u0995\u09b0\u09c1\u09a8","Copy row":"\u09b8\u09be\u09b0\u09bf \u0985\u09a8\u09c1\u09b2\u09bf\u09aa\u09bf \u0995\u09b0\u09c1\u09a8","Could not find the specified string.":"\u09a8\u09bf\u09b0\u09cd\u09a6\u09bf\u09b7\u09cd\u099f \u09b8\u09cd\u099f\u09cd\u09b0\u09bf\u0982\u099f\u09bf \u0996\u09c1\u0981\u099c\u09c7 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf\u0964","Could not load emojis":"","Count":"\u0997\u09a3\u09a8\u09be","Currency":"\u09ae\u09c1\u09a6\u09cd\u09b0\u09be","Current window":"\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8 \u0989\u0987\u09a8\u09cd\u09a1\u09cb","Custom color":"\u0995\u09be\u09b8\u09cd\u099f\u09ae \u09b0\u0982","Custom...":"\u0995\u09be\u09b8\u09cd\u099f\u09ae...","Cut":"\u0995\u09b0\u09cd\u09a4\u09a8","Cut column":"\u0995\u09b2\u09be\u09ae \u0995\u09be\u099f\u09c1\u09a8","Cut row":"\u09b8\u09be\u09b0\u09bf \u0995\u09be\u099f\u09c1\u09a8","Dark Blue":"\u0997\u09be\u09a2\u09bc \u09a8\u09c0\u09b2","Dark Gray":"\u0997\u09be\u09a2\u09bc \u09a7\u09c2\u09b8\u09b0","Dark Green":"\u0997\u09be\u09a2\u09bc \u09b8\u09ac\u09c1\u099c","Dark Orange":"\u0997\u09be\u09a2\u09bc \u0995\u09ae\u09b2\u09be","Dark Purple":"\u0997\u09be\u09a2\u09bc \u09b0\u0995\u09cd\u09a4\u09ac\u09b0\u09cd\u09a3","Dark Red":"\u0997\u09be\u09a2\u09bc \u09b2\u09be\u09b2","Dark Turquoise":"\u0997\u09be\u09a2\u09bc \u09ab\u09bf\u09b0\u09cb\u099c\u09be","Dark Yellow":"\u0997\u09be\u09a2\u09bc \u09b9\u09b2\u09c1\u09a6","Dashed":"","Date/time":"\u09a4\u09be\u09b0\u09bf\u0996 / \u09b8\u09ae\u09af\u09bc","Decrease indent":"\u0987\u09a8\u09cd\u09a1\u09c7\u09a8\u09cd\u099f \u0995\u09ae\u09be\u09a8","Default":"\u09a1\u09bf\u09ab\u09b2\u09cd\u099f","Delete accordion":"","Delete column":"\u0995\u09b2\u09be\u09ae \u09ae\u09c1\u099b\u09c1\u09a8","Delete row":"\u09b8\u09be\u09b0\u09bf \u09ae\u09c1\u099b\u09c1\u09a8","Delete table":"\u09b8\u09be\u09b0\u09a3\u09bf \u09ae\u09c1\u099b\u09c1\u09a8","Dimensions":"\u09ae\u09be\u09a4\u09cd\u09b0\u09be","Disc":"\u09a1\u09bf\u09b8\u09cd\u0995","Div":"\u09a1\u09bf\u09ad","Document":"\u09a6\u09b2\u09bf\u09b2","Dotted":"\u09ac\u09bf\u09a8\u09cd\u09a6\u09c1\u09af\u09c1\u0995\u09cd\u09a4","Double":"\u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3","Drop an image here":"\u098f\u0996\u09be\u09a8\u09c7 \u098f\u0995\u099f\u09bf \u099b\u09ac\u09bf \u09a1\u09cd\u09b0\u09aa \u0995\u09b0\u09c1\u09a8","Dropped file type is not supported":"\u09a1\u09cd\u09b0\u09aa \u0995\u09b0\u09be \u09ab\u09be\u0987\u09b2 \u099f\u09be\u0987\u09aa \u09b8\u09ae\u09b0\u09cd\u09a5\u09bf\u09a4 \u09a8\u09af\u09bc","Edit":"\u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8 \u0995\u09b0\u09be","Embed":"\u098f\u09ae\u09cd\u09ac\u09c7\u09a1","Emojis":"","Emojis...":"","Error":"\u09a4\u09cd\u09b0\u09c1\u099f\u09bf","Error: Form submit field collision.":"\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09ab\u09b0\u09cd\u09ae \u099c\u09ae\u09be \u09a6\u09c7\u0993\u09af\u09bc\u09be\u09b0 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7 \u09b8\u0982\u0998\u09b0\u09cd\u09b7\u0964","Error: No form element found.":"\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u0995\u09cb\u09a8\u0993 \u09ab\u09b0\u09cd\u09ae \u0989\u09aa\u09be\u09a6\u09be\u09a8 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc \u09a8\u09bf\u0964","Extended Latin":"\u09ac\u09b0\u09cd\u09a7\u09bf\u09a4 \u09b2\u09be\u09a4\u09bf\u09a8","Failed to initialize plugin: {0}":"\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u099a\u09be\u09b2\u09c1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09df\u09c7\u099b\u09c7: {0}","Failed to load plugin url: {0}":"\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0987\u0989\u0986\u09b0\u098f\u09b2 \u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5: {0}","Failed to load plugin: {0} from url {1}":"\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5: {0} \u0987\u0989\u0986\u09b0\u098f\u09b2 \u09a5\u09c7\u0995\u09c7 {1}","Failed to upload image: {0}":"\u099a\u09bf\u09a4\u09cd\u09b0 \u0986\u09aa\u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09df\u09c7\u099b\u09c7: {0}","File":"\u09ab\u09be\u0987\u09b2","Find":"\u0996\u09c1\u0981\u099c\u09c1\u09a8","Find (if searchreplace plugin activated)":"\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8 (\u09af\u09a6\u09bf \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09af\u09cb\u0997\u09cd\u09af \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u09b8\u0995\u09cd\u09b0\u09bf\u09af\u09bc \u0995\u09b0\u09be \u09b9\u09af\u09bc)","Find and Replace":"\u0996\u09c1\u0981\u099c\u09c1\u09a8 \u0993 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Find and replace...":"\u0996\u09c1\u0981\u099c\u09c1\u09a8 \u0993 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8...","Find in selection":"\u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8\u09c7 \u0996\u09c1\u0981\u099c\u09c1\u09a8","Find whole words only":"\u09b6\u09c1\u09a7\u09c1\u09ae\u09be\u09a4\u09cd\u09b0 \u09aa\u09c1\u09b0\u09cb \u09b6\u09ac\u09cd\u09a6\u0997\u09c1\u09b2\u09bf \u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8","Flags":"\u09aa\u09a4\u09be\u0995\u09be","Focus to contextual toolbar":"\u09aa\u09cd\u09b0\u09be\u09b8\u0999\u09cd\u0997\u09bf\u0995 \u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8","Focus to element path":"\u0989\u09aa\u09be\u09a6\u09be\u09a8 \u09aa\u09be\u09a5 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8","Focus to menubar":"\u09ae\u09c7\u09a8\u09c1\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8","Focus to toolbar":"\u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8","Font":"\u09ab\u09a8\u09cd\u099f","Font size {0}":"","Font sizes":"\u09ab\u09a8\u09cd\u099f \u0986\u0995\u09be\u09b0","Font {0}":"","Fonts":"\u09ab\u09a8\u09cd\u099f\u09b8","Food and Drink":"\u0996\u09be\u09a6\u09cd\u09af \u0993 \u09aa\u09be\u09a8\u09c0\u09af\u09bc","Footer":"\u09ab\u09c1\u099f\u09be\u09b0","Format":"\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8","Format {0}":"","Formats":"\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8","Fullscreen":"\u09aa\u09c2\u09b0\u09cd\u09a3 \u09aa\u09b0\u09cd\u09a6\u09be","G":"\u09b8","General":"\u09b8\u09be\u09a7\u09be\u09b0\u09a3","Gray":"\u09a7\u09c2\u09b8\u09b0","Green":"\u09b8\u09ac\u09c1\u099c","Green component":"\u09b8\u09ac\u09c1\u099c \u0989\u09aa\u09be\u09a6\u09be\u09a8","Groove":"","Handy Shortcuts":"\u09b8\u09b9\u099c \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f ","Header":"\u09b9\u09c7\u09a1\u09be\u09b0","Header cell":"\u09b9\u09c7\u09a1\u09be\u09b0 \u09b8\u09c7\u09b2","Heading 1":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e7","Heading 2":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e8","Heading 3":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e9","Heading 4":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09ea","Heading 5":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09eb","Heading 6":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09ec","Headings":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae","Height":"\u0989\u099a\u09cd\u099a\u09a4\u09be","Help":"\u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af \u0995\u09b0\u09c1\u09a8","Hex color code":"\u09b9\u09c7\u0995\u09cd\u09b8 \u0995\u09be\u09b2\u09be\u09b0 \u0995\u09cb\u09a1","Hidden":"","Horizontal align":"\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995 \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995","Horizontal line":"\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995 \u09b0\u09c7\u0996\u09be","Horizontal space":"\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995 \u09b8\u09cd\u09a5\u09be\u09a8","ID":"\u0986\u0987\u09a1\u09bf","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u0986\u0987\u09a1\u09bf \u098f\u0995\u099f\u09bf \u09ac\u09b0\u09cd\u09a3 \u09a6\u09bf\u09df\u09c7 \u09b6\u09c1\u09b0\u09c1 \u09b9\u0993\u09df\u09be \u0989\u099a\u09bf\u09a4, \u0995\u09df\u09c7\u0995\u099f\u09bf \u09ac\u09b0\u09cd\u09a3, \u09b8\u0982\u0996\u09cd\u09af\u09be, \u09a1\u09cd\u09af\u09be\u09b6, \u09a1\u099f, \u0995\u09cb\u09b2\u09a8 \u0993 \u0986\u09a8\u09cd\u09a1\u09be\u09b0\u09b8\u09cd\u0995\u09cb\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u0985\u09a8\u09c1\u09b6\u09b0\u09a8\u09bf\u09a4 \u09b9\u0993\u09df\u09be \u0989\u099a\u09bf\u09a4\u0964","Image is decorative":"\u099a\u09bf\u09a4\u09cd\u09b0\u099f\u09bf \u0986\u09b2\u0982\u0995\u09be\u09b0\u09bf\u0995","Image list":"\u099a\u09bf\u09a4\u09cd\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be","Image title":"\u0987\u09ae\u09c7\u099c\u09c7\u09b0 \u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae","Image...":"\u099a\u09bf\u09a4\u09cd\u09b0...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP \u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u099a\u09bf\u09a4\u09cd\u09b0 \u09aa\u09cd\u09b0\u0995\u09cd\u09b8\u09bf \u0996\u09c1\u0981\u099c\u09c7 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP \u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09ad\u09c1\u09b2 \u099a\u09bf\u09a4\u09cd\u09b0 \u09aa\u09cd\u09b0\u0995\u09cd\u09b8\u09bf \u0987\u0989\u0986\u09b0\u098f\u09b2","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP \u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09aa\u09cd\u09b0\u09a4\u09cd\u09af\u09be\u0996\u09cd\u09af\u09be\u09a8 \u0985\u09a8\u09c1\u09b0\u09cb\u09a7","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP \u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u0985\u099c\u09be\u09a8\u09be ImageProxy \u09a4\u09cd\u09b0\u09c1\u099f\u09bf","Increase indent":"\u0987\u09a8\u09cd\u09a1\u09c7\u09a8\u09cd\u099f \u09ac\u09be\u09a1\u09bc\u09be\u09a8","Inline":"\u09b8\u0999\u09cd\u0997\u09a4\u09bf\u09aa\u09c2\u09b0\u09cd\u09a3\u09ad\u09be\u09ac\u09c7","Insert":"\u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6","Insert Template":"\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert accordion":"","Insert column after":"\u09aa\u09b0\u09c7 \u0995\u09b2\u09be\u09ae \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert column before":"\u0986\u0997\u09c7 \u0995\u09b2\u09be\u09ae \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert date/time":"\u09a4\u09be\u09b0\u09bf\u0996 / \u09b8\u09ae\u09af\u09bc \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert image":"\u099a\u09bf\u09a4\u09cd\u09b0 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert link (if link plugin activated)":"\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8 (\u09af\u09a6\u09bf \u09b2\u09bf\u0999\u09cd\u0995 \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0985\u09cd\u09af\u09be\u0995\u09cd\u099f\u09bf\u09ad\u09c7\u099f \u0995\u09b0\u09be \u09b9\u09af\u09bc)","Insert row after":"\u09aa\u09b0\u09c7 \u09b8\u09be\u09b0\u09bf \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert row before":"\u0986\u0997\u09c7 \u09b8\u09be\u09b0\u09bf \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert table":"\u099f\u09c7\u09ac\u09bf\u09b2 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert template...":"\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f \u09a2\u09cb\u0995\u09be\u09a8...","Insert video":"\u09ad\u09bf\u09a1\u09bf\u0993 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8","Insert/Edit code sample":"\u0995\u09cb\u09a1 \u09a8\u09ae\u09c1\u09a8\u09be \u09a2\u09cb\u0995\u09be\u09a8 / \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8","Insert/edit image":"\u0987\u09ae\u09c7\u099c \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 / \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8","Insert/edit link":"\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 / \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8","Insert/edit media":"\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8 / \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8","Insert/edit video":"\u09ad\u09bf\u09a1\u09bf\u0993 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 / \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8","Inset":"","Invalid hex color code: {0}":"\u0985\u09ac\u09c8\u09a7 \u09b9\u09c7\u0995\u09cd\u09b8 \u0995\u09be\u09b2\u09be\u09b0 \u0995\u09cb\u09a1: {0}","Invalid input":"\u0985\u09ac\u09c8\u09a7 \u09a8\u09bf\u09ac\u09c7\u09b6","Italic":"\u09a4\u09bf\u09b0\u09cd\u09af\u0995","Justify":"\u0989\u09ad\u09df \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u0995\u09b0\u09a3","Keyboard Navigation":"\u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u09b6\u09a8","Language":"\u09ad\u09be\u09b7\u09be","Learn more...":"\u0986\u09b0\u0993 \u099c\u09be\u09a8\u09c1\u09a8...","Left":"\u09ac\u09be\u09ae","Left to right":"\u09ac\u09be\u09ae \u09a5\u09c7\u0995\u09c7 \u09a1\u09be\u09a8","Light Blue":"\u09b9\u09be\u09b2\u0995\u09be \u09a8\u09c0\u09b2","Light Gray":"\u09b9\u09be\u09b2\u0995\u09be \u09a7\u09c2\u09b8\u09b0","Light Green":"\u09b9\u09be\u09b2\u0995\u09be \u09b8\u09ac\u09c1\u099c","Light Purple":"\u09b9\u09be\u09b2\u0995\u09be \u09b0\u0995\u09cd\u09a4\u09ac\u09b0\u09cd\u09a3","Light Red":"\u09b9\u09be\u09b2\u0995\u09be \u09b2\u09be\u09b2","Light Yellow":"\u09b9\u09be\u09b2\u0995\u09be \u09b9\u09b2\u09c1\u09a6","Line height":"\u09b2\u09be\u0987\u09a8\u09c7\u09b0 \u0989\u099a\u09cd\u099a\u09a4\u09be","Link list":"\u09b2\u09bf\u0999\u09cd\u0995 \u09a4\u09be\u09b2\u09bf\u0995\u09be","Link...":"\u09b2\u09bf\u0982\u0995...","List Properties":"\u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af \u09a4\u09be\u09b2\u09bf\u0995\u09be","List properties...":"\u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af \u09a4\u09be\u09b2\u09bf\u0995\u09be...","Loading emojis...":"","Loading...":"\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...","Lower Alpha":"\u09a8\u09bf\u09ae\u09cd\u09a8 \u0986\u09b2\u09ab\u09be","Lower Greek":"\u09a8\u09bf\u09ae\u09cd\u09a8 \u0997\u09cd\u09b0\u09bf\u0995","Lower Roman":"\u09a8\u09bf\u09ae\u09cd\u09a8 \u09b0\u09cb\u09ae\u09be\u09a8","Match case":"\u09ae\u09cd\u09af\u09be\u099a \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7","Mathematical":"\u0997\u09be\u09a3\u09bf\u09a4\u09bf\u0995","Media poster (Image URL)":"\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be \u09aa\u09cb\u09b8\u09cd\u099f\u09be\u09b0 (\u0987\u09ae\u09c7\u099c \u0987\u0989\u0986\u09b0\u098f\u09b2)","Media...":"\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be...","Medium Blue":"\u09ae\u09be\u099d\u09be\u09b0\u09bf \u09a8\u09c0\u09b2","Medium Gray":"\u09ae\u09cb\u099f\u09be\u09ae\u09c1\u099f\u09bf \u09a7\u09c2\u09b8\u09b0","Medium Purple":"\u09ae\u09be\u099d\u09be\u09b0\u09bf \u09ac\u09c7\u0997\u09c1\u09a8\u09bf","Merge cells":"\u09b8\u09c7\u09b2 \u09ae\u09be\u09b0\u09cd\u099c \u0995\u09b0\u09c1\u09a8","Middle":"\u09ae\u09a7\u09cd\u09af\u09ae","Midnight Blue":"\u09ae\u09be\u099d\u09b0\u09be\u09a4\u09c7\u09b0 \u09a8\u09c0\u09b2","More...":"\u0986\u09b0\u09cb...","Name":"\u09a8\u09be\u09ae","Navy Blue":"\u0986\u0995\u09be\u09b6\u09c0","New document":"\u09a8\u09a4\u09c1\u09a8 \u09a6\u09b8\u09cd\u09a4\u09be\u09ac\u09c7\u099c","New window":"\u09a8\u09a4\u09c1\u09a8 \u0989\u0987\u09a8\u09cd\u09a1\u09cb","Next":"\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0","No":"\u09a8\u09be","No alignment":"\u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995\u0995\u09b0\u09a3 \u09a8\u09c7\u0987","No color":"\u0995\u09cb\u09a8 \u09b0\u0982 \u09a8\u09c7\u0987","Nonbreaking space":"\u0985\u09ac\u09bf\u099a\u09cd\u099b\u09bf\u09a8\u09cd\u09a8 \u09b8\u09cd\u09a5\u09be\u09a8","None":"\u0995\u09cb\u09a8\u09cb\u099f\u09bf\u0987 \u09a8\u09af\u09bc","Numbered list":"\u09b8\u0982\u0996\u09cd\u09af\u09be\u09af\u09c1\u0995\u09cd\u09a4 \u09a4\u09be\u09b2\u09bf\u0995\u09be","OR":"\u0985\u09a5\u09ac\u09be","Objects":"\u0989\u09a6\u09cd\u09a6\u09c7\u09b6\u09cd\u09af","Ok":"\u09a0\u09bf\u0995 \u0986\u099b\u09c7","Open help dialog":"\u09b8\u09b9\u09be\u09af\u09bc\u09a4\u09be \u09a1\u09be\u09af\u09bc\u09be\u09b2\u0997 \u0996\u09c1\u09b2\u09c1\u09a8","Open link":"\u09b2\u09bf\u0999\u09cd\u0995\u099f\u09bf \u0996\u09c1\u09b2\u09c1\u09a8","Open link in...":"\u098f\u09a4\u09c7 \u09b2\u09bf\u0999\u09cd\u0995\u099f\u09bf \u0996\u09c1\u09b2\u09c1\u09a8...","Open popup menu for split buttons":"\u09ac\u09bf\u09ad\u0995\u09cd\u09a4 \u09ac\u09cb\u09a4\u09be\u09ae\u0997\u09c1\u09b2\u09bf\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09aa\u0986\u09aa \u09ae\u09c7\u09a8\u09c1 \u0996\u09c1\u09b2\u09c1\u09a8","Orange":"\u0995\u09ae\u09b2\u09be","Outset":"","Page break":"\u09aa\u09c3\u09b7\u09cd\u09a0\u09be \u09ac\u09bf\u09b0\u09a4\u09bf","Paragraph":"\u09aa\u09cd\u09af\u09be\u09b0\u09be\u0997\u09cd\u09b0\u09be\u09ab","Paste":"\u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Paste as text":"\u09aa\u09be\u09a0\u09cd\u09af \u09b9\u09bf\u09b8\u09be\u09ac\u09c7 \u09aa\u09c7\u09b8\u09cd\u099f \u0995\u09b0\u09c1\u09a8","Paste column after":"\u09aa\u09b0\u09c7 \u0995\u09b2\u09be\u09ae \u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Paste column before":"\u0986\u0997\u09c7 \u0995\u09b2\u09be\u09ae \u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u09aa\u09c7\u09b8\u09cd\u099f \u098f\u0996\u09a8 \u09aa\u09cd\u09b2\u09c7\u0987\u09a8 \u099f\u09c7\u0995\u09cd\u09b8\u099f \u09ae\u09cb\u09a1\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u098f\u0996\u09a8 \u098f\u0987 \u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u09ac\u09a8\u09cd\u09a7 \u099f\u0997\u09b2 \u09aa\u09b0\u09cd\u09af\u09a8\u09cd\u09a4 \u09ac\u09bf\u09b7\u09af\u09bc\u09ac\u09b8\u09cd\u09a4\u09c1 \u098f\u0996\u09a8 \u09aa\u09cd\u09b2\u09c7\u0987\u09a8 \u099f\u09c7\u0995\u09cd\u09b8\u099f \u09b9\u09bf\u09b8\u09be\u09ac\u09c7 \u0986\u099f\u0995\u09be\u09a8\u09cb \u09b9\u09ac\u09c7\u0964","Paste or type a link":"\u098f\u0995\u099f\u09bf \u09b2\u09bf\u0999\u09cd\u0995 \u0986\u099f\u0995\u09be\u09a8 \u09ac\u09be \u099f\u09be\u0987\u09aa \u0995\u09b0\u09c1\u09a8","Paste row after":"\u09aa\u09b0\u09c7 \u09b8\u09be\u09b0\u09bf \u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Paste row before":"\u0986\u0997\u09c7 \u09b8\u09be\u09b0\u09bf \u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8","Paste your embed code below:":"\u09a8\u09c0\u099a\u09c7\u09b0 \u0986\u09aa\u09a8\u09be\u09b0 \u098f\u09ae\u09cd\u09ac\u09c7\u09a1 \u0995\u09cb\u09a1 \u0986\u099f\u0995\u09be\u09a8:","People":"\u099c\u09a8\u09b8\u09be\u09a7\u09be\u09b0\u09a3","Plugins":"\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8","Plugins installed ({0}):":"\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0987\u09a8\u09b8\u09cd\u099f\u09b2 ({0}):","Powered by {0}":"{0} \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u099a\u09be\u09b2\u09bf\u09a4","Pre":"\u09aa\u09cd\u09b0\u09be\u0995","Preferences":"\u09aa\u099b\u09a8\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9","Preformatted":"\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8\u09bf\u09a4","Premium plugins:":"\u09aa\u09cd\u09b0\u09bf\u09ae\u09bf\u09af\u09bc\u09be\u09ae \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":".","Press {0} for help":"","Preview":"\u09aa\u09c2\u09b0\u09cd\u09ac\u09b0\u09c2\u09aa","Previous":"\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0","Print":"\u09ae\u09c1\u09a6\u09cd\u09b0\u09a8","Print...":"\u09ae\u09c1\u09a6\u09cd\u09b0\u09a8...","Purple":"\u09ac\u09c7\u0997\u09c1\u09a8\u09c0","Quotations":"\u0989\u09a6\u09cd\u09a7\u09c3\u09a4\u09bf","R":"\u09b2\u09be","Range 0 to 255":"\u09b0\u09c7\u099e\u09cd\u099c 0 \u09a5\u09c7\u0995\u09c7 255","Red":"\u09b2\u09be\u09b2","Red component":"\u09b2\u09be\u09b2 \u0989\u09aa\u09be\u09a6\u09be\u09a8","Redo":"\u09aa\u09c1\u09a8\u09b0\u09be\u09af\u09bc \u0995\u09b0\u09c1\u09a8","Remove":"\u0985\u09aa\u09b8\u09be\u09b0\u09a3","Remove color":"\u09b0\u0999 \u09b8\u09b0\u09be\u09a8","Remove link":"\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09b0\u09be\u09a8","Replace":"\u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09be","Replace all":"\u09b8\u09ae\u09b8\u09cd\u09a4 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8","Replace with":"\u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8","Resize":"\u09ae\u09be\u09aa \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09c1\u09a8","Restore last draft":"\u09b6\u09c7\u09b7 \u0996\u09b8\u09a1\u09bc\u09be\u099f\u09bf \u09aa\u09c1\u09a8\u09b0\u09c1\u09a6\u09cd\u09a7\u09be\u09b0 \u0995\u09b0\u09c1\u09a8","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u09b8\u09ae\u09c3\u09a6\u09cd\u09a7 \u09aa\u09be\u09a0\u09cd\u09af \u0985\u099e\u09cd\u099a\u09b2\u0964 \u09b8\u09b9\u09be\u09af\u09bc\u09a4\u09be\u09b0 \u099c\u09a8\u09cd\u09af ALT-0 \u099f\u09bf\u09aa\u09c1\u09a8\u0964","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u09b0\u09bf\u099a \u099f\u09c7\u0995\u09cd\u09b8\u099f \u098f\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09c7\u09a8\u09c1 \u099c\u09a8\u09cd\u09af ALT-F9 \u099a\u09be\u09aa\u09c1\u09a8 \u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7\u09b0 \u099c\u09a8\u09cd\u09af ALT-F10 \u099f\u09bf\u09aa\u09c1\u09a8 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af\u09c7\u09b0 \u099c\u09a8\u09cd\u09af ALT-0 \u099a\u09be\u09aa\u09c1\u09a8","Ridge":"","Right":"\u09a1\u09be\u09a8","Right to left":"\u09a1\u09be\u09a8 \u09a5\u09c7\u0995\u09c7 \u09ac\u09be\u09ae","Row":"\u09b8\u09be\u09b0\u09bf","Row clipboard actions":"\u09b8\u09be\u09b0\u09bf \u0995\u09cd\u09b2\u09bf\u09aa\u09ac\u09cb\u09b0\u09cd\u09a1 \u0995\u09b0\u09cd\u09ae","Row group":"\u09b8\u09be\u09b0\u09bf \u0997\u09cd\u09b0\u09c1\u09aa","Row header":"\u09b8\u09be\u09b0\u09bf \u09b6\u09bf\u09b0\u09a8\u09be\u09ae","Row properties":"\u09b8\u09be\u09b0\u09bf \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af","Row type":"\u09b8\u09be\u09b0\u09bf\u09b0 \u09a7\u09b0\u09a8","Rows":"\u09b8\u09be\u09b0\u09bf\u0997\u09c1\u09b2\u09cb","Save":"\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3","Save (if save plugin activated)":"\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3 \u0995\u09b0\u09c1\u09a8 (\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0985\u09cd\u09af\u09be\u0995\u09cd\u099f\u09bf\u09ad\u09c7\u099f \u09b9\u09b2\u09c7)","Scope":"\u09ac\u09cd\u09af\u09be\u09aa\u09cd\u09a4\u09bf","Search":"\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8","Select all":"\u09b8\u09ac \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u0995\u09b0\u09c1\u09a8","Select...":"\u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8...","Selection":"\u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8","Shortcut":"\u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f","Show blocks":"\u09ac\u09cd\u09b2\u0995 \u09a6\u09c7\u0996\u09be\u09a8","Show caption":"\u0995\u09cd\u09af\u09be\u09aa\u09b6\u09a8 \u09a6\u09c7\u0996\u09be\u09a8","Show invisible characters":"\u0985\u09a6\u09c3\u09b6\u09cd\u09af \u0985\u0995\u09cd\u09b7\u09b0 \u09a6\u09c7\u0996\u09be\u09a8","Size":"\u0986\u09df\u09a4\u09a8","Solid":"\u09a6\u09c3\u09a2\u09bc","Source":"\u0989\u09ce\u09b8","Source code":"\u0989\u09ce\u09b8 \u0995\u09cb\u09a1","Special Character":"\u09ac\u09bf\u09b6\u09c7\u09b7 \u09ac\u09b0\u09cd\u09a3","Special character...":"\u09ac\u09bf\u09b6\u09c7\u09b7 \u09ac\u09b0\u09cd\u09a3...","Split cell":"\u09b8\u09c7\u09b2 \u09ac\u09bf\u09ad\u0995\u09cd\u09a4 \u0995\u09b0\u09c1\u09a8","Square":"\u09ac\u09b0\u09cd\u0997\u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0","Start list at number":"-\u098f \u09a8\u09ae\u09cd\u09ac\u09b0\u09c7 \u09a4\u09be\u09b2\u09bf\u0995\u09be \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c1\u09a8","Strikethrough":"\u09b8\u09cd\u099f\u09cd\u09b0\u09be\u0987\u0995\u09a5\u09cd\u09b0\u09c1","Style":"\u09b6\u09c8\u09b2\u09c0","Subscript":"\u09a8\u09bf\u09ae\u09cd\u09a8\u09b2\u09bf\u09aa\u09bf","Superscript":"\u098a\u09b0\u09cd\u09a7\u09cd\u09ac\u09b2\u09bf\u09aa\u09bf","Switch to or from fullscreen mode":"\u09aa\u09c2\u09b0\u09cd\u09a3\u09b8\u09cd\u0995\u09cd\u09b0\u09bf\u09a8 \u09ae\u09cb\u09a1\u09c7 \u09ac\u09be \u09a5\u09c7\u0995\u09c7 \u09b8\u09cd\u09af\u09c1\u0987\u099a \u0995\u09b0\u09c1\u09a8","Symbols":"\u09aa\u09cd\u09b0\u09a4\u09c0\u0995","System Font":"\u09b8\u09bf\u09b8\u09cd\u099f\u09c7\u09ae \u09ab\u09a8\u09cd\u099f","Table":"\u099f\u09c7\u09ac\u09bf\u09b2","Table caption":"\u099f\u09c7\u09ac\u09bf\u09b2 \u0995\u09cd\u09af\u09be\u09aa\u09b6\u09a8","Table properties":"\u099f\u09c7\u09ac\u09bf\u09b2 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af","Table styles":"\u099f\u09c7\u09ac\u09bf\u09b2 \u09b6\u09c8\u09b2\u09c0","Template":"\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f","Templates":"\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f","Text":"\u099f\u09c7\u0995\u09cd\u09b8\u099f","Text color":"\u09b2\u09c7\u0996\u09be\u09b0 \u09b0\u0999","Text color {0}":"","Text to display":"\u09aa\u09cd\u09b0\u09a6\u09b0\u09cd\u09b6\u09bf\u09a4 \u099f\u09c7\u0995\u09cd\u09b8\u099f","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be \u0987\u0989\u0986\u09b0\u098f\u09b2\u099f\u09bf \u098f\u0995\u099f\u09bf \u0987\u09ae\u09c7\u09b2 \u09a0\u09bf\u0995\u09be\u09a8\u09be \u09ac\u09b2\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc \u09ae\u09c7\u0987\u09b2\u099f\u09cb \u09af\u09cb\u0997 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8: \u0989\u09aa\u09b8\u09b0\u09cd\u0997?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be \u0987\u0989\u0986\u09b0\u098f\u09b2\u099f\u09bf \u098f\u0995\u099f\u09bf \u09ac\u09b9\u09bf\u09b0\u09be\u0997\u09a4 \u09b2\u09bf\u0999\u09cd\u0995 \u09ac\u09b2\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc http:// \u09aa\u09cd\u09b0\u09bf\u09ab\u09bf\u0995\u09cd\u09b8 \u09af\u09cb\u0997 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be \u0987\u0989\u0986\u09b0\u098f\u09b2\u099f\u09bf \u098f\u0995\u099f\u09bf \u09ac\u09b9\u09bf\u09b0\u09be\u0997\u09a4 \u09b2\u09bf\u0999\u09cd\u0995 \u09ac\u09b2\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc http:// \u09aa\u09cd\u09b0\u09bf\u09ab\u09bf\u0995\u09cd\u09b8 \u09af\u09cb\u0997 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?","Title":"\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae","To open the popup, press Shift+Enter":"\u09aa\u09aa\u0986\u09aa \u0996\u09c1\u09b2\u09a4\u09c7, \u09b6\u09bf\u09ab\u099f + \u098f\u09a8\u09cd\u099f\u09be\u09b0 \u099f\u09bf\u09aa\u09c1\u09a8","Toggle accordion":"","Tools":"\u09b8\u09b0\u099e\u09cd\u099c\u09be\u09ae\u09b8\u09ae\u09c2\u09b9","Top":"\u0989\u09aa\u09b0","Travel and Places":"\u09ad\u09cd\u09b0\u09ae\u09a3 \u098f\u09ac\u0982 \u09b8\u09cd\u09a5\u09be\u09a8","Turquoise":"\u09ab\u09bf\u09b0\u09cb\u099c\u09be","Underline":"\u09a8\u09bf\u09ae\u09cd\u09a8\u09b0\u09c7\u0996\u09be","Undo":"\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09ac\u09b8\u09cd\u09a5\u09be\u09af\u09bc \u09ab\u09bf\u09b0\u09c1\u09a8","Upload":"\u0986\u09aa\u09b2\u09cb\u09a1","Uploading image":"\u099b\u09ac\u09bf \u0986\u09aa\u09b2\u09cb\u09a1 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7","Upper Alpha":"\u0989\u099a\u09cd\u099a\u09a4\u09b0 \u0986\u09b2\u09ab\u09be","Upper Roman":"\u098a\u09b0\u09cd\u09a7\u09cd\u09ac \u09b0\u09cb\u09ae\u09be\u09a8","Url":"\u0987\u0989\u0986\u09b0\u098f\u09b2","User Defined":"\u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0\u0995\u09be\u09b0\u09c0 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09af\u09bc\u09bf\u09a4","Valid":"\u09ac\u09c8\u09a7","Version":"\u09b8\u0982\u09b8\u09cd\u0995\u09b0\u09a3","Vertical align":"\u0989\u09b2\u09cd\u09b2\u09ae\u09cd\u09ac \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995","Vertical space":"\u0989\u09b2\u09cd\u09b2\u09ae\u09cd\u09ac \u09b8\u09cd\u09a5\u09be\u09a8","View":"\u09a6\u09c3\u09b6\u09cd\u09af","Visual aids":"\u09ac\u09cd\u09af\u09be\u0996\u09cd\u09af\u09be\u09ae\u09c2\u09b2\u0995 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af","Warn":"\u09b8\u09be\u09ac\u09a7\u09be\u09a8","White":"\u09b8\u09be\u09a6\u09be","Width":"\u09aa\u09cd\u09b0\u09b8\u09cd\u09a5","Word count":"\u09b6\u09ac\u09cd\u09a6 \u0997\u09a3\u09a8\u09be","Words":"\u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9","Words: {0}":"\u09b6\u09ac\u09cd\u09a6: {0}","Yellow":"\u09b9\u09b2\u09c1\u09a6","Yes":"\u09b9\u09cd\u09af\u09be\u0981","You are using {0}":"\u0986\u09aa\u09a8\u09bf \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u099b\u09c7\u09a8 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09bf\u09a4 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8\u0997\u09c1\u09b2\u09bf \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u09af\u09c7 \u0986\u09aa\u09a8\u09bf \u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u099f \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09cd\u09b0\u09be\u0989\u099c\u09be\u09b0 \u0995\u09cd\u09b2\u09bf\u09aa\u09ac\u09cb\u09b0\u09cd\u09a1 \u09a5\u09c7\u0995\u09c7 \u09b8\u09b0\u09be\u09b8\u09b0\u09bf \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6\u09be\u09a7\u09bf\u0995\u09be\u09b0 \u09b8\u09ae\u09b0\u09cd\u09a5\u09a8 \u0995\u09b0\u09c7 \u09a8\u09be\u0964 \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9 \u0995\u09b0\u09c7 \u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f Ctrl +X/C/V \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8\u0964","alignment":"\u09b8\u09ae\u09a4\u09b2\u09a4\u09be","austral sign":"\u0993\u09b8\u09cd\u099f\u09cd\u09b0\u09be\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8","cedi sign":"\u09b8\u09c7\u09a1\u09bf \u099a\u09bf\u09b9\u09cd\u09a8","colon sign":"\u0995\u09cb\u09b2\u09a8 \u099a\u09bf\u09b9\u09cd\u09a8","cruzeiro sign":"\u0995\u09cd\u09b0\u09c1\u099c\u09c1\u0987\u09b0\u09cb \u099a\u09bf\u09b9\u09cd\u09a8","currency sign":"\u09ae\u09c1\u09a6\u09cd\u09b0\u09be\u09b0 \u099a\u09bf\u09b9\u09cd\u09a8","dollar sign":"\u09a1\u09b2\u09be\u09b0 \u099a\u09bf\u09b9\u09cd\u09a8","dong sign":"\u09a1\u0982 \u099a\u09bf\u09b9\u09cd\u09a8","drachma sign":"\u09a1\u09cd\u09b0\u09be\u099a\u09ae\u09be \u099a\u09bf\u09b9\u09cd\u09a8","euro-currency sign":"\u0987\u0989\u09b0\u09cb-\u09ae\u09c1\u09a6\u09cd\u09b0\u09be \u09b8\u09be\u0987\u09a8","example":"\u0989\u09a6\u09be\u09b9\u09b0\u09a3","formatting":"\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8","french franc sign":"\u09ab\u09cd\u09b0\u09c7\u099e\u09cd\u099a \u09ab\u09cd\u09b0\u09cd\u09af\u09be\u0999\u09cd\u0995 \u099a\u09bf\u09b9\u09cd\u09a8","german penny symbol":"\u099c\u09be\u09b0\u09cd\u09ae\u09be\u09a8 \u09aa\u09c7\u09a8\u09bf \u099a\u09bf\u09b9\u09cd\u09a8","guarani sign":"\u0997\u09c1\u09df\u09be\u09b0\u09be\u09a8\u09c0 \u099a\u09bf\u09b9\u09cd\u09a8","history":"\u0987\u09a4\u09bf\u09b9\u09be\u09b8","hryvnia sign":"\u09b9\u09be\u09b0\u09ad\u09a8\u09bf\u09df\u09be \u099a\u09bf\u09b9\u09cd\u09a8","indentation":"\u0996\u09be\u0981\u099c","indian rupee sign":"\u0987\u09a8\u09cd\u09a1\u09bf\u09df\u09be\u09a8 \u09b0\u09c1\u09aa\u09bf \u099a\u09bf\u09b9\u09cd\u09a8","kip sign":"\u0995\u09bf\u09aa \u099a\u09bf\u09b9\u09cd\u09a8","lira sign":"\u09b2\u09bf\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8","livre tournois sign":"\u09b2\u09bf\u09ad\u09cd\u09b0\u09c7 \u099f\u09c1\u09b0\u09a8\u0987\u09b8 \u099a\u09bf\u09b9\u09cd\u09a8","manat sign":"\u09ae\u09be\u09a8\u09be\u099f \u099a\u09bf\u09b9\u09cd\u09a8","mill sign":"\u09ae\u09bf\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8","naira sign":"\u09a8\u09be\u09df\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8","new sheqel sign":"\u09a8\u09a4\u09c1\u09a8 \u09b6\u09bf\u0995\u09c7\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8","nordic mark sign":"\u09a8\u09b0\u09a1\u09bf\u0995 \u09ae\u09be\u09b0\u09cd\u0995 \u099a\u09bf\u09b9\u09cd\u09a8","peseta sign":"\u09aa\u09c7\u09b8\u09c7\u099f\u09be \u099a\u09bf\u09b9\u09cd\u09a8","peso sign":"\u09aa\u09c7\u09b8\u09cb \u099a\u09bf\u09b9\u09cd\u09a8","ruble sign":"\u09b0\u09c1\u09ac\u09c7\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8","rupee sign":"\u09b0\u09c1\u09aa\u09bf \u099a\u09bf\u09b9\u09cd\u09a8","spesmilo sign":"\u09b8\u09cd\u09aa\u09c7\u09b8\u09ae\u09bf\u09b2\u09cb \u099a\u09bf\u09b9\u09cd\u09a8","styles":"\u09b6\u09c8\u09b2\u09c0","tenge sign":"\u099f\u09bf\u09a8\u0997\u09c7 \u099a\u09bf\u09b9\u09cd\u09a8","tugrik sign":"\u09a4\u09c1\u0997\u09b0\u09bf\u0995 \u099a\u09bf\u09b9\u09cd\u09a8","turkish lira sign":"\u09a4\u09c1\u0995\u09bf\u09b8\u09cd\u09a4\u09be\u09a8 \u09b2\u09bf\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8","won sign":"\u0989\u09a8 \u099a\u09bf\u09b9\u09cd\u09a8","yen character":"\u0987\u09df\u09c7\u09a8 \u0985\u0995\u09cd\u09b7\u09b0","yen/yuan character variant one":"\u0987\u09af\u09bc\u09c7\u09a8/\u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0\u09c7\u09b0 \u098f\u0995\u099f\u09bf \u09ac\u09c8\u0995\u09b2\u09cd\u09aa\u09bf\u0995","yuan character":"\u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0","yuan character, in hong kong and taiwan":"\u09b9\u0982\u0995\u0982 \u098f\u09ac\u0982 \u09a4\u09be\u0987\u0993\u09af\u09bc\u09be\u09a8\u09c7 \u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0","{0} characters":"{0} \u0985\u0995\u09cd\u09b7\u09b0","{0} columns, {1} rows":"","{0} words":"{0} \u09b6\u09ac\u09cd\u09a6"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ca.js b/staticfiles/tinymce/langs/ca.js new file mode 100644 index 0000000..07f181d --- /dev/null +++ b/staticfiles/tinymce/langs/ca.js @@ -0,0 +1 @@ +tinymce.addI18n("ca",{"#":"#","Accessibility":"Accessibilitat","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Acci\xf3","Activity":"Activitat","Address":"Adre\xe7a","Advanced":"Avan\xe7ades","Align":"Alinea","Align center":"Alinea al centre","Align left":"Alinea a l'esquerra","Align right":"Alinea a la dreta","Alignment":"Alineaci\xf3","Alignment {0}":"","All":"Tot","Alternative description":"Descripci\xf3 alternativa","Alternative source":"Font alternativa","Alternative source URL":"URL de font alternativa","Anchor":"\xc0ncora","Anchor...":"Ancoratge...","Anchors":"\xc0ncores","Animals and Nature":"Animals i natura","Arrows":"Fletxes","B":"B","Background color":"Color de fons","Background color {0}":"","Black":"Negre","Block":"Bloc","Block {0}":"","Blockquote":"Cita","Blocks":"Blocs","Blue":"Blau","Blue component":"Component blau","Body":"Cos","Bold":"Negreta","Border":"Vora","Border color":"Color de la vora","Border style":"Estil de la vora","Border width":"Amplada de la vora","Bottom":"Part inferior","Browse files":"","Browse for an image":"Explorar per cercar una imatge","Browse links":"","Bullet list":"Llista no ordenada","Cancel":"Cancel\xb7lar","Caption":"Encap\xe7alament","Cell":"Cel\xb7la","Cell padding":"Marge intern","Cell properties":"Propietats de cel\xb7la","Cell spacing":"Espai entre cel\xb7les","Cell styles":"Estils de cel\xb7la","Cell type":"Tipus de cel\xb7la","Center":"Centre","Characters":"Car\xe0cters","Characters (no spaces)":"Car\xe0cters (sense espais)","Circle":"Cercle","Class":"Classe","Clear formatting":"Eliminar format","Close":"Tancar","Code":"Codi","Code sample...":"Mostra de codi...","Code view":"Veure el codi","Color Picker":"Selector de colors","Color swatch":"Mostra de color","Cols":"Columnes","Column":"Columna","Column clipboard actions":"Accions de columna del porta-retalls","Column group":"Grup de columnes","Column header":"Cap\xe7alera de columna","Constrain proportions":"Conservar proporcions","Copy":"Copia","Copy column":"Copiar columna","Copy row":"Copiar la fila","Could not find the specified string.":"No es pot trobar el text especificat.","Could not load emojis":"No s'han pogut carregar els emojis","Count":"Compta","Currency":"Moneda","Current window":"Finestra actual","Custom color":"Personalitzar el color","Custom...":"Personalitza...","Cut":"Retalla","Cut column":"Retallar columna","Cut row":"Retallar la fila","Dark Blue":"Blau fosc","Dark Gray":"Gris fosc","Dark Green":"Verd fosc","Dark Orange":"Taronja fosc","Dark Purple":"Porpra fosc","Dark Red":"Vermell fosc","Dark Turquoise":"Turquesa fosc","Dark Yellow":"Groc fosc","Dashed":"Guions","Date/time":"Data/hora","Decrease indent":"Disminuir sagnat","Default":"Predeterminat","Delete accordion":"","Delete column":"Suprimir columna","Delete row":"Suprimir la fila","Delete table":"Suprimir taula","Dimensions":"Dimensions","Disc":"Disc","Div":"Div","Document":"Document","Dotted":"Puntejat","Double":"Doble","Drop an image here":"Deixar anar una imatge aqu\xed","Dropped file type is not supported":"El tipus de fitxer deixat no \xe9s compatible","Edit":"Editar","Embed":"Incloure","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Error","Error: Form submit field collision.":"Error: error en el camp d\u2019enviament del formulari.","Error: No form element found.":"Error: no s'ha trobat l'element del formulari.","Extended Latin":"Llat\xed ampliat","Failed to initialize plugin: {0}":"No s'ha pogut inicialitzar el complement: {0}","Failed to load plugin url: {0}":"No s'ha pogut carregar l\u2019URL del complement: {0}","Failed to load plugin: {0} from url {1}":"No s'ha pogut carregar el complement: {0} de l\u2019URL {1}","Failed to upload image: {0}":"No s'ha pogut carregar la imatge: {0}","File":"Arxiu","Find":"Cerca","Find (if searchreplace plugin activated)":"Cercar (si el complement cercar-reempla\xe7ar est\xe0 activat)","Find and Replace":"Cercar i reempla\xe7ar","Find and replace...":"Cercar i reempla\xe7ar...","Find in selection":"Buscar a la selecci\xf3","Find whole words only":"Cercar nom\xe9s paraules completes","Flags":"Banderes","Focus to contextual toolbar":"Enfocar la barra d'eines contextual","Focus to element path":"Enfocar la ruta d'elements","Focus to menubar":"Enfocar la barra de men\xfa","Focus to toolbar":"Enfocar la barra d'eines","Font":"Tipus de font","Font size {0}":"","Font sizes":"Tamanys de font","Font {0}":"","Fonts":"Fonts","Food and Drink":"Menjar i beure","Footer":"Peu de p\xe0gina","Format":"Format","Format {0}":"","Formats":"Formats","Fullscreen":"Pantalla completa","G":"G","General":"Generals","Gray":"Gris","Green":"Verd","Green component":"Component verd","Groove":"Solc","Handy Shortcuts":"Dreceres \xfatils","Header":"Encap\xe7alament","Header cell":"Cel\xb7la de cap\xe7alera","Heading 1":"Encap\xe7alament 1","Heading 2":"Encap\xe7alament 2","Heading 3":"Encap\xe7alament 3","Heading 4":"Encap\xe7alament 4","Heading 5":"Encap\xe7alament 5","Heading 6":"Encap\xe7alament 6","Headings":"Encap\xe7alaments","Height":"Al\xe7ada","Help":"Ajuda","Hex color code":"Codi hexadecimal de color","Hidden":"Ocult","Horizontal align":"Alineaci\xf3 horitzontal","Horizontal line":"L\xednia horitzontal","Horizontal space":"Espai horitzontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"La ID ha de comen\xe7ar amb una lletra, seguida nom\xe9s per lletres, nombres, guions, punts, dos punts o guions baixos.","Image is decorative":"La imatge \xe9s decorativa","Image list":"Llista d'imatges","Image title":"T\xedtol de la imatge","Image...":"Imatge...","ImageProxy HTTP error: Could not find Image Proxy":"Error HTTP d'ImageProxy: No s'ha trobat l'ImageProxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Error HTTP d'ImageProxy: URL d'Image Proxy incorrecte","ImageProxy HTTP error: Rejected request":"Error HTTP d'ImageProxy: Petici\xf3 rebutjada","ImageProxy HTTP error: Unknown ImageProxy error":"Error HTTP d'ImageProxy: Error d'ImageProxy desconegut","Increase indent":"Augmentar sagnat","Inline":"En l\xednia","Insert":"Inserir","Insert Template":"Inserir plantilla","Insert accordion":"","Insert column after":"Inserir columna despr\xe9s","Insert column before":"Inserir columna abans","Insert date/time":"Inserir data/hora","Insert image":"Inserir imatge","Insert link (if link plugin activated)":"Inserir enlla\xe7 (si el complement d'enlla\xe7 est\xe0 activat)","Insert row after":"Inserir fila a sota","Insert row before":"Inserir fila a sobre","Insert table":"Inserir taula","Insert template...":"Inserir plantilla...","Insert video":"Inserir v\xeddeo","Insert/Edit code sample":"Inserir/editar mostra de codi","Insert/edit image":"Insereix/edita imatge","Insert/edit link":"Inserir/editar l\u2019enlla\xe7","Insert/edit media":"Inserir/editar multim\xe8dia","Insert/edit video":"Inserir/editar v\xeddeo","Inset":"Insert","Invalid hex color code: {0}":"Codi hex de color inv\xe0lid: {0}","Invalid input":"Entrada inv\xe0lida","Italic":"Cursiva","Justify":"Justificat","Keyboard Navigation":"Navegaci\xf3 per teclat","Language":"Idioma","Learn more...":"Apr\xe8n m\xe9s...","Left":"Esquerra","Left to right":"D'esquerra a dreta","Light Blue":"Blau clar","Light Gray":"Gris clar","Light Green":"Verd clar","Light Purple":"Porpra clar","Light Red":"Vermell clar","Light Yellow":"Groc clar","Line height":"Amplada de la l\xednia","Link list":"Llista d'enlla\xe7os","Link...":"Enlla\xe7...","List Properties":"Propietats de la llista","List properties...":"Propietats de la llista...","Loading emojis...":"Carregant emojis...","Loading...":"Carregant...","Lower Alpha":"Lletra min\xfascula","Lower Greek":"Lletra grega min\xfascula","Lower Roman":"N\xfameros romans en min\xfascula","Match case":"Fes coincidir maj\xfascules i min\xfascules","Mathematical":"S\xedmbols matem\xe0tics","Media poster (Image URL)":"Cartell de multim\xe8dia (URL d'imatge)","Media...":"Multim\xe8dia...","Medium Blue":"Blau mitj\xe0","Medium Gray":"Gris mitj\xe0","Medium Purple":"Violeta mitj\xe0","Merge cells":"Fusionar cel\xb7les","Middle":"Centre","Midnight Blue":"Blau mitjanit","More...":"M\xe9s\u2026","Name":"Nom","Navy Blue":"Blau mar\xed","New document":"Nou document","New window":"Finestra nova","Next":"Seg\xfcent","No":"No","No alignment":"Sense alineament","No color":"Sense color","Nonbreaking space":"Espai cont\xednu","None":"Cap","Numbered list":"Llista enumerada","OR":"O","Objects":"Objectes","Ok":"Acceptar","Open help dialog":"Obrir el quadre de di\xe0leg d'ajuda","Open link":"Obrir l'enlla\xe7","Open link in...":"Obrir l'enlla\xe7 a...","Open popup menu for split buttons":"Obre el men\xfa emergent per als botons dividits","Orange":"Taronja","Outset":"Relleu","Page break":"Salt de p\xe0gina","Paragraph":"Par\xe0graf","Paste":"Enganxar","Paste as text":"Enganxar com a text","Paste column after":"Enganxar columna despr\xe9s","Paste column before":"Enganxar columna abans","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Enganxar ara \xe9s en mode text pla. Els continguts s'enganxaran com a text pla fins que desactivis aquesta opci\xf3.","Paste or type a link":"Enganxa o escriu un enlla\xe7","Paste row after":"Enganxar fila a sota","Paste row before":"Enganxar fila a sobre","Paste your embed code below:":"Enganxeu el codi a sota:","People":"Gent","Plugins":"Complements","Plugins installed ({0}):":"Complements instal\xb7lats ({0}):","Powered by {0}":"Desenvolupat per {0}","Pre":"Pre","Preferences":"Par\xe0metres","Preformatted":"Preformatat","Premium plugins:":"Complements pr\xe8mium:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Visualitzaci\xf3 pr\xe8via","Previous":"Anterior","Print":"Imprimir","Print...":"Imprimir...","Purple":"Violeta","Quotations":"Cites","R":"R","Range 0 to 255":"Rang de 0 a 255","Red":"Vermell","Red component":"Component vermell","Redo":"Refer","Remove":"Eliminar","Remove color":"Eliminar el color","Remove link":"Treure l\u2019enlla\xe7","Replace":"Reempla\xe7ar","Replace all":"Reempla\xe7a totes","Replace with":"Reempla\xe7a per","Resize":"Canviar mida","Restore last draft":"Restaurar l'\xfaltim esborrany","Reveal or hide additional toolbar items":"","Rich Text Area":"\xc0rea de text enriquit","Rich Text Area. Press ALT-0 for help.":"\xc0rea de Text enriquit. Premeu ALT-0 per obtenir ajuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc0rea de text amb format. Premeu ALT-F9 per mostrar el men\xfa, ALT F10 per la barra d'eines i ALT-0 per ajuda.","Ridge":"Carena","Right":"Dreta","Right to left":"De dreta a esquerra","Row":"Fila","Row clipboard actions":"Accions de fila del porta-retalls","Row group":"Grup de fila","Row header":"Cap\xe7alera de fila","Row properties":"Propietats de la fila","Row type":"Tipus de fila","Rows":"Files","Save":"Desar","Save (if save plugin activated)":"Desar (si el complement desar est\xe0 activat)","Scope":"Abast","Search":"Cerca","Select all":"Seleccionar-ho tot","Select...":"Selecciona\u2026","Selection":"Selecci\xf3","Shortcut":"Acc\xe9s directe","Show blocks":"Mostrar blocs","Show caption":"Mostrar encap\xe7alament","Show invisible characters":"Mostrar car\xe0cters invisibles","Size":"Mida","Solid":"S\xf2lid","Source":"Font","Source code":"Codi font","Special Character":"Car\xe0cter especial","Special character...":"Car\xe0cters especials\u2026","Split cell":"Dividir cel\xb7les","Square":"Quadrat","Start list at number":"N\xfamero on iniciar la llista","Strikethrough":"Barrat","Style":"Estil","Subscript":"Sub\xedndex","Superscript":"Super\xedndex","Switch to or from fullscreen mode":"Canviar a o del mode de pantalla completa","Symbols":"S\xedmbols","System Font":"Font del sistema","Table":"Taula","Table caption":"T\xedtol de taula","Table properties":"Propietats de taula","Table styles":"Estils de taula","Template":"Plantilla","Templates":"Plantilles","Text":"Text","Text color":"Color del text","Text color {0}":"","Text to display":"Text per visualitzar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"L'URL que has escrit sembla una adre\xe7a de correu electr\xf2nic. Vols afegir-li el prefix obligatori \xabmailto:\xbb?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"L'URL que has escrit sembla un enlla\xe7 extern. Vols afegir-li el prefix obligatori \xabhttp://\xbb?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Sembla que l\u2019URL que has introdu\xeft \xe9s un enlla\xe7 extern. Vols afegir el prefix https:// necessari?","Title":"T\xedtol","To open the popup, press Shift+Enter":"Per obrir la finestra emergent, premeu Maj.+Retorn","Toggle accordion":"","Tools":"Eines","Top":"Part superior","Travel and Places":"Viatges i llocs","Turquoise":"Turquesa","Underline":"Subratllat","Undo":"Desfer","Upload":"Pujar","Uploading image":"Pujant imatge","Upper Alpha":"Lletra maj\xfascula","Upper Roman":"N\xfameros romans en maj\xfascula","Url":"URL","User Defined":"Definit per l'usuari","Valid":"V\xe0lid","Version":"Versi\xf3","Vertical align":"Alineaci\xf3 vertical","Vertical space":"Espai vertical","View":"Veure","Visual aids":"Assist\xe8ncia visual","Warn":"Alerta","White":"Blanc","Width":"Amplada","Word count":"Recompte de paraules","Words":"Paraules","Words: {0}":"Paraules: {0}","Yellow":"Groc","Yes":"S\xed","You are using {0}":"Est\xe0s utilitzant {0}","You have unsaved changes are you sure you want to navigate away?":"Teniu canvis sense desar, esteu segur que voleu deixar-ho ara?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"El vostre navegador no suporta l'acc\xe9s directe al portaobjectes. Si us plau, feu servir les dreceres de teclat Ctrl+X/C/V.","alignment":"alineaci\xf3","austral sign":"signe de l\u2019austral","cedi sign":"signe del cedi","colon sign":"signe del col\xf3n","cruzeiro sign":"signe del cruzeiro","currency sign":"signe de la moneda","dollar sign":"signe del d\xf2lar","dong sign":"signe del dong","drachma sign":"signe del dracma","euro-currency sign":"signe de l'euro","example":"exemple","formatting":"format","french franc sign":"signe del franc franc\xe8s","german penny symbol":"signe del penic alemany","guarani sign":"signe del guaran\xed","history":"historial","hryvnia sign":"signe de la hr\xedvnia","indentation":"sagnat","indian rupee sign":"signe de la rupia \xedndia","kip sign":"signe del kip","lira sign":"signe de la lira","livre tournois sign":"signe de la lliura tornesa","manat sign":"signe del manat","mill sign":"signe del mill","naira sign":"signe de la naira","new sheqel sign":"signe del nou x\xe9quel","nordic mark sign":"signe del marc n\xf2rdic","peseta sign":"signe de la pesseta","peso sign":"signe del peso","ruble sign":"signe del ruble","rupee sign":"signe de la rupia","spesmilo sign":"signe de l\u2019spesmilo","styles":"estils","tenge sign":"signe del tenge","tugrik sign":"signe del t\xf6gr\xf6g","turkish lira sign":"signe de la lira turca","won sign":"signe del won","yen character":"signe del ien","yen/yuan character variant one":"variaci\xf3 1 del signe del ien/iuan","yuan character":"signe del iuan","yuan character, in hong kong and taiwan":"signe del iuan en Hong Kong i Taiwan","{0} characters":"{0} car\xe0cters","{0} columns, {1} rows":"","{0} words":"{0} paraules"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/cs.js b/staticfiles/tinymce/langs/cs.js new file mode 100644 index 0000000..2b3f4b2 --- /dev/null +++ b/staticfiles/tinymce/langs/cs.js @@ -0,0 +1 @@ +tinymce.addI18n("cs",{"#":"#","Accessibility":"Bez alternativn\xedho textu","Accordion":"Skl\xe1da\u010dka","Accordion body...":"Obsah t\u011bla skl\xe1da\u010dky...","Accordion summary...":"Shrnut\xed skl\xe1da\u010dky...","Action":"Akce","Activity":"Aktivita","Address":"Adresa","Advanced":"Pokro\u010dil\xe9","Align":"Zarovn\xe1n\xed","Align center":"Zarovnat na st\u0159ed","Align left":"Zarovnat vlevo","Align right":"Zarovnat vpravo","Alignment":"Zarovn\xe1n\xed","Alignment {0}":"Zarovn\xe1n\xed {0}","All":"V\u0161e","Alternative description":"Alternativn\xed text","Alternative source":"Alternativn\xed zdroj","Alternative source URL":"Alternativn\xed zdrojov\xe1 URL","Anchor":"Kotva","Anchor...":"Kotva","Anchors":"Kotvy","Animals and Nature":"Zv\xed\u0159ata a p\u0159\xedroda","Arrows":"\u0160ipky","B":"B","Background color":"Barva pozad\xed","Background color {0}":"Barva pozad\xed {0}","Black":"\u010cern\xe1","Block":"Do bloku","Block {0}":"Blok {0}","Blockquote":"Citace","Blocks":"Blokov\xe9 zobrazen\xed (block)","Blue":"Modr\xe1","Blue component":"Modr\xe1 slo\u017eka","Body":"T\u011blo","Bold":"Tu\u010dn\xe9","Border":"\u0160\xed\u0159ka ohrani\u010den\xed","Border color":"Barva ohrani\u010den\xed","Border style":"Styl ohrani\u010den\xed","Border width":"\u0160\xed\u0159ka ohrani\u010den\xed","Bottom":"Dol\u016f","Browse files":"Proch\xe1zet soubory","Browse for an image":"Vybrat obr\xe1zek","Browse links":"Proch\xe1zet odkazy","Bullet list":"Odr\xe1\u017eky","Cancel":"Zru\u0161it","Caption":"Titulek","Cell":"Bu\u0148ka","Cell padding":"Vnit\u0159n\xed okraj bun\u011bk","Cell properties":"Vlastnosti bu\u0148ky","Cell spacing":"Vn\u011bj\u0161\xed okraj bun\u011bk","Cell styles":"Styly bu\u0148ky","Cell type":"Typ bu\u0148ky","Center":"Na st\u0159ed","Characters":"Znaky","Characters (no spaces)":"Znaky (bez mezer)","Circle":"Krou\u017eek","Class":"T\u0159\xedda","Clear formatting":"Vymazat form\xe1tov\xe1n\xed","Close":"Zav\u0159\xedt","Code":"Code (k\xf3d)","Code sample...":"Uk\xe1zka k\xf3du","Code view":"Zobrazit k\xf3d","Color Picker":"V\xfdb\u011br barvy","Color swatch":"Vzorek barvy","Cols":"Sloupc\u016f","Column":"Sloupec","Column clipboard actions":"Akce schr\xe1nky sloupce","Column group":"Skupina sloupc\u016f","Column header":"Hlavi\u010dka sloupce","Constrain proportions":"Zachovat proporce","Copy":"Kop\xedrovat","Copy column":"Kop\xedrovat sloupec","Copy row":"Kop\xedrovat \u0159\xe1dek","Could not find the specified string.":"Zadan\xfd \u0159et\u011bzec nebyl nalezen.","Could not load emojis":"Nelze na\u010d\xedst emotikony","Count":"Po\u010det","Currency":"M\u011bna","Current window":"Otev\u0159\xedt v nad\u0159azen\xe9 okn\u011b","Custom color":"Vlastn\xed barva","Custom...":"Vlastn\xed...","Cut":"Vyjmout","Cut column":"O\u0159\xedznout sloupec","Cut row":"Vyjmout \u0159\xe1dek","Dark Blue":"Tmav\u011b modr\xe1","Dark Gray":"Tmav\u011b \u0161ed\xe1","Dark Green":"Tmav\u011b zelen\xe1","Dark Orange":"Tmav\u011b oran\u017eov\xe1","Dark Purple":"Tmav\u011b fialov\xe1","Dark Red":"Tmav\u011b \u010derven\xe1","Dark Turquoise":"Tmav\u011b tyrkysov\xe1","Dark Yellow":"Tmav\u011b \u017elut\xe1","Dashed":"\u010c\xe1rkovan\xe1","Date/time":"Datum a \u010das","Decrease indent":"Zmen\u0161it odsazen\xed","Default":"V\xfdchoz\xed","Delete accordion":"Smazat skl\xe1da\u010dku","Delete column":"Smazat sloupec","Delete row":"Smazat \u0159\xe1dek","Delete table":"Smazat tabulku","Dimensions":"Rozm\u011bry","Disc":"Te\u010dka","Div":"Div (blok)","Document":"Dokument","Dotted":"Te\u010dkovan\xe1","Double":"Dvojit\xe1","Drop an image here":"P\u0159et\xe1hn\u011bte obr\xe1zek do tohoto um\xedst\u011bn\xed","Dropped file type is not supported":"Nahr\xe1van\xfd soubor nen\xed podporov\xe1n","Edit":"\xdapravy","Embed":"Vlo\u017een\xfd k\xf3d","Emojis":"Emotikony","Emojis...":"Emotikony...","Error":"Chyba","Error: Form submit field collision.":"Chyba: Kolize odes\xedlac\xedho formul\xe1\u0159ov\xe9ho pole.","Error: No form element found.":"Chyba: Nebyl nalezen \u017e\xe1dn\xfd prvek formul\xe1\u0159e.","Extended Latin":"Roz\u0161\xed\u0159en\xe1 latinka","Failed to initialize plugin: {0}":"Selhala inicializace pluginu: {0}","Failed to load plugin url: {0}":"Selhalo na\u010dten\xed URL pluginu: {0}","Failed to load plugin: {0} from url {1}":"Selhalo na\u010dten\xed pluginu: {0} z URL {1}","Failed to upload image: {0}":"Selhalo nahr\xe1n\xed obr\xe1zku: {0}","File":"Soubor","Find":"Naj\xedt","Find (if searchreplace plugin activated)":"Hledat (pokud je aktivn\xed plugin 'searchreplace')","Find and Replace":"Naj\xedt a nahradit","Find and replace...":"Naj\xedt a nahradit","Find in selection":"Ozna\u010den\xfd text","Find whole words only":"Pouze cel\xe1 slova","Flags":"Vlajky","Focus to contextual toolbar":"P\u0159ej\xedt na kontextov\xfd panel n\xe1stroj\u016f","Focus to element path":"P\u0159ej\xedt na cestu prvku","Focus to menubar":"P\u0159ej\xedt na panel nab\xeddek","Focus to toolbar":"P\u0159ej\xedt na panel n\xe1stroj\u016f","Font":"P\xedsmo","Font size {0}":"Velikost p\xedsma {0}","Font sizes":"Velikost p\xedsma","Font {0}":"P\xedsmo {0}","Fonts":"Typ p\xedsma","Food and Drink":"J\xeddlo a pit\xed","Footer":"Pati\u010dka","Format":"Form\xe1t","Format {0}":"Form\xe1t {0}","Formats":"Form\xe1ty","Fullscreen":"Na celou obrazovku","G":"G","General":"Obecn\xe9","Gray":"\u0160ed\xe1","Green":"Zelen\xe1","Green component":"Zelen\xe1 slo\u017eka","Groove":"Dr\xe1\u017ekov\xe1","Handy Shortcuts":"Praktick\xe9 kl\xe1vesov\xe9 zkratky","Header":"Z\xe1hlav\xed","Header cell":"Bu\u0148ka z\xe1hlav\xed","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6","Headings":"Nadpisy","Height":"V\xfd\u0161ka","Help":"N\xe1pov\u011bda","Hex color code":"Hex k\xf3d barvy","Hidden":"Skryt\xfd","Horizontal align":"Vodorovn\xe9 zarovn\xe1n\xed","Horizontal line":"Vodorovn\xe1 \u010d\xe1ra","Horizontal space":"Vodorovn\xe9 odsazen\xed","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID by m\u011blo za\u010d\xednat p\xedsmenem a n\xe1sledn\u011b obsahovat pouze p\xedsmena, \u010d\xedslice, \u010d\xe1rky, te\u010dky, st\u0159edn\xedky nebo podtr\u017e\xedtka.","Image is decorative":"(dekorativn\xed obr\xe1zek bez alternativn\xedho textu)","Image list":"Seznam obr\xe1zk\u016f","Image title":"N\xe1zev obr\xe1zku","Image...":"Obr\xe1zek","ImageProxy HTTP error: Could not find Image Proxy":"Chyba ImageProxy HTTP: Nelze nalest Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Chyba ImageProxy HTTP: Chybn\xe1 adresa Image Proxy","ImageProxy HTTP error: Rejected request":"Chyba ImageProxy HTTP: Po\u017eadavek zam\xedtnut","ImageProxy HTTP error: Unknown ImageProxy error":"Chyba ImageProxy HTTP: Nezn\xe1m\xe1 chyba","Increase indent":"Zv\u011bt\u0161it odsazen\xed","Inline":"\u0158\xe1dkov\xe9 zobrazen\xed (inline)","Insert":"Vlo\u017eit","Insert Template":"Vlo\u017eit \u0161ablonu","Insert accordion":"Vlo\u017eit skl\xe1da\u010dku","Insert column after":"Vlo\u017eit sloupec vpravo","Insert column before":"Vlo\u017eit sloupec vlevo","Insert date/time":"Vlo\u017eit datum/\u010das","Insert image":"Vlo\u017eit obr\xe1zek","Insert link (if link plugin activated)":"Vlo\u017eit odkaz (pokud je aktivn\xed plugin 'link')","Insert row after":"Vlo\u017eit \u0159\xe1dek pod","Insert row before":"Vlo\u017eit \u0159\xe1dek nad","Insert table":"Vlo\u017eit tabulku","Insert template...":"Vlo\u017eit \u0161ablonu","Insert video":"Vlo\u017eit video","Insert/Edit code sample":"Vlo\u017eit/upravit uk\xe1zku k\xf3du","Insert/edit image":"Vlo\u017eit/upravit obr\xe1zek","Insert/edit link":"Vlo\u017eit/upravit odkaz","Insert/edit media":"Vlo\u017eit/upravit m\xe9dia","Insert/edit video":"Vlo\u017eit/upravit video","Inset":"Vnit\u0159n\xed","Invalid hex color code: {0}":"Chybn\xfd hex k\xf3d barvy: {0}","Invalid input":"Neplatn\xfd vstup","Italic":"Kurz\xedva","Justify":"Do bloku","Keyboard Navigation":"Navigace pomoc\xed kl\xe1vesnice","Language":"Jazyk","Learn more...":"Zjistit v\xedce...","Left":"Vlevo","Left to right":"Zleva doprava","Light Blue":"Sv\u011btle modr\xe1","Light Gray":"Sv\u011btle \u0161ed\xe1","Light Green":"Sv\u011btle zelen\xe1","Light Purple":"Sv\u011btle fialov\xe1","Light Red":"Sv\u011btle \u010derven\xe1","Light Yellow":"Sv\u011btle \u017elut\xe1","Line height":"V\xfd\u0161ka \u0159\xe1dku","Link list":"Seznam odkaz\u016f","Link...":"Odkaz","List Properties":"Vlastnosti seznamu","List properties...":"Vlastnosti seznamu...","Loading emojis...":"Na\u010d\xedt\xe1n\xed emotikon...","Loading...":"Nahr\xe1v\xe1n\xed...","Lower Alpha":"Mal\xe1 p\xedsmena latinka","Lower Greek":"Mal\xe1 p\xedsmena \u0159e\u010dtina","Lower Roman":"Mal\xe9 \u0159\xedmsk\xe9 \u010d\xedslice","Match case":"Rozli\u0161ovat velikost p\xedsmen","Mathematical":"Matematick\xe9 symboly","Media poster (Image URL)":"URL n\xe1hledu","Media...":"M\xe9dia","Medium Blue":"St\u0159edn\u011b modr\xe1","Medium Gray":"St\u0159edn\u011b \u0161ed\xe1","Medium Purple":"St\u0159edn\u011b fialov\xe1","Merge cells":"Slou\u010dit bu\u0148ky","Middle":"Uprost\u0159ed","Midnight Blue":"P\u016flno\u010dn\xed modr\xe1","More...":"Dal\u0161\xed\u2026","Name":"N\xe1zev","Navy Blue":"N\xe1mo\u0159nick\xe1 mod\u0159","New document":"Nov\xfd dokument","New window":"Otev\u0159\xedt v nov\xe9m okn\u011b","Next":"N\xe1sleduj\xedc\xed","No":"Ne","No alignment":"Bez zarovn\xe1n\xed","No color":"Bez barvy","Nonbreaking space":"Pevn\xe1 mezera","None":"Nevybr\xe1no","Numbered list":"\u010c\xedslov\xe1n\xed","OR":"NEBO","Objects":"Objekty","Ok":"OK","Open help dialog":"Otev\u0159\xedt okno n\xe1pov\u011bdy","Open link":"C\xedlov\xe9 okno URL","Open link in...":"C\xedlov\xe9 okno URL","Open popup menu for split buttons":"Otev\u0159ete vyskakovac\xed nab\xeddku pro rozd\u011blen\xe1 tla\u010d\xedtka","Orange":"Oran\u017eov\xe1","Outset":"Vn\u011bj\u0161\xed","Page break":"Konec str\xe1nky","Paragraph":"Odstavec","Paste":"Vlo\u017eit","Paste as text":"Vlo\u017eit jako \u010dist\xfd text","Paste column after":"Vlo\u017eit sloupec za","Paste column before":"Vlo\u017eit sloupec p\u0159ed","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Je zapnuto vkl\xe1d\xe1n\xed \u010dist\xe9ho textu. Dokud nebude tato volba vypnuta, bude ve\u0161ker\xfd obsah vlo\u017een jako \u010dist\xfd text.","Paste or type a link":"Zadejte nebo vlo\u017ete URL odkazu","Paste row after":"Vlo\u017eit \u0159\xe1dek pod","Paste row before":"Vlo\u017eit \u0159\xe1dek nad","Paste your embed code below:":"Vlo\u017ete k\xf3d pro vlo\u017een\xed:","People":"Lid\xe9","Plugins":"Pluginy","Plugins installed ({0}):":"Instalovan\xe9 pluginy ({0}):","Powered by {0}":"Poh\xe1n\u011bno {0}","Pre":"Pre (p\u0159edform\xe1tov\xe1no)","Preferences":"P\u0159edvolby","Preformatted":"P\u0159edform\xe1tovan\xfd text","Premium plugins:":"Pr\xe9miov\xe9 pluginy:","Press the Up and Down arrow keys to resize the editor.":"Stisknut\xedm \u0161ipek nahoru a dol\u016f zm\u011bn\xedte velikost editoru.","Press the arrow keys to resize the editor.":"Stisknut\xedm kl\xe1ves se \u0161ipkami zm\u011bn\xedte velikost editoru.","Press {0} for help":"Stiskn\u011bte {0} pro n\xe1pov\u011bdu","Preview":"N\xe1hled","Previous":"P\u0159edchoz\xed","Print":"Tisk","Print...":"Tisk...","Purple":"Fialov\xe1","Quotations":"Citace","R":"R","Range 0 to 255":"Rozsah 0 a\u017e 255","Red":"\u010cerven\xe1","Red component":"\u010cerven\xe1 slo\u017eka","Redo":"Znovu","Remove":"Odebrat","Remove color":"Odebrat barvu","Remove link":"Odstranit odkaz","Replace":"Nahradit","Replace all":"Nahradit v\u0161e","Replace with":"Nahradit za","Resize":"Zm\u011bnit velikost","Restore last draft":"Obnovit posledn\xed koncept","Reveal or hide additional toolbar items":"Zobrazen\xed nebo skryt\xed dal\u0161\xedch polo\u017eek panelu n\xe1stroj\u016f","Rich Text Area":"Oblast pln\xe9ho textu","Rich Text Area. Press ALT-0 for help.":"Oblast Rich Text, stiskn\u011bte ALT-0 pro n\xe1pov\u011bdu.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Editor. Stiskn\u011bte ALT-F9 pro menu, ALT-F10 pro n\xe1strojovou li\u0161tu a ALT-0 pro n\xe1pov\u011bdu.","Ridge":"H\u0159ebenov\xe1","Right":"Vpravo","Right to left":"Zprava doleva","Row":"\u0158\xe1dek","Row clipboard actions":"Akce schr\xe1nky \u0159\xe1dku","Row group":"Skupina \u0159\xe1dk\u016f","Row header":"Hlavi\u010dka \u0159\xe1dku","Row properties":"Vlastnosti \u0159\xe1dku","Row type":"Typ \u0159\xe1dku","Rows":"\u0158\xe1dek","Save":"Ulo\u017eit","Save (if save plugin activated)":"Ulo\u017eit (pokud je aktivn\xed plugin 'save')","Scope":"Rozsah","Search":"Hledat","Select all":"Vybrat v\u0161e","Select...":"Vybrat","Selection":"V\xfdb\u011br","Shortcut":"Zkratka","Show blocks":"Zobrazit bloky","Show caption":"Zobrazit titulek","Show invisible characters":"Zobrazit neviditeln\xe9 znaky","Size":"Velikost","Solid":"Pln\xe1","Source":"Zdrojov\xe1 URL","Source code":"Zdrojov\xfd k\xf3d","Special Character":"Speci\xe1ln\xed znaky","Special character...":"Speci\xe1ln\xed znak\u2026","Split cell":"Rozd\u011blit bu\u0148ky","Square":"\u010ctvere\u010dek","Start list at number":"Po\u010d\xe1te\u010dn\xed \u010d\xedslo seznamu","Strikethrough":"P\u0159e\u0161krtnut\xe9","Style":"CSS styl","Subscript":"Doln\xed index","Superscript":"Horn\xed index","Switch to or from fullscreen mode":"P\u0159ep\xedn\xe1n\xed mezi re\u017eimem cel\xe9 obrazovky","Symbols":"Symboly","System Font":"Typ p\xedsma","Table":"Tabulka","Table caption":"Nadpis tabulky","Table properties":"Vlastnosti tabulky","Table styles":"Styly tabulky","Template":"\u0160ablona","Templates":"\u0160ablony","Text":"Text","Text color":"Barva p\xedsma","Text color {0}":"Barva textu {0}","Text to display":"Text odkazu","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Zadan\xe9 URL vypad\xe1 jako e-mailov\xe1 adresa. Chcete doplnit povinn\xfd prefix mailto://?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Zadan\xe9 URL vypad\xe1 jako odkaz na jin\xfd web. Chcete doplnit povinn\xfd prefix http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Zadan\xe9 URL vypad\xe1 jako odkaz na jin\xfd web. Chcete doplnit povinn\xfd prefix https://?","Title":"Titulek","To open the popup, press Shift+Enter":"Vyskakovac\xed okno otev\u0159ete stisknut\xedm Shift+Enter","Toggle accordion":"P\u0159epnout skl\xe1da\u010dku","Tools":"N\xe1stroje","Top":"Nahoru","Travel and Places":"Cestov\xe1n\xed a m\xedsta","Turquoise":"Tyrkysov\xe1","Underline":"Podtr\u017een\xe9","Undo":"Zp\u011bt","Upload":"Nahr\xe1t","Uploading image":"Nahr\xe1v\xe1n\xed obr\xe1zku","Upper Alpha":"Velk\xe1 p\xedsmena latinka","Upper Roman":"Velk\xe9 \u0159\xedmsk\xe9 \u010d\xedslice","Url":"URL odkazu","User Defined":"Definovan\xe9 u\u017eivatelem","Valid":"Platn\xfd","Version":"Verze","Vertical align":"Svisl\xe9 zarovn\xe1n\xed","Vertical space":"Svisl\xe9 odsazen\xed","View":"Zobrazit","Visual aids":"Vizu\xe1ln\xed pom\u016fcky","Warn":"Varov\xe1n\xed","White":"B\xedl\xe1","Width":"\u0160\xed\u0159ka","Word count":"Po\u010det slov","Words":"Slova","Words: {0}":"Po\u010det slov: {0}","Yellow":"\u017dlut\xe1","Yes":"Ano","You are using {0}":"Pou\u017e\xedv\xe1te {0}","You have unsaved changes are you sure you want to navigate away?":"N\u011bkter\xe9 zm\u011bny nejsou ulo\u017eeny. Jste si opravdu jisti, \u017ee chcete opustit tuto str\xe1nku?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"V\xe1\u0161 prohl\xed\u017ee\u010d nepodporuje p\u0159\xedm\xfd p\u0159\xedstup do schr\xe1nky. Pou\u017eijte pros\xedm kl\xe1vesov\xe9 zkratky Ctrl+X/C/V.","alignment":"zarovn\xe1n\xed","austral sign":"znak austral","cedi sign":"znak cedi","colon sign":"znak colon","cruzeiro sign":"znak cruzeiro","currency sign":"znak m\u011bny","dollar sign":"znak dolar","dong sign":"znak dong","drachma sign":"znak drachma","euro-currency sign":"znak eura","example":"p\u0159\xedklad","formatting":"form\xe1tov\xe1n\xed","french franc sign":"znak francouzsk\xfdo frank","german penny symbol":"znak n\u011bmeck\xfd fenik","guarani sign":"znak guaran\xed","history":"historie","hryvnia sign":"znak h\u0159ivna","indentation":"odsazen\xed","indian rupee sign":"znak indick\xe1 rupie","kip sign":"znak kip","lira sign":"znak lira","livre tournois sign":"znak tournois libra","manat sign":"znak manat","mill sign":"znak mill","naira sign":"znak nairo","new sheqel sign":"znak nov\xfd \u0161ekel","nordic mark sign":"znak norsk\xe1 marka","peseta sign":"znak peseto","peso sign":"znak peso","ruble sign":"znak rubl","rupee sign":"znak rupie","spesmilo sign":"znak spesmilo","styles":"styly","tenge sign":"znak tenge","tugrik sign":"znak tugrik","turkish lira sign":"znak tureck\xe1 liry","won sign":"znak won","yen character":"znak jen","yen/yuan character variant one":"znak jenu/juanu, varianta 1","yuan character":"znak juan","yuan character, in hong kong and taiwan":"znak juanu v hongkongu a tchaj-wanu","{0} characters":"{0} znak\u016f","{0} columns, {1} rows":"{0} sloupc\u016f, {1} \u0159\xe1dk\u016f","{0} words":"{0} slov"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/cy.js b/staticfiles/tinymce/langs/cy.js new file mode 100644 index 0000000..c012200 --- /dev/null +++ b/staticfiles/tinymce/langs/cy.js @@ -0,0 +1 @@ +tinymce.addI18n("cy",{"#":"#","Accessibility":"Hygyrchedd","Accordion":"Acordion","Accordion body...":"Corff acordion...","Accordion summary...":"Crynodeb acordion...","Action":"Gweithred","Activity":"Gweithgaredd","Address":"Cyfeiriad","Advanced":"Uwch","Align":"Alinio","Align center":"Aliniad canol","Align left":"Aliniad chwith","Align right":"Aliniad de","Alignment":"Aliniad","Alignment {0}":"Aliniad {0}","All":"Y cwbl","Alternative description":"Disgrifiad arall","Alternative source":"Ffynhonnell arall","Alternative source URL":"Ffynhonnell URL arall","Anchor":"Angor","Anchor...":"Angor...","Anchors":"Angorau","Animals and Nature":"Anifeiliaid a Natur","Arrows":"Saethau","B":"Gl","Background color":"Lliw cefndir","Background color {0}":"Lliw cefndir {0}","Black":"Du","Block":"Bloc","Block {0}":"Bloc {0}","Blockquote":"Dyfyniad Bloc","Blocks":"Blociau","Blue":"Glas","Blue component":"Cydran las","Body":"Corff","Bold":"Trwm","Border":"Border","Border color":"Lliw Border","Border style":"Steil border","Border width":"Lled border","Bottom":"Gwaelod","Browse files":"Pori ffeiliau","Browse for an image":"Pori am ddelwedd","Browse links":"Pori dolenni","Bullet list":"Rhestr fwled","Cancel":"Canslo","Caption":"Capsiwn","Cell":"Cell","Cell padding":"Padio celloedd","Cell properties":"Priodweddau'r gell","Cell spacing":"Bylchiad celloedd","Cell styles":"Arddulliau cell","Cell type":"Math y gell","Center":"Canol","Characters":"Nodau","Characters (no spaces)":"Nodau (dim gofod)","Circle":"Cylch","Class":"Dosbarth","Clear formatting":"Clirio pob fformat","Close":"Cau","Code":"Cod","Code sample...":"Sampl cod...","Code view":"Golwg cod","Color Picker":"Dewisydd Lliw","Color swatch":"Casgliad lliwiau","Cols":"Colofnau","Column":"Colofn","Column clipboard actions":"Camau clipfwrdd colofn","Column group":"Gr\u0175p colofn","Column header":"Pennyn colofn","Constrain proportions":"Cyfyngu cyfranneddau","Copy":"Cop\xefo","Copy column":"Cop\xefo colofn","Copy row":"Cop\xefo rhes","Could not find the specified string.":"Methu dod o hyd 'r llinyn dan sylw.","Could not load emojis":"Ddim yn gallu llwytho emojis","Count":"Cyfrif","Currency":"Arian cyfred","Current window":"Ffenestr gyfredol","Custom color":"Lliw personol","Custom...":"Personol...","Cut":"Torri","Cut column":"Torri colofn","Cut row":"Torri rhes","Dark Blue":"Glas Tywyll","Dark Gray":"Llwyd tywyll","Dark Green":"Gwyrdd tywyll","Dark Orange":"Oren tywyll","Dark Purple":"Porffor Tywyll","Dark Red":"Coch tywyll","Dark Turquoise":"Gwyrddlas tywyll","Dark Yellow":"Melyn tywyll","Dashed":"Llinell doredig","Date/time":"Dyddiad/amser","Decrease indent":"Lleihau mewnoliad","Default":"Diofyn","Delete accordion":"Dileu acordion","Delete column":"Dileu colofn","Delete row":"Dileu rhes","Delete table":"Dileu'r tabl","Dimensions":"Dimensiynau","Disc":"Disg","Div":"Div","Document":"Dogfen","Dotted":"Dotiog","Double":"Dwbl","Drop an image here":"Gollwng delwedd yma","Dropped file type is not supported":"Dyw\u2019r math o ffeil a ollyngwyd ddim yn cael ei gefnogi","Edit":"Golygu","Embed":"Mewnblannu","Emojis":"Emojis","Emojis...":"Emojis\u2026","Error":"Gwall","Error: Form submit field collision.":"Gwall: Gwrthdrawiad maes cyflwyno ffurflen","Error: No form element found.":"Gwall: Ni chafwyd elfen ffurflen","Extended Latin":"Lladin estynedig","Failed to initialize plugin: {0}":"Wedi methu ymgychwyn yr ategyn: {0}","Failed to load plugin url: {0}":"Wedi methu llwytho url yr ategyn: {0}","Failed to load plugin: {0} from url {1}":"Wedi methu llwytho'r ategyn: {0} o'r url {1}","Failed to upload image: {0}":"Wedi methu uwchlwytho'r ddelwedd: {0}","File":"Ffeil","Find":"Chwilio","Find (if searchreplace plugin activated)":"Canfod (os yw'r ategyn chwilio ac amnewid yn weithredol)","Find and Replace":"Canfod a Newid","Find and replace...":"Chwilio ac amnewid","Find in selection":"Canfod yn y dewisiad","Find whole words only":"Canfod geiriau llawn yn unig","Flags":"Baneri","Focus to contextual toolbar":"Ffocws i far offer y cyd-destun","Focus to element path":"Ffocws i lwybr elfen","Focus to menubar":"Ffocws i'r bar dewislen","Focus to toolbar":"Ffocws i'r bar offer","Font":"Ffont","Font size {0}":"Maint ffont {0}","Font sizes":"Meintiau ffont","Font {0}":"Ffont {0}","Fonts":"Ffontau","Food and Drink":"Bwyd a Diod","Footer":"Troedyn","Format":"Fformat","Format {0}":"Fformat {0}","Formats":"Fformatau","Fullscreen":"Sgrin llawn","G":"Gw","General":"Cyffredinol","Gray":"d","Green":"Gwyrdd","Green component":"Cydran werdd","Groove":"Rhych","Handy Shortcuts":"Llwybrau byr cyfleus","Header":"Pennyn","Header cell":"Cell bennyn","Heading 1":"Pennawd 1","Heading 2":"Pennawd 2","Heading 3":"Pennawd 3","Heading 4":"Pennawd 4","Heading 5":"Pennawd 5","Heading 6":"Pennawd 6","Headings":"Penawdau","Height":"Uchder","Help":"Cymorth","Hex color code":"Cod lliw hecs","Hidden":"Cudd","Horizontal align":"Alinio llorweddol","Horizontal line":"Llinell lorweddol","Horizontal space":"Gofod llorweddol","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"Dylai\u2019r ID gychwyn gyda llythyren, yn cael ei ddilyn gan ddim ond lythrennau, rhifau, llinellau toredig, dotiau, colonau neu thanlinellau.","Image is decorative":"Delwedd yn addurniadol","Image list":"Rhestr delweddau","Image title":"Teitl delwedd","Image...":"Delwedd...","ImageProxy HTTP error: Could not find Image Proxy":"Gwall HTTP ImageProxy: methwyd dod o hyd i Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Gwall HTTP ImageProxy: URL Image Proxy anghywir","ImageProxy HTTP error: Rejected request":"Gwall HTTP ImageProxy: cais wedi\u2019i wrthod","ImageProxy HTTP error: Unknown ImageProxy error":"Gwall HTTP ImageProxy: gwall ImageProxy anhysbys","Increase indent":"Cynyddu mewnoliad","Inline":"Mewnlin","Insert":"Mewnosod","Insert Template":"Mewnosod templed","Insert accordion":"Mewnosod acordion","Insert column after":"Mewnosod colofn ar \xf4l","Insert column before":"Mewnosod colofn cyn","Insert date/time":"Mewnosod dyddiad/amser","Insert image":"Mewnosod delwedd","Insert link (if link plugin activated)":"Mewnosod dolen (os yw'r ategyn dolen yn weithredol)","Insert row after":"Mewnosod rhes ar \xf4l","Insert row before":"Mewnosod rhes cyn","Insert table":"Mewnosod tabl","Insert template...":"Mewnosod templed...","Insert video":"Mewnosod fideo","Insert/Edit code sample":"Mewnosod/golygu sampl cod","Insert/edit image":"Mewnosod/golygu delwedd","Insert/edit link":"Mewnosod/golygu dolen","Insert/edit media":"Mewnosod/golygu cyfrwng","Insert/edit video":"Mewnosod/golygu fideo","Inset":"Encilio","Invalid hex color code: {0}":"Cod lliw hecs annilys: {0}","Invalid input":"Mewnbwn annilys","Italic":"Italig","Justify":"Unioni","Keyboard Navigation":"Llywio Bysellfwrdd","Language":"Iaith","Learn more...":"Dysgu Mwy...","Left":"Chwith","Left to right":"Chwith i'r dde","Light Blue":"Glas Golau","Light Gray":"Llwyd golau","Light Green":"Gwyrdd Golau","Light Purple":"Porffor Golau","Light Red":"Coch Golau","Light Yellow":"Melyn Golau","Line height":"Uchder llinell","Link list":"Rhestr dolenni","Link...":"Dolen...","List Properties":"Rhestru Priodweddau","List properties...":"Rhestru priodweddau...","Loading emojis...":"Llwytho emojis\u2026","Loading...":"Llwytho\u2026","Lower Alpha":"Llythrennau Bach","Lower Greek":"Groeg (Llythrennau Bach)","Lower Roman":"Rhufeinig (Llythrennau Bach)","Match case":"Cydweddu cas","Mathematical":"Mathemategol","Media poster (Image URL)":"Poster cyfrwng (URL delwedd)","Media...":"Cyfrwng...","Medium Blue":"Glas canolig","Medium Gray":"Llwyd canolig","Medium Purple":"Porffor canolig","Merge cells":"Cyfuno celloedd","Middle":"Canol","Midnight Blue":"Glas y nos","More...":"Mwy...","Name":"Enw","Navy Blue":"Dulas","New document":"Dogfen newydd","New window":"Ffenestr newydd","Next":"Nesaf","No":"Na","No alignment":"Dim aliniad","No color":"Dim Lliw","Nonbreaking space":"Bwlch di-dor","None":"Dim","Numbered list":"Rhestr rifol","OR":"NEU","Objects":"Gwrthrychau","Ok":"Iawn","Open help dialog":"Agor y ddeialog gymorth","Open link":"Agor dolen","Open link in...":"Agor dolen yn...","Open popup menu for split buttons":"Agor naidlen ar gyfer botymau hollt","Orange":"Oren","Outset":"Ymwthio","Page break":"Toriad tudalen","Paragraph":"Paragraff","Paste":"Gludo","Paste as text":"Gludo fel testun","Paste column after":"Gludo colofn ar \xf4l","Paste column before":"Gludo colofn cyn","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Mae gludo nawr yn gweithio yn y modd testun plaen. Caiff testun plaen ei ludo nawr tan gaiff yr opsiwn ei doglo i'w ddiffodd.","Paste or type a link":"Gludo neu deipio dolen","Paste row after":"Gludo rhes ar \xf4l","Paste row before":"Gludo rhes cyn","Paste your embed code below:":"Gludwch eich cod mewnblannu isod:","People":"Pobl","Plugins":"Ategion","Plugins installed ({0}):":"Ategio wedi eu gosod ({0}):","Powered by {0}":"Gyrrir gan {0}","Pre":"Pre","Preferences":"Dewisiadau","Preformatted":"Wedi ei rag-fformatio","Premium plugins:":"Ategion premiwm:","Press the Up and Down arrow keys to resize the editor.":"Gwasgwch y bysellau saeth Fyny a Lawr i newid maint y golygydd.","Press the arrow keys to resize the editor.":"Gwasgwch y bysellau saeth i newid maint y golygydd.","Press {0} for help":"Pwyswch {0} am help","Preview":"Rhagolwg","Previous":"Blaenorol","Print":"Argraffu","Print...":"Argraffu...","Purple":"Porffor","Quotations":"Dyfyniadau","R":"C","Range 0 to 255":"Ystod 0 i 255","Red":"Coch","Red component":"Cydran goch","Redo":"Ailwneud","Remove":"Gwaredu","Remove color":"Tynnu lliw","Remove link":"Tynnu dolen","Replace":"Amnewid","Replace all":"Amnewid y cwbl","Replace with":"Amnewid gyda","Resize":"Ailfeintio","Restore last draft":"Adfer y drafft olaf","Reveal or hide additional toolbar items":"Datgelu neu guddio eitemau bar offer ychwanegol","Rich Text Area":"Ardal testun cyfoethog","Rich Text Area. Press ALT-0 for help.":"Ardal testun cyfoethog. Pwyswch ALT-0 am help.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Ardal Testun Cyfoethog. Pwyswch ALT-F9 ar gyfer y ddewislen, Pwyswch ALT-F10 ar gyfer y bar offer. Pwyswch ALT-0 am gymorth","Ridge":"Esgair","Right":"De","Right to left":"De i'r chwith","Row":"Rhes","Row clipboard actions":"Camau clipfwrdd rhes","Row group":"Gr\u0175p rhes","Row header":"Pennyn rhes","Row properties":"Priodweddau rhes","Row type":"Math y rhes","Rows":"Rhesi","Save":"Cadw","Save (if save plugin activated)":"Cadw (os yw'r ategyn cadw yn weithredol)","Scope":"Cwmpas","Search":"Chwilio","Select all":"Dewis popeth","Select...":"Dewis...","Selection":"Dewis","Shortcut":"Llwybr Byr","Show blocks":"Dangos blociau","Show caption":"Dangos capsiwn","Show invisible characters":"Dangos nodau anweledig","Size":"Maint","Solid":"Solid","Source":"Ffynhonnell","Source code":"Cod gwreiddiol","Special Character":"Nod arbennig","Special character...":"Nod arbennig...","Split cell":"Hollti cell","Square":"Sgw\xe2r","Start list at number":"Dechrau rhestr efo rhif","Strikethrough":"Llinell drwodd","Style":"Arddull","Subscript":"Is-sgript","Superscript":"Uwchsgript","Switch to or from fullscreen mode":"Newid i neu o'r modd sgr\xeen llawn","Symbols":"Symbolau","System Font":"Ffont system","Table":"Tabl","Table caption":"Capsiwn tabl","Table properties":"Priodweddau tabl","Table styles":"Arddulliau tabl","Template":"Templed","Templates":"Templedi","Text":"Testun","Text color":"Lliw testun","Text color {0}":"Lliw testun {0}","Text to display":"Testun i'w ddangos","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Mae'n debyg mai cyfeiriad e-bost yw'r URL hwn. Ydych chi am ychwanegu'r rhagddoddiad mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Mae'n debyg mai dolen allanol yw'r URL hwn. Ydych chi am ychwanegu'r rhagddodiad http:// ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Ymddengys mai dolen allannol yw'r URL a roddoch chi. Ydych chi eisiau ychwanegu'r rhagddodiad https:// gofynnol?","Title":"Teitl","To open the popup, press Shift+Enter":"I agor y llamlen, pwyswch Shift+Enter","Toggle accordion":"Toglo acordion","Tools":"Offer","Top":"Brig","Travel and Places":"Teithio a lleoedd","Turquoise":"Gwyrddlas","Underline":"Tanlinellu","Undo":"Dadwneud","Upload":"Uwchlwytho","Uploading image":"Uwchlwytho delwedd","Upper Alpha":"Priflythrennau","Upper Roman":"Rhufeinig (Priflythrennau)","Url":"URL","User Defined":"Diffinir gan y defnyddiwr","Valid":"Dilys","Version":"Fersiwn","Vertical align":"Alinio fertigol","Vertical space":"Gofod fertigol","View":"Gweld","Visual aids":"Cymorth gweledol","Warn":"Rhybuddio","White":"Gwyn","Width":"Lled","Word count":"Cyfri geiriau","Words":"Geiriau","Words: {0}":"Geiriau: {0}","Yellow":"Melyn","Yes":"Iawn","You are using {0}":"Rydych yn defnyddio {0}","You have unsaved changes are you sure you want to navigate away?":"Mae newidiadau heb eu cadw - ydych chi wir am symud i ffwrdd?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Dyw eich porwr ddim yn cynnal mynediad uniongyrchol i'r clipfwrdd. Yn hytrach defnyddiwch y bysellau llwybrau byr Ctrl+X/C/V.","alignment":"aliniad","austral sign":"arwydd austral","cedi sign":"arwydd cedi","colon sign":"Arwydd colon","cruzeiro sign":"Arwydd cruzeiro","currency sign":"Arwydd arian cyfred","dollar sign":"Arwydd dolar","dong sign":"arwydd dong","drachma sign":"arwydd drachma","euro-currency sign":"Arwydd euro","example":"enghraifft","formatting":"fformatio","french franc sign":"Arwydd ffranc Ffrengig","german penny symbol":"arwydd ceiniog almaenig","guarani sign":"arwydd quarani","history":"hanes","hryvnia sign":"arwydd hryvnia","indentation":"mewnoli","indian rupee sign":"arwydd rupee india","kip sign":"arwydd kip","lira sign":"Arwydd lira","livre tournois sign":"arwydd punt tournois","manat sign":"arwydd manat","mill sign":"arwydd mill","naira sign":"arwydd naira","new sheqel sign":"arwydd sheqel newydd","nordic mark sign":"arwydd marc nordig","peseta sign":"arwydd peseta","peso sign":"arwydd peso","ruble sign":"arwydd ruble","rupee sign":"arwydd rupee","spesmilo sign":"arwydd spesmilo","styles":"steiliau","tenge sign":"arwydd tenge","tugrik sign":"arwydd tugrik","turkish lira sign":"arwydd lira twrcaidd","won sign":"arwydd won","yen character":"nod yen","yen/yuan character variant one":"nod yen/yuan amrywiad un","yuan character":"nod yuan","yuan character, in hong kong and taiwan":"nod yuan yn Hong Kong a Taiwan","{0} characters":"{0} nod","{0} columns, {1} rows":"{0} colofn, {1} rhes","{0} words":"{0} o eiriau"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/da.js b/staticfiles/tinymce/langs/da.js new file mode 100644 index 0000000..c49c95b --- /dev/null +++ b/staticfiles/tinymce/langs/da.js @@ -0,0 +1 @@ +tinymce.addI18n("da",{"#":"#","Accessibility":"Tilg\xe6ngelighed","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Handling","Activity":"Aktivitet","Address":"Adresse","Advanced":"Avanceret","Align":"Juster","Align center":"Centrer","Align left":"Opstil til venstre","Align right":"Opstil til h\xf8jre","Alignment":"Justering","Alignment {0}":"","All":"Alle","Alternative description":"Alternativ beskrivelse","Alternative source":"Alternativ kilde","Alternative source URL":"Alternativ kilde URL","Anchor":"Anker","Anchor...":"Anker...","Anchors":"Ankre","Animals and Nature":"Dyr og natur","Arrows":"Pile","B":"B","Background color":"Baggrundsfarve","Background color {0}":"","Black":"Sort","Block":"Blok\xe9r","Block {0}":"","Blockquote":"Citatblok","Blocks":"Blokke","Blue":"Bl\xe5","Blue component":"Bl\xe5 komponent","Body":"Br\xf8dtekst","Bold":"Fed","Border":"Kant","Border color":"Kantfarve","Border style":"Kantstil","Border width":"Kantbredde","Bottom":"Bund","Browse files":"","Browse for an image":"S\xf8g efter et billede","Browse links":"","Bullet list":"Punktopstillet liste","Cancel":"Annuller","Caption":"Tekst","Cell":"Celle","Cell padding":"Celle padding","Cell properties":"Celleegenskaber","Cell spacing":"Celleafstand","Cell styles":"Celle styling","Cell type":"Celletype","Center":"Midte","Characters":"Tegn","Characters (no spaces)":"Tegn (uden mellemrum)","Circle":"Cirkel","Class":"Klasse","Clear formatting":"Nulstil formattering","Close":"Luk","Code":"Kode","Code sample...":"Kodeeksempel...","Code view":"Kodevisning","Color Picker":"Farvev\xe6lger","Color swatch":"Farvepr\xf8ve","Cols":"Kolonne","Column":"Kolonne","Column clipboard actions":"Kolonne udklipsholder handlinger","Column group":"Kolonnegruppe","Column header":"Kolonne overskrift","Constrain proportions":"Begr\xe6ns proportioner","Copy":"Kopier","Copy column":"Kopier kolonne","Copy row":"Kopier r\xe6kke","Could not find the specified string.":"Kunne ikke finde s\xf8getekst.","Could not load emojis":"Kunne ikke indl\xe6se emojier","Count":"Antal","Currency":"Valuta","Current window":"Aktuelle vindue","Custom color":"Brugerdefineret farve","Custom...":"Brugerdefineret...","Cut":"Klip","Cut column":"Klip kolonne","Cut row":"Klip r\xe6kke","Dark Blue":"M\xf8rkebl\xe5","Dark Gray":"M\xf8rkegr\xe5","Dark Green":"M\xf8rkegr\xf8n","Dark Orange":"M\xf8rkeorange","Dark Purple":"M\xf8rkelilla","Dark Red":"M\xf8rker\xf8d","Dark Turquoise":"M\xf8rketurkis","Dark Yellow":"M\xf8rkegul","Dashed":"Stiplet","Date/time":"Dato/klokkesl\xe6t","Decrease indent":"Formindsk indrykning","Default":"Standard","Delete accordion":"","Delete column":"Slet kolonne","Delete row":"Slet r\xe6kke","Delete table":"Slet tabel","Dimensions":"Dimensioner","Disc":"Udfyldt cirkel","Div":"Div","Document":"Dokument","Dotted":"Prikket","Double":"Dobbel","Drop an image here":"Slip et billede her","Dropped file type is not supported":"Den placerede fil type er ikke underst\xf8ttet","Edit":"Rediger","Embed":"Indlejr","Emojis":"Emojier","Emojis...":"Emojier...","Error":"Fejl","Error: Form submit field collision.":"Fejl: Form submit felt kollision","Error: No form element found.":"Fejl: Ingen form element fundet.","Extended Latin":"Udvidet Latin","Failed to initialize plugin: {0}":"Mislykket initiering a plugin: {0}","Failed to load plugin url: {0}":"Mislykket indl\xe6sning af plugin-url: {0}","Failed to load plugin: {0} from url {1}":"Mislykket plugin indl\xe6sning: {0} fra url {1}","Failed to upload image: {0}":"Mislykket billed-upload:","File":"Fil","Find":"S\xf8g","Find (if searchreplace plugin activated)":"Find (hvis searchreplace plugin er aktiveret)","Find and Replace":"Find og erstat","Find and replace...":"Find og erstat...","Find in selection":"Find i det valgte","Find whole words only":"Find kun hele ord","Flags":"Flag","Focus to contextual toolbar":"Fokuser p\xe5 kontekstuel v\xe6rkt\xf8jslinje","Focus to element path":"Fokuser p\xe5 elementvej","Focus to menubar":"Fokus p\xe5 menulinjen","Focus to toolbar":"Fokus p\xe5 v\xe6rkt\xf8jslinjen","Font":"Skrifttype","Font size {0}":"","Font sizes":"Skriftst\xf8rrelse","Font {0}":"","Fonts":"Skrifttyper","Food and Drink":"F\xf8de og drikke","Footer":"Sidefod","Format":"Formater","Format {0}":"","Formats":"Formater","Fullscreen":"Fuld sk\xe6rm","G":"G","General":"Generelt","Gray":"Gr\xe5","Green":"Gr\xf8n","Green component":"Gr\xf8n komponent","Groove":"Rille","Handy Shortcuts":"Praktiske Genveje","Header":"Overskrift","Header cell":"Sidehoved celle","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6","Headings":"Overskrifter","Height":"H\xf8jde","Help":"Hj\xe6lp","Hex color code":"Hex farvekode","Hidden":"Skjult","Horizontal align":"Horisontal justering","Horizontal line":"Vandret linje","Horizontal space":"Vandret mellemrum","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID skal starte med et bogstav, og m\xe5 kun efterf\xf8lges af bogstaver, tal, bindestreg, punktum, kolon eller underscore.","Image is decorative":"Billede er dekorativt","Image list":"Billedliste","Image title":"Billedtitel","Image...":"Billede...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP fejl: Kunne ikke finde Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP fejl: Forkert Image Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP fejl: Anmodning afvist","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP fejl: Ukendt ImageProxy fejl","Increase indent":"For\xf8g indrykning","Inline":"Inline","Insert":"Inds\xe6t","Insert Template":"Inds\xe6t Skabelon","Insert accordion":"","Insert column after":"Inds\xe6t kolonne efter","Insert column before":"Inds\xe6t kolonne f\xf8r","Insert date/time":"Inds\xe6t dato/klokkesl\xe6t","Insert image":"Inds\xe6t billede","Insert link (if link plugin activated)":"Inds\xe6t link (hvis link plugin er aktiveret)","Insert row after":"Inds\xe6t r\xe6kke efter","Insert row before":"Inds\xe6t r\xe6kke f\xf8r","Insert table":"Inds\xe6t tabel","Insert template...":"Inds\xe6t skabelon...","Insert video":"Inds\xe6t video","Insert/Edit code sample":"Inds\xe6t/Ret kodeeksempel","Insert/edit image":"Inds\xe6t/rediger billede","Insert/edit link":"Inds\xe6t/rediger link","Insert/edit media":"Inds\xe6t/rediger medier","Insert/edit video":"Inds\xe6t/rediger video","Inset":"Fors\xe6nket","Invalid hex color code: {0}":"Ugyldig hex farvekode: {0}","Invalid input":"Ugyldig indtastning","Italic":"Kursiv","Justify":"Justering","Keyboard Navigation":"Navigation med tastatur","Language":"Sprog","Learn more...":"L\xe6r mere...","Left":"Venstre","Left to right":"Venstre mod h\xf8jre","Light Blue":"Lysebl\xe5","Light Gray":"Lysegr\xe5","Light Green":"Lysegr\xf8n","Light Purple":"Lyslilla","Light Red":"Lyser\xf8d","Light Yellow":"Lysegul","Line height":"Linjeh\xf8jde","Link list":"Linkliste","Link...":"Link...","List Properties":"List indstillinger","List properties...":"List indstillinger...","Loading emojis...":"Indl\xe6ser emojier...","Loading...":"Indl\xe6ser...","Lower Alpha":"Sm\xe5 bogstaver","Lower Greek":"Sm\xe5 gr\xe6ske","Lower Roman":"Sm\xe5 romertal","Match case":"Forskel p\xe5 store og sm\xe5 bogstaver","Mathematical":"Matematiske tegn","Media poster (Image URL)":"Medieplakat (billede URL)","Media...":"Medie...","Medium Blue":"Medium bl\xe5","Medium Gray":"Mellemgr\xe5","Medium Purple":"Medium lilla","Merge cells":"Flet celler","Middle":"Midte","Midnight Blue":"Midnatsbl\xe5","More...":"Mere...","Name":"Navn","Navy Blue":"Marinebl\xe5","New document":"Nyt dokument","New window":"Nyt vindue","Next":"N\xe6ste","No":"Nej","No alignment":"Ingen justering","No color":"Ingen farve","Nonbreaking space":"H\xe5rdt mellemrum","None":"Ingen","Numbered list":"Nummereret liste","OR":"ELLER","Objects":"Objekter","Ok":"Ok","Open help dialog":"\xc5bn hj\xe6lpedialog","Open link":"\xc5ben link","Open link in...":"\xc5bn link med...","Open popup menu for split buttons":"\xc5ben popup menu for split knapper","Orange":"Orange","Outset":"Begyndelse","Page break":"Sideskift","Paragraph":"Afsnit","Paste":"S\xe6t ind","Paste as text":"Inds\xe6t som tekst","Paste column after":"Inds\xe6t kolonne efter","Paste column before":"Inds\xe6t kolonne f\xf8r","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":'"Inds\xe6t" er nu i Ren Tekst tilstand. Indhold vil nu blive indsat som ren tekst, indtil du sl\xe5r denne funktion fra igen.',"Paste or type a link":"Inds\xe6t eller skriv et link","Paste row after":"Inds\xe6t r\xe6kke efter","Paste row before":"Inds\xe6t r\xe6kke f\xf8r","Paste your embed code below:":"Inds\xe6t din indlejrede kode herunder:","People":"Folk","Plugins":"Plugins","Plugins installed ({0}):":"Installerede plugins ({0}):","Powered by {0}":"Drevet af {0}","Pre":"Pre","Preferences":"Pr\xe6ferencer","Preformatted":"Forudformateret","Premium plugins:":"Premium plugins:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Eksempelvisning","Previous":"Forrige","Print":"Print","Print...":"Udskriv...","Purple":"Lilla","Quotations":"Anf\xf8rselstegn","R":"R","Range 0 to 255":"Interval 0 til 255","Red":"R\xf8d","Red component":"R\xf8d komponent","Redo":"Gendan","Remove":"Slet","Remove color":"Fjern farve","Remove link":"Fjern link","Replace":"Erstat","Replace all":"Erstat alle","Replace with":"Erstat med","Resize":"Skaler","Restore last draft":"Genopret sidste kladde","Reveal or hide additional toolbar items":"","Rich Text Area":"Rich Text Omr\xe5de","Rich Text Area. Press ALT-0 for help.":"Rich tekst omr\xe5de. Tryk p\xe5 ALT-0 for hj\xe6lp.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rich Text omr\xe5de. Tryk ALT-F9 for menu. Tryk ALT-F10 for v\xe6rkt\xf8jslinje. Tryk ALT-0 for hj\xe6lp","Ridge":"Ryg","Right":"H\xf8jre","Right to left":"H\xf8jre mod venstre","Row":"R\xe6kke","Row clipboard actions":"R\xe6kke udklipsholder handlinger","Row group":"R\xe6kke gruppe","Row header":"R\xe6kke overskrift","Row properties":"R\xe6kkeegenskaber","Row type":"R\xe6kke type","Rows":"R\xe6kke","Save":"Gem","Save (if save plugin activated)":"Gem (hvis gem plugin er aktiveret)","Scope":"Omr\xe5de","Search":"S\xf8g","Select all":"V\xe6lg alle","Select...":"V\xe6lg...","Selection":"Valg","Shortcut":"Genvej","Show blocks":"Vis blokke","Show caption":"Vis overskrift","Show invisible characters":"Vis usynlige tegn","Size":"St\xf8rrelse","Solid":"Solid","Source":"Kilde","Source code":"Kildekode","Special Character":"Specialtegn","Special character...":"Specielle tegn...","Split cell":"Del celle","Square":"Firkant","Start list at number":"Start liste ved nummer","Strikethrough":"Gennemstreget","Style":"Typografi","Subscript":"S\xe6nket skrift","Superscript":"H\xe6vet skrift","Switch to or from fullscreen mode":"Skift til eller fra fuldsk\xe6rmstilstand","Symbols":"Symboler","System Font":"Systemskrifttype","Table":"Tabel","Table caption":"Tabeltekst","Table properties":"Tabelegenskaber","Table styles":"Tabel styling","Template":"Skabelon","Templates":"Skabeloner","Text":"Tekst","Text color":"Tekstfarve","Text color {0}":"","Text to display":"Tekst som skal vises","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL\u2019en som du angav ser ud til at v\xe6re en e-mailadresse. \xd8nsker du at tilf\xf8je det kr\xe6vede pr\xe6fiks mailto: ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL\u2019en som du angav ser ud til at v\xe6re et eksternt link. \xd8nsker du at tilf\xf8je det kr\xe6vede pr\xe6fiks http:// ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL'en som du angav ser ud til at v\xe6re et eksternt link. \xd8nsker du at tilf\xf8je det n\xf8dvendige https:// pr\xe6fiks?","Title":"Titel","To open the popup, press Shift+Enter":"Tryk skift + enter for at \xe5bne pop op","Toggle accordion":"","Tools":"V\xe6rkt\xf8jer","Top":"Top","Travel and Places":"Rejser og steder","Turquoise":"Turkis","Underline":"Understreget","Undo":"Fortryd","Upload":"Upload","Uploading image":"Uploader billede","Upper Alpha":"Store bogstaver","Upper Roman":"Store romertal","Url":"Url","User Defined":"Brugerdefineret","Valid":"Gyldig","Version":"Version","Vertical align":"Vertikal justering","Vertical space":"Lodret mellemrum","View":"Gennemse","Visual aids":"Visuel hj\xe6lp","Warn":"Advar","White":"Hvid","Width":"Bredde","Word count":"Optalte ord","Words":"Ord","Words: {0}":"Ord: {0}","Yellow":"Gul","Yes":"Ja","You are using {0}":"Du benytter {0}","You have unsaved changes are you sure you want to navigate away?":"Du har ikke gemte \xe6ndringer. Er du sikker p\xe5 at du vil forts\xe6tte?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Din browser underst\xf8tter ikke direkte adgang til udklipsholder. Benyt Ctrl+X/C/ tastaturgenveje i stedet for.","alignment":"justering","austral sign":"austral-tegn","cedi sign":"cedi-tegn","colon sign":"kolontegn","cruzeiro sign":"cruzeiro-tegn","currency sign":"valutategn","dollar sign":"dollartegn","dong sign":"dong-tegn","drachma sign":"drakmer-tegn","euro-currency sign":"euro-tegn","example":"eksempel","formatting":"formatering","french franc sign":"fransk frank-tegn","german penny symbol":"tysk penny-symbol","guarani sign":"guarani-tegn","history":"historie","hryvnia sign":"hryvnia-tegn","indentation":"indrykning","indian rupee sign":"indisk rupee-tegn","kip sign":"kip-tegn","lira sign":"lira-tegn","livre tournois sign":"livre tournois-tegn","manat sign":"manat-tegn","mill sign":"mill-tegn","naira sign":"naira-tegn","new sheqel sign":"ny sheqel-tegn","nordic mark sign":"nordisk mark-tegn","peseta sign":"peseta-tegn","peso sign":"peso-tegn","ruble sign":"rubel-tegn","rupee sign":"rupee-tegn","spesmilo sign":"spesmilo-tegn","styles":"stile","tenge sign":"tenge-tegn","tugrik sign":"tugrik-tegn","turkish lira sign":"tyrkisk lira-tegn","won sign":"won-tegn","yen character":"yen-tegn","yen/yuan character variant one":"yen/yuan-tegn variant en","yuan character":"yuan-tegn","yuan character, in hong kong and taiwan":"yuan-tegn, i hong kong og taiwan","{0} characters":"{0} tegn","{0} columns, {1} rows":"","{0} words":"{0} ord"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/de.js b/staticfiles/tinymce/langs/de.js new file mode 100644 index 0000000..6a2a3e4 --- /dev/null +++ b/staticfiles/tinymce/langs/de.js @@ -0,0 +1 @@ +tinymce.addI18n("de",{"#":"#","Accessibility":"Barrierefreiheit","Accordion":"Accordion","Accordion body...":"Accordion-Textk\xf6rper\xa0...","Accordion summary...":"Accordion-Zusammenfassung\xa0...","Action":"Aktion","Activity":"Aktivit\xe4t","Address":"Adresse","Advanced":"Erweitert","Align":"Ausrichtung","Align center":"Zentrieren","Align left":"Linksb\xfcndig ausrichten","Align right":"Rechtsb\xfcndig ausrichten","Alignment":"Ausrichtung","Alignment {0}":"Ausrichtung {0}","All":"Alle","Alternative description":"Alternative Beschreibung","Alternative source":"Alternative Quelle","Alternative source URL":"URL der alternativen Quelle","Anchor":"Anker","Anchor...":"Textmarke","Anchors":"Anker","Animals and Nature":"Tiere und Natur","Arrows":"Pfeile","B":"B","Background color":"Hintergrundfarbe","Background color {0}":"Hintergrundfarbe {0}","Black":"Schwarz","Block":"Blocksatz","Block {0}":"Block {0}","Blockquote":"Blockzitat","Blocks":"Bl\xf6cke","Blue":"Blau","Blue component":"Blauanteil","Body":"Inhalt","Bold":"Fett","Border":"Rahmen","Border color":"Rahmenfarbe","Border style":"Rahmenstil","Border width":"Rahmenbreite","Bottom":"Unten","Browse files":"Dateien durchsuchen","Browse for an image":"Bild...","Browse links":"Links durchsuchen","Bullet list":"Aufz\xe4hlung","Cancel":"Abbrechen","Caption":"Beschriftung","Cell":"Zelle","Cell padding":"Zelleninnenabstand","Cell properties":"Zelleigenschaften","Cell spacing":"Zellenabstand","Cell styles":"Zellstil","Cell type":"Zelltyp","Center":"Zentriert","Characters":"Zeichen","Characters (no spaces)":"Zeichen (ohne Leerzeichen)","Circle":"Kreis","Class":"Klasse","Clear formatting":"Formatierung entfernen","Close":"Schlie\xdfen","Code":"Code","Code sample...":"Codebeispiel...","Code view":"Code Ansicht","Color Picker":"Farbwahl","Color swatch":"Farbpalette","Cols":"Spalten","Column":"Spalte","Column clipboard actions":"Spalten-Zwischenablage-Aktionen","Column group":"Spaltengruppe","Column header":"Spaltenkopf","Constrain proportions":"Seitenverh\xe4ltnis beibehalten","Copy":"Kopieren","Copy column":"Spalte kopieren","Copy row":"Zeile kopieren","Could not find the specified string.":"Die angegebene Zeichenfolge wurde nicht gefunden.","Could not load emojis":"Emojis konnten nicht geladen werden","Count":"Anzahl","Currency":"W\xe4hrung","Current window":"Aktuelles Fenster","Custom color":"Benutzerdefinierte Farbe","Custom...":"Benutzerdefiniert...","Cut":"Ausschneiden","Cut column":"Spalte ausschneiden","Cut row":"Zeile ausschneiden","Dark Blue":"Dunkelblau","Dark Gray":"Dunkelgrau","Dark Green":"Dunkelgr\xfcn","Dark Orange":"Dunkelorange","Dark Purple":"Dunkellila","Dark Red":"Dunkelrot","Dark Turquoise":"Dunkelt\xfcrkis","Dark Yellow":"Dunkelgelb","Dashed":"Gestrichelt","Date/time":"Datum/Uhrzeit","Decrease indent":"Einzug verkleinern","Default":"Standard","Delete accordion":"Accordion l\xf6schen","Delete column":"Spalte l\xf6schen","Delete row":"Zeile l\xf6schen","Delete table":"Tabelle l\xf6schen","Dimensions":"Abmessungen","Disc":"Scheibe","Div":"Div","Document":"Dokument","Dotted":"Gepunktet","Double":"Doppelt","Drop an image here":"Bild hier ablegen","Dropped file type is not supported":"Hereingezogener Dateityp wird nicht unterst\xfctzt","Edit":"Bearbeiten","Embed":"Einbettung","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Fehler","Error: Form submit field collision.":"Fehler: Kollision der Formularbest\xe4tigungsfelder.","Error: No form element found.":"Fehler: Kein Formularelement gefunden.","Extended Latin":"Erweitertes Latein","Failed to initialize plugin: {0}":"Plugin konnte nicht initialisiert werden: {0}","Failed to load plugin url: {0}":"Plugin-URL konnte nicht geladen werden: {0}","Failed to load plugin: {0} from url {1}":"Plugin konnte nicht geladen werden: {0} von URL {1}","Failed to upload image: {0}":"Bild konnte nicht hochgeladen werden: {0}","File":"Datei","Find":"Suchen","Find (if searchreplace plugin activated)":"Suchen (wenn Suchen/Ersetzen-Plugin aktiviert ist)","Find and Replace":"Suchen und Ersetzen","Find and replace...":"Suchen und ersetzen...","Find in selection":"In Auswahl suchen","Find whole words only":"Nur ganze W\xf6rter suchen","Flags":"Flaggen","Focus to contextual toolbar":"Fokus auf kontextbezogene Symbolleiste","Focus to element path":"Fokus auf Elementpfad","Focus to menubar":"Fokus auf Men\xfcleiste","Focus to toolbar":"Fokus auf Symbolleiste","Font":"Schriftart","Font size {0}":"Schriftgr\xf6\xdfe {0}","Font sizes":"Schriftgr\xf6\xdfen","Font {0}":"Schriftart {0}","Fonts":"Schriftarten","Food and Drink":"Essen und Trinken","Footer":"Fu\xdfzeile","Format":"Format","Format {0}":"Format {0}","Formats":"Formate","Fullscreen":"Vollbild","G":"G","General":"Allgemein","Gray":"Grau","Green":"Gr\xfcn","Green component":"Gr\xfcnanteil","Groove":"Gekantet","Handy Shortcuts":"Praktische Tastenkombinationen","Header":"Kopfzeile","Header cell":"Kopfzelle","Heading 1":"\xdcberschrift 1","Heading 2":"\xdcberschrift 2","Heading 3":"\xdcberschrift 3","Heading 4":"\xdcberschrift 4","Heading 5":"\xdcberschrift 5","Heading 6":"\xdcberschrift 6","Headings":"\xdcberschriften","Height":"H\xf6he","Help":"Hilfe","Hex color code":"Hexadezimal-Farbwert","Hidden":"Unsichtbar","Horizontal align":"Horizontal ausrichten","Horizontal line":"Horizontale Linie","Horizontal space":"Horizontaler Raum","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"Die ID muss mit einem Buchstaben beginnen gefolgt von Buchstaben, Zahlen, Bindestrichen, Punkten, Doppelpunkten oder Unterstrichen.","Image is decorative":"Bild ist dekorativ","Image list":"Bildliste","Image title":"Bildtitel","Image...":"Bild...","ImageProxy HTTP error: Could not find Image Proxy":"Image Proxy HTTP Fehler: Kann Image Proxy nicht finden","ImageProxy HTTP error: Incorrect Image Proxy URL":"Image Proxy HTTP Fehler: Falsche Image Proxy URL","ImageProxy HTTP error: Rejected request":"Image Proxy HTTP Fehler: Abgewiesene Anfrage","ImageProxy HTTP error: Unknown ImageProxy error":"Image Proxy HTTP Fehler: Unbekannter Image Proxy Fehler","Increase indent":"Einzug vergr\xf6\xdfern","Inline":"Zeichenformate","Insert":"Einf\xfcgen","Insert Template":"Vorlage einf\xfcgen","Insert accordion":"Accordion einf\xfcgen","Insert column after":"Neue Spalte danach einf\xfcgen","Insert column before":"Neue Spalte davor einf\xfcgen","Insert date/time":"Datum/Uhrzeit einf\xfcgen","Insert image":"Bild einf\xfcgen","Insert link (if link plugin activated)":"Link einf\xfcgen (wenn Link-Plugin aktiviert ist)","Insert row after":"Neue Zeile danach einf\xfcgen","Insert row before":"Neue Zeile davor einf\xfcgen","Insert table":"Tabelle einf\xfcgen","Insert template...":"Vorlage einf\xfcgen...","Insert video":"Video einf\xfcgen","Insert/Edit code sample":"Codebeispiel einf\xfcgen/bearbeiten","Insert/edit image":"Bild einf\xfcgen/bearbeiten","Insert/edit link":"Link einf\xfcgen/bearbeiten","Insert/edit media":"Medien einf\xfcgen/bearbeiten","Insert/edit video":"Video einf\xfcgen/bearbeiten","Inset":"Eingelassen","Invalid hex color code: {0}":"Ung\xfcltiger Hexadezimal-Farbwert: {0}","Invalid input":"Ung\xfcltige Eingabe","Italic":"Kursiv","Justify":"Blocksatz","Keyboard Navigation":"Tastaturnavigation","Language":"Sprache","Learn more...":"Erfahren Sie mehr dazu...","Left":"Links","Left to right":"Von links nach rechts","Light Blue":"Hellblau","Light Gray":"Hellgrau","Light Green":"Hellgr\xfcn","Light Purple":"Helllila","Light Red":"Hellrot","Light Yellow":"Hellgelb","Line height":"Liniendicke","Link list":"Linkliste","Link...":"Link...","List Properties":"Liste Eigenschaften","List properties...":"Liste Eigenschaften","Loading emojis...":"Lade Emojis...","Loading...":"Wird geladen...","Lower Alpha":"Lateinisches Alphabet in Kleinbuchstaben","Lower Greek":"Griechische Kleinbuchstaben","Lower Roman":"Kleiner r\xf6mischer Buchstabe","Match case":"Gro\xdf-/Kleinschreibung beachten","Mathematical":"Mathematisch","Media poster (Image URL)":"Medienposter (Bild-URL)","Media...":"Medien...","Medium Blue":"Mittleres Blau","Medium Gray":"Mittelgrau","Medium Purple":"Mittelviolett","Merge cells":"Zellen verbinden","Middle":"Mitte","Midnight Blue":"Mitternachtsblau","More...":"Mehr...","Name":"Name","Navy Blue":"Marineblau","New document":"Neues Dokument","New window":"Neues Fenster","Next":"N\xe4chste","No":"Nein","No alignment":"Keine Ausrichtung","No color":"Keine Farbe","Nonbreaking space":"Gesch\xfctztes Leerzeichen","None":"Keine","Numbered list":"Nummerierte Liste","OR":"ODER","Objects":"Objekte","Ok":"Ok","Open help dialog":"Hilfe-Dialog \xf6ffnen","Open link":"Link \xf6ffnen","Open link in...":"Link \xf6ffnen in...","Open popup menu for split buttons":"\xd6ffne Popup Menge um Buttons zu trennen","Orange":"Orange","Outset":"Hervorstehend","Page break":"Seitenumbruch","Paragraph":"Absatz","Paste":"Einf\xfcgen","Paste as text":"Als Text einf\xfcgen","Paste column after":"Spalte danach einf\xfcgen","Paste column before":"Spalte davor einf\xfcgen","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Einf\xfcgen ist nun im unformatierten Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\xfcgt, bis Sie diese Einstellung wieder deaktivieren.","Paste or type a link":"Link einf\xfcgen oder eingeben","Paste row after":"Zeile danach einf\xfcgen","Paste row before":"Zeile davor einf\xfcgen","Paste your embed code below:":"F\xfcgen Sie Ihren Einbettungscode unten ein:","People":"Menschen","Plugins":"Plugins","Plugins installed ({0}):":"Installierte Plugins ({0}):","Powered by {0}":"Betrieben von {0}","Pre":"Pre","Preferences":"Einstellungen","Preformatted":"Vorformatiert","Premium plugins:":"Premium-Plugins:","Press the Up and Down arrow keys to resize the editor.":"\xc4ndern Sie die Gr\xf6\xdfe des Editors, indem Sie die Pfeiltasten \u201eAbw\xe4rts\u201c und \u201eAufw\xe4rts\u201c dr\xfccken.","Press the arrow keys to resize the editor.":"\xc4ndern Sie die Gr\xf6\xdfe des Editors, indem Sie die Pfeiltasten dr\xfccken.","Press {0} for help":"F\xfcr Hilfe {0} dr\xfccken","Preview":"Vorschau","Previous":"Vorherige","Print":"Drucken","Print...":"Drucken...","Purple":"Violett","Quotations":"Anf\xfchrungszeichen","R":"R","Range 0 to 255":"Spanne 0 bis 255","Red":"Rot","Red component":"Rotanteil","Redo":"Wiederholen","Remove":"Entfernen","Remove color":"Farbauswahl aufheben","Remove link":"Link entfernen","Replace":"Ersetzen","Replace all":"Alle ersetzen","Replace with":"Ersetzen durch","Resize":"Skalieren","Restore last draft":"Letzten Entwurf wiederherstellen","Reveal or hide additional toolbar items":"Zus\xe4tzliche Elemente auf der Symbolleiste ein- oder ausblenden","Rich Text Area":"Rich-Text-Area","Rich Text Area. Press ALT-0 for help.":"Rich-Text-Bereich. Dr\xfccken Sie Alt+0 f\xfcr Hilfe.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rich-Text-Bereich. Dr\xfccken Sie Alt+F9 f\xfcr das Men\xfc. Dr\xfccken Sie Alt+F10 f\xfcr die Symbolleiste. Dr\xfccken Sie Alt+0 f\xfcr Hilfe.","Ridge":"Eingeritzt","Right":"Rechts","Right to left":"Von rechts nach links","Row":"Zeile","Row clipboard actions":"Zeilen-Zwischenablage-Aktionen","Row group":"Zeilengruppe","Row header":"Zeilenkopf","Row properties":"Zeileneigenschaften","Row type":"Zeilentyp","Rows":"Zeilen","Save":"Speichern","Save (if save plugin activated)":"Speichern (wenn Save-Plugin aktiviert ist)","Scope":"Bereich","Search":"Suchen","Select all":"Alles ausw\xe4hlen","Select...":"Auswahl...","Selection":"Auswahl","Shortcut":"Tastenkombination","Show blocks":"Bl\xf6cke anzeigen","Show caption":"Beschriftung anzeigen","Show invisible characters":"Unsichtbare Zeichen anzeigen","Size":"Schriftgr\xf6\xdfe","Solid":"Durchgezogen","Source":"Quelle","Source code":"Quellcode","Special Character":"Sonderzeichen","Special character...":"Sonderzeichen...","Split cell":"Zelle aufteilen","Square":"Rechteck","Start list at number":"Beginne Liste mit Nummer","Strikethrough":"Durchgestrichen","Style":"Formatvorlage","Subscript":"Tiefgestellt","Superscript":"Hochgestellt","Switch to or from fullscreen mode":"Vollbildmodus umschalten","Symbols":"Symbole","System Font":"Betriebssystemschriftart","Table":"Tabelle","Table caption":"Tabellenbeschriftung","Table properties":"Tabelleneigenschaften","Table styles":"Tabellenstil","Template":"Vorlage","Templates":"Vorlagen","Text":"Text","Text color":"Textfarbe","Text color {0}":"Textfarbe {0}","Text to display":"Anzuzeigender Text","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Diese URL scheint eine E-Mail-Adresse zu sein. M\xf6chten Sie das dazu ben\xf6tigte mailto: voranstellen?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Diese URL scheint ein externer Link zu sein. M\xf6chten Sie das dazu ben\xf6tigte http:// voranstellen?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Die eingegebene URL scheint ein externer Link zu sein. Soll das fehlende https:// davor erg\xe4nzt werden?","Title":"Titel","To open the popup, press Shift+Enter":"Dr\xfccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \xf6ffnen.","Toggle accordion":"Accordion umschalten","Tools":"Werkzeuge","Top":"Oben","Travel and Places":"Reisen und Orte","Turquoise":"T\xfcrkis","Underline":"Unterstrichen","Undo":"R\xfcckg\xe4ngig machen","Upload":"Hochladen","Uploading image":"Bild wird hochgeladen","Upper Alpha":"Lateinisches Alphabet in Gro\xdfbuchstaben","Upper Roman":"Gro\xdfer r\xf6mischer Buchstabe","Url":"URL","User Defined":"Benutzerdefiniert","Valid":"G\xfcltig","Version":"Version","Vertical align":"Vertikal ausrichten","Vertical space":"Vertikaler Raum","View":"Ansicht","Visual aids":"Visuelle Hilfen","Warn":"Warnung","White":"Wei\xdf","Width":"Breite","Word count":"Anzahl der W\xf6rter","Words":"W\xf6rter","Words: {0}":"Wortzahl: {0}","Yellow":"Gelb","Yes":"Ja","You are using {0}":"Sie verwenden {0}","You have unsaved changes are you sure you want to navigate away?":"Die \xc4nderungen wurden noch nicht gespeichert. Sind Sie sicher, dass Sie diese Seite verlassen wollen?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Ihr Browser unterst\xfctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Tastenkombinationen Strg+X/C/V.","alignment":"Ausrichtung","austral sign":"Australzeichen","cedi sign":"Cedizeichen","colon sign":"Doppelpunkt","cruzeiro sign":"Cruzeirozeichen","currency sign":"W\xe4hrungssymbol","dollar sign":"Dollarzeichen","dong sign":"Dongzeichen","drachma sign":"Drachmezeichen","euro-currency sign":"Eurozeichen","example":"Beispiel","formatting":"Formatierung","french franc sign":"Franczeichen","german penny symbol":"Pfennigzeichen","guarani sign":"Guaranizeichen","history":"Historie","hryvnia sign":"Hrywnjazeichen","indentation":"Einr\xfcckungen","indian rupee sign":"Indisches Rupiezeichen","kip sign":"Kipzeichen","lira sign":"Lirezeichen","livre tournois sign":"Livrezeichen","manat sign":"Manatzeichen","mill sign":"Millzeichen","naira sign":"Nairazeichen","new sheqel sign":"Schekelzeichen","nordic mark sign":"Zeichen nordische Mark","peseta sign":"Pesetazeichen","peso sign":"Pesozeichen","ruble sign":"Rubelzeichen","rupee sign":"Rupiezeichen","spesmilo sign":"Spesmilozeichen","styles":"Stile","tenge sign":"Tengezeichen","tugrik sign":"Tugrikzeichen","turkish lira sign":"T\xfcrkisches Lirazeichen","won sign":"Wonzeichen","yen character":"Yenzeichen","yen/yuan character variant one":"Yen-/Yuanzeichen Variante 1","yuan character":"Yuanzeichen","yuan character, in hong kong and taiwan":"Yuanzeichen in Hongkong und Taiwan","{0} characters":"{0}\xa0Zeichen","{0} columns, {1} rows":"{0} Spalten, {1} Zeilen","{0} words":"{0} W\xf6rter"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/el.js b/staticfiles/tinymce/langs/el.js new file mode 100644 index 0000000..60531cb --- /dev/null +++ b/staticfiles/tinymce/langs/el.js @@ -0,0 +1 @@ +tinymce.addI18n("el",{"#":"#","Accessibility":"\u03a0\u03c1\u03bf\u03c3\u03b2\u03b1\u03c3\u03b9\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1","Activity":"\u0394\u03c1\u03b1\u03c3\u03c4\u03b7\u03c1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1","Address":"\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7","Advanced":"\u0393\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","Align":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","Align center":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf","Align left":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","Align right":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac","Alignment":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","Alignment {0}":"","All":"\u038c\u03bb\u03b1","Alternative description":"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","Alternative source":"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7","Alternative source URL":"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03b7\u03b3\u03ae","Anchor":"\u0386\u03b3\u03ba\u03c5\u03c1\u03b1","Anchor...":"\u0386\u03b3\u03ba\u03c5\u03c1\u03b1...","Anchors":"\u0386\u03b3\u03ba\u03c5\u03c1\u03b5\u03c2","Animals and Nature":"\u0396\u03ce\u03b1 \u03ba\u03b1\u03b9 \u03c6\u03cd\u03c3\u03b7","Arrows":"\u0392\u03b5\u03bb\u03ac\u03ba\u03b9\u03b1","B":"\u039c","Background color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","Background color {0}":"","Black":"\u039c\u03b1\u03cd\u03c1\u03bf","Block":"\u03a4\u03bc\u03ae\u03bc\u03b1","Block {0}":"","Blockquote":"\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2","Blocks":"\u03a4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1","Blue":"\u039c\u03c0\u03bb\u03ad","Blue component":"\u039c\u03c0\u03bb\u03b5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf","Body":"\u03a3\u03ce\u03bc\u03b1","Bold":"\u0388\u03bd\u03c4\u03bf\u03bd\u03b7","Border":"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","Border color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5","Border style":"\u03a3\u03c4\u03cd\u03bb \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2","Border width":"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2","Bottom":"\u039a\u03ac\u03c4\u03c9","Browse files":"","Browse for an image":"\u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1","Browse links":"","Bullet list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b5\u03c2","Cancel":"\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7","Caption":"\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1","Cell":"\u039a\u03b5\u03bb\u03af","Cell padding":"\u0391\u03bd\u03b1\u03c0\u03bb\u03ae\u03c1\u03c9\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd","Cell properties":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","Cell spacing":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd","Cell styles":"\u03a3\u03c4\u03c5\u03bb \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","Cell type":"\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","Center":"\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7","Characters":"\u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2","Characters (no spaces)":"\u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 (\u03c7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b5\u03bd\u03ac)","Circle":"\u039a\u03cd\u03ba\u03bb\u03bf\u03c2","Class":"\u039a\u03bb\u03ac\u03c3\u03b7","Clear formatting":"\u0391\u03c0\u03b1\u03bb\u03bf\u03b9\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2","Close":"\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf","Code":"\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2","Code sample...":"\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1...","Code view":"\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","Color Picker":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03b1\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","Color swatch":"\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","Cols":"\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2","Column":"\u03a3\u03c4\u03ae\u03bb\u03b7","Column clipboard actions":"\u0394\u03c1\u03ac\u03c3\u03b5\u03b9\u03c2 \u03c0\u03c1\u03bf\u03c7\u03b5\u03af\u03c1\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c3\u03c4\u03ae\u03bb\u03b5\u03c2","Column group":"\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd","Column header":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","Constrain proportions":"\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03b9\u03ce\u03bd","Copy":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","Copy column":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","Copy row":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Could not find the specified string.":"\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.","Could not load emojis":"\u0391\u03b4\u03c5\u03bd\u03b1\u03bc\u03af\u03b1 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2 emoji","Count":"\u03a3\u03cd\u03bd\u03bf\u03bb\u03bf","Currency":"\u039d\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1","Current window":"\u03a4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","Custom color":"\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1","Custom...":"\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae...","Cut":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae","Cut column":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","Cut row":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Dark Blue":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03bc\u03c0\u03bb\u03ad","Dark Gray":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03b3\u03ba\u03c1\u03af","Dark Green":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03c0\u03c1\u03ac\u03c3\u03c3\u03b9\u03bd\u03bf","Dark Orange":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03a0\u03bf\u03c1\u03c4\u03bf\u03ba\u03b1\u03bb\u03af","Dark Purple":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03bc\u03c9\u03b2","Dark Red":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf","Dark Turquoise":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03c4\u03c5\u03c1\u03ba\u03bf\u03c5\u03ac\u03b6","Dark Yellow":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u03ba\u03af\u03c4\u03c1\u03b9\u03bd\u03bf","Dashed":"\u039c\u03b5 \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2","Date/time":"\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1/\u03ce\u03c1\u03b1","Decrease indent":"\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2","Default":"\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf","Delete accordion":"","Delete column":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","Delete row":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Delete table":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","Dimensions":"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","Disc":"\u0394\u03af\u03c3\u03ba\u03bf\u03c2","Div":"Div","Document":"\u0388\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf","Dotted":"\u039c\u03b5 \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2","Double":"\u0394\u03b9\u03c0\u03bb\u03cc","Drop an image here":"\u03a1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03b4\u03ce","Dropped file type is not supported":"\u039f \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9","Edit":"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1","Embed":"\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7","Emojis":"Emoji","Emojis...":"Emoji...","Error":"\u039b\u03ac\u03b8\u03bf\u03c2","Error: Form submit field collision.":"\u039b\u03ac\u03b8\u03bf\u03c2: \u03c3\u03cd\u03b3\u03ba\u03c1\u03bf\u03c5\u03c3\u03b7 \u03c0\u03b5\u03b4\u03af\u03c9\u03bd \u03c4\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03c5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae\u03c2 \u03c6\u03cc\u03c1\u03bc\u03b1\u03c2.","Error: No form element found.":"\u039b\u03ac\u03b8\u03bf\u03c2: \u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03c4\u03b7\u03c2 \u03c6\u03cc\u03c1\u03bc\u03b1\u03c2.","Extended Latin":"\u0395\u03ba\u03c4\u03b5\u03c4\u03b1\u03bc\u03ad\u03bd\u03b7 \u039b\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ae","Failed to initialize plugin: {0}":"\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5: {0}","Failed to load plugin url: {0}":"\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5 url: {0}","Failed to load plugin: {0} from url {1}":"\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5: {0} \u03b1\u03c0\u03bf {1}","Failed to upload image: {0}":"\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2: {0}","File":"\u0391\u03c1\u03c7\u03b5\u03af\u03bf","Find":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7","Find (if searchreplace plugin activated)":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2)","Find and Replace":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7","Find and replace...":"\u0395\u03c5\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03c3\u03b7...","Find in selection":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae","Find whole words only":"\u039f\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03bb\u03b5\u03be\u03b5\u03b9\u03c2","Flags":"\u03a3\u03b7\u03bc\u03b1\u03af\u03b5\u03c2","Focus to contextual toolbar":"\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","Focus to element path":"\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","Focus to menubar":"\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd","Focus to toolbar":"\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","Font":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","Font size {0}":"","Font sizes":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","Font {0}":"","Fonts":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ad\u03c2","Food and Drink":"\u03a6\u03b1\u03b3\u03b7\u03c4\u03cc \u03ba\u03b1\u03b9 \u03c0\u03bf\u03c4\u03ac","Footer":"\u03a5\u03c0\u03bf\u03c3\u03ad\u03bb\u03b9\u03b4\u03bf","Format":"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","Format {0}":"","Formats":"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","Fullscreen":"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7","G":"\u03a0","General":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","Gray":"\u0393\u03ba\u03c1\u03af","Green":"\u03a0\u03c1\u03ac\u03c3\u03c3\u03b9\u03bd\u03bf","Green component":"\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf","Groove":"\u039a\u03c5\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2","Handy Shortcuts":"\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2","Header":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1","Header cell":"\u039a\u03b5\u03bb\u03af-\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1","Heading 1":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1","Heading 2":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2","Heading 3":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3","Heading 4":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4","Heading 5":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5","Heading 6":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6","Headings":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2","Height":"\u038e\u03c8\u03bf\u03c2","Help":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","Hex color code":"\u0394\u03b5\u03ba\u03b1\u03b5\u03be\u03b1\u03b4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","Hidden":"\u039a\u03c1\u03c5\u03c6\u03cc","Horizontal align":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b5\u03c5\u03b8\u03c5\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","Horizontal line":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae","Horizontal space":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u03a4\u03bf ID \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03be\u03b5\u03ba\u03b9\u03bd\u03ac \u03bc\u03b5 \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b5\u03af\u03c4\u03b1\u03b9 \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1, \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2, \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2, \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2, \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac \u03b5\u03c1\u03c9\u03c4\u03b7\u03bc\u03b1\u03c4\u03b9\u03ba\u03ac \u03ba\u03b1\u03b9 \u03ba\u03ac\u03c4\u03c9 \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2.","Image is decorative":"\u0397 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c3\u03bc\u03b7\u03c4\u03b9\u03ba\u03ae","Image list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","Image title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","Image...":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1...","ImageProxy HTTP error: Could not find Image Proxy":"\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 HTTP \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd: \u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 \u03bf \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 HTTP \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd: \u039b\u03ac\u03b8\u03bf\u03c2 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","ImageProxy HTTP error: Rejected request":"\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 HTTP \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2: \u0391\u03af\u03c4\u03b7\u03bc\u03b1 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c6\u03b8\u03b7\u03ba\u03b5","ImageProxy HTTP error: Unknown ImageProxy error":"\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 HTTP \u03b5\u03bd\u03b4\u03b9\u03ac\u03bc\u03b5\u03c3\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd: \u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1","Increase indent":"\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2","Inline":"\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b7","Insert":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae","Insert Template":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5","Insert accordion":"","Insert column after":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac","Insert column before":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","Insert date/time":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2/\u03ce\u03c1\u03b1\u03c2","Insert image":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","Insert link (if link plugin activated)":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5)","Insert row after":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9","Insert row before":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9","Insert table":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","Insert template...":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5","Insert video":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf","Insert/Edit code sample":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","Insert/edit image":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","Insert/edit link":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","Insert/edit media":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 media","Insert/edit video":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf","Inset":"\u0388\u03bd\u03b8\u03b5\u03c4\u03bf","Invalid hex color code: {0}":"\u0386\u03ba\u03c5\u03c1\u03bf\u03c2 \u03b4\u03b5\u03ba\u03b1\u03b5\u03be\u03b1\u03b4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2: {0}","Invalid input":"\u0386\u03ba\u03c5\u03c1\u03b7 \u03b5\u03b9\u03c3\u03b1\u03ba\u03c4\u03ad\u03b1 \u03c4\u03b9\u03bc\u03ae","Italic":"\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1","Justify":"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","Keyboard Navigation":"\u03a0\u03bb\u03bf\u03ae\u03b3\u03b7\u03c3\u03b7 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5","Language":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1","Learn more...":"\u039c\u03ac\u03b8\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...","Left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","Left to right":"\u0391\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac","Light Blue":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03bc\u03c0\u03bb\u03ad","Light Gray":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03b3\u03ba\u03c1\u03af","Light Green":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03b3\u03ba\u03c1\u03af","Light Purple":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03bc\u03c9\u03b2","Light Red":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf","Light Yellow":"\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc \u03ba\u03af\u03c4\u03c1\u03b9\u03bd\u03bf","Line height":"\u038e\u03c8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Link list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","Link...":"\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2...","List Properties":"\u039b\u03af\u03c3\u03c4\u03b1 \u0399\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd","List properties...":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b9\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd...","Loading emojis...":"\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 emoji...","Loading...":"\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7...","Lower Alpha":"\u03a0\u03b5\u03b6\u03ac \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac","Lower Greek":"\u03a0\u03b5\u03b6\u03ac \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac","Lower Roman":"\u03a0\u03b5\u03b6\u03ac \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac","Match case":"\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03b5\u03b6\u03ce\u03bd/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd","Mathematical":"\u039c\u03b1\u03b8\u03b7\u03bc\u03b1\u03c4\u03b9\u03ba\u03cc","Media poster (Image URL)":"\u0391\u03c6\u03af\u03c3\u03b1 \u03bc\u03ad\u03c3\u03c9\u03bd (URL \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2)","Media...":"\u03a0\u03bf\u03bb\u03c5\u03bc\u03ad\u03c3\u03b1...","Medium Blue":"\u039c\u03b5\u03c3\u03b1\u03af\u03bf \u03bc\u03c0\u03bb\u03ad","Medium Gray":"\u039c\u03b5\u03c3\u03b1\u03af\u03bf \u03b3\u03ba\u03c1\u03b9","Medium Purple":"\u039c\u03b5\u03c3\u03b1\u03af\u03bf \u03bc\u03c9\u03b2","Merge cells":"\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd","Middle":"\u039c\u03ad\u03c3\u03b7","Midnight Blue":"\u03a3\u03ba\u03bf\u03cd\u03c1\u03bf \u039c\u03c0\u03bb\u03b5","More...":"\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...","Name":"\u038c\u03bd\u03bf\u03bc\u03b1","Navy Blue":"\u039d\u03b1\u03c5\u03c4\u03b9\u03ba\u03cc \u03bc\u03c0\u03bb\u03ad","New document":"\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf","New window":"\u039d\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","Next":"\u0395\u03c0\u03cc\u03bc.","No":"\u038c\u03c7\u03b9","No alignment":"\u03a7\u03c9\u03c1\u03af\u03c2 \u0395\u03c5\u03b8\u03c5\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","No color":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1","Nonbreaking space":"\u039a\u03b5\u03bd\u03cc \u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae","None":"\u039a\u03b1\u03bc\u03af\u03b1","Numbered list":"\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1","OR":"\u0389","Objects":"\u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1","Ok":"\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9","Open help dialog":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b4\u03b9\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1\u03c2","Open link":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","Open link in...":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03c3\u03b5...","Open popup menu for split buttons":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b1\u03bd\u03b1\u03b4\u03c5\u03cc\u03bc\u03b5\u03bd\u03bf\u03c5 \u03bc\u03b5\u03bd\u03bf\u03cd \u03b3\u03b9\u03b1 \u03b4\u03b9\u03b1\u03b9\u03c1\u03bf\u03cd\u03bc\u03b5\u03bd\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac","Orange":"\u03a0\u03bf\u03c1\u03c4\u03bf\u03ba\u03b1\u03bb\u03af","Outset":"\u0388\u03ba\u03b8\u03b5\u03c4\u03bf","Page break":"\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2","Paragraph":"\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2","Paste":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7","Paste as text":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf","Paste column after":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03bc\u03b5\u03c4\u03ac","Paste column before":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03c0\u03c1\u03b9\u03bd","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0397 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03bc\u03b9\u03b1\u03c2 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03cc\u03c3\u03bf \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae.","Paste or type a link":"\u0395\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5 \u03ae \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf","Paste row after":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9","Paste row before":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9","Paste your embed code below:":"\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9:","People":"\u0386\u03bd\u03b8\u03c1\u03c9\u03c0\u03bf\u03b9","Plugins":"\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1","Plugins installed ({0}):":"\u0395\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 ({0}):","Powered by {0}":"\u03a4\u03c1\u03bf\u03c6\u03bf\u03b4\u03bf\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc {0}","Pre":"Pre","Preferences":"\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2","Preformatted":"\u03a0\u03c1\u03bf\u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03bc\u03ad\u03bd\u03bf","Premium plugins:":"\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03c5\u03c8\u03b7\u03bb\u03ae\u03c2 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7","Previous":"\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf","Print":"\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7","Print...":"\u0395\u03ba\u03c4\u03c5\u03c0\u03c9\u03c3\u03b7...","Purple":"\u039c\u03c9\u03b2","Quotations":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ac","R":"\u039a","Range 0 to 255":"\u0395\u03cd\u03c1\u03bf\u03c2 0 \u03ad\u03c9\u03c2 255","Red":"\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf","Red component":"\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf","Redo":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7","Remove":"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7","Remove color":"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","Remove link":"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","Replace":"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7","Replace all":"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd","Replace with":"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5","Resize":"\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2","Restore last draft":"\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03c3\u03c7\u03b5\u03b4\u03af\u03bf\u03c5","Reveal or hide additional toolbar items":"","Rich Text Area":"\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03bb\u03bf\u03cd\u03c3\u03b9\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","Rich Text Area. Press ALT-0 for help.":"\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03b5\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u0395\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","Ridge":"\u039a\u03bf\u03c1\u03c5\u03c6\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03ae","Right":"\u0394\u03b5\u03be\u03b9\u03ac","Right to left":"\u0391\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","Row":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae","Row clipboard actions":"\u0394\u03c1\u03ac\u03c3\u03b5\u03b9\u03c2 \u03c0\u03c1\u03bf\u03c7\u03b5\u03af\u03c1\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2","Row group":"\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd","Row header":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Row properties":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Row type":"\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","Rows":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2","Save":"\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7","Save (if save plugin activated)":"\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2)","Scope":"\u0388\u03ba\u03c4\u03b1\u03c3\u03b7","Search":"\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7","Select all":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd","Select...":"\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5...","Selection":"\u0395\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf","Shortcut":"\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7","Show blocks":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bc\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd","Show caption":"\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03bb\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1\u03c2","Show invisible characters":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03ba\u03c1\u03c5\u03c6\u03ce\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd","Size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2","Solid":"\u039f\u03bc\u03bf\u03b9\u03bf\u03b3\u03b5\u03bd\u03ad\u03c2","Source":"\u03a0\u03b7\u03b3\u03ae","Source code":"\u03a0\u03b7\u03b3\u03b1\u03af\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2","Special Character":"\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2","Special character...":"\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2...","Split cell":"\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","Square":"\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf","Start list at number":"\u0388\u03bd\u03b1\u03c1\u03be\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1\u03c2 \u03c3\u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc","Strikethrough":"\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae","Style":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","Subscript":"\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2","Superscript":"\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2","Switch to or from fullscreen mode":"\u039c\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03b5 \u03ae \u03b1\u03c0\u03cc \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c0\u03bb\u03ae\u03c1\u03bf\u03c5\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7\u03c2","Symbols":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03b1","System Font":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2","Table":"\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2","Table caption":"\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","Table properties":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","Table styles":"\u03a3\u03c4\u03c5\u03bb \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","Template":"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf","Templates":"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1","Text":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf","Text color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 ","Text color {0}":"","Text to display":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 email. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 mailto:;","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http://;","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03b1\u03b3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http://;","Title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2","To open the popup, press Shift+Enter":"\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf, \u03c0\u03b9\u03ad\u03c3\u03c4\u03b5 Shift+Enter","Toggle accordion":"","Tools":"\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1","Top":"\u039a\u03bf\u03c1\u03c5\u03c6\u03ae","Travel and Places":"\u03a4\u03b1\u03be\u03af\u03b4\u03b9\u03b1 \u03ba\u03b1\u03b9 \u03bc\u03ad\u03c1\u03b7","Turquoise":"\u03a4\u03c5\u03c1\u03ba\u03bf\u03c5\u03ac\u03b6","Underline":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","Undo":"\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7","Upload":"\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7","Uploading image":"\u0391\u03bd\u03ad\u03b2\u03b1\u03c3\u03bc\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","Upper Alpha":"\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac","Upper Roman":"\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac","Url":"URL","User Defined":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c0\u03bf \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7","Valid":"\u0388\u03b3\u03ba\u03c5\u03c1\u03bf","Version":"\u0388\u03ba\u03b4\u03bf\u03c3\u03b7","Vertical align":"\u039a\u03ac\u03b8\u03b5\u03c4\u03b7 \u03b5\u03c5\u03b8\u03c5\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","Vertical space":"\u039a\u03ac\u03b8\u03b5\u03c4\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1","View":"\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae","Visual aids":"O\u03c0\u03c4\u03b9\u03ba\u03ac \u03b2\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1 ","Warn":"\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","White":"\u039b\u03b5\u03c5\u03ba\u03cc","Width":"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2","Word count":"\u0386\u03b8\u03c1\u03bf\u03b9\u03c3\u03bc\u03b1 \u03bb\u03ad\u03be\u03b5\u03c9\u03bd","Words":"\u039b\u03ad\u03be\u03b5\u03b9\u03c2","Words: {0}":"\u039b\u03ad\u03be\u03b5\u03b9\u03c2: {0}","Yellow":"\u039a\u03af\u03c4\u03c1\u03b9\u03bd\u03bf","Yes":"\u039d\u03b1\u03b9","You are using {0}":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u039f \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5 Ctrl+X/C/V.","alignment":"\u0395\u03c5\u03b8\u03c5\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","austral sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b1\u03bf\u03c5\u03c3\u03c4\u03c1\u03ac\u03bb","cedi sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c3\u03ad\u03bd\u03c4\u03b9 \u03b3\u03ba\u03ac\u03bd\u03b1\u03c2","colon sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","cruzeiro sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03ba\u03c1\u03bf\u03c5\u03b1\u03b6\u03b9\u03b5\u03c1\u03cc\u03c0\u03bb\u03bf\u03b9\u03bf\u03c5","currency sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03bd\u03bf\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2","dollar sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b4\u03bf\u03bb\u03bb\u03b1\u03c1\u03af\u03bf\u03c5","dong sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03bd\u03c4\u03cc\u03bd\u03b3\u03ba","drachma sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b4\u03c1\u03b1\u03c7\u03bc\u03ae\u03c2","euro-currency sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b5\u03c5\u03c1\u03ce","example":"\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1","formatting":"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","french franc sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03b1\u03bb\u03bb\u03b9\u03ba\u03bf\u03cd \u03c6\u03c1\u03ac\u03b3\u03ba\u03bf\u03c5","german penny symbol":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03b5\u03c1\u03bc\u03b1\u03bd\u03b9\u03ba\u03bf\u03cd \u03bb\u03b5\u03c0\u03c4\u03bf\u03cd","guarani sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03ba\u03bf\u03c5\u03b1\u03c1\u03ac\u03bd\u03b9","history":"\u0399\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc","hryvnia sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u0393\u03c1\u03af\u03b2\u03bd\u03b1","indentation":"\u0395\u03c3\u03bf\u03c7\u03ae","indian rupee sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b9\u03bd\u03b4\u03b9\u03ba\u03ae\u03c2 \u03c1\u03bf\u03c5\u03c0\u03af\u03b1\u03c2","kip sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03ba\u03b9\u03c0","lira sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u039b\u03af\u03c1\u03b1\u03c2","livre tournois sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03bb\u03af\u03b2\u03c1 \u03c4\u03bf\u03c5\u03c1\u03bd\u03bf\u03c5\u03ac","manat sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b9\u03bd\u03b4\u03b9\u03ba\u03ae\u03c2 \u03c1\u03bf\u03c5\u03c0\u03af\u03b1\u03c2","mill sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03bc\u03cd\u03bb\u03bf\u03c5","naira sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf ","new sheqel sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03bd\u03b5\u03bf\u03c5 \u03c3\u03b5\u03ba\u03ad\u03bb","nordic mark sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c3\u03ba\u03b1\u03bd\u03b4\u03b9\u03bd\u03b1\u03b2\u03b9\u03ba\u03bf\u03cd \u03bc\u03ac\u03c1\u03ba\u03bf\u03c5","peseta sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c0\u03b5\u03c3\u03ad\u03c4\u03b1\u03c2","peso sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c0\u03ad\u03c3\u03bf\u03c2","ruble sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c1\u03bf\u03c5\u03b2\u03bb\u03b9\u03bf\u03cd","rupee sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c1\u03bf\u03c5\u03c0\u03af\u03b1\u03c2","spesmilo sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c3\u03c0\u03b5\u03c3\u03bc\u03af\u03bb\u03bf","styles":"\u03a3\u03c4\u03cd\u03bb","tenge sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c4\u03ad\u03bd\u03b3\u03ba\u03b5","tugrik sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c4\u03bf\u03c5\u03c1\u03b3\u03ba\u03af\u03ba","turkish lira sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c4\u03bf\u03c5\u03c1\u03ba\u03b9\u03ba\u03ae\u03c2 \u03bb\u03af\u03c1\u03b1\u03c2","won sign":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03bf\u03c5\u03cc\u03bd","yen character":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03b5\u03bd","yen/yuan character variant one":"\u0393\u03b9\u03ad\u03bd/\u0393\u03b9\u03bf\u03c5\u03ac\u03bd \u03c4\u03cd\u03c0\u03bf\u03c2 \u03ad\u03bd\u03b1","yuan character":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03b9\u03bf\u03c5\u03ac\u03bd","yuan character, in hong kong and taiwan":"\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b3\u03b9\u03bf\u03c5\u03ac\u03bd, \u03b1\u03c0\u03bf \u03c7\u03cc\u03bd\u03b3\u03ba \u03ba\u03cc\u03bd\u03b3\u03ba \u03ba\u03b1\u03b9 \u03c4\u03b1\u03b9\u03b2\u03ac\u03bd","{0} characters":"{0} \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2","{0} columns, {1} rows":"","{0} words":"{0} \u03bb\u03ad\u03be\u03b5\u03b9\u03c2"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/eo.js b/staticfiles/tinymce/langs/eo.js new file mode 100644 index 0000000..5e6c300 --- /dev/null +++ b/staticfiles/tinymce/langs/eo.js @@ -0,0 +1 @@ +tinymce.addI18n("eo",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Ago","Activity":"Aktiveco","Address":"Adreso","Advanced":"Porspertula","Align":"\u011cisrandigi ","Align center":"Ordigu centren","Align left":"Ordigu maldekstren","Align right":"Ordigu dekstren","Alignment":"\u011cisrandigo","Alignment {0}":"","All":"\u0108io","Alternative description":"","Alternative source":"Alternativa fonto","Alternative source URL":"URLo de alternativa fonto","Anchor":"","Anchor...":"Ankro...","Anchors":"Ankroj","Animals and Nature":"Bestoj kaj naturo","Arrows":"Sagsimboloj","B":"","Background color":"Fona koloro","Background color {0}":"","Black":"Nigra","Block":"Bloko","Block {0}":"","Blockquote":"Mar\u011denigo","Blocks":"Blokoj","Blue":"Blua","Blue component":"","Body":"Korpo","Bold":"Dika","Border":"Bordero","Border color":"Koloro de bordero","Border style":"Stilo de bordero","Border width":"Lar\u011do de bordero","Bottom":"Subo","Browse files":"","Browse for an image":"Rigardi por iu bildo","Browse links":"","Bullet list":"Punkta listo","Cancel":"Nuligi","Caption":"Cita\u0135o","Cell":"\u0108elo","Cell padding":"\u0108elmar\u011denoj","Cell properties":"\u0108elaj ecoj","Cell spacing":"\u0108elspacoj","Cell styles":"","Cell type":"\u0108ela tipo","Center":"Centro","Characters":"Simboloj","Characters (no spaces)":"Simboloj (senspacetaj)","Circle":"Cirklo","Class":"Klaso","Clear formatting":"Forigi formatigon","Close":"Fermi","Code":"Kodo","Code sample...":"Kodospecimeno...","Code view":"","Color Picker":"Kolorelektilo","Color swatch":"Specimenaro de koloroj","Cols":"Kolumnoj","Column":"Kolumno","Column clipboard actions":"","Column group":"Kolumna grupo","Column header":"","Constrain proportions":"Relativigu proporciojn","Copy":"Kopii","Copy column":"","Copy row":"Kopiu vicon","Could not find the specified string.":"Malsukceso trovi la indikitan sinsekvon","Could not load emojis":"","Count":"Nombri","Currency":"Valuto","Current window":"Aktuala fenestro","Custom color":"Propra koloro","Custom...":"Propra...","Cut":"Eltran\u0109i","Cut column":"","Cut row":"Eltran\u0109u vicon","Dark Blue":"Malhelblua","Dark Gray":"Malhela griza","Dark Green":"Malhela verda","Dark Orange":"Malhela oran\u011da","Dark Purple":"Malhelpurpura","Dark Red":"Malhela ru\u011da","Dark Turquoise":"Malhela turkisa","Dark Yellow":"Malhela flava","Dashed":"","Date/time":"Dato/tempo","Decrease indent":"Malpliigu alineon","Default":"Implicite","Delete accordion":"","Delete column":"Forigu kolumnon","Delete row":"Forigu vicon","Delete table":"Forigu tabelon","Dimensions":"Dimensioj","Disc":"Disko","Div":"","Document":"Dokumento","Dotted":"","Double":"","Drop an image here":"\u0134etu iun bildon \u0109i tien","Dropped file type is not supported":"","Edit":"Redakti","Embed":"Enkonstruu","Emojis":"","Emojis...":"","Error":"Eraro","Error: Form submit field collision.":"Eraro: kolizio de kampoj dum sendado de formularo.","Error: No form element found.":"Eraro: elementoj de formularo forestas","Extended Latin":"Etendita la latina","Failed to initialize plugin: {0}":"Pravalorizado de krompogramo {0} malsukcesis","Failed to load plugin url: {0}":"\u015cargado por kroprograma URLo {0} malsukcesis","Failed to load plugin: {0} from url {1}":"\u015cargado de kromprogramo {0} el URLo {1} malsukcesis","Failed to upload image: {0}":"Al\u015dutado de bildo {0} malsukcesis","File":"Dokumento","Find":"Ser\u0109i","Find (if searchreplace plugin activated)":"Ser\u0109i (se ser\u0109a komprogramo estas aktivigita)","Find and Replace":"","Find and replace...":"Ser\u0109i kaj anstata\u016di... ","Find in selection":"","Find whole words only":"Ser\u0109i nur tutan vorton","Flags":"Flagoj","Focus to contextual toolbar":"Enfokusigi al kunteksta ilobreto","Focus to element path":"Enfokusigi al elementvojo","Focus to menubar":"Enfokusigi al menubreto","Focus to toolbar":"Enfokusigi al ilobreto","Font":"Tiparo","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Tiparoj","Food and Drink":"Man\u011da\u0135o kaj trinka\u0135o","Footer":"Suba pa\u011dtitolo","Format":"Aspektigi","Format {0}":"","Formats":"Formatoj","Fullscreen":"Tutekrane","G":"","General":"\u011cenerala","Gray":"Griza","Green":"Verda","Green component":"","Groove":"","Handy Shortcuts":"Komfortaj \u015dparvojoj","Header":"Supera pa\u011dtitolo","Header cell":"Titola \u0109elo","Heading 1":"Titolo 1","Heading 2":"Titolo 2","Heading 3":"Titolo 3","Heading 4":"Titolo 4","Heading 5":"Titolo 5","Heading 6":"Titolo 6","Headings":"Titoloj","Height":"Alto","Help":"Helpo","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Horizontala linio","Horizontal space":"Horizontala spaco","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Bildlisto","Image title":"Titolo de bildo","Image...":"Bildo...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Pliigu alineon","Inline":"Enlinie","Insert":"Enmeti","Insert Template":"","Insert accordion":"","Insert column after":"Enmetu kolumnon poste","Insert column before":"Enmetu kolumnon anta\u016d","Insert date/time":"Enmetu daton/tempon","Insert image":"Enmetu bildon","Insert link (if link plugin activated)":"Enmeti ligilon (se ligila komprogramo estas aktivigita)","Insert row after":"Enmetu vicon poste","Insert row before":"Enmetu vicon anta\u016d","Insert table":"Enmetu tabelon","Insert template...":"Enmeti \u015dablonon...","Insert video":"Enmetu videon","Insert/Edit code sample":"Enmeti/Redakti kodospecimenon","Insert/edit image":"Enmetu/redaktu bildon","Insert/edit link":"Enmetu/redaktu ligilon","Insert/edit media":"Enmeti/redakti a\u016ddovida\u0135on ","Insert/edit video":"Enmetu/redaktu videon","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Oblikva","Justify":"Ordigu la\u016dflanke","Keyboard Navigation":"Perklavara movi\u011dado","Language":"Lingvo","Learn more...":"Legu aldone...","Left":"Maldekstro","Left to right":"Maldekstro dekstren","Light Blue":"Helblua","Light Gray":"Helgriza","Light Green":"Helverda","Light Purple":"Helpurpura","Light Red":"Helru\u011da","Light Yellow":"Helflava","Line height":"","Link list":"Ligila listo","Link...":"Ligilo...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Minuskla alfabeta","Lower Greek":"Minuskla greka","Lower Roman":"Minuskla latina","Match case":"Sekvi usklecon","Mathematical":"Matematika","Media poster (Image URL)":"Ligilo al a\u016ddovida\u0135o (URLo de bildo)","Media...":"A\u016ddovida\u0135o...","Medium Blue":"Meza blua","Medium Gray":"Meza griza","Medium Purple":"Meza purpla","Merge cells":"Kunigu \u0109elojn","Middle":"Mezo","Midnight Blue":"Nigroblua","More...":"Pli...","Name":"Nomo","Navy Blue":"Helblua","New document":"Nova dokumento","New window":"Nova fenestro","Next":"Posta","No":"Ne","No alignment":"","No color":"Neniu koloro","Nonbreaking space":"Nerompebla spaceto","None":"Nenio","Numbered list":"Numera listo","OR":"A\u016c","Objects":"Objektoj","Ok":"Bone","Open help dialog":"Malfermi helpan dialogon","Open link":"","Open link in...":"Sekvi ligilon per...","Open popup menu for split buttons":"","Orange":"Oran\u011da","Outset":"","Page break":"Pa\u011da fino","Paragraph":"Alineo","Paste":"Englui","Paste as text":"Engluu kiel teksto","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Engluado nun okazas en simpla teksta re\u011dimo. La enhavo estos engluate tiel \u011dis anta\u016d vi mal\u015daltos tiun \u0109i opcion.","Paste or type a link":"Engluu a\u016d enigu ligilon","Paste row after":"Engluu vicon poste","Paste row before":"Engluu vicon anta\u016d","Paste your embed code below:":"Engluu vian internan kodon \u0109i-sube:","People":"Homoj","Plugins":"Kromprogramoj","Plugins installed ({0}):":"Kromprogramoj instalitaj ({0}): ","Powered by {0}":"Funkciigita de {0}","Pre":"","Preferences":"Agordoj","Preformatted":"Anta\u016dformatigita","Premium plugins:":"Premiaj kromprogramoj:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Provrigardo","Previous":"Anta\u016da","Print":"","Print...":"Presi...","Purple":"Purpura","Quotations":"Cita\u0135oj","R":"","Range 0 to 255":"","Red":"Ru\u011da","Red component":"","Redo":"Refari","Remove":"","Remove color":"Forigi koloron","Remove link":"Forigu ligilon","Replace":"Anstata\u016digi","Replace all":"Anstata\u016digi \u0109ion","Replace with":"Anstata\u016digi per","Resize":"\u015can\u011du grandecon","Restore last draft":"Restarigu lastan malneton","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Ri\u0109teksta loko. Premu fulmoklavon ALT-0 por helpo.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Ri\u0109teksta Areo. Premu ALT-F9 por menuo. Premu ALT-F10 por menuejo. Premu ALT-0 por helpo","Ridge":"","Right":"Dekstro","Right to left":"Dekstro maldekstren","Row":"Vico","Row clipboard actions":"","Row group":"Vica grupo","Row header":"","Row properties":"Vicaj ecoj","Row type":"Vica tipo","Rows":"Vicoj","Save":"Konservi","Save (if save plugin activated)":"Konservi (se konserva komprogramo estas aktivigita)","Scope":"Aplikregiono","Search":"Ser\u0109i","Select all":"Elekti \u0109ion","Select...":"Elektu...","Selection":"Elekto","Shortcut":"\u015cparvojo","Show blocks":"Montru blokojn","Show caption":"Montri apudskribon","Show invisible characters":"Montru nevideblajn signojn","Size":"Grando","Solid":"","Source":"Fonto","Source code":"Fonta kodo","Special Character":"","Special character...":"Speciala signo...","Split cell":"Disdividu \u0109elon","Square":"Kvadrato","Start list at number":"","Strikethrough":"Trastreki","Style":"Stilo","Subscript":"Malsuperskribi","Superscript":"Superskribi","Switch to or from fullscreen mode":"Tra\u015dan\u011di tutekranan re\u011dimon","Symbols":"Simboloj","System Font":"Sistema tiparo","Table":"Tabelo","Table caption":"","Table properties":"Tabelaj ecoj","Table styles":"","Template":"\u015cablono","Templates":"\u015cablonoj","Text":"Teksto","Text color":"Teksta koloro","Text color {0}":"","Text to display":"Montrata teksto","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"La enmetita URLo \u015dajnas esti retadreso. \u0108u vi deziras aldoni prefikson mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"La enmetita URLo \u015dajnas esti ekstera ligilo. \u0108u vi deziras aldoni nepran prefikson http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"Titolo","To open the popup, press Shift+Enter":"Por aperigi \u015dprucfenestron premu fulmoklavon Shift+Enter ","Toggle accordion":"","Tools":"Iloj","Top":"Supro","Travel and Places":"Voja\u011doj kaj lokoj","Turquoise":"Turkisa","Underline":"Substreki","Undo":"Malfari","Upload":"Al\u015duti","Uploading image":"","Upper Alpha":"Majuskla alfabeta","Upper Roman":"Majuskla latina","Url":"URL-o","User Defined":"Propre difinita ","Valid":"Valida","Version":"Versio","Vertical align":"","Vertical space":"Vertikala spaco","View":"Vidi","Visual aids":"Videblaj helpiloj","Warn":"Averto","White":"Blanka","Width":"Lar\u011do","Word count":"Vortnombro ","Words":"Vortoj","Words: {0}":"Vortoj: {0}","Yellow":"Flava","Yes":"Jes","You are using {0}":"Vi uzas {0}","You have unsaved changes are you sure you want to navigate away?":"Vi havas nekonservitajn \u015dan\u011dojn, \u0109u vi certe deziras eliri?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Via retumilo ne subtenas rektan aliron al bufro. Bonvolu antata\u016de uzi klavarajn kombinojn Ctrl+X/C/V.","alignment":"niveleco","austral sign":"signo de argentina a\u016dstralo","cedi sign":"signo de ganaa cedio","colon sign":"dupunkto","cruzeiro sign":"signo de brazila kruzero","currency sign":"valutsigno","dollar sign":"signo de usona dolaro","dong sign":"signo de vjetnama dongo","drachma sign":"signo de greka dra\u0125mo","euro-currency sign":"signo de e\u016dro","example":"ekzemplo","formatting":"tekstaran\u011do","french franc sign":"signo de francia franko","german penny symbol":"signo de pfenigo","guarani sign":"signo de paragvaja gvaranio","history":"historio","hryvnia sign":"signo de ukrainia hrivno","indentation":"krommar\u011deno","indian rupee sign":"signo de barata rupio","kip sign":"signo de laosa kipo","lira sign":"signo de itala liro","livre tournois sign":"signo de pundo de Turo","manat sign":"signo de azerbaj\u011dana manato","mill sign":"signo de milono de baza monunuo","naira sign":"signo de ni\u011deria najro","new sheqel sign":"signo de israela siklo","nordic mark sign":"signo de marko","peseta sign":"signo de hispana peseto","peso sign":"signo de peso","ruble sign":"signo de rusia rublo","rupee sign":"signo de rupio","spesmilo sign":"signo de spesmilo","styles":"stilo","tenge sign":"signo de kaza\u0125a tengo","tugrik sign":"signo de mongola tugriko","turkish lira sign":"signo de turka liro","won sign":"signo de koreia \u016dono","yen character":"signo de japana eno","yen/yuan character variant one":"alia varianto de signo de eno/juano","yuan character":"signo de \u0109ina renminbio","yuan character, in hong kong and taiwan":"signo de juano, Hongkongo kaj Tajvano","{0} characters":"{0} signojn","{0} columns, {1} rows":"","{0} words":"{0} vortoj"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/es.js b/staticfiles/tinymce/langs/es.js new file mode 100644 index 0000000..2e8b44c --- /dev/null +++ b/staticfiles/tinymce/langs/es.js @@ -0,0 +1 @@ +tinymce.addI18n("es",{"#":"#","Accessibility":"Accesibilidad","Accordion":"Acorde\xf3n","Accordion body...":"Cuerpo del acorde\xf3n...","Accordion summary...":"Resumen de Acorde\xf3n...","Action":"Acci\xf3n","Activity":"Actividad","Address":"Direcci\xf3n","Advanced":"Avanzado","Align":"Alinear","Align center":"Alinear al centro","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha","Alignment":"Alineaci\xf3n","Alignment {0}":"Alineaci\xf3n {0}","All":"Todo","Alternative description":"Descripci\xf3n alternativa","Alternative source":"Enlace alternativo","Alternative source URL":"Origen de URL alternativo","Anchor":"Anclaje","Anchor...":"Anclaje...","Anchors":"Anclajes","Animals and Nature":"Animales y naturaleza","Arrows":"Flechas","B":"B","Background color":"Color de fondo","Background color {0}":"Color de fondo {0}","Black":"Negro","Block":"Bloque","Block {0}":"Bloque {0}","Blockquote":"Cita en bloque","Blocks":"Bloques","Blue":"Azul","Blue component":"Componente azul","Body":"Cuerpo","Bold":"Negrita","Border":"Borde","Border color":"Color de borde","Border style":"Estilo de borde","Border width":"Ancho de borde","Bottom":"Inferior","Browse files":"Explora los archivos","Browse for an image":"Buscar una imagen","Browse links":"Explora los enlaces","Bullet list":"Lista de vi\xf1etas","Cancel":"Cancelar","Caption":"Leyenda","Cell":"Celda","Cell padding":"Relleno de celda","Cell properties":"Propiedades de la celda","Cell spacing":"Espacio entre celdas","Cell styles":"Estilos de celda","Cell type":"Tipo de celda","Center":"Centro","Characters":"Caracteres","Characters (no spaces)":"Caracteres (sin espacios)","Circle":"C\xedrculo","Class":"Clase","Clear formatting":"Limpiar formato","Close":"Cerrar","Code":"C\xf3digo","Code sample...":"Ejemplo de c\xf3digo...","Code view":"Vista de c\xf3digo","Color Picker":"Selector de colores","Color swatch":"Muestrario de colores","Cols":"Columnas","Column":"Columna","Column clipboard actions":"Acciones del portapapeles de la columna","Column group":"Grupo de columnas","Column header":"Encabezado de columna","Constrain proportions":"Restringir proporciones","Copy":"Copiar","Copy column":"Copiar columna","Copy row":"Copiar fila","Could not find the specified string.":"No se encuentra la cadena especificada.","Could not load emojis":"No se pudieron cargar los emojis","Count":"Recuento","Currency":"Divisa","Current window":"Ventana actual","Custom color":"Color personalizado","Custom...":"Personalizado...","Cut":"Cortar","Cut column":"Cortar columna","Cut row":"Cortar fila","Dark Blue":"Azul oscuro","Dark Gray":"Gris oscuro","Dark Green":"Verde oscuro","Dark Orange":"Naranja oscuro","Dark Purple":"Morado oscuro","Dark Red":"Rojo oscuro","Dark Turquoise":"Turquesa oscuro","Dark Yellow":"Amarillo oscuro","Dashed":"Guiones","Date/time":"Fecha/hora","Decrease indent":"Disminuir sangr\xeda","Default":"Por defecto","Delete accordion":"Eliminar acorde\xf3n","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Delete table":"Eliminar tabla","Dimensions":"Dimensiones","Disc":"Disco","Div":"Div","Document":"Documento","Dotted":"Puntos","Double":"Doble","Drop an image here":"Arrastre una imagen aqu\xed","Dropped file type is not supported":"No se soporta el archivo arrastrado","Edit":"Editar","Embed":"Insertar","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Error","Error: Form submit field collision.":"Error: Colisi\xf3n de campo al enviar formulario.","Error: No form element found.":"Error: No se encuentra ning\xfan elemento de formulario.","Extended Latin":"Latino extendido A","Failed to initialize plugin: {0}":"Fallo al iniciar el complemento: {0}","Failed to load plugin url: {0}":"Fallo al cargar URL del complemento: {0}","Failed to load plugin: {0} from url {1}":"Fallo al cargar complemento: {0} desde URL {1}","Failed to upload image: {0}":"Fallo al cargar imagen: {0}","File":"Archivo","Find":"Buscar","Find (if searchreplace plugin activated)":"Buscar (si el complemento buscar-reemplazar est\xe1 activado)","Find and Replace":"Buscar y Reemplazar","Find and replace...":"Buscar y reemplazar...","Find in selection":"Buscar en la selecci\xf3n","Find whole words only":"Solo palabras completas","Flags":"Banderas","Focus to contextual toolbar":"Enfocar la barra de herramientas contextual","Focus to element path":"Enfocar la ruta del elemento","Focus to menubar":"Enfocar la barra del men\xfa","Focus to toolbar":"Enfocar la barra de herramientas","Font":"Fuente","Font size {0}":"Tama\xf1o de fuente {0}","Font sizes":"Tama\xf1os de fuente","Font {0}":"Fuente {0}","Fonts":"Fuentes","Food and Drink":"Comida y bebida","Footer":"Pie de p\xe1gina","Format":"Formato","Format {0}":"Formato {0}","Formats":"Formatos","Fullscreen":"Pantalla completa","G":"G","General":"General","Gray":"Gris","Green":"Verde","Green component":"Componente verde","Groove":"Groove","Handy Shortcuts":"Accesos pr\xe1cticos","Header":"Encabezado","Header cell":"Celda de encabezado","Heading 1":"Encabezado 1","Heading 2":"Encabezado 2","Heading 3":"Encabezado 3","Heading 4":"Encabezado 4","Heading 5":"Encabezado 5","Heading 6":"Encabezado 6","Headings":"Encabezados","Height":"Altura","Help":"Ayuda","Hex color code":"C\xf3digo de color hexadecimal","Hidden":"Oculto","Horizontal align":"Alineaci\xf3n horizontal","Horizontal line":"L\xednea horizontal","Horizontal space":"Espacio horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"El ID deber\xeda comenzar con una letra y seguir solo con letras, n\xfameros, guiones, puntos, dos puntos o guiones bajos.","Image is decorative":"La imagen es decorativa","Image list":"Lista de im\xe1genes","Image title":"Titulo de imagen","Image...":"Imagen...","ImageProxy HTTP error: Could not find Image Proxy":"Error HTTP de Image Proxy: no se ha podido encontrar Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Error HTTP de Image Proxy: la URL de Image Proxy no es correcta","ImageProxy HTTP error: Rejected request":"Error HTTP de Image Proxy: petici\xf3n rechazada","ImageProxy HTTP error: Unknown ImageProxy error":"Error HTTP de Image Proxy: error desconocido de Image Proxy","Increase indent":"Incrementar sangr\xeda","Inline":"Alineado","Insert":"Insertar","Insert Template":"Insertar Plantilla","Insert accordion":"Insertar acorde\xf3n","Insert column after":"Insertar columna despu\xe9s","Insert column before":"Insertar columna antes","Insert date/time":"Insertar fecha/hora","Insert image":"Insertar imagen","Insert link (if link plugin activated)":"Insertar enlace (si el complemento de enlace est\xe1 activado)","Insert row after":"Insertar fila despu\xe9s","Insert row before":"Insertar fila antes","Insert table":"Insertar tabla","Insert template...":"Insertar plantilla...","Insert video":"Insertar v\xeddeo","Insert/Edit code sample":"Insertar/editar ejemplo de c\xf3digo","Insert/edit image":"Insertar/editar imagen","Insert/edit link":"Insertar/editar enlace","Insert/edit media":"Insertar/editar medio","Insert/edit video":"Insertar/editar v\xeddeo","Inset":"Insertar","Invalid hex color code: {0}":"Color hexadecimal no v\xe1lido: {0}","Invalid input":"Entrada inv\xe1lida","Italic":"Cursiva","Justify":"Justificar","Keyboard Navigation":"Navegaci\xf3n con el teclado","Language":"Idioma","Learn more...":"M\xe1s informaci\xf3n...","Left":"Izquierda","Left to right":"Izquierda a derecha","Light Blue":"Azul claro","Light Gray":"Gris claro","Light Green":"Verde claro","Light Purple":"Morado claro","Light Red":"Rojo claro","Light Yellow":"Amarillo claro","Line height":"Altura de l\xednea","Link list":"Lista de enlaces","Link...":"Enlace...","List Properties":"Propiedades de Lista","List properties...":"Propiedades de Lista...","Loading emojis...":"Cargando emojis...","Loading...":"Cargando...","Lower Alpha":"Letras min\xfasculas","Lower Greek":"Griego en min\xfasculas","Lower Roman":"Romano en min\xfasculas","Match case":"Coincidir may\xfasculas y min\xfasculas","Mathematical":"S\xedmbolo matem\xe1tico","Media poster (Image URL)":"P\xf3ster de medio (URL de imagen)","Media...":"Medios...","Medium Blue":"Azul medio","Medium Gray":"Gris medio","Medium Purple":"P\xfarpura medio","Merge cells":"Combinar celdas","Middle":"Central","Midnight Blue":"Azul medio","More...":"M\xe1s...","Name":"Nombre","Navy Blue":"Azul marino","New document":"Nuevo documento","New window":"Nueva ventana","Next":"Siguiente","No":"No","No alignment":"Sin alineaci\xf3n","No color":"Sin color","Nonbreaking space":"Espacio de no separaci\xf3n","None":"Ninguno","Numbered list":"Lista numerada","OR":"O","Objects":"Objetos","Ok":"Ok","Open help dialog":"Abrir di\xe1logo de ayuda","Open link":"Abrir enlace","Open link in...":"Abrir enlace en...","Open popup menu for split buttons":"Abrir men\xfa emergente para botones de separado","Orange":"Naranja","Outset":"Comienzo","Page break":"Salto de p\xe1gina","Paragraph":"P\xe1rrafo","Paste":"Pegar","Paste as text":"Pegar como texto","Paste column after":"Pegar columna despu\xe9s","Paste column before":"Pegar columna antes","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Pegar est\xe1 ahora en modo de texto sin formato. El contenido se pegar\xe1 ahora como texto sin formato hasta que desactive esta opci\xf3n.","Paste or type a link":"Pegue o escriba un enlace","Paste row after":"Pegar la fila despu\xe9s","Paste row before":"Pegar la fila antes","Paste your embed code below:":"Pegue el c\xf3digo para insertar a continuaci\xf3n:","People":"Personas","Plugins":"Complementos","Plugins installed ({0}):":"Complementos instalados ({0}):","Powered by {0}":"Con tecnolog\xeda de {0}","Pre":"Pre","Preferences":"Preferencias","Preformatted":"Con formato previo","Premium plugins:":"Complementos premium:","Press the Up and Down arrow keys to resize the editor.":"Pulse las teclas de flecha arriba y abajo para cambiar el tama\xf1o del editor.","Press the arrow keys to resize the editor.":"Pulse las teclas de flecha para cambiar el tama\xf1o del editor.","Press {0} for help":"Pulse {0} para obtener ayuda","Preview":"Previsualizar","Previous":"Anterior","Print":"Imprimir","Print...":"Imprimir...","Purple":"P\xfarpura","Quotations":"Comillas","R":"R","Range 0 to 255":"Rango de 0 a 255","Red":"Rojo","Red component":"Componente rojo","Redo":"Redo","Remove":"Quitar","Remove color":"Quitar color","Remove link":"Quitar enlace","Replace":"Reemplazar","Replace all":"Reemplazar todo","Replace with":"Reemplazar por","Resize":"Redimensionar","Restore last draft":"Restaurar el \xfaltimo borrador","Reveal or hide additional toolbar items":"Mostrar u ocultar elementos adicionales de la barra de herramientas","Rich Text Area":"\xc1rea de Texto Enriquecido","Rich Text Area. Press ALT-0 for help.":"\xc1rea de texto enriquecido. Pulse ALT-0 para abrir la ayuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc1rea de texto enriquecido. Pulse ALT-F9 para el men\xfa. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para la ayuda.","Ridge":"Cresta","Right":"Derecha","Right to left":"Derecha a izquierda","Row":"Fila","Row clipboard actions":"Acciones del portapapeles de la fila","Row group":"Grupo de filas","Row header":"Encabezado de fila","Row properties":"Propiedades de la fila","Row type":"Tipo de fila","Rows":"Filas","Save":"Guardar","Save (if save plugin activated)":"Guardar (si el complemento de guardar est\xe1 activado)","Scope":"\xc1mbito","Search":"Buscar","Select all":"Seleccionar todo","Select...":"Seleccionar...","Selection":"Selecci\xf3n","Shortcut":"Acceso directo","Show blocks":"Mostrar bloques","Show caption":"Mostrar t\xedtulo","Show invisible characters":"Mostrar caracteres invisibles","Size":"Tama\xf1o","Solid":"S\xf3lido","Source":"C\xf3digo fuente","Source code":"C\xf3digo fuente","Special Character":"Car\xe1cter especial","Special character...":"Car\xe1cter especial...","Split cell":"Dividir celda","Square":"Cuadrado","Start list at number":"Iniciar lista con un n\xfamero","Strikethrough":"Tachado","Style":"Estilo","Subscript":"Sub\xedndice","Superscript":"Super\xedndice","Switch to or from fullscreen mode":"Activar o desactivar modo pantalla completa","Symbols":"S\xedmbolos","System Font":"Fuente de sistema","Table":"Tabla","Table caption":"T\xedtulo de la tabla","Table properties":"Propiedades de la tabla","Table styles":"Estilos de tabla","Template":"Plantilla","Templates":"Plantillas","Text":"Texto","Text color":"Color del texto","Text color {0}":"Color del texto {0}","Text to display":"Texto que mostrar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"La URL que ha introducido parece ser una direcci\xf3n de correo electr\xf3nico. \xbfQuiere a\xf1adir el prefijo necesario mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"La URL que ha introducido parece ser un enlace externo. \xbfQuiere a\xf1adir el prefijo necesario http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"La URL que ha introducido parece ser un enlace externo. \xbfQuiere a\xf1adir el prefijo necesario https://?","Title":"T\xedtulo","To open the popup, press Shift+Enter":"Para abrir el elemento emergente, pulse May\xfas+Intro","Toggle accordion":"Alternar acorde\xf3n","Tools":"Herramientas","Top":"Superior","Travel and Places":"Viajes y lugares","Turquoise":"Turquesa","Underline":"Subrayado","Undo":"Deshacer","Upload":"Cargar","Uploading image":"Subiendo imagen","Upper Alpha":"Letras may\xfasculas","Upper Roman":"Romano en may\xfasculas","Url":"URL","User Defined":"Definido por el usuario","Valid":"V\xe1lido","Version":"Versi\xf3n","Vertical align":"Alineaci\xf3n vertical","Vertical space":"Espacio vertical","View":"Ver","Visual aids":"Ayudas visuales","Warn":"Advertencia","White":"Blanco","Width":"Ancho","Word count":"Contar palabras","Words":"Palabras","Words: {0}":"Palabras: {0}","Yellow":"Amarillo","Yes":"S\xed","You are using {0}":"Est\xe1 usando {0}","You have unsaved changes are you sure you want to navigate away?":"Tiene cambios sin guardar. \xbfEst\xe1 seguro de que quiere salir?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Su navegador no es compatible con el acceso directo al portapapeles. Use las teclas Crtl+X/C/V de su teclado.","alignment":"alineaci\xf3n","austral sign":"signo de austral","cedi sign":"signo de cedi","colon sign":"signo de dos puntos","cruzeiro sign":"signo de cruceiro","currency sign":"signo de divisa","dollar sign":"signo de d\xf3lar","dong sign":"signo de dong","drachma sign":"signo de dracma","euro-currency sign":"signo de euro","example":"ejemplo","formatting":"formato","french franc sign":"signo de franco franc\xe9s","german penny symbol":"signo de penique alem\xe1n","guarani sign":"signo de guaran\xed","history":"historial","hryvnia sign":"signo de grivna","indentation":"sangr\xeda","indian rupee sign":"signo de rupia india","kip sign":"signo de kip","lira sign":"signo de lira","livre tournois sign":"signo de libra tornesa","manat sign":"signo de manat","mill sign":"signo de mill","naira sign":"signo de naira","new sheqel sign":"signo de nuevo s\xe9quel","nordic mark sign":"signo de marco n\xf3rdico","peseta sign":"signo de peseta","peso sign":"signo de peso","ruble sign":"signo de rublo","rupee sign":"signo de rupia","spesmilo sign":"signo de spesmilo","styles":"estilos","tenge sign":"signo de tenge","tugrik sign":"signo de tugrik","turkish lira sign":"signo de lira turca","won sign":"signo de won","yen character":"car\xe1cter de yen","yen/yuan character variant one":"Variante uno de car\xe1cter de yen/yuan","yuan character":"car\xe1cter de yuan","yuan character, in hong kong and taiwan":"car\xe1cter de yuan en Hong Kong y Taiw\xe1n","{0} characters":"{0} caracteres","{0} columns, {1} rows":"{0} columnas, {1} filas","{0} words":"{0} palabras"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/es_MX.js b/staticfiles/tinymce/langs/es_MX.js new file mode 100644 index 0000000..e948011 --- /dev/null +++ b/staticfiles/tinymce/langs/es_MX.js @@ -0,0 +1 @@ +tinymce.addI18n("es_MX",{"#":"#","Accessibility":"Accesibilidad","Accordion":"Acorde\xf3n","Accordion body...":"Cuerpo de acorde\xf3n...","Accordion summary...":"Resumen en estilo acorde\xf3n...","Action":"Acci\xf3n","Activity":"Actividad","Address":"Direcci\xf3n","Advanced":"Avanzado","Align":"Alinear","Align center":"Alinear al centro","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha","Alignment":"Alineaci\xf3n","Alignment {0}":"Alineamiento {0}","All":"Todo","Alternative description":"Descripci\xf3n alternativa","Alternative source":"Origen alternativo","Alternative source URL":"URL de origen alternativo","Anchor":"Ancla","Anchor...":"Ancla...","Anchors":"Anclajes","Animals and Nature":"Animales y naturaleza","Arrows":"Flechas","B":"A","Background color":"Color de fondo","Background color {0}":"Color de fondo {0}","Black":"Negro","Block":"Bloque","Block {0}":"Bloque {0}","Blockquote":"Cita en bloque","Blocks":"Bloques","Blue":"Azul","Blue component":"Componente azul","Body":"Cuerpo","Bold":"Negrita","Border":"Borde","Border color":"Color del borde","Border style":"Estilo del borde","Border width":"Ancho del borde","Bottom":"Inferior","Browse files":"Explorar archivos","Browse for an image":"Buscar una imagen","Browse links":"Explorar enlaces","Bullet list":"Lista de vi\xf1etas","Cancel":"Cancelar","Caption":"Subt\xedtulo","Cell":"Celda","Cell padding":"Espaciado entre borde y texto","Cell properties":"Propiedades de celda","Cell spacing":"Espaciado entre celdas","Cell styles":"Estilos de celda","Cell type":"Tipo de celda","Center":"Centro","Characters":"Caracteres","Characters (no spaces)":"Caracteres (sin espacios)","Circle":"C\xedrculo","Class":"Clase","Clear formatting":"Borrar formato","Close":"Cerrar","Code":"C\xf3digo","Code sample...":"Ejemplo de c\xf3digo...","Code view":"Vista de c\xf3digo","Color Picker":"Selector de colores","Color swatch":"Muestrario de colores","Cols":"Cols","Column":"Columna","Column clipboard actions":"Acciones de columna del portapapeles","Column group":"Grupo de columnas","Column header":"Encabezado de columna","Constrain proportions":"Restringir proporciones","Copy":"Copiar","Copy column":"Copiar columna","Copy row":"Copiar fila","Could not find the specified string.":"No se ha encontrado la cadena indicada.","Could not load emojis":"No se pudieron cargar los emojis","Count":"Cantidad","Currency":"Divisa","Current window":"Ventana actual","Custom color":"Color personalizado","Custom...":"Personalizado...","Cut":"Cortar","Cut column":"Cortar columna","Cut row":"Cortar fila","Dark Blue":"Azul oscuro","Dark Gray":"Gris oscuro","Dark Green":"Verde oscuro","Dark Orange":"Anaranjado oscuro","Dark Purple":"Morado oscuro","Dark Red":"Rojo oscuro","Dark Turquoise":"Turquesa oscuro","Dark Yellow":"Amarillo oscuro","Dashed":"Discontinuo","Date/time":"Fecha/hora","Decrease indent":"Reducir sangr\xeda","Default":"Predeterminado","Delete accordion":"Borrar acorde\xf3n","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Delete table":"Eliminar tabla","Dimensions":"Dimensiones","Disc":"Disco","Div":"Div","Document":"Documento","Dotted":"Punteado","Double":"Doble","Drop an image here":"Soltar una imagen aqu\xed","Dropped file type is not supported":"No se soporta el archivo arrastrado","Edit":"Editar","Embed":"Insertar","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Error","Error: Form submit field collision.":"Error: colisi\xf3n del campo para el env\xedo de formulario","Error: No form element found.":"Error: no se encontr\xf3 ning\xfan elemento de formulario.","Extended Latin":"Lat\xedn extendido","Failed to initialize plugin: {0}":"Error al inicializar el complemento: {0}","Failed to load plugin url: {0}":"Error al cargar la url del complemento: {0}","Failed to load plugin: {0} from url {1}":"Error al cargar el complemento: {0} desde la url {1}","Failed to upload image: {0}":"Error al cargar la imagen: {0}","File":"Archivo","Find":"Buscar","Find (if searchreplace plugin activated)":"Buscar (si el complemento de buscar y reemplazar est\xe1 activado)","Find and Replace":"Buscar y reemplazar","Find and replace...":"Buscar y reemplazar...","Find in selection":"Buscar en la selecci\xf3n","Find whole words only":"Buscar solo palabras completas","Flags":"Banderas","Focus to contextual toolbar":"Llevar el foco a la barra de herramientas contextual","Focus to element path":"Llevar el foco a la ruta de acceso del elemento","Focus to menubar":"Llevar el foco a la barra de men\xfas","Focus to toolbar":"Llevar el foco a la barra de herramientas","Font":"Fuente","Font size {0}":"Tama\xf1o de fuente {0}","Font sizes":"Tama\xf1os de fuente","Font {0}":"Fuente {0}","Fonts":"Fuentes","Food and Drink":"Comida y bebida","Footer":"Pie de p\xe1gina","Format":"Formato","Format {0}":"Formato {0}","Formats":"Formatos","Fullscreen":"Pantalla completa","G":"V","General":"General","Gray":"Gris","Green":"Verde","Green component":"Componente verde","Groove":"Ranura","Handy Shortcuts":"Atajos \xfatiles","Header":"Encabezado","Header cell":"Celda de encabezado","Heading 1":"Encabezado 1","Heading 2":"Encabezado 2","Heading 3":"Encabezado 3","Heading 4":"Encabezado 4","Heading 5":"Encabezado 5","Heading 6":"Encabezado 6","Headings":"Encabezados","Height":"Alto","Help":"Ayuda","Hex color code":"C\xf3digo de color hexadecimal","Hidden":"Oculto","Horizontal align":"Alineaci\xf3n horizontal","Horizontal line":"L\xednea horizontal","Horizontal space":"Espacio horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"El ID debe comenzar con una letra, seguido solo de letras, n\xfameros, guiones, puntos, dos puntos o guiones bajos","Image is decorative":"La imagen es decorativa","Image list":"Lista de im\xe1genes","Image title":"T\xedtulo de la imagen","Image...":"Imagen...","ImageProxy HTTP error: Could not find Image Proxy":"Error HTTP de ImageProxy. No se pudo encontrar el proxy de imagen","ImageProxy HTTP error: Incorrect Image Proxy URL":"Error HTTP de ImageProxy. La URL de proxy de imagen es incorrecta","ImageProxy HTTP error: Rejected request":"Error HTTP de ImageProxy, solicitud rechazada","ImageProxy HTTP error: Unknown ImageProxy error":"Error de ImageProxy HTTP. Error de ImageProxy desconocido","Increase indent":"Aumentar sangr\xeda","Inline":"En l\xednea","Insert":"Insertar","Insert Template":"Insertar plantilla","Insert accordion":"Insertar acorde\xf3n","Insert column after":"Insertar columna despu\xe9s","Insert column before":"Insertar columna antes","Insert date/time":"Insertar fecha/hora","Insert image":"Insertar imagen","Insert link (if link plugin activated)":"Insertar v\xednculo (si el complemento de v\xednculos est\xe1 activado)","Insert row after":"Insertar fila despu\xe9s","Insert row before":"Insertar fila antes","Insert table":"Insertar tabla","Insert template...":"Insertar plantilla...","Insert video":"Insertar video","Insert/Edit code sample":"Insertar/editar ejemplo de c\xf3digo","Insert/edit image":"Insertar/editar imagen","Insert/edit link":"Insertar/editar v\xednculo","Insert/edit media":"Insertar/editar elemento multimedia","Insert/edit video":"Insertar/editar video","Inset":"Recuadro","Invalid hex color code: {0}":"El c\xf3digo de color hexadecimal {0} no es v\xe1lido","Invalid input":"Entrada no v\xe1lida","Italic":"Cursiva","Justify":"Justificar","Keyboard Navigation":"Navegaci\xf3n con el teclado","Language":"Idioma","Learn more...":"M\xe1s informaci\xf3n...","Left":"Izquierda","Left to right":"De izquierda a derecha","Light Blue":"Azul claro","Light Gray":"Gris claro","Light Green":"Verde claro","Light Purple":"Morado claro","Light Red":"Rojo claro","Light Yellow":"Amarillo claro","Line height":"Altura de la l\xednea","Link list":"Lista de enlaces","Link...":"Enlace...","List Properties":"Propiedades de lista","List properties...":"Propiedades de lista...","Loading emojis...":"Cargando emojis...","Loading...":"Cargando...","Lower Alpha":"Alfab\xe9tico en min\xfasculas","Lower Greek":"Griego en min\xfasculas","Lower Roman":"Romano en min\xfasculas","Match case":"Coincidir may\xfasculas y min\xfasculas","Mathematical":"Matem\xe1ticos","Media poster (Image URL)":"P\xf3ster multimedia (URL de la imagen)","Media...":"Elemento multimedia...","Medium Blue":"Azul medio","Medium Gray":"Gris medio","Medium Purple":"Morado medio","Merge cells":"Combinar celdas","Middle":"Centro","Midnight Blue":"Azul medianoche","More...":"M\xe1s...","Name":"Nombre","Navy Blue":"Azul marino","New document":"Nuevo documento","New window":"Nueva ventana","Next":"Siguiente","No":"No","No alignment":"Sin alineaci\xf3n","No color":"Sin color","Nonbreaking space":"Espacio de no separaci\xf3n","None":"Ninguno","Numbered list":"Lista numerada","OR":"O","Objects":"Objetos","Ok":"Aceptar","Open help dialog":"Abrir di\xe1logo de ayuda","Open link":"Abrir enlace","Open link in...":"Abrir enlace en...","Open popup menu for split buttons":"Abrir men\xfa emergente para botones divididos","Orange":"Anaranjado","Outset":"Inicial","Page break":"Salto de p\xe1gina","Paragraph":"P\xe1rrafo","Paste":"Pegar","Paste as text":"Pegar como texto","Paste column after":"Pegar columna despu\xe9s","Paste column before":"Pegar columna antes","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Pegar ahora est\xe1 en modo de texto sin formato. El contenido ahora se pegar\xe1 como texto sin formato hasta que desactive esta opci\xf3n","Paste or type a link":"Pegar o escribir un enlace","Paste row after":"Pegar fila despu\xe9s","Paste row before":"Pegar fila antes","Paste your embed code below:":"Pegue el c\xf3digo para insertar debajo:","People":"Personas","Plugins":"Complementos","Plugins installed ({0}):":"Complementos instalados ({0}):","Powered by {0}":"Con tecnolog\xeda de {0}","Pre":"Pre","Preferences":"Preferencias","Preformatted":"Con formato previo","Premium plugins:":"Complementos premium:","Press the Up and Down arrow keys to resize the editor.":"Presiona las flechas Arriba y Abajo de tu teclado para cambiar el tama\xf1o del editor.","Press the arrow keys to resize the editor.":"Presiona las flechas de tu teclado para cambiar el tama\xf1o del editor.","Press {0} for help":"Presiona {0} para la ayuda","Preview":"Vista previa","Previous":"Anterior","Print":"Imprimir","Print...":"Imprimir...","Purple":"Morado","Quotations":"Comillas","R":"R","Range 0 to 255":"Range 0 al 255","Red":"Rojo","Red component":"Componente rojo","Redo":"Rehacer","Remove":"Quitar","Remove color":"Remover color","Remove link":"Eliminar v\xednculo","Replace":"Remplazar","Replace all":"Remplazar todo","Replace with":"Remplazar con","Resize":"Cambiar tama\xf1o","Restore last draft":"Restaurar el \xfaltimo borrador","Reveal or hide additional toolbar items":"Mostrar u ocultar elementos adicionales de la barra de herramientas","Rich Text Area":"\xc1rea de texto enriquecido","Rich Text Area. Press ALT-0 for help.":"\xc1rea de texto enriquecido. Pulse ALT-0 para obtener ayuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc1rea de texto enriquecido. Pulse ALT-F9 para el men\xfa. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para obtener ayuda.","Ridge":"Rugosidad","Right":"Derecha","Right to left":"De derecha a izquierda","Row":"Fila","Row clipboard actions":"Acciones de fila del portapapeles","Row group":"Grupo de filas","Row header":"Encabezado de fila","Row properties":"Propiedades de fila","Row type":"Tipo de fila","Rows":"Filas","Save":"Guardar","Save (if save plugin activated)":"Guardar (si el complemento de guardar est\xe1 activado)","Scope":"Alcance","Search":"Buscar","Select all":"Seleccionar todo","Select...":"Seleccionar...","Selection":"Selecci\xf3n","Shortcut":"Atajo","Show blocks":"Mostrar bloques","Show caption":"Mostrar subt\xedtulo","Show invisible characters":"Mostrar caracteres invisibles","Size":"Tama\xf1o","Solid":"S\xf3lido","Source":"Origen","Source code":"C\xf3digo fuente","Special Character":"Car\xe1cter especial","Special character...":"Car\xe1cter especial...","Split cell":"Dividir celdas","Square":"Cuadrado","Start list at number":"Comenzar la lista en el n\xfamero","Strikethrough":"Tachado","Style":"Estilo","Subscript":"Sub\xedndice","Superscript":"Super\xedndice","Switch to or from fullscreen mode":"Cambiar a o desde el modo de pantalla completa","Symbols":"S\xedmbolos","System Font":"Fuente del sistema","Table":"Tabla","Table caption":"Subt\xedtulo de tabla","Table properties":"Propiedades de tabla","Table styles":"Estilos de tabla","Template":"Plantilla","Templates":"Plantillas","Text":"Texto","Text color":"Color del texto","Text color {0}":"Color de texto {0}","Text to display":"Texto a mostrar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"La URL que introdujo parece ser una direcci\xf3n de correo electr\xf3nico. \xbfDesea a\xf1adir el prefijo mailto: correspondiente?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"La URL que introdujo parece ser un v\xednculo externo. \xbfDesea a\xf1adir el prefijo http:// correspondiente?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"La URL que ingres\xf3 parece ser un enlace externo. Desea agregar el prefijo requerido https://?","Title":"T\xedtulo","To open the popup, press Shift+Enter":"Para abrir la ventana emergente, presione May\xfas+Intro","Toggle accordion":"Alternar acorde\xf3n","Tools":"Herramientas","Top":"Arriba","Travel and Places":"Viajes y lugares","Turquoise":"Turquesa","Underline":"Subrayado","Undo":"Deshacer","Upload":"Subir","Uploading image":"Subiendo imagen","Upper Alpha":"Alfab\xe9tico en may\xfasculas","Upper Roman":"Romano en may\xfasculas","Url":"Url","User Defined":"Definido por el usuario","Valid":"V\xe1lido","Version":"Versi\xf3n","Vertical align":"Alineaci\xf3n vertical","Vertical space":"Espacio vertical","View":"Vista","Visual aids":"Ayudas visuales","Warn":"Advertencia","White":"Blanco","Width":"Ancho","Word count":"Contar palabras","Words":"Palabras","Words: {0}":"Palabras: {0}","Yellow":"Amarillo","Yes":"S\xed","You are using {0}":"Est\xe1 usando {0}","You have unsaved changes are you sure you want to navigate away?":"No se han guardado los cambios. \xbfSeguro que desea abandonar la p\xe1gina?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Su navegador no admite el acceso directo al portapapeles. En su lugar, use los m\xe9todos abreviados Ctrl+X/C/V del teclado","alignment":"alineaci\xf3n","austral sign":"signo del austral","cedi sign":"signo de cedi","colon sign":"signo de dos puntos","cruzeiro sign":"signo del cruzeiro","currency sign":"signo de divisa","dollar sign":"signo de d\xf3lar","dong sign":"signo del dong","drachma sign":"signo del dracma","euro-currency sign":"signo de euro","example":"ejemplo","formatting":"formato","french franc sign":"signo del franco franc\xe9s","german penny symbol":"signo del penique alem\xe1n","guarani sign":"signo del guaran\xed","history":"historial","hryvnia sign":"signo de hryvnia","indentation":"sangr\xeda","indian rupee sign":"signo de la rupia india","kip sign":"signo del kip","lira sign":"signo de la lira","livre tournois sign":"signo de livre tournois","manat sign":"signo de manat","mill sign":"signo de mil","naira sign":"signo del naira","new sheqel sign":"signo de nuevo shequel","nordic mark sign":"signo del marco n\xf3rdico","peseta sign":"signo de la peseta","peso sign":"signo del peso","ruble sign":"signo de rublo","rupee sign":"signo de la rupia","spesmilo sign":"signo de spesmilo","styles":"estilos","tenge sign":"signo de tenge","tugrik sign":"signo del tugrik","turkish lira sign":"signo de la lira turca","won sign":"signo del won","yen character":"car\xe1cter del yen","yen/yuan character variant one":"variante uno del car\xe1cter del yen/yuan","yuan character":"car\xe1cter del yuan","yuan character, in hong kong and taiwan":"car\xe1cter del yuan, en Hong Kong y Taiw\xe1n","{0} characters":"{0} caracteres","{0} columns, {1} rows":"{0} columnas, {1} filas","{0} words":"{0} palabras"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/et.js b/staticfiles/tinymce/langs/et.js new file mode 100644 index 0000000..c1b624c --- /dev/null +++ b/staticfiles/tinymce/langs/et.js @@ -0,0 +1 @@ +tinymce.addI18n("et",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Tegevus","Activity":"Tegevus","Address":"Aadress","Advanced":"T\xe4psem","Align":"Joonda","Align center":"Joonda keskele","Align left":"Joonda vasakule","Align right":"Joonda paremale","Alignment":"Joondamine","Alignment {0}":"","All":"K\xf5ik","Alternative description":"","Alternative source":"Alternatiivne allikas","Alternative source URL":"Alternatiivne allika URL","Anchor":"","Anchor...":"Ankur ...","Anchors":"Ankrud","Animals and Nature":"Loomad ja loodus","Arrows":"Nooled","B":"","Background color":"Taustav\xe4rv","Background color {0}":"","Black":"Must","Block":"Plokk","Block {0}":"","Blockquote":"Plokktsitaat","Blocks":"Plokid","Blue":"Sinine","Blue component":"","Body":"Keha","Bold":"Rasvane","Border":"Piir","Border color":"\xc4\xe4rise v\xe4rv","Border style":"Piiri stiil","Border width":"\xc4\xe4rise laius","Bottom":"Alumine","Browse files":"","Browse for an image":"Sirvi pilte","Browse links":"","Bullet list":"J\xe4rjestamata loend","Cancel":"Katkesta","Caption":"Alapealkiri","Cell":"Kamber","Cell padding":"Lahtrite polsterdus","Cell properties":"Rakkude omadused","Cell spacing":"Lahtrite vahe","Cell styles":"","Cell type":"Lahtri t\xfc\xfcp","Center":"Keskus","Characters":"Tegelased","Characters (no spaces)":"M\xe4rgid (t\xfchikud puuduvad)","Circle":"Ring","Class":"Klass","Clear formatting":"Puhasta vorming","Close":"Sulge","Code":"Kood","Code sample...":"Koodin\xe4ide ...","Code view":"","Color Picker":"V\xe4rvivalija","Color swatch":"V\xe4rvivalik","Cols":"","Column":"Veerg","Column clipboard actions":"","Column group":"Veergude r\xfchm","Column header":"","Constrain proportions":"Piirake proportsioone","Copy":"Kopeeri","Copy column":"","Copy row":"Kopeeri rida","Could not find the specified string.":"M\xe4\xe4ratud stringi ei leitud.","Could not load emojis":"","Count":"Krahv","Currency":"Valuuta","Current window":"Praegune aken","Custom color":"Kohandatud v\xe4rv","Custom...":"Kohandatud ...","Cut":"L\xf5ika","Cut column":"","Cut row":"L\xf5ika rida","Dark Blue":"Tumesinine","Dark Gray":"Tumehall","Dark Green":"Tumeroheline","Dark Orange":"Tumeoran\u017e","Dark Purple":"Tumelilla","Dark Red":"Tumepunane","Dark Turquoise":"Tume t\xfcrkiissinine","Dark Yellow":"Tumekollane","Dashed":"","Date/time":"Kuup\xe4ev Kellaaeg","Decrease indent":"V\xe4henda taanet","Default":"Vaikimisi","Delete accordion":"","Delete column":"Kustuta veerg","Delete row":"Kustuta rida","Delete table":"Kustuta tabel","Dimensions":"M\xf5\xf5tmed","Disc":"Plaat","Div":"Sektsioon","Document":"Dokument","Dotted":"","Double":"","Drop an image here":"Kukuta pilt siia","Dropped file type is not supported":"","Edit":"Muuda","Embed":"","Emojis":"","Emojis...":"","Error":"Viga","Error: Form submit field collision.":"Viga: vormi esitamise v\xe4lja kokkup\xf5rge.","Error: No form element found.":"Viga: vormielementi ei leitud.","Extended Latin":"Laiendatud ladina keel","Failed to initialize plugin: {0}":"Pistikprogrammi l\xe4htestamine eba\xf5nnestus: {0}","Failed to load plugin url: {0}":"Pistikprogrammi URL-i laadimine nurjus: {0}","Failed to load plugin: {0} from url {1}":"Pistikprogrammi laadimine nurjus: {0} URL-ist {1}","Failed to upload image: {0}":"Pildi \xfcleslaadimine eba\xf5nnestus: {0}","File":"Fail","Find":"Leidke","Find (if searchreplace plugin activated)":"Leia (kui otsinguprogrammi plugin on aktiveeritud)","Find and Replace":"","Find and replace...":"Leidke ja asendage ...","Find in selection":"","Find whole words only":"Leidke ainult terved s\xf5nad","Flags":"Lipud","Focus to contextual toolbar":"Keskenduge kontekstip\xf5hisele t\xf6\xf6riistaribale","Focus to element path":"Keskendumine elemendi rajale","Focus to menubar":"Keskenduge men\xfc\xfcribale","Focus to toolbar":"Keskenduge t\xf6\xf6riistaribale","Font":"","Font size {0}":"","Font sizes":"Fondi suurused","Font {0}":"","Fonts":"Fondid","Food and Drink":"Toit ja jook","Footer":"Jalus","Format":"Vormindus","Format {0}":"","Formats":"Vormingud","Fullscreen":"T\xe4isekraan","G":"","General":"Kindral","Gray":"Hall","Green":"Roheline","Green component":"","Groove":"","Handy Shortcuts":"K\xe4ep\xe4rased otseteed","Header":"P\xe4is","Header cell":"P\xe4ise lahter","Heading 1":"Pealkiri 1","Heading 2":"Pealkiri 2","Heading 3":"Pealkiri 3","Heading 4":"Pealkiri 4","Heading 5":"Pealkiri 5","Heading 6":"Pealkiri 6","Headings":"Pealkirjad","Height":"K\xf5rgus","Help":"Abi","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Horisontaalne joon","Horizontal space":"Horisontaalne ruum","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Piltide loend","Image title":"Pildi pealkiri","Image...":"Pilt ...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Suurenda taanet","Inline":"Reasisene","Insert":"Sisesta","Insert Template":"","Insert accordion":"","Insert column after":"Sisestage veerg p\xe4rast","Insert column before":"Sisestage veerg enne","Insert date/time":"Sisestage kuup\xe4ev / kellaaeg","Insert image":"Sisesta pilt","Insert link (if link plugin activated)":"Sisesta link (kui lingi pistikprogramm on aktiveeritud)","Insert row after":"Lisage rida p\xe4rast","Insert row before":"Sisestage rida enne","Insert table":"Sisesta tabel","Insert template...":"Sisesta mall ...","Insert video":"Sisesta video","Insert/Edit code sample":"Koodin\xe4idise sisestamine / muutmine","Insert/edit image":"Sisesta / muuda pilti","Insert/edit link":"Sisesta / muuda link","Insert/edit media":"Sisestage / muutke meediumit","Insert/edit video":"Video lisamine / muutmine","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Kaldkiri","Justify":"Joonda r\xf6\xf6pselt","Keyboard Navigation":"Klaviatuuril navigeerimine","Language":"Keel","Learn more...":"Lisateave ...","Left":"Vasakule","Left to right":"Vasakult paremale","Light Blue":"Helesinine","Light Gray":"Helehall","Light Green":"Heleroheline","Light Purple":"Helelilla","Light Red":"Helepunane","Light Yellow":"Helekollane","Line height":"Reak\xf5rgus","Link list":"Lingiloend","Link...":"","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Alam-Alfa","Lower Greek":"Alamkreeka keel","Lower Roman":"Alam-Rooma","Match case":"Tikutoos","Mathematical":"Matemaatiline","Media poster (Image URL)":"Meediaplakat (pildi URL)","Media...":"Meedia ...","Medium Blue":"Keskmine sinine","Medium Gray":"Keskmiselt hall","Medium Purple":"Keskmine lilla","Merge cells":"Lahtrite \xfchendamine","Middle":"Keskmine","Midnight Blue":"Kesk\xf6ine sinine","More...":"Veel ...","Name":"Nimi","Navy Blue":"Merev\xe4e sinine","New document":"Uus dokument","New window":"Uus aken","Next":"J\xe4rgmine","No":"Ei","No alignment":"","No color":"Pole v\xe4rvi","Nonbreaking space":"Murdmatu ruum","None":"Puudub","Numbered list":"J\xe4rjestatud loend","OR":"V\xd5I","Objects":"Objektid","Ok":"","Open help dialog":"Ava dialoog","Open link":"","Open link in...":"Ava link saidil ...","Open popup menu for split buttons":"","Orange":"Oran\u017e","Outset":"","Page break":"Lehek\xfcljevahe","Paragraph":"L\xf5ik","Paste":"Kleebi","Paste as text":"Kleebi tekstina","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Kleepimine on n\xfc\xfcd lihtteksti re\u017eiimis. Sisu kleebitakse lihttekstina seni, kuni Sa selle valiku v\xe4lja l\xfclitad.","Paste or type a link":"Kleepige v\xf5i tippige link","Paste row after":"Kleepige rida p\xe4rast","Paste row before":"Kleepige rida enne","Paste your embed code below:":"Kleepige oma manustamiskood allpool:","People":"Inimesed","Plugins":"Pistikprogrammid","Plugins installed ({0}):":"Installitud pistikprogrammid ({0}):","Powered by {0}":"Toetaja: {0}","Pre":"Eelvormindatud","Preferences":"Eelistused","Preformatted":"Eelvormindaud","Premium plugins:":"Premium pistikprogrammid:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Eelvaade","Previous":"Eelmine","Print":"","Print...":"Prindi ...","Purple":"Lilla","Quotations":"Tsitaadid","R":"","Range 0 to 255":"","Red":"Punane","Red component":"","Redo":"Tee uuesti","Remove":"","Remove color":"Eemaldage v\xe4rv","Remove link":"Eemalda link","Replace":"Asenda","Replace all":"Asenda k\xf5ik","Replace with":"Asenda s\xf5naga","Resize":"Suuruse muutmine","Restore last draft":"Taasta viimane mustand","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Rikasteksti ala. Abi saamiseks vajutage ALT-0.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rikasteksti ala. Men\xfc\xfc avamiseks vajutage ALT-F9. T\xf6\xf6riistariba saamiseks vajutage ALT-F10. VajutageALT-0 abi saamiseks","Ridge":"","Right":"\xd5ige","Right to left":"Paremalt vasakule","Row":"Rida","Row clipboard actions":"","Row group":"R\xfchma r\xfchm","Row header":"","Row properties":"Rea omadused","Row type":"Rea t\xfc\xfcp","Rows":"Read","Save":"Salvesta","Save (if save plugin activated)":"Salvesta (kui pistikprogrammi salvestamine on aktiveeritud)","Scope":"Reguleerimisala","Search":"Otsing","Select all":"Vali k\xf5ik","Select...":"Valige ...","Selection":"Valik","Shortcut":"Otsetee","Show blocks":"N\xe4ita plokke","Show caption":"Kuva pealdis","Show invisible characters":"Kuva n\xe4htamatud t\xe4hem\xe4rgid","Size":"Suurus","Solid":"","Source":"Allikas","Source code":"L\xe4htekood","Special Character":"","Special character...":"Eriline tegelane ...","Split cell":"Lahtrite jagamine","Square":"Ruut","Start list at number":"","Strikethrough":"L\xe4bikriipsutatud","Style":"Stiil","Subscript":"Alaindeks","Superscript":"\xdclaindeks","Switch to or from fullscreen mode":"L\xfclitumine t\xe4isekraanre\u017eiimile v\xf5i sellest v\xe4lja","Symbols":"S\xfcmbolid","System Font":"S\xfcsteemi font","Table":"Tabel","Table caption":"","Table properties":"Tabeli omadused","Table styles":"","Template":"Mall","Templates":"Mallid","Text":"Tekst","Text color":"Teksti v\xe4rv","Text color {0}":"","Text to display":"Kuvatav tekst","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Sisestatud URL n\xe4ib olevat e-posti aadress. Kas soovite lisadavajalik mailto: eesliide?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Teie sisestatud URL n\xe4ib olevat v\xe4line link. Kas soovite lisadavajalik http: // eesliide?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"Pealkiri","To open the popup, press Shift+Enter":"H\xfcpikakna avamiseks vajutage t\xf5stuklahvi + sisestusklahvi","Toggle accordion":"","Tools":"T\xf6\xf6riistad","Top":"\xdcles","Travel and Places":"Reisimine ja kohad","Turquoise":"T\xfcrkiis","Underline":"Allakriipsutatud","Undo":"V\xf5ta tagasi","Upload":"\xdcles laadimine","Uploading image":"","Upper Alpha":"\xdclem-Alfa","Upper Roman":"\xdclemine Rooma keel","Url":"URL","User Defined":"Kasutaja m\xe4\xe4ratud","Valid":"Kehtib","Version":"Versioon","Vertical align":"","Vertical space":"Vertikaalne ruum","View":"Vaade","Visual aids":"N\xe4itevahendid","Warn":"Hoiatage","White":"Valge","Width":"Laius","Word count":"S\xf5nade arv","Words":"S\xf5nad","Words: {0}":"S\xf5nad: {0}","Yellow":"Kollane","Yes":"Jah","You are using {0}":"Kasutate seadet {0}","You have unsaved changes are you sure you want to navigate away?":"Teil on salvestamata muudatusi. Kas soovite kindlasti minema navigeerida?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Sinu veebilehitseja ei toeta otsest ligip\xe4\xe4su l\xf5ikelauale. Palun kasuta selle asemel klaviatuuri kiirk\xe4sklusi Ctrl+X/C/V.","alignment":"joondamine","austral sign":"austraalne m\xe4rk","cedi sign":"cedi m\xe4rk","colon sign":"j\xe4mesoole m\xe4rk","cruzeiro sign":"cruzeiro m\xe4rk","currency sign":"v\xe4\xe4ringu m\xe4rk","dollar sign":"dollari m\xe4rk","dong sign":"dongi m\xe4rk","drachma sign":"drahmam\xe4rk","euro-currency sign":"euro v\xe4\xe4ringu m\xe4rk","example":"n\xe4ide","formatting":"vormindamine","french franc sign":"Prantsuse frangi m\xe4rk","german penny symbol":"saksa senti s\xfcmbol","guarani sign":"guarani m\xe4rk","history":"ajalugu","hryvnia sign":"grivna m\xe4rk","indentation":"taane","indian rupee sign":"India ruupia m\xe4rk","kip sign":"kip m\xe4rk","lira sign":"liiri m\xe4rk","livre tournois sign":"elav turniiri m\xe4rk","manat sign":"manati m\xe4rk","mill sign":"veskim\xe4rk","naira sign":"naira m\xe4rk","new sheqel sign":"uus \u0161ekeli m\xe4rk","nordic mark sign":"p\xf5hjam\xe4rgi m\xe4rk","peseta sign":"peseta m\xe4rk","peso sign":"peeso m\xe4rk","ruble sign":"rubla m\xe4rk","rupee sign":"ruupia m\xe4rk","spesmilo sign":"spesmilo m\xe4rk","styles":"stiilid","tenge sign":"tenge m\xe4rk","tugrik sign":"tugriku m\xe4rk","turkish lira sign":"t\xfcrgi liiri m\xe4rk","won sign":"v\xf5itis m\xe4rgi","yen character":"jeeni tegelaskuju","yen/yuan character variant one":"jeeni / j\xfcaani t\xe4hem\xe4rgi variant \xfcks","yuan character":"j\xfcaani tegelaskuju","yuan character, in hong kong and taiwan":"j\xfcaani tegelane, Hongkongis ja Taiwanis","{0} characters":"{0} t\xe4hem\xe4rki","{0} columns, {1} rows":"","{0} words":"{0} s\xf5na"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/eu.js b/staticfiles/tinymce/langs/eu.js new file mode 100644 index 0000000..e8ce070 --- /dev/null +++ b/staticfiles/tinymce/langs/eu.js @@ -0,0 +1 @@ +tinymce.addI18n("eu",{"#":"#","Accessibility":"Irisgarritasuna","Accordion":"Akordeoia","Accordion body...":"Akordeoi-gorputza...","Accordion summary...":"Akordeoi-laburpena...","Action":"Ekintza","Activity":"Jarduera","Address":"Helbidea","Advanced":"Aurreratua","Align":"Lerrokatu","Align center":"Lerrokatu erdian","Align left":"Lerrokatu ezkerrean","Align right":"Lerrokatu eskuinean","Alignment":"Lerrokatzea","Alignment {0}":"Lerrokatzea: {0}","All":"Guztiak","Alternative description":"Ordezko deskribapena","Alternative source":"Ordezko jatorria","Alternative source URL":"Ordezko jatorriaren URLa","Anchor":"Aingura","Anchor...":"Aingura...","Anchors":"Aingurak","Animals and Nature":"Animaliak eta natura","Arrows":"Geziak","B":"B","Background color":"Atzeko planoaren kolorea","Background color {0}":"Atzeko planoaren kolorea: {0}","Black":"Beltza","Block":"Blokea","Block {0}":"{0} blokea","Blockquote":"Zita bat egiteko blokea (blockquote)","Blocks":"Blokeak","Blue":"Urdina","Blue component":"Osagai urdina","Body":"Gorputza","Bold":"Lodia","Border":"Ertza","Border color":"Ertzaren kolorea","Border style":"Ertzaren estiloa","Border width":"Ertzaren zabalera","Bottom":"Behean","Browse files":"Arakatu fitxategiak","Browse for an image":"Arakatu irudi baten bila","Browse links":"Arakatu estekak","Bullet list":"Bulet zerrenda","Cancel":"Utzi","Caption":"Irudi-oina","Cell":"Gelaxka","Cell padding":"Gelaxken betegarria","Cell properties":"Gelaxkaren propietateak","Cell spacing":"Gelaxka arteko tartea","Cell styles":"Gelaxkaren estiloak","Cell type":"Gelaxka mota","Center":"Erdia","Characters":"Karaktereak","Characters (no spaces)":"Karaktereak (espaziorik gabe)","Circle":"Zirkulua","Class":"Klasea","Clear formatting":"Garbitu formatua","Close":"Itxi","Code":"Kodea","Code sample...":"Kode adibidea...","Code view":"Ikusi kodea","Color Picker":"Kolore-hautatzailea","Color swatch":"Koloreak","Cols":"Zutabeak","Column":"Zutabea","Column clipboard actions":"Zutabearen arbeleko ekintzak","Column group":"Zutabe taldea","Column header":"Zutabearen goiburua","Constrain proportions":"Mugatu proportzioak","Copy":"Kopiatu","Copy column":"Kopiatu zutabea","Copy row":"Kopiatu errenkada","Could not find the specified string.":"Ezin izan da zehaztutako katea aurkitu.","Could not load emojis":"Ezin izan dira emojiak kargatu","Count":"Zenbatu","Currency":"Moneta","Current window":"Leiho berean","Custom color":"Kolore pertsonalizatua","Custom...":"Pertsonalizatu...","Cut":"Ebaki","Cut column":"Ebaki zutabea","Cut row":"Ebaki errenkada","Dark Blue":"Urdin iluna","Dark Gray":"Gris iluna","Dark Green":"Berde iluna","Dark Orange":"Laranja iluna","Dark Purple":"More iluna","Dark Red":"Gorri iluna","Dark Turquoise":"Turkesa iluna","Dark Yellow":"Hori iluna","Dashed":"Marrekin","Date/time":"Data/ordua","Decrease indent":"Txikitu koska","Default":"Lehenetsita","Delete accordion":"Ezabatu akordeoia","Delete column":"Ezabatu zutabea","Delete row":"Ezabatu errenkada","Delete table":"Ezabatu taula","Dimensions":"Neurriak","Disc":"Diskoa","Div":"Div","Document":"Dokumentua","Dotted":"Puntuekin","Double":"Bikoitza","Drop an image here":"Ekarri irudia hona","Dropped file type is not supported":"Jaregindako fitxategi mota ez da onartzen","Edit":"Editatu","Embed":"Enbotatzea","Emojis":"Emojiak","Emojis...":"Emojiak...","Error":"Errorea","Error: Form submit field collision.":"Errorea: formularioaren eremuetan talka gertatu da.","Error: No form element found.":"Errorea: ez da formularioaren elementurik aurkitu.","Extended Latin":"Latin zabaldua","Failed to initialize plugin: {0}":"Errorea plugina abiaraztean: {0}","Failed to load plugin url: {0}":"Errorea gertatu da pluginaren URLa kargatzean: {0}","Failed to load plugin: {0} from url {1}":"Errorea {0} plugina {1} URLtik kargatzean","Failed to upload image: {0}":"Errorea irudia igotzean: {0}","File":"Fitxategia","Find":"Bilatu","Find (if searchreplace plugin activated)":"Bilatu (bilatu-ordezkatu plugina aktibatuta badago)","Find and Replace":"Bilatu eta ordezkatu","Find and replace...":"Bilatu eta ordezkatu...","Find in selection":"Bilatu hautapenean","Find whole words only":"Bilatu soilik hitz osoak","Flags":"Banderak","Focus to contextual toolbar":"Fokua testuinguruko tresna-barrara eraman","Focus to element path":"Fokua elementuaren bidera eraman","Focus to menubar":"Fokua menu-barrara eraman","Focus to toolbar":"Fokoa tresna-barrara eraman","Font":"Letra-mota","Font size {0}":"{0} letra-tamaina","Font sizes":"Letra tamainak","Font {0}":"{0} letra-mota","Fonts":"Letra-motak","Food and Drink":"Janari eta edaria","Footer":"Oina","Format":"Formatua","Format {0}":"{0} formatua","Formats":"Formatuak","Fullscreen":"Pantaila osoa","G":"G","General":"Orokorra","Gray":"Grisa","Green":"Berdea","Green component":"Osagai berdea","Groove":"Ildaskatua","Handy Shortcuts":"Laster-tekla erabilgarriak","Header":"Goiburua","Header cell":"Goiburuko gelaxka","Heading 1":"1. goiburua","Heading 2":"2. goiburua","Heading 3":"3. goiburua","Heading 4":"4. goiburua","Heading 5":"5. goiburua","Heading 6":"6. goiburua","Headings":"Izenburuak","Height":"Altuera","Help":"Laguntza","Hex color code":"Kolore-kode hamaseitarra","Hidden":"Ezkutua","Horizontal align":"Lerrokatze horizontala","Horizontal line":"Marra horizontala","Horizontal space":"Hutsune horizontala","ID":"IDa","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"IDa hizki batekin hasi behar da, eta jarraian hizki gehiago, zenbakiak, marrak, puntuak komak edo azpiko marrak izan ditzake soilik.","Image is decorative":"Irudia apaingarria da","Image list":"Irudi zerrenda","Image title":"Irudiaren izenburua","Image...":"Irudia...","ImageProxy HTTP error: Could not find Image Proxy":"Irudi proxiaren HTTP errorea: ezin izan da irudi proxia aurkitu","ImageProxy HTTP error: Incorrect Image Proxy URL":"Irudi proxiaren HTTP errorea: irudi proxiaren URLa ez da zuzena","ImageProxy HTTP error: Rejected request":"Irudi proxiaren HTTP errorea: eskaera baztertu egin da","ImageProxy HTTP error: Unknown ImageProxy error":"Irudi proxiaren HTTP errorea: errore ezezaguna","Increase indent":"Handitu koska","Inline":"Txertatuta","Insert":"Txertatu","Insert Template":"Txertatu txantiloia","Insert accordion":"Txertatu akordeoia","Insert column after":"Txertatu zutabea ostean","Insert column before":"Txertatu zutabea aurretik","Insert date/time":"Txertatu data/ordua","Insert image":"Txertatu irudia","Insert link (if link plugin activated)":"Txertatu esteka (esteka plugina aktibatuta badago)","Insert row after":"Txertatu errenkada ostean","Insert row before":"Txertatu errenkada aurretik","Insert table":"Txertatu taula","Insert template...":"Txertatu txantiloia...","Insert video":"Txertatu bideoa","Insert/Edit code sample":"Txertatu/Editatu kode adibidea","Insert/edit image":"Txertatu/editatu irudia","Insert/edit link":"Txertatu/editatu esteka","Insert/edit media":"Txertatu/editatu multimedia","Insert/edit video":"Txertatu/editatu bideoa","Inset":"Barruko marra","Invalid hex color code: {0}":"Kolore-kode hamaseitarra ez da zuzena: {0}","Invalid input":"Sarrera ez da zuzena","Italic":"Etzana","Justify":"Justifikatuta","Keyboard Navigation":"Teklatuaren bidezko nabigazioa","Language":"Hizkuntza","Learn more...":"Ikasi gehiago...","Left":"Ezkerra","Left to right":"Ezkerretik eskuinera","Light Blue":"Urdin argia","Light Gray":"Gris argia","Light Green":"Berde argia","Light Purple":"More argia","Light Red":"Gorri argia","Light Yellow":"Hori argia","Line height":"Lerroaren altuera","Link list":"Esteken zerrenda","Link...":"Esteka...","List Properties":"Zerrendaren Ezaugarriak","List properties...":"Zerrendaren ezaugarriak...","Loading emojis...":"Emojiak kargatzen...","Loading...":"Kargatzen...","Lower Alpha":"Behe alfa","Lower Greek":"Behe grekoa","Lower Roman":"Behe erromatarra","Match case":"Maiuskula/minuskula","Mathematical":"Matematika","Media poster (Image URL)":"Multimedia posterra (irudiaren URLa)","Media...":"Multimedia...","Medium Blue":"Tarteko urdina","Medium Gray":"Tarteko grisa","Medium Purple":"Tarteko morea","Merge cells":"Batu gelaxkak","Middle":"Erdian","Midnight Blue":"Gauerdiko urdina","More...":"Gehiago...","Name":"Izena","Navy Blue":"Itsas-urdina","New document":"Dokumentu berria","New window":"Leiho berria","Next":"Hurrengoa","No":"Ez","No alignment":"Lerrokatzerik ez","No color":"Kolorerik ez","Nonbreaking space":"Zuriune zatiezina","None":"Bat ere ez","Numbered list":"Zenbaki-zerrenda","OR":"EDO","Objects":"Objektuak","Ok":"Ados","Open help dialog":"Ireki laguntza-mezua","Open link":"Ireki esteka","Open link in...":"Ireki esteka hemen...","Open popup menu for split buttons":"Ireki leiho-menua banatze-botoientzat","Orange":"Laranja","Outset":"Kanpoko marra","Page break":"Orrialde-jauzia","Paragraph":"Paragrafoa","Paste":"Itsatsi","Paste as text":"Itsatsi testu bezala","Paste column after":"Itsatsi zutabea ostean","Paste column before":"Itsatsi zutabea aurretik","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Itsastea testu formatu arruntean egingo da orain. Edukiak testu arrunt moduan txertatuko dira aukera hau aldatu bitartean.","Paste or type a link":"Itsatsi edo idatzi esteka","Paste row after":"Itsatsi errenkada ostean","Paste row before":"Itsatsi errenkada aurretik","Paste your embed code below:":"Itsatsi azpian enbotatu beharreko zure kodea:","People":"Jendea","Plugins":"Pluginak","Plugins installed ({0}):":"Instalatutako pluginak ({0}):","Powered by {0}":"Garatzailea: {0}","Pre":"Pre","Preferences":"Hobespenak","Preformatted":"Aurrez formateatuta","Premium plugins:":"Premium pluginak:","Press the Up and Down arrow keys to resize the editor.":"Sakatu gora eta behera egiteko gezi-teklak editorearen tamaina aldatzeko.","Press the arrow keys to resize the editor.":"Sakatu gezi-teklak editorearen tamaina aldatzeko.","Press {0} for help":"Sakatu {0} laguntza lortzeko","Preview":"Aurrebista","Previous":"Aurrekoa","Print":"Inprimatu","Print...":"Inprimatu...","Purple":"Morea","Quotations":"Aipuak","R":"R","Range 0 to 255":"0-tik 255erako zenbakia","Red":"Gorria","Red component":"Osagai gorria","Redo":"Berregin","Remove":"Kendu","Remove color":"Kendu kolorea","Remove link":"Kendu esteka","Replace":"Ordeztu","Replace all":"Ordeztu guztiak","Replace with":"Ordeztu honekin","Resize":"Aldatu tamaina","Restore last draft":"Leheneratu azken zirriborroa","Reveal or hide additional toolbar items":"Erakutsi edo ezkutatu tresna-barrako elementu osagarriak","Rich Text Area":"Testu Aberastun Eremua","Rich Text Area. Press ALT-0 for help.":"Testu Aberastun Eremua. Sakatu ALT-0 laguntza lortzeko.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Testu Aberastun Eremua. Sakatu ALT-F9 menurako. Sakatu ALT-F10 tresna-barrarako. Sakatu ALT-0 laguntzarako","Ridge":"Koska","Right":"Eskuina","Right to left":"Eskuinetik ezkerrera","Row":"Errenkada","Row clipboard actions":"Errenkadaren arbeleko ekintzak","Row group":"Errenkada taldea","Row header":"Errenkadaren goiburua","Row properties":"Errenkadaren propietateak","Row type":"Errenkada mota","Rows":"Errenkadak","Save":"Gorde","Save (if save plugin activated)":"Gorde (gordetzeko plugina aktibatuta badago)","Scope":"Esparrua","Search":"Bilatu","Select all":"Aukeratu dena","Select...":"Aukeratu...","Selection":"Aukeraketa","Shortcut":"Laster tekla","Show blocks":"Erakutsi blokeak","Show caption":"Erakutsi irudi-oina","Show invisible characters":"Erakutsi karaktere ezkutuak","Size":"Tamaina","Solid":"Solidoa","Source":"Iturburua","Source code":"Iturburu-kodea","Special Character":"Karaktere Berezia","Special character...":"Karaktere berezia...","Split cell":"Banatu gelaxka","Square":"Karratua","Start list at number":"Hasi zerrenda zenbaki batean","Strikethrough":"Marratua","Style":"Estiloa","Subscript":"Azpiindizea","Superscript":"Goi-indizea","Switch to or from fullscreen mode":"Aldatu pantaila osoko modura edo handik itzuli","Symbols":"Ikurrak","System Font":"Sistemaren letra-mota","Table":"Taula","Table caption":"Taularen deskribapena","Table properties":"Taularen propietateak","Table styles":"Taularen estiloak","Template":"Txantiloia","Templates":"Txantiloiak","Text":"Testua","Text color":"Testuaren kolorea","Text color {0}":"Testuaren kolorea: {0}","Text to display":"Bistaratzeko testua","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Sartu duzun URLa helbide elektroniko bat dela dirudi. Nahi duzu dagokion mailto: aurrizkia gehitzea?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Sartu duzun URLa kanpoko esteka bat dela dirudi. Nahi duzu dagokion http:// aurrizkia gehitzea?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Sartu duzun URLa kanpoko esteka bat dela dirudi. Nahi duzu dagokion https:// aurrizkia gehitzea?","Title":"Izenburua","To open the popup, press Shift+Enter":"Leiho berria irekitzeko, sakatu Shift+Enter","Toggle accordion":"Aktibatu/Desaktibatu akordeoia","Tools":"Tresnak","Top":"Goian","Travel and Places":"Bidaiak eta lekuak","Turquoise":"Turkesa","Underline":"Azpimarratua","Undo":"Desegin","Upload":"Kargatu","Uploading image":"Irudia kargatzen","Upper Alpha":"Goi alfa","Upper Roman":"Goi erromatarra","Url":"URLa","User Defined":"Erabiltzaileak definituta","Valid":"Zuzena","Version":"Bertsioa","Vertical align":"Lerrokatze bertikala","Vertical space":"Hutsune bertikala","View":"Ikusi","Visual aids":"Laguntza bisualak","Warn":"Oharra","White":"Zuria","Width":"Zabalera","Word count":"Hitz-kontagailua","Words":"Hitzak","Words: {0}":"Hitzak: {0}","Yellow":"Horia","Yes":"Bai","You are using {0}":"{0} erabiltzen ari zara","You have unsaved changes are you sure you want to navigate away?":"Gorde gabeko aldaketak dituzu, ziur zaude hemendik irten nahi duzula?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Zure nabigatzaileak ez du arbela zuzenean erabiltzeko euskarririk. Mesedez erabili CTRL+X/C/V teklatuko lasterbideak.","alignment":"lerrokatzea","austral sign":"australaren ikurra","cedi sign":"cediaren ikurra","colon sign":"bi puntuen ikurra","cruzeiro sign":"cruzeiroaren ikurra","currency sign":"monetaren ikurra","dollar sign":"dolarraren ikurra","dong sign":"dongaren ikurra","drachma sign":"drakmaren ikurra","euro-currency sign":"euroaren ikurra","example":"adibidea","formatting":"formatua ematen","french franc sign":"libera frantsesaren ikurra","german penny symbol":"alemaniako peniaren ikurra","guarani sign":"guaraniaren ikurra","history":"historia","hryvnia sign":"hryvniaren ikurra","indentation":"koska","indian rupee sign":"indiako rupiaren ikurra","kip sign":"kiparen ikurra","lira sign":"liraren ikurra","livre tournois sign":"libre tournoisaren ikurra","manat sign":"manataren ikurra","mill sign":"millaren ikurra","naira sign":"naira ikurra","new sheqel sign":"sheqel berriaren ikurra","nordic mark sign":"iparraldeko markoaren ikurra","peseta sign":"pezetaren ikurra","peso sign":"pesoaren ikurra","ruble sign":"rubloaren ikurra","rupee sign":"rupiaren ikurra","spesmilo sign":"spesmiloaren ikurra","styles":"estiloak","tenge sign":"tengearen ikurra","tugrik sign":"tugrikaren ikurra","turkish lira sign":"lira turkiarraren ikurra","won sign":"wonaren ikurra","yen character":"yenaren karakterea","yen/yuan character variant one":"yen/yuan karakterearen 1go bariantea","yuan character":"yuanaren karakterea","yuan character, in hong kong and taiwan":"yuanaren karakterea, hong kong eta taiwanen","{0} characters":"{0} karaktere","{0} columns, {1} rows":"{0} zutabe, {1} errenkada","{0} words":"{0} hitz"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/fa.js b/staticfiles/tinymce/langs/fa.js new file mode 100644 index 0000000..ef84b93 --- /dev/null +++ b/staticfiles/tinymce/langs/fa.js @@ -0,0 +1 @@ +tinymce.addI18n("fa",{"#":"#","Accessibility":"\u062f\u0633\u062a\u0631\u0633\u06cc","Accordion":"\u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646","Accordion body...":"\u0628\u062f\u0646\u0647 \u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646...","Accordion summary...":"\u062e\u0644\u0627\u0635\u0647 \u0627\u06cc \u0627\u0632 \u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646...","Action":"\u0627\u0642\u062f\u0627\u0645","Activity":"\u0641\u0639\u0627\u0644\u06cc\u062a","Address":"\u0622\u062f\u0631\u0633","Advanced":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","Align":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc","Align center":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637","Align left":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e","Align right":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a","Alignment":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc","Alignment {0}":"\u062a\u0631\u0627\u0632 {0}","All":"\u0647\u0645\u0647","Alternative description":"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646","Alternative source":"\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646","Alternative source URL":"\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646","Anchor":"\u0642\u0644\u0627\u0628","Anchor...":"\u0642\u0644\u0627\u0628...","Anchors":"\u0642\u0644\u0627\u0628\u200c\u0647\u0627","Animals and Nature":"\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a","Arrows":"\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627","B":"\u0622\u0628\u06cc","Background color":"\u0631\u0646\u06af \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647","Background color {0}":"\u0631\u0646\u06af \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 {0}","Black":"\u0633\u06cc\u0627\u0647","Block":"\u0628\u0644\u0648\u06a9","Block {0}":"{0} \u0631\u0627 \u0645\u0633\u062f\u0648\u062f \u06a9\u0646","Blockquote":"\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc","Blocks":"\u0628\u0644\u0648\u06a9\u200c\u0647\u0627","Blue":"\u0622\u0628\u06cc","Blue component":"\u062c\u0632\u0621 \u0622\u0628\u06cc","Body":"\u0628\u062f\u0646\u0647","Bold":"\u067e\u0631\u0631\u0646\u06af","Border":"\u062d\u0627\u0634\u06cc\u0647","Border color":"\u0631\u0646\u06af \u062d\u0627\u0634\u06cc\u0647","Border style":"\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647","Border width":"\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647","Bottom":"\u067e\u0627\u06cc\u06cc\u0646","Browse files":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0627\u06cc\u0644","Browse for an image":"\u0627\u0646\u062a\u062e\u0627\u0628 \u062a\u0635\u0648\u06cc\u0631...","Browse links":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0644\u06cc\u0646\u06a9 \u0647\u0627","Bullet list":"\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631","Cancel":"\u0644\u063a\u0648","Caption":"\u0639\u0646\u0648\u0627\u0646","Cell":"\u0633\u0644\u0648\u0644","Cell padding":"\u062d\u0627\u0634\u06cc\u0647 \u0628\u06cc\u0646 \u0633\u0644\u0648\u0644\u200c\u0647\u0627","Cell properties":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0644\u0648\u0644","Cell spacing":"\u0641\u0627\u0635\u0644\u0647 \u0628\u06cc\u0646 \u0633\u0644\u0648\u0644\u200c\u0647\u0627","Cell styles":"\u0633\u0628\u06a9\u200c\u0647\u0627\u06cc \u062e\u0627\u0646\u0647 \u062c\u062f\u0648\u0644","Cell type":"\u0646\u0648\u0639 \u0633\u0644\u0648\u0644","Center":"\u0645\u0631\u06a9\u0632","Characters":"\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627","Characters (no spaces)":"\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)","Circle":"\u062f\u0627\u06cc\u0631\u0647","Class":"\u062f\u0633\u062a\u0647","Clear formatting":"\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc","Close":"\u0628\u0633\u062a\u0646","Code":"\u06a9\u062f","Code sample...":"\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...","Code view":"\u0646\u0645\u0627\u06cc \u06a9\u062f","Color Picker":"\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af","Color swatch":"\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af","Cols":"\u0633\u062a\u0648\u0646\u200c\u0647\u0627","Column":"\u0633\u062a\u0648\u0646","Column clipboard actions":"\u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u0627\u0641\u0638\u0647 \u0645\u0648\u0642\u062a \u0633\u062a\u0648\u0646\u200c\u0647\u0627","Column group":"\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646\u06cc","Column header":"\u0633\u062a\u0648\u0646 \u062a\u06cc\u062a\u0631","Constrain proportions":"\u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0645\u0634\u062e\u0635\u0627\u062a","Copy":"\u06a9\u067e\u06cc","Copy column":"\u06a9\u067e\u06cc \u0633\u062a\u0648\u0646","Copy row":"\u06a9\u067e\u06cc \u0633\u0637\u0631","Could not find the specified string.":"\u0631\u0634\u062a\u0647 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.","Could not load emojis":"\u0627\u0645\u06a9\u0627\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0627\u06cc\u0645\u0648\u062c\u06cc\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f","Count":"\u0634\u0645\u0627\u0631\u0634","Currency":"\u0627\u0631\u0632","Current window":"\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc","Custom color":"\u0631\u0646\u06af \u0633\u0641\u0627\u0631\u0634\u06cc","Custom...":"\u0633\u0641\u0627\u0631\u0634\u06cc...","Cut":"\u0628\u0631\u0634","Cut column":"\u0628\u0631\u0634 \u0633\u062a\u0648\u0646","Cut row":"\u0628\u0631\u0634 \u0633\u0637\u0631","Dark Blue":"\u0622\u0628\u06cc \u062a\u06cc\u0631\u0647","Dark Gray":"\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647","Dark Green":"\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647","Dark Orange":"\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647","Dark Purple":"\u0628\u0646\u0641\u0634 \u062a\u06cc\u0631\u0647","Dark Red":"\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647","Dark Turquoise":"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647","Dark Yellow":"\u0632\u0631\u062f \u062a\u06cc\u0631\u0647","Dashed":"\u0641\u0627\u0635\u0644\u0647 \u0641\u0627\u0635\u0644\u0647","Date/time":"\u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646","Decrease indent":"\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc","Default":"\u067e\u06cc\u0634\u200c\u0641\u0631\u0636","Delete accordion":"\u062d\u0630\u0641 \u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646","Delete column":"\u062d\u0630\u0641 \u0633\u062a\u0648\u0646","Delete row":"\u062d\u0630\u0641 \u0633\u0637\u0631","Delete table":"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","Dimensions":"\u0627\u0628\u0639\u0627\u062f","Disc":"\u062f\u06cc\u0633\u06a9","Div":"\u0628\u062e\u0634","Document":"\u0633\u0646\u062f","Dotted":"\u0646\u0642\u0637\u0647 \u0646\u0642\u0637\u0647","Double":"\u062f\u0648 \u062e\u0637\u06cc","Drop an image here":"\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f","Dropped file type is not supported":"\u0641\u0631\u0645\u062a \u0641\u0627\u06cc\u0644 \u062d\u0630\u0641 \u0634\u062f\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u0634\u0648\u062f","Edit":"\u0648\u06cc\u0631\u0627\u06cc\u0634","Embed":"\u062c\u0627\u0633\u0627\u0632\u06cc","Emojis":"\u0627\u0633\u062a\u06cc\u06a9\u0631\u0647\u0627","Emojis...":"\u0627\u0633\u062a\u06cc\u06a9\u0631\u0647\u0627...","Error":"\u062e\u0637\u0627","Error: Form submit field collision.":"\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.","Error: No form element found.":"\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.","Extended Latin":"\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647","Failed to initialize plugin: {0}":"\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}","Failed to load plugin url: {0}":"\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}","Failed to load plugin: {0} from url {1}":"\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}","Failed to upload image: {0}":"\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}","File":"\u067e\u0631\u0648\u0646\u062f\u0647","Find":"\u06cc\u0627\u0641\u062a\u0646","Find (if searchreplace plugin activated)":"\u06cc\u0627\u0641\u062a\u0646 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u062c\u0633\u062a\u062c\u0648/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc)","Find and Replace":"\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646","Find and replace...":"\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...","Find in selection":"\u062f\u0631 \u06af\u0644\u0686\u06cc\u0646 \u0628\u06cc\u0627\u0628\u06cc\u062f","Find whole words only":"\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647","Flags":"\u067e\u0631\u0686\u0645\u200c\u0647\u0627","Focus to contextual toolbar":"\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627\u0641\u062a\u0627\u0631\u06cc","Focus to element path":"\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0644\u0645\u0627\u0646","Focus to menubar":"\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648","Focus to toolbar":"\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631","Font":"\u0641\u0648\u0646\u062a","Font size {0}":"\u0627\u0646\u062f\u0627\u0632\u0647 \u0641\u0648\u0646\u062a {0}","Font sizes":"\u0633\u0627\u06cc\u0632 \u0641\u0648\u0646\u062a","Font {0}":"\u0641\u0648\u0646\u062a {0}","Fonts":"\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627","Food and Drink":"\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc","Footer":"\u067e\u0627\u0648\u0631\u0642\u06cc","Format":"\u0642\u0627\u0644\u0628","Format {0}":"\u0642\u0627\u0644\u0628 {0}","Formats":"\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627","Fullscreen":"\u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647","G":"\u0633\u0628\u0632","General":"\u0639\u0645\u0648\u0645\u06cc","Gray":"\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc","Green":"\u0633\u0628\u0632","Green component":"\u062c\u0632\u0621 \u0633\u0628\u0632","Groove":"\u0634\u06cc\u0627\u0631\u062f\u0627\u0631","Handy Shortcuts":"\u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc \u0645\u0641\u06cc\u062f","Header":"\u0633\u0631\u0628\u0631\u06af","Header cell":"\u0633\u0644\u0648\u0644 \u0633\u0631\u0633\u062a\u0648\u0646","Heading 1":"\u0633\u0631\u0641\u0635\u0644 1","Heading 2":"\u0633\u0631\u0641\u0635\u0644 2","Heading 3":"\u0633\u0631\u0641\u0635\u0644 3","Heading 4":"\u0633\u0631\u0641\u0635\u0644 4","Heading 5":"\u0633\u0631\u0641\u0635\u0644 5","Heading 6":"\u0633\u0631\u0641\u0635\u0644 6","Headings":"\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627","Height":"\u0627\u0631\u062a\u0641\u0627\u0639","Help":"\u0631\u0627\u0647\u0646\u0645\u0627","Hex color code":"\u06a9\u062f \u0631\u0646\u06af 16 \u0628\u06cc\u062a\u06cc","Hidden":"\u0645\u062e\u0641\u06cc","Horizontal align":"\u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc","Horizontal line":"\u062e\u0637 \u0627\u0641\u0642\u06cc","Horizontal space":"\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc","ID":"\u0634\u0646\u0627\u0633\u0647","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u0634\u0646\u0627\u0633\u0647 \u0628\u0627\u06cc\u062f \u062a\u0648\u0633\u0637 \u06cc\u06a9 \u062d\u0631\u0641 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0634\u0631\u0648\u0639 \u0634\u062f\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0622\u0646 \u0641\u0642\u0637 \u062d\u0631\u0648\u0641\u060c \u0627\u0639\u062f\u0627\u062f\u060c \u062e\u0637 \u0641\u0627\u0635\u0644\u0647 (-)\u060c \u0646\u0642\u0637\u0647 (.)\u060c \u062f\u0648 \u0646\u0642\u0637\u0647 (:) \u06cc\u0627 \u0632\u06cc\u0631\u062e\u0637 (_) \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f.","Image is decorative":"\u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u062f\u06a9\u0648\u0631\u06cc \u0627\u0633\u062a","Image list":"\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631","Image title":"\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631","Image...":"\u062a\u0635\u0648\u06cc\u0631...","ImageProxy HTTP error: Could not find Image Proxy":"\u062e\u0637\u0627\u06cc ImageProxy HTTP: \u0634\u06cc\u0621 ImageProxy \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u062e\u0637\u0627\u06cc ImageProxy HTTP: \u0622\u062f\u0631\u0633 ImageProxy \u0627\u0634\u062a\u0628\u0627\u0647 \u0627\u0633\u062a","ImageProxy HTTP error: Rejected request":"\u062e\u0637\u0627\u06cc ImageProxy HTTP: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0634\u062f","ImageProxy HTTP error: Unknown ImageProxy error":"\u062e\u0637\u0627\u06cc ImageProxy HTTP: \u062e\u0637\u0627 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0646\u0634\u062f","Increase indent":"\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc","Inline":"\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627","Insert":"\u062f\u0631\u062c","Insert Template":"\u062f\u0631\u062c \u0642\u0627\u0644\u0628","Insert accordion":"\u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 \u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646","Insert column after":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646","Insert column before":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u0628\u0627\u0644\u0627","Insert date/time":"\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646","Insert image":"\u062f\u0631\u062c \u062a\u0635\u0648\u06cc\u0631","Insert link (if link plugin activated)":"\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u067e\u06cc\u0648\u0646\u062f)","Insert row after":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646","Insert row before":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627","Insert table":"\u062f\u0631\u062c \u062c\u062f\u0648\u0644","Insert template...":"\u062f\u0631\u062c \u0627\u0644\u06af\u0648...","Insert video":"\u062f\u0631\u062c \u0648\u06cc\u062f\u06cc\u0648","Insert/Edit code sample":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0646\u0645\u0648\u0646\u0647 \u06a9\u062f","Insert/edit image":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","Insert/edit link":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f","Insert/edit media":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647","Insert/edit video":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u062f\u06cc\u0648","Inset":"\u062a\u0648 \u0631\u0641\u062a\u0647","Invalid hex color code: {0}":"\u06a9\u062f \u0631\u0646\u06af 16 \u0628\u06cc\u062a\u06cc \u0645\u0639\u062a\u0628\u0631: {0}","Invalid input":"\u0648\u0631\u0648\u062f\u06cc \u0646\u0627\u0645\u0639\u062a\u0628\u0631","Italic":"\u06a9\u062c","Justify":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647","Keyboard Navigation":"\u0645\u0631\u0648\u0631 \u0628\u0627 \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f","Language":"\u0632\u0628\u0627\u0646","Learn more...":"\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...","Left":"\u0686\u067e","Left to right":"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a","Light Blue":"\u0622\u0628\u06cc \u0631\u0648\u0634\u0646","Light Gray":"\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646","Light Green":"\u0633\u0628\u0632 \u0631\u0648\u0634\u0646","Light Purple":"\u0628\u0646\u0641\u0634 \u0631\u0648\u0634\u0646","Light Red":"\u0642\u0631\u0645\u0632 \u0631\u0648\u0634\u0646","Light Yellow":"\u0632\u0631\u062f \u0631\u0648\u0634\u0646","Line height":"\u0628\u0644\u0646\u062f\u06cc \u062e\u0637 ","Link list":"\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f\u0647\u0627","Link...":"\u067e\u06cc\u0648\u0646\u062f...","List Properties":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0641\u0647\u0631\u0633\u062a","List properties...":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0641\u0647\u0631\u0633\u062a","Loading emojis...":"\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0627\u0633\u062a\u06cc\u06a9\u0631\u0647\u0627...","Loading...":"\u0628\u0627\u0631\u06af\u06cc\u0631\u06cc...","Lower Alpha":"\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9","Lower Greek":"\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u06cc\u0648\u0646\u0627\u0646\u06cc","Lower Roman":"\u0627\u0639\u062f\u0627\u062f \u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9","Match case":"\u0646\u0645\u0648\u0646\u0647 \u0645\u0646\u0637\u0628\u0642","Mathematical":"\u0631\u06cc\u0627\u0636\u06cc","Media poster (Image URL)":"\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)","Media...":"\u0631\u0633\u0627\u0646\u0647...","Medium Blue":"\u0622\u0628\u06cc \u0633\u06cc\u0631","Medium Gray":"\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646","Medium Purple":"\u0622\u0628\u06cc \u0628\u0646\u0641\u0634","Merge cells":"\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627","Middle":"\u0648\u0633\u0637","Midnight Blue":"\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc","More...":"\u0628\u06cc\u0634\u062a\u0631...","Name":"\u0646\u0627\u0645","Navy Blue":"\u0633\u0631\u0645\u0647\u200c\u0627\u06cc","New document":"\u0633\u0646\u062f \u062c\u062f\u06cc\u062f","New window":"\u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f","Next":"\u0628\u0639\u062f\u06cc","No":"\u062e\u06cc\u0631","No alignment":"\u0628\u062f\u0648\u0646 \u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc","No color":"\u0628\u062f\u0648\u0646 \u0631\u0646\u06af","Nonbreaking space":"\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0628\u0631\u0634 \u0646\u0627\u067e\u0630\u06cc\u0631","None":"\u0647\u06cc\u0686\u200c\u06a9\u062f\u0627\u0645","Numbered list":"\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631","OR":"OR","Objects":"\u0627\u0634\u06cc\u0627","Ok":"\u062a\u0623\u06cc\u06cc\u062f","Open help dialog":"\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627","Open link":"\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9","Open link in...":"\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...","Open popup menu for split buttons":"\u0645\u0646\u0648\u06cc \u0628\u0627\u0632\u0634\u0648 \u0628\u0631\u0627\u06cc \u062f\u06a9\u0645\u0647 \u0647\u0627\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f","Orange":"\u0646\u0627\u0631\u0646\u062c\u06cc","Outset":"\u0628\u0631\u062c\u0633\u062a\u0647","Page break":"\u0628\u0631\u0634 \u0635\u0641\u062d\u0647","Paragraph":"\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641","Paste":"\u062c\u0627\u06cc \u06af\u0630\u0627\u0631\u06cc","Paste as text":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0645\u062a\u0646","Paste column after":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u062a\u0648\u0646 \u0628\u0639\u062f \u0627\u0632 \u0633\u062a\u0648\u0646 \u062c\u0627\u0631\u06cc","Paste column before":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u062a\u0648\u0646 \u0642\u0628\u0644 \u0627\u0632 \u0633\u062a\u0648\u0646 \u062c\u0627\u0631\u06cc","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0642\u0627\u0628\u0644\u06cc\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646 \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0645\u062a\u0648\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u0633\u0627\u062f\u0647 \u0686\u0633\u0628\u0627\u0646\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.","Paste or type a link":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06cc\u0627 \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f","Paste row after":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646","Paste row before":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627","Paste your embed code below:":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0632\u06cc\u0631:","People":"\u0627\u0641\u0631\u0627\u062f","Plugins":"\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627","Plugins installed ({0}):":"\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u0646\u0635\u0628\u200c\u0634\u062f\u0647 ({0}):","Powered by {0}":"\u0642\u0648\u062a\u200c\u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}","Pre":"\u067e\u06cc\u0634","Preferences":"\u062a\u0631\u062c\u06cc\u062d\u0627\u062a","Preformatted":"\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647","Premium plugins:":"\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u067e\u0648\u0644\u06cc:","Press the Up and Down arrow keys to resize the editor.":"\u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062c\u0647\u062a \u062f\u0627\u0631 \u0628\u0627\u0644\u0627 \u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.","Press the arrow keys to resize the editor.":"\u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062c\u0647\u062a \u062f\u0627\u0631 \u0631\u0627 \u0641\u0634\u0627\u0631 \u0628\u062f\u0647.","Press {0} for help":"{0} \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0641\u0634\u0627\u0631 \u0628\u062f\u0647","Preview":"\u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634","Previous":"\u0642\u0628\u0644\u06cc","Print":"\u0686\u0627\u067e","Print...":"\u0686\u0627\u067e...","Purple":"\u0628\u0646\u0641\u0634","Quotations":"\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627","R":"\u0642\u0631\u0645\u0632","Range 0 to 255":"\u0628\u0627\u0632\u0647\u200c\u06cc \u0635\u0641\u0631 \u062a\u0627 255","Red":"\u0642\u0631\u0645\u0632","Red component":"\u062c\u0632\u0621 \u0642\u0631\u0645\u0632","Redo":"\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645","Remove":"\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646","Remove color":"\u062d\u0630\u0641 \u0631\u0646\u06af","Remove link":"\u062d\u0630\u0641 \u067e\u06cc\u0648\u0646\u062f","Replace":"\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646","Replace all":"\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647","Replace with":"\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0628\u0627","Resize":"\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647","Restore last draft":"\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634\u200c\u0646\u0648\u06cc\u0633","Reveal or hide additional toolbar items":"\u0622\u0634\u06a9\u0627\u0631 \u06cc\u0627 \u067e\u0646\u0647\u0627\u0646 \u06a9\u0631\u062f\u0646 \u0645\u0648\u0627\u0631\u062f \u0627\u0636\u0627\u0641\u06cc \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631","Rich Text Area":"\u062c\u0639\u0628\u0647 \u0645\u062a\u0646 \u0628\u0632\u0631\u06af (Textarea)","Rich Text Area. Press ALT-0 for help.":"\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0645\u0646\u0648 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F10 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + 0 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.","Ridge":"\u0644\u0628\u0647\u200c\u062f\u0627\u0631","Right":"\u0631\u0627\u0633\u062a","Right to left":"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","Row":"\u0631\u062f\u06cc\u0641","Row clipboard actions":"\u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u0627\u0641\u0638\u0647 \u0645\u0648\u0642\u062a \u0631\u062f\u06cc\u0641\u200c\u0647\u0627","Row group":"\u06af\u0631\u0648\u0647 \u0633\u0637\u0631\u06cc","Row header":"\u0633\u0637\u0631 \u062a\u06cc\u062a\u0631","Row properties":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0637\u0631","Row type":"\u0646\u0648\u0639 \u0633\u0637\u0631","Rows":"\u0631\u062f\u06cc\u0641\u200c\u0647\u0627","Save":"\u0630\u062e\u064a\u0631\u0647","Save (if save plugin activated)":"\u0630\u062e\u06cc\u0631\u0647\xa0(\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u0630\u062e\u06cc\u0631\u0647)","Scope":"\u06af\u0633\u062a\u0631\u0647","Search":"\u062c\u0633\u062a\u062c\u0648","Select all":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647","Select...":"\u0627\u0646\u062a\u062e\u0627\u0628...","Selection":"\u0627\u0646\u062a\u062e\u0627\u0628","Shortcut":"\u0645\u06cc\u0627\u0646\u0628\u0631","Show blocks":"\u0646\u0645\u0627\u06cc\u0634 \u0628\u0644\u0648\u06a9\u200c\u0647\u0627","Show caption":"\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646","Show invisible characters":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627\u06cc \u0646\u0627\u067e\u06cc\u062f\u0627","Size":"\u0627\u0646\u062f\u0627\u0632\u0647","Solid":"\u062e\u0637 \u0645\u0645\u062a\u062f","Source":"\u0645\u0646\u0628\u0639","Source code":"\u06a9\u062f \u0645\u0646\u0628\u0639","Special Character":"\u0646\u0648\u06cc\u0633\u06c0 \u0648\u06cc\u0698\u0647","Special character...":"\u0646\u0648\u06cc\u0633\u06c0 \u0648\u06cc\u0698\u0647...","Split cell":"\u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0633\u0644\u0648\u0644\u200c\u0647\u0627","Square":"\u0645\u0631\u0628\u0639","Start list at number":"\u0644\u06cc\u0633\u062a \u0631\u0627 \u062f\u0631 \u0634\u0645\u0627\u0631\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f","Strikethrough":"\u062e\u0637 \u0632\u062f\u0646","Style":"\u0633\u0628\u06a9","Subscript":"\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a","Superscript":"\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a","Switch to or from fullscreen mode":"\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647","Symbols":"\u0646\u0645\u0627\u062f\u0647\u0627","System Font":"\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc","Table":"\u062c\u062f\u0648\u0644","Table caption":"\u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u0648\u0644","Table properties":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u0648\u0644","Table styles":"\u0633\u0628\u06a9\u200c\u0647\u0627\u06cc \u062c\u062f\u0648\u0644","Template":"\u0627\u0644\u06af\u0648","Templates":"\u0627\u0644\u06af\u0648\u0647\u0627","Text":"\u0645\u062a\u0646","Text color":"\u0631\u0646\u06af \u0645\u062a\u0646","Text color {0}":"\u0631\u0646\u06a9 \u0645\u062a\u0646 {0}","Text to display":"\u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u062f \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0646\u0634\u0627\u0646\u06cc \u0627\u06cc\u0645\u06cc\u0644 \u0627\u0633\u062a. \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645 :mailto \u0647\u0633\u062a\u06cc\u062f\u061f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u067e\u06cc\u0648\u0646\u062f\u06cc \u062e\u0627\u0631\u062c\u06cc \u0627\u0633\u062a. \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f //:http \u0647\u0633\u062a\u06cc\u062f\u061f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0622\u062f\u0631\u0633 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06af\u0648\u06cc\u0627 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u062e\u0627\u0631\u062c\u06cc \u0627\u0633\u062a. \u0622\u06cc\u0627 \u0645\u06cc\u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0647 \u067e\u06cc\u0634\u0648\u0646\u062f \u0636\u0631\u0648\u0631\u06cc https:// \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645\u061f","Title":"\u0639\u0646\u0648\u0627\u0646","To open the popup, press Shift+Enter":"\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.","Toggle accordion":"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0622\u06a9\u0627\u0631\u062f\u0626\u0648\u0646","Tools":"\u0627\u0628\u0632\u0627\u0631\u0647\u0627","Top":"\u0628\u0627\u0644\u0627","Travel and Places":"\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646","Turquoise":"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc","Underline":"\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631","Undo":"\u0628\u0631\u06af\u0631\u062f","Upload":"\u0622\u067e\u0644\u0648\u062f","Uploading image":"\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0632\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631","Upper Alpha":"\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af","Upper Roman":"\u0627\u0639\u062f\u0627\u062f \u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af","Url":"\u0646\u0634\u0627\u0646\u06cc \u0648\u0628","User Defined":"\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631","Valid":"\u0645\u0639\u062a\u0628\u0631","Version":"\u0646\u0633\u062e\u0647","Vertical align":"\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc","Vertical space":"\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc","View":"\u0646\u0645\u0627\u06cc\u0634","Visual aids":"\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc","Warn":"\u0647\u0634\u062f\u0627\u0631","White":"\u0633\u0641\u06cc\u062f","Width":"\u0639\u0631\u0636","Word count":"\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627","Words":"\u06a9\u0644\u0645\u0627\u062a","Words: {0}":"\u0648\u0627\u0698\u0647\u200c\u0647\u0627: {0}","Yellow":"\u0632\u0631\u062f","Yes":"\u0628\u0644\u0647","You are using {0}":"\u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0647\u0633\u062a\u06cc\u062f","You have unsaved changes are you sure you want to navigate away?":"\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u200c\u062a\u0627\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647\u200c\u0627\u0646\u062f\u060c \u0622\u06cc\u0627 \u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f\u061f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X/C/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.","_dir":"rtl","alignment":"\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc","austral sign":"\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644","cedi sign":"\u0646\u0645\u0627\u062f \u0633\u062f\u06cc","colon sign":"\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647","cruzeiro sign":"\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648","currency sign":"\u0646\u0645\u0627\u062f \u0627\u0631\u0632","dollar sign":"\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631","dong sign":"\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af","drachma sign":"\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627","euro-currency sign":"\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648","example":"\u0645\u062b\u0627\u0644","formatting":"\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc","french franc sign":"\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647","german penny symbol":"\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc","guarani sign":"\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc","history":"\u062a\u0627\u0631\u06cc\u062e\u0686\u0647","hryvnia sign":"\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627","indentation":"\u062a\u0648\u0631\u0641\u062a\u06af\u06cc","indian rupee sign":"\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc","kip sign":"\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e","lira sign":"\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647","livre tournois sign":"\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627","manat sign":"\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a","mill sign":"\u0646\u0645\u0627\u062f \u0645\u06cc\u0644","naira sign":"\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627","new sheqel sign":"\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f","nordic mark sign":"\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698","peseta sign":"\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627","peso sign":"\u0646\u0645\u0627\u062f \u067e\u0632\u0648","ruble sign":"\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644","rupee sign":"\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647","spesmilo sign":"\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648","styles":"\u0633\u0628\u06a9\u200c\u0647\u0627","tenge sign":"\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647","tugrik sign":"\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af","turkish lira sign":"\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc","won sign":"\u0646\u0645\u0627\u062f \u0648\u0648\u0646","yen character":"\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646","yen/yuan character variant one":"\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646/\u06cc\u0648\u0627\u0646","yuan character":"\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646","yuan character, in hong kong and taiwan":"\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646","{0} characters":"{0} \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631","{0} columns, {1} rows":"{0} \u0633\u062a\u0648\u0646\u060c {1} \u0633\u0637\u0631","{0} words":"{0} \u0648\u0627\u0698\u0647"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/fi.js b/staticfiles/tinymce/langs/fi.js new file mode 100644 index 0000000..54ee54b --- /dev/null +++ b/staticfiles/tinymce/langs/fi.js @@ -0,0 +1 @@ +tinymce.addI18n("fi",{"#":"#","Accessibility":"Saavutettavuus","Accordion":"Haitarivalikko","Accordion body...":"Haitarivalikon sis\xe4lt\xf6...","Accordion summary...":"Haitarivalikon yhteenveto...","Action":"Toiminto","Activity":"Aktiviteetit","Address":"Osoite","Advanced":"Lis\xe4asetukset","Align":"Tasaa","Align center":"Tasaa keskelle","Align left":"Tasaa vasemmalle","Align right":"Tasaa oikealle","Alignment":"Tasaus","Alignment {0}":"Tasaus {0}","All":"Kaikki","Alternative description":"Vaihtoehtoinen kuvaus","Alternative source":"Vaihtoehtoinen l\xe4hde","Alternative source URL":"Vaihtoehtoinen l\xe4hde-URL","Anchor":"Ankkuri","Anchor...":"Ankkuri...","Anchors":"Ankkurit","Animals and Nature":"El\xe4imet ja luonto","Arrows":"Nuolet","B":"S","Background color":"Taustan v\xe4ri","Background color {0}":"Taustav\xe4ri {0}","Black":"Musta","Block":"Lohko","Block {0}":"Osio {0}","Blockquote":"Lohkolainaus","Blocks":"Lohkot","Blue":"Sininen","Blue component":"Sininen komponentti","Body":"Runko","Bold":"Lihavoitu","Border":"Reunus","Border color":"Reunuksen v\xe4ri","Border style":"Reunuksen tyyli","Border width":"Reunuksen leveys","Bottom":"Ala","Browse files":"Selaa tiedostoja","Browse for an image":"Selaa kuvia","Browse links":"Selaa linkkej\xe4","Bullet list":"J\xe4rjest\xe4m\xe4t\xf6n lista","Cancel":"Peruuta","Caption":"Seloste","Cell":"Solu","Cell padding":"Solun tyhj\xe4 tila","Cell properties":"Solun ominaisuudet","Cell spacing":"Solun v\xe4li","Cell styles":"Solun tyylit","Cell type":"Solutyyppi","Center":"Keskitetty","Characters":"Merkki\xe4","Characters (no spaces)":"Merkki\xe4 (ilman v\xe4lily\xf6ntej\xe4)","Circle":"Ympyr\xe4","Class":"Luokka","Clear formatting":"Poista muotoilu","Close":"Sulje","Code":"Koodi","Code sample...":"Koodin\xe4yte...","Code view":"Koodin\xe4kym\xe4","Color Picker":"V\xe4rivalitsin","Color swatch":"V\xe4rin\xe4yte","Cols":"Sarakkeet","Column":"Sarake","Column clipboard actions":"Sarakkeen leikep\xf6yt\xe4toiminnot","Column group":"Sarakeryhm\xe4","Column header":"Sarakkeen otsikko","Constrain proportions":"Rajauksen mittasuhteet","Copy":"Kopioi","Copy column":"Kopioi sarake","Copy row":"Kopioi rivi","Could not find the specified string.":"Haettua merkkijonoa ei l\xf6ytynyt.","Could not load emojis":"Emojeita ei voitu ladata","Count":"M\xe4\xe4r\xe4","Currency":"Valuutta","Current window":"Nykyinen ikkuna","Custom color":"Mukautettu v\xe4ri","Custom...":"Mukautettu...","Cut":"Leikkaa","Cut column":"Leikkaa sarake","Cut row":"Leikkaa rivi","Dark Blue":"Tummansininen","Dark Gray":"Tummanharmaa","Dark Green":"Tumma vihre\xe4","Dark Orange":"Tumma oranssi","Dark Purple":"Tummanvioletti","Dark Red":"Tumma punainen","Dark Turquoise":"Tumma turkoosi","Dark Yellow":"Tummankeltainen","Dashed":"Katkoviiva","Date/time":"P\xe4iv\xe4m\xe4\xe4r\xe4/aika","Decrease indent":"Sisenn\xe4","Default":"Oletus","Delete accordion":"Poista haitarivalikko","Delete column":"Poista sarake","Delete row":"Poista rivi","Delete table":"Poista taulukko","Dimensions":"Mitat","Disc":"Py\xf6ryl\xe4","Div":"Div","Document":"Tiedosto","Dotted":"Pisteet","Double":"Kaksinkertainen","Drop an image here":"Pudota kuva t\xe4h\xe4n","Dropped file type is not supported":"Pudotettu tiedostotyyppi ei ole tuettu","Edit":"Muokkaa","Embed":"Upota","Emojis":"Emojit","Emojis...":"Emojit...","Error":"Virhe","Error: Form submit field collision.":"Virhe: lomakkeen l\xe4hetyskent\xe4n t\xf6rm\xe4ys.","Error: No form element found.":"Virhe: muotoelementti\xe4 ei l\xf6ytynyt.","Extended Latin":"Laajennettu latina","Failed to initialize plugin: {0}":"Liit\xe4nn\xe4isen alustus ep\xe4onnistui: {0}","Failed to load plugin url: {0}":"Liit\xe4nn\xe4isen url:n lataus ep\xe4onnistui: {0}","Failed to load plugin: {0} from url {1}":"Liit\xe4nn\xe4isen lataus ep\xe4onnistui: {0} url:st\xe4 {1}","Failed to upload image: {0}":"Kuvan lataus ep\xe4onnistui: {0}","File":"Tiedosto","Find":"Etsi","Find (if searchreplace plugin activated)":"Etsi (jos etsikorvaa-liit\xe4nn\xe4inen aktiivinen)","Find and Replace":"Etsi ja korvaa","Find and replace...":"Etsi ja korvaa...","Find in selection":"Etsi valinnasta","Find whole words only":"Etsi vain kokonaisia sanoja","Flags":"Liput","Focus to contextual toolbar":"Kohdistus kontekstuaaliseen ty\xf6kalupalkkiin","Focus to element path":"Kohdistus elementin polkuun","Focus to menubar":"Kohdistus valikkoon","Focus to toolbar":"Kohdistus ty\xf6kalupalkkiin","Font":"Fontti","Font size {0}":"Fontin koko {0}","Font sizes":"Fonttikoot","Font {0}":"Fontti {0}","Fonts":"Fontti","Food and Drink":"Ruoka ja juoma","Footer":"Alatunniste","Format":"Muotoilu","Format {0}":"Tekstin muotoilu {0}","Formats":"Muotoilut","Fullscreen":"Kokon\xe4ytt\xf6","G":"V","General":"Yleiset asetukset","Gray":"Harmaa","Green":"Vihre\xe4","Green component":"Vihre\xe4 komponentti","Groove":"Ura","Handy Shortcuts":"K\xe4tev\xe4t pikan\xe4pp\xe4imet","Header":"Yl\xe4tunniste","Header cell":"Otsikkosolu","Heading 1":"Otsikko 1","Heading 2":"Otsikko 2","Heading 3":"Otsikko 3","Heading 4":"Otsikko 4","Heading 5":"Otsikko 5","Heading 6":"Otsikko 6","Headings":"Otsikot","Height":"Korkeus","Help":"Ohje","Hex color code":"Heksav\xe4rikoodi","Hidden":"Piilotettu","Horizontal align":"Vaakasuuntainen tasaus","Horizontal line":"Vaakasuora viiva","Horizontal space":"Vaakasuuntainen v\xe4li","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID:n tulisi alkaa kirjaimella, jota seuraa vain kirjaimia, numeroita, v\xe4liviivoja, pisteit\xe4, kaksoispisteit\xe4 tai alaviivoja.","Image is decorative":"Kuva on koristeellinen","Image list":"Kuvaluettelo","Image title":"Kuvan otsikko","Image...":"Kuva...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP-virhe: Kuvaproxy\xe4 ei l\xf6ytynyt","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP-virhe: V\xe4\xe4r\xe4 kuvaproxyn osoite","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP-virhe: Pyynt\xf6 hyl\xe4ttiin","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP-virhe: Tuntematon ImageProxy-virhe","Increase indent":"Loitonna","Inline":"Samalla rivill\xe4","Insert":"Lis\xe4\xe4","Insert Template":"Lis\xe4\xe4 malli","Insert accordion":"Lis\xe4\xe4 haitarivalikko","Insert column after":"Lis\xe4\xe4 sarake j\xe4lkeen","Insert column before":"Lis\xe4\xe4 sarake ennen","Insert date/time":"Lis\xe4\xe4 p\xe4iv\xe4m\xe4\xe4r\xe4 tai aika","Insert image":"Lis\xe4\xe4 kuva","Insert link (if link plugin activated)":"Lis\xe4\xe4 linkki (jos linkki-liit\xe4nn\xe4inen aktiivinen)","Insert row after":"Lis\xe4\xe4 rivi j\xe4lkeen","Insert row before":"Lis\xe4\xe4 rivi ennen","Insert table":"Lis\xe4\xe4 taulukko","Insert template...":"Lis\xe4\xe4 malli...","Insert video":"Lis\xe4\xe4 video","Insert/Edit code sample":"Lis\xe4\xe4/muokkaa koodiesimerkki","Insert/edit image":"Lis\xe4\xe4 kuva/muokkaa kuvaa","Insert/edit link":"Lis\xe4\xe4 linkki/muokkaa linkki\xe4","Insert/edit media":"Lis\xe4\xe4 media/muokkaa mediaa","Insert/edit video":"Lis\xe4\xe4 video/muokkaa videota","Inset":"Upotettu","Invalid hex color code: {0}":"Kelvoton heksav\xe4rikoodi: {0}","Invalid input":"Kelvoton sy\xf6te","Italic":"Kursivoitu","Justify":"Tasaus","Keyboard Navigation":"Navigointi n\xe4pp\xe4imist\xf6ll\xe4","Language":"Kieli","Learn more...":"Lis\xe4tietoja...","Left":"Vasen","Left to right":"Vasemmalta oikealle","Light Blue":"Vaaleansininen","Light Gray":"Vaaleanharmaa","Light Green":"Vaaleanvihre\xe4","Light Purple":"Liila","Light Red":"Vaaleanpunainen","Light Yellow":"Vaaleankeltainen","Line height":"Tekstirivin korkeus","Link list":"Linkkiluettelo","Link...":"Linkki...","List Properties":"Listan ominaisuudet","List properties...":"Listan ominaisuudet...","Loading emojis...":"Ladataan emojeita...","Loading...":"Ladataan...","Lower Alpha":"Pienet kirjaimet","Lower Greek":"pienet kirjaimet: \u03b1, \u03b2, \u03b3","Lower Roman":"Numerot, alarivi","Match case":"Sama kirjainkoko","Mathematical":"Matemaattiset","Media poster (Image URL)":"Median julkaisija (kuvan URL)","Media...":"Media...","Medium Blue":"Keskitumma sininen","Medium Gray":"Keskiharmaa","Medium Purple":"Keskitumma purppura","Merge cells":"Yhdist\xe4 solut","Middle":"Keski","Midnight Blue":"keskiy\xf6n sininen","More...":"Lis\xe4\xe4...","Name":"Nimi","Navy Blue":"Laivastonsininen","New document":"Uusi asiakirja","New window":"Uusi ikkuna","Next":"Seuraava","No":"Ei","No alignment":"Ei tasausta","No color":"Ei v\xe4ri\xe4","Nonbreaking space":"Sitova v\xe4lily\xf6nti","None":"Ei mit\xe4\xe4n","Numbered list":"J\xe4rjestetty lista","OR":"TAI","Objects":"Esineet","Ok":"Ok","Open help dialog":"Avaa ohjeen valintaikkuna","Open link":"Avaa linkki","Open link in...":"Avaa linkki...","Open popup menu for split buttons":"Avaa ponnahdusikkuna jaetuille napeille","Orange":"Oranssi","Outset":"Korotettu","Page break":"Sivunvaihto","Paragraph":"Kappale","Paste":"Liit\xe4","Paste as text":"Liit\xe4 tekstin\xe4","Paste column after":"Liit\xe4 sarake j\xe4lkeen","Paste column before":"Liit\xe4 sarake ennen","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Liitt\xe4minen on nyt pelk\xe4ss\xe4 tekstin tilassa. Sis\xe4lt\xf6 liitet\xe4\xe4n nyt pelkk\xe4n\xe4 tekstin\xe4, kunnes otat asetuksen pois p\xe4\xe4lt\xe4.","Paste or type a link":"Liit\xe4 tai kirjoita linkki","Paste row after":"Liit\xe4 rivi j\xe4lkeen","Paste row before":"Liit\xe4 rivi ennen","Paste your embed code below:":"Liit\xe4 upotuskoodisi alapuolelle:","People":"Ihmiset","Plugins":"Laajennukset","Plugins installed ({0}):":"Asennetut liit\xe4nn\xe4iset ({0}):","Powered by {0}":"Tarjoaja: {0}","Pre":"Pre","Preferences":"Asetukset","Preformatted":"Esimuotoiltu","Premium plugins:":"Premium-liit\xe4nn\xe4iset:","Press the Up and Down arrow keys to resize the editor.":"Muuta editorin kokoa yl\xf6s- ja alas-nuolin\xe4pp\xe4imill\xe4.","Press the arrow keys to resize the editor.":"Muuta editorin kokoa nuolin\xe4pp\xe4imill\xe4.","Press {0} for help":"Avaa ohje painamalla {0}","Preview":"Esikatselu","Previous":"Edellinen","Print":"Tulosta","Print...":"Tulosta","Purple":"Purppura","Quotations":"Lainaukset","R":"P","Range 0 to 255":"V\xe4lill\xe4 0\u2013255","Red":"Punainen","Red component":"Punainen komponentti","Redo":"Tee uudelleen","Remove":"Poista","Remove color":"Poista v\xe4ri","Remove link":"Poista linkki","Replace":"Korvaa","Replace all":"Korvaa kaikki","Replace with":"Korvaa kohteella","Resize":"Kuvan koon muutos","Restore last draft":"Palauta aiempi luonnos","Reveal or hide additional toolbar items":"N\xe4yt\xe4 tai piilota muut ty\xf6kalupalkin kohteet","Rich Text Area":"Rikastetun tekstin alue","Rich Text Area. Press ALT-0 for help.":"Rikastetun tekstin alue. Avaa ohje painamalla ALT-0.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rikastetun tekstin alue. Paina ALT-F9 valikkoon. Paina ALT-F10 ty\xf6kaluriviin. Paina ALT-0 ohjeeseen.","Ridge":"Harjanne","Right":"Oikea","Right to left":"Oikealta vasemmalle","Row":"Rivi","Row clipboard actions":"Rivin leikep\xf6yt\xe4toiminnot","Row group":"Riviryhm\xe4","Row header":"Rivin otsikko","Row properties":"Rivin ominaisuudet","Row type":"Rivityyppi","Rows":"Rivit","Save":"Tallenna","Save (if save plugin activated)":"Tallenna (jos tallenna-liit\xe4nn\xe4inen aktiivinen)","Scope":"Laajuus","Search":"Etsi","Select all":"Valitse kaikki","Select...":"Valitse...","Selection":"Valinta","Shortcut":"Pikavalinta","Show blocks":"N\xe4yt\xe4 lohkot","Show caption":"N\xe4yt\xe4 kuvateksti","Show invisible characters":"N\xe4yt\xe4 n\xe4kym\xe4tt\xf6m\xe4t merkit","Size":"Koko","Solid":"Yksinkertainen","Source":"L\xe4hde","Source code":"L\xe4hdekoodi","Special Character":"Erikoismerkki","Special character...":"Erikoismerkki...","Split cell":"Jaa solu","Square":"Neli\xf6","Start list at number":"Aloita lista numerosta","Strikethrough":"Yliviivaus","Style":"Tyyli","Subscript":"Alaindeksi","Superscript":"Yl\xe4indeksi","Switch to or from fullscreen mode":"Vaihda kokon\xe4ytt\xf6\xf6n tai kokon\xe4yt\xf6st\xe4","Symbols":"Symbolit","System Font":"J\xe4rjestelm\xe4fontti","Table":"Taulukko","Table caption":"Taulukon selitysteksti","Table properties":"Taulukon ominaisuudet","Table styles":"Taulukon tyylit","Template":"Malli","Templates":"Mallit","Text":"Teksti","Text color":"Tekstin v\xe4ri","Text color {0}":"Tekstin v\xe4ri {0}","Text to display":"N\xe4ytett\xe4v\xe4 teksti","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Antamasi osoite n\xe4ytt\xe4\xe4 olevan s\xe4hk\xf6postiosoite. Haluatko lis\xe4t\xe4 osoitteeseen vaaditun mailto: -etuliitteen?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Antamasi osoite n\xe4ytt\xe4\xe4 olevan ulkoinen linkki. Haluatko lis\xe4t\xe4 osoitteeseen vaaditun http:// -etuliitteen?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Sy\xf6tt\xe4m\xe4si osoite n\xe4ytt\xe4\xe4 olevan ulkoinen linkki. Haluatko lis\xe4t\xe4 vaaditun https://-etuliitteen?","Title":"Otsikko","To open the popup, press Shift+Enter":"Avaa ponnahdusikkuna painamalla Shift+Enter","Toggle accordion":"Avaa/sulje haitarivalikko","Tools":"Ty\xf6kalut","Top":"Yl\xe4","Travel and Places":"Matkailu ja paikat","Turquoise":"Turkoosi","Underline":"Alleviivaus","Undo":"Kumoa","Upload":"Vie","Uploading image":"Ladataan kuvaa","Upper Alpha":"Isot kirjaimet","Upper Roman":"Numerot, yl\xe4rivi","Url":"Osoite","User Defined":"K\xe4ytt\xe4j\xe4m\xe4\xe4ritetty","Valid":"Voimassa","Version":"Versio","Vertical align":"Pystysuuntainen tasaus","Vertical space":"Pystysuuntainen v\xe4li","View":"N\xe4yt\xe4","Visual aids":"Visuaaliset neuvot","Warn":"Varoitus","White":"Valkoinen","Width":"Leveys","Word count":"Sanam\xe4\xe4r\xe4","Words":"Sanaa","Words: {0}":"Sanat: {0} ","Yellow":"Keltainen","Yes":"Kyll\xe4","You are using {0}":"K\xe4yt\xe4t {0}","You have unsaved changes are you sure you want to navigate away?":"Sinulla on tallentamattomia muutoksia, haluatko varmasti siirty\xe4 toiselle sivulle?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Selaimesi ei tue leikep\xf6yd\xe4n suoraa k\xe4ytt\xe4mist\xe4. Ole hyv\xe4 ja k\xe4yt\xe4 n\xe4pp\xe4imist\xf6n Ctrl+X/C/V n\xe4pp\xe4inyhdistelmi\xe4.","alignment":"tasaus","austral sign":"australin merkki","cedi sign":"cedin merkki","colon sign":"kaksoispisteen merkki","cruzeiro sign":"cruzeiro-merkki","currency sign":"valuuttamerkki","dollar sign":"dollarimerkki","dong sign":"dongin merkki","drachma sign":"drakman merkki","euro-currency sign":"eurovaluuttamerkki","example":"esimerkki","formatting":"muotoiltu","french franc sign":"ranskalaisen frangin merkki","german penny symbol":"saksalaisen pennin merkki","guarani sign":"guaranin merkki","history":"historia","hryvnia sign":"hryvnian merkki","indentation":"sisennys","indian rupee sign":"intialaisen rupian merkki","kip sign":"kipin merkki","lira sign":"liiran merkki","livre tournois sign":"livre tournoisin merkki","manat sign":"manatin merkki","mill sign":"millin merkki","naira sign":"nairan merkki","new sheqel sign":"uuden sekelin merkki","nordic mark sign":"pohjoismaisen markan merkki","peseta sign":"pesetan merkki","peso sign":"peson merkki","ruble sign":"ruplan merkki","rupee sign":"rupian merkki","spesmilo sign":"spesmilon merkki","styles":"tyylit","tenge sign":"tengen merkki","tugrik sign":"tugrikin merkki","turkish lira sign":"turkkilaisen liiran merkki","won sign":"wonin merkki","yen character":"jenin merkki","yen/yuan character variant one":"jenin/juanin merkin variantti","yuan character":"juanin merkki","yuan character, in hong kong and taiwan":"juanin merkki, Hongkongissa ja Taiwanissa","{0} characters":"{0} merkki\xe4","{0} columns, {1} rows":"{0} saraketta, {1} rivi\xe4","{0} words":"{0} sanaa"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/fr_FR.js b/staticfiles/tinymce/langs/fr_FR.js new file mode 100644 index 0000000..b3d4c96 --- /dev/null +++ b/staticfiles/tinymce/langs/fr_FR.js @@ -0,0 +1 @@ +tinymce.addI18n("fr_FR",{"#":"#","Accessibility":"Accessibilit\xe9","Accordion":"Accord\xe9on","Accordion body...":"Corps de l'accord\xe9on...","Accordion summary...":"R\xe9sum\xe9 de l'accord\xe9on...","Action":"Action","Activity":"Activit\xe9","Address":"Adresse","Advanced":"Options avanc\xe9es","Align":"Aligner","Align center":"Centrer","Align left":"Aligner \xe0 gauche","Align right":"Aligner \xe0 droite","Alignment":"Alignement","Alignment {0}":"Alignement {0}","All":"Tout","Alternative description":"Description alternative","Alternative source":"Source alternative","Alternative source URL":"URL de la source alternative","Anchor":"Ancre","Anchor...":"Ancre...","Anchors":"Ancres","Animals and Nature":"Animaux & nature","Arrows":"Fl\xe8ches","B":"B","Background color":"Couleur d'arri\xe8re-plan","Background color {0}":"Couleur d'arri\xe8re-plan {0}","Black":"Noir","Block":"Bloc","Block {0}":"Bloc {0}","Blockquote":"Bloc de citation","Blocks":"Blocs","Blue":"Bleu","Blue component":"Composant bleu","Body":"Corps","Bold":"Gras","Border":"Bordure","Border color":"Couleur de bordure","Border style":"Style de la bordure","Border width":"\xc9paisseur de la bordure","Bottom":"En bas","Browse files":"Consulter les fichiers","Browse for an image":"Rechercher une image","Browse links":"Consulter les liens","Bullet list":"Liste \xe0 puces","Cancel":"Annuler","Caption":"L\xe9gende","Cell":"Cellule","Cell padding":"Marge int\xe9rieure des cellules","Cell properties":"Propri\xe9t\xe9s de la cellule","Cell spacing":"Espacement entre les cellules","Cell styles":"Type de cellule","Cell type":"Type de cellule","Center":"Centre","Characters":"Caract\xe8res","Characters (no spaces)":"Caract\xe8res (espaces non compris)","Circle":"Cercle","Class":"Classe","Clear formatting":"Effacer la mise en forme","Close":"Fermer","Code":"Code","Code sample...":"Exemple de code...","Code view":"Affichage du code","Color Picker":"S\xe9lecteur de couleurs","Color swatch":"\xc9chantillon de couleurs","Cols":"Colonnes","Column":"Colonne","Column clipboard actions":"Actions du presse-papiers des colonnes","Column group":"Groupe de colonnes","Column header":"En-t\xeate de colonne","Constrain proportions":"Limiter les proportions","Copy":"Copier","Copy column":"Copier la colonne","Copy row":"Copier la ligne","Could not find the specified string.":"Impossible de trouver la cha\xeene sp\xe9cifi\xe9e.","Could not load emojis":"Impossible de charger les emojis","Count":"Total","Currency":"Devise","Current window":"Fen\xeatre active","Custom color":"Couleur personnalis\xe9e","Custom...":"Personnalis\xe9e...","Cut":"Couper","Cut column":"Couper la colonne","Cut row":"Couper la ligne","Dark Blue":"Bleu fonc\xe9","Dark Gray":"Gris fonc\xe9","Dark Green":"Vert fonc\xe9","Dark Orange":"Orange fonc\xe9","Dark Purple":"Violet fonc\xe9","Dark Red":"Rouge fonc\xe9","Dark Turquoise":"Turquoise fonc\xe9","Dark Yellow":"Jaune fonc\xe9","Dashed":"Tirets","Date/time":"Date/heure","Decrease indent":"R\xe9duire le retrait","Default":"Par d\xe9faut","Delete accordion":"Supprimer l'accord\xe9on","Delete column":"Supprimer la colonne","Delete row":"Supprimer la ligne","Delete table":"Supprimer le tableau","Dimensions":"Dimensions","Disc":"Disque","Div":"Div","Document":"Document","Dotted":"Pointill\xe9","Double":"Deux traits continus","Drop an image here":"D\xe9poser une image ici","Dropped file type is not supported":"Le type de fichier d\xe9pos\xe9 n'est pas pris en charge","Edit":"Modifier","Embed":"Incorporer","Emojis":"\xc9mojis","Emojis...":"\xc9mojis...","Error":"Erreur","Error: Form submit field collision.":"Erreur\xa0: conflit de champs lors de la soumission du formulaire.","Error: No form element found.":"Erreur : aucun \xe9l\xe9ment de formulaire trouv\xe9.","Extended Latin":"Latin \xe9tendu","Failed to initialize plugin: {0}":"\xc9chec d'initialisation de l'extension\xa0: {0}","Failed to load plugin url: {0}":"\xc9chec de chargement de l'URL du plug-in\xa0: {0}","Failed to load plugin: {0} from url {1}":"\xc9chec de chargement du plug-in\xa0: {0} \xe0 partir de l\u2019URL {1}","Failed to upload image: {0}":"\xc9chec d'envoi de l'image\xa0: {0}","File":"Fichier","Find":"Rechercher","Find (if searchreplace plugin activated)":"Rechercher (si l'extension 'searchreplace' est activ\xe9e)","Find and Replace":"Trouver et remplacer","Find and replace...":"Trouver et remplacer...","Find in selection":"Trouver dans la s\xe9lection","Find whole words only":"Mot entier","Flags":"Drapeaux","Focus to contextual toolbar":"Mettre le focus sur la barre d'outils contextuelle","Focus to element path":"Mettre le focus sur le chemin vers l'\xe9l\xe9ment","Focus to menubar":"Mettre le focus sur la barre de menu","Focus to toolbar":"Mettre le focus sur la barre d'outils","Font":"Police","Font size {0}":"Taille de police\xa0{0}","Font sizes":"Tailles de police","Font {0}":"Police {0}","Fonts":"Polices","Food and Drink":"Nourriture & boissons","Footer":"Pied de page","Format":"Format","Format {0}":"Format\xa0{0}","Formats":"Formats","Fullscreen":"Plein \xe9cran","G":"V","General":"G\xe9n\xe9ral","Gray":"Gris","Green":"Vert","Green component":"Composant vert","Groove":"Sculpt\xe9","Handy Shortcuts":"Raccourcis utiles","Header":"En-t\xeate","Header cell":"Cellule d'en-t\xeate","Heading 1":"Titre\xa01","Heading 2":"Titre\xa02","Heading 3":"Titre\xa03","Heading 4":"Titre\xa04","Heading 5":"Titre\xa05","Heading 6":"Titre\xa06","Headings":"Titres","Height":"Hauteur","Help":"Aide","Hex color code":"Code couleur hexad\xe9cimal","Hidden":"Masqu\xe9","Horizontal align":"Alignement horizontal","Horizontal line":"Ligne horizontale","Horizontal space":"Espace horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"L'ID doit commencer par une lettre, suivie uniquement par des lettres, num\xe9ros, tirets, points, deux-points et underscores.","Image is decorative":"L'image est d\xe9corative","Image list":"Liste des images","Image title":"Titre d'image","Image...":"Image...","ImageProxy HTTP error: Could not find Image Proxy":"Erreur HTTP d'ImageProxy : Impossible de trouver ImageProxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Erreur HTTP d'ImageProxy : URL de ImageProxy incorrecte","ImageProxy HTTP error: Rejected request":"Erreur HTTP d'ImageProxy : Requ\xeate rejet\xe9e","ImageProxy HTTP error: Unknown ImageProxy error":"Erreur HTTP d'ImageProxy : Erreur ImageProxy inconnue","Increase indent":"Augmenter le retrait","Inline":"En ligne","Insert":"Ins\xe9rer","Insert Template":"Ins\xe9rer le mod\xe8le","Insert accordion":"Ins\xe9rer un accord\xe9on","Insert column after":"Ins\xe9rer une colonne apr\xe8s","Insert column before":"Ins\xe9rer une colonne avant","Insert date/time":"Ins\xe9rer date/heure","Insert image":"Ins\xe9rer une image","Insert link (if link plugin activated)":"Ins\xe9rer un lien (si l'extension 'link' est activ\xe9e)","Insert row after":"Ins\xe9rer une ligne apr\xe8s","Insert row before":"Ins\xe9rer une ligne avant","Insert table":"Ins\xe9rer un tableau","Insert template...":"Ins\xe9rer un mod\xe8le...","Insert video":"Ins\xe9rer une vid\xe9o","Insert/Edit code sample":"Ins\xe9rer / modifier un bloc de code","Insert/edit image":"Ins\xe9rer/modifier image","Insert/edit link":"Ins\xe9rer/modifier lien","Insert/edit media":"Ins\xe9rer/modifier un m\xe9dia","Insert/edit video":"Ins\xe9rer/modifier une vid\xe9o","Inset":"Incrust\xe9","Invalid hex color code: {0}":"Code couleur hexad\xe9cimal invalide : {0}","Invalid input":"Entr\xe9e invalide","Italic":"Italique","Justify":"Justifier","Keyboard Navigation":"Navigation au clavier","Language":"Langue","Learn more...":"En savoir plus...","Left":"Gauche","Left to right":"De gauche \xe0 droite","Light Blue":"Bleu clair","Light Gray":"Gris clair","Light Green":"Vert clair","Light Purple":"Violet clair","Light Red":"Rouge clair","Light Yellow":"Jaune clair","Line height":"Hauteur de la ligne","Link list":"Liste des liens","Link...":"Lien...","List Properties":"Propri\xe9t\xe9s de la liste","List properties...":"Lister les propri\xe9t\xe9s...","Loading emojis...":"Chargement des emojis...","Loading...":"Chargement...","Lower Alpha":"Alphabet en minuscules","Lower Greek":"Alphabet grec en minuscules","Lower Roman":"Chiffre romain inf\xe9rieur","Match case":"Respecter la casse","Mathematical":"Op\xe9rateurs math\xe9matiques","Media poster (Image URL)":"Affiche de m\xe9dia (URL de l'image)","Media...":"M\xe9dia...","Medium Blue":"Bleu moyen","Medium Gray":"Gris moyen","Medium Purple":"Violet moyen","Merge cells":"Fusionner les cellules","Middle":"Au milieu","Midnight Blue":"Bleu de minuit","More...":"Plus...","Name":"Nom","Navy Blue":"Bleu marine","New document":"Nouveau document","New window":"Nouvelle fen\xeatre","Next":"Suivante","No":"Non","No alignment":"Aucun alignement","No color":"Aucune couleur","Nonbreaking space":"Espace ins\xe9cable","None":"Aucun","Numbered list":"Liste num\xe9rot\xe9e","OR":"OU","Objects":"Objets","Ok":"Ok","Open help dialog":"Ouvrir la bo\xeete de dialogue d'aide","Open link":"Ouvrir le lien","Open link in...":"Ouvrir le lien dans...","Open popup menu for split buttons":"Ouvrir le menu contextuel pour les boutons partag\xe9s","Orange":"Orange","Outset":"Relief","Page break":"Saut de page","Paragraph":"Paragraphe","Paste":"Coller","Paste as text":"Coller comme texte","Paste column after":"Coller la colonne apr\xe8s","Paste column before":"Coller la colonne avant","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Le collage est maintenant en mode texte brut. Les contenus seront coll\xe9s sans retenir les formatages jusqu'\xe0 ce que vous d\xe9sactiviez cette option.","Paste or type a link":"Coller ou taper un lien","Paste row after":"Coller la ligne apr\xe8s","Paste row before":"Coller la ligne avant","Paste your embed code below:":"Collez votre code incorpor\xe9 ci-dessous :","People":"Personnes","Plugins":"Plug-ins","Plugins installed ({0}):":"Extensions install\xe9es ({0})\xa0:","Powered by {0}":"Avec {0}","Pre":"Pr\xe9format\xe9","Preferences":"Pr\xe9f\xe9rences","Preformatted":"Pr\xe9format\xe9","Premium plugins:":"Plug-ins premium\xa0:","Press the Up and Down arrow keys to resize the editor.":"Appuyez sur les touches fl\xe9ch\xe9es haut et bas pour redimensionner l'\xe9diteur.","Press the arrow keys to resize the editor.":"Appuyez sur les touches fl\xe9ch\xe9es pour redimensionner l'\xe9diteur.","Press {0} for help":"Appuyez sur {0} pour obtenir de l'aide","Preview":"Aper\xe7u","Previous":"Pr\xe9c\xe9dente","Print":"Imprimer","Print...":"Imprimer...","Purple":"Violet","Quotations":"Citations","R":"R","Range 0 to 255":"Plage de 0 \xe0 255","Red":"Rouge","Red component":"Composant rouge","Redo":"R\xe9tablir","Remove":"Retir\xe9","Remove color":"Supprimer la couleur","Remove link":"Enlever le lien","Replace":"Remplacer","Replace all":"Remplacer tout","Replace with":"Remplacer par","Resize":"Redimensionner","Restore last draft":"Restaurer le dernier brouillon","Reveal or hide additional toolbar items":"Affichez ou masquez les \xe9l\xe9ments suppl\xe9mentaires de la barre d'outils","Rich Text Area":"Zone de Texte Riche","Rich Text Area. Press ALT-0 for help.":"Zone de Texte Riche. Appuyez sur ALT-0 pour l'aide.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Zone de Texte Riche. Appuyez sur ALT-F9 pour le menu. Appuyez sur ALT-F10 pour la barre d'outils. Appuyez sur ALT-0 pour l'aide","Ridge":"Extrud\xe9","Right":"Droite","Right to left":"De droite \xe0 gauche","Row":"Ligne","Row clipboard actions":"Actions du presse-papiers des lignes","Row group":"Groupe de lignes","Row header":"En-t\xeate de ligne","Row properties":"Propri\xe9t\xe9s de la ligne","Row type":"Type de ligne","Rows":"Lignes","Save":"Enregistrer","Save (if save plugin activated)":"Enregistrer (si l'extension 'save' est activ\xe9e)","Scope":"\xc9tendue","Search":"Rechercher","Select all":"S\xe9lectionner tout","Select...":"S\xe9lectionner...","Selection":"S\xe9lection","Shortcut":"Raccourci","Show blocks":"Afficher les blocs","Show caption":"Afficher une l\xe9gende","Show invisible characters":"Afficher les caract\xe8res invisibles","Size":"Taille","Solid":"Trait continu","Source":"Source","Source code":"Code source","Special Character":"Caract\xe8re sp\xe9cial","Special character...":"Caract\xe8re sp\xe9cial...","Split cell":"Diviser la cellule","Square":"Carr\xe9","Start list at number":"Liste de d\xe9part au num\xe9ro","Strikethrough":"Barr\xe9","Style":"Style","Subscript":"Indice","Superscript":"Exposant","Switch to or from fullscreen mode":"Passer en ou quitter le mode plein \xe9cran","Symbols":"Symboles","System Font":"Police syst\xe8me","Table":"Tableau","Table caption":"L\xe9gende de tableau","Table properties":"Propri\xe9t\xe9s du tableau","Table styles":"Style tableau","Template":"Mod\xe8le","Templates":"Mod\xe8les","Text":"Texte","Text color":"Couleur du texte","Text color {0}":"Couleur du texte {0}","Text to display":"Texte \xe0 afficher","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"L'URL que vous avez saisie semble \xeatre une adresse e-mail. Souhaitez-vous y ajouter le pr\xe9fixe requis mailto:\xa0?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"L'URL que vous avez saisie semble \xeatre un lien externe. Souhaitez-vous y ajouter le pr\xe9fixe requis mailto:\xa0?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"L'URL que vous avez saisie semble \xeatre un lien externe. Voulez-vous ajouter le pr\xe9fixe https:// requis\xa0?","Title":"Titre","To open the popup, press Shift+Enter":"Pour ouvrir la popup, appuyez sur Maj+Entr\xe9e","Toggle accordion":"Activer l'accord\xe9on","Tools":"Outils","Top":"En haut","Travel and Places":"Voyages et lieux","Turquoise":"Turquoise","Underline":"Soulign\xe9","Undo":"Annuler","Upload":"T\xe9l\xe9charger","Uploading image":"T\xe9l\xe9versement d'une image","Upper Alpha":"Alphabet en majuscules","Upper Roman":"Chiffre romain sup\xe9rieur","Url":"URL","User Defined":"D\xe9fini par l'utilisateur","Valid":"Valide","Version":"Version","Vertical align":"Alignement vertical","Vertical space":"Espace vertical","View":"Afficher","Visual aids":"Aides visuelles","Warn":"Avertir","White":"Blanc","Width":"Largeur","Word count":"Nombre de mots","Words":"Mots","Words: {0}":"Mots\xa0: {0}","Yellow":"Jaune","Yes":"Oui","You are using {0}":"Vous utilisez {0}","You have unsaved changes are you sure you want to navigate away?":"Vous avez des modifications non enregistr\xe9es, \xeates-vous s\xfbr de vouloir quitter la page\xa0?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Votre navigateur ne supporte pas l\u2019acc\xe8s direct au presse-papiers. Merci d'utiliser les raccourcis clavier Ctrl+X/C/V.","alignment":"alignement","austral sign":"Symbole austral","cedi sign":"Symbole cedi","colon sign":"symbole col\xf3n","cruzeiro sign":"Symbole cruzeiro","currency sign":"symbole devise","dollar sign":"symbole dollar","dong sign":"Symbole dong","drachma sign":"Symbole drachme","euro-currency sign":"symbole euro","example":"exemple","formatting":"mise en forme","french franc sign":"symbole franc fran\xe7ais","german penny symbol":"Symbole pfennig","guarani sign":"Symbole guarani","history":"historique","hryvnia sign":"Symbole hryvnia","indentation":"retrait","indian rupee sign":"Symbole roupie indienne","kip sign":"Symbole kip","lira sign":"Symbole lire","livre tournois sign":"Symbole livre tournois","manat sign":"Symbole manat","mill sign":"Symbole milli\xe8me","naira sign":"Symbole naira","new sheqel sign":"Symbole nouveau ch\xe9kel","nordic mark sign":"Symbole du mark nordique","peseta sign":"Symbole peseta","peso sign":"Symbole peso","ruble sign":"Symbole rouble","rupee sign":"Symbole roupie","spesmilo sign":"Symbole spesmilo","styles":"styles","tenge sign":"Symbole tenge","tugrik sign":"Symbole tougrik","turkish lira sign":"Symbole lire turque","won sign":"Symbole won","yen character":"Sinogramme Yen","yen/yuan character variant one":"Sinogramme Yen/Yuan, premi\xe8re variante","yuan character":"Sinogramme Yuan","yuan character, in hong kong and taiwan":"Sinogramme Yuan, Hong Kong et Taiwan","{0} characters":"{0}\xa0caract\xe8res","{0} columns, {1} rows":"\xa0{0}\xa0colonnes,\xa0{1}\xa0lignes","{0} words":"{0} mots"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ga.js b/staticfiles/tinymce/langs/ga.js new file mode 100644 index 0000000..b8646de --- /dev/null +++ b/staticfiles/tinymce/langs/ga.js @@ -0,0 +1 @@ +tinymce.addI18n("ga",{"#":"","Accessibility":"Inrochtaineacht","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Gn\xedomh","Activity":"","Address":"Seoladh","Advanced":"Casta","Align":"Ail\xednigh","Align center":"Ail\xednigh sa l\xe1r","Align left":"Ail\xednigh ar chl\xe9","Align right":"Ail\xednigh ar dheis","Alignment":"Ail\xedni\xfa","Alignment {0}":"","All":"","Alternative description":"","Alternative source":"Foinse mhalartach","Alternative source URL":"","Anchor":"","Anchor...":"Ancaire...","Anchors":"Ancair\xed","Animals and Nature":"","Arrows":"","B":"G","Background color":"Dath an ch\xfalra","Background color {0}":"","Black":"Dubh","Block":"Bloc","Block {0}":"","Blockquote":"Athfhriotal","Blocks":"Blocanna","Blue":"","Blue component":"","Body":"Corp","Bold":"Trom","Border":"Iml\xedne","Border color":"Dath na himl\xedne","Border style":"","Border width":"","Bottom":"Bun","Browse files":"","Browse for an image":"Brabhs\xe1il le haghaidh \xedomh\xe1","Browse links":"","Bullet list":"Liosta Urchar","Cancel":"Cealaigh","Caption":"Fotheideal","Cell":"Cill","Cell padding":"Stu\xe1il ceall","Cell properties":"Air\xedonna na cille","Cell spacing":"Sp\xe1s\xe1il ceall","Cell styles":"","Cell type":"Cine\xe1l na cille","Center":"Sa L\xe1r","Characters":"","Characters (no spaces)":"","Circle":"Ciorcal","Class":"Aicme","Clear formatting":"Glan form\xe1idi\xfa","Close":"D\xfan","Code":"C\xf3d","Code sample...":"Sampla c\xf3id","Code view":"","Color Picker":"","Color swatch":"","Cols":"Col\xfain","Column":"Col\xfan","Column clipboard actions":"","Column group":"Gr\xfapa col\xfan","Column header":"","Constrain proportions":"Comhr\xe9ir faoi ghlas","Copy":"C\xf3ipe\xe1il","Copy column":"","Copy row":"C\xf3ipe\xe1il an r\xf3","Could not find the specified string.":"N\xedor aims\xedodh an teaghr\xe1n.","Could not load emojis":"","Count":"","Currency":"","Current window":"Fuinneog reatha","Custom color":"Dath saincheaptha","Custom...":"Saincheap...","Cut":"Gearr","Cut column":"","Cut row":"Gearr an r\xf3","Dark Blue":"","Dark Gray":"","Dark Green":"","Dark Orange":"","Dark Purple":"","Dark Red":"","Dark Turquoise":"","Dark Yellow":"","Dashed":"","Date/time":"D\xe1ta/am","Decrease indent":"Laghdaigh eang","Default":"R\xe9amhshocr\xfa","Delete accordion":"","Delete column":"Scrios an col\xfan","Delete row":"Scrios an r\xf3","Delete table":"Scrios an t\xe1bla","Dimensions":"Tois\xed","Disc":"Diosca","Div":"Deighilt","Document":"","Dotted":"","Double":"","Drop an image here":"Scaoil \xedomh\xe1 anseo","Dropped file type is not supported":"","Edit":"Eagar","Embed":"Leabaigh","Emojis":"","Emojis...":"","Error":"","Error: Form submit field collision.":"","Error: No form element found.":"","Extended Latin":"","Failed to initialize plugin: {0}":"","Failed to load plugin url: {0}":"","Failed to load plugin: {0} from url {1}":"","Failed to upload image: {0}":"","File":"Comhad","Find":"Aimsigh","Find (if searchreplace plugin activated)":"Aimsigh (m\xe1 t\xe1 an breise\xe1n cuardaigh ar si\xfal)","Find and Replace":"Aimsigh agus Ionadaigh","Find and replace...":"Aimsigh agus ionadaigh...","Find in selection":"","Find whole words only":"","Flags":"","Focus to contextual toolbar":"F\xf3cas sa bharra uirlis\xed comhth\xe9acs\xfail","Focus to element path":"F\xf3cas sa chonair eiliminte","Focus to menubar":"F\xf3cas sa bharra roghchl\xe1ir","Focus to toolbar":"F\xf3cas sa bharra uirlis\xed","Font":"Cl\xf3fhoireann","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Cl\xf3fhoirne","Food and Drink":"","Footer":"Bunt\xe1sc","Format":"Form\xe1id","Format {0}":"","Formats":"Form\xe1id\xed","Fullscreen":"L\xe1nsc\xe1ile\xe1n","G":"U","General":"Ginear\xe1lta","Gray":"","Green":"","Green component":"","Groove":"","Handy Shortcuts":"Aicearra\xed \xdas\xe1ideacha","Header":"Ceannt\xe1sc","Header cell":"Cill cheannt\xe1isc","Heading 1":"Ceannteideal 1","Heading 2":"Ceannteideal 2","Heading 3":"Ceannteideal 3","Heading 4":"Ceannteideal 4","Heading 5":"Ceannteideal 5","Heading 6":"Ceannteideal 6","Headings":"Ceannteidil","Height":"Airde","Help":"Cabhair","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"L\xedne chothrom\xe1nach","Horizontal space":"Sp\xe1s cothrom\xe1nach","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Liosta \xedomh\xe1nna","Image title":"","Image...":"\xcdomh\xe1...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"M\xe9adaigh eang","Inline":"Inl\xedne","Insert":"Ions\xe1ig","Insert Template":"","Insert accordion":"","Insert column after":"Ions\xe1igh col\xfan ar dheis","Insert column before":"Ions\xe1igh col\xfan ar chl\xe9","Insert date/time":"Cuir d\xe1ta/am isteach","Insert image":"Cuir \xedomh\xe1 isteach","Insert link (if link plugin activated)":"Cuir nasc isteach (m\xe1 t\xe1 an breise\xe1n naisc ar si\xfal)","Insert row after":"Ions\xe1igh r\xf3 faoi","Insert row before":"Ions\xe1igh r\xf3 os a chionn","Insert table":"Ions\xe1igh t\xe1bla","Insert template...":"Ions\xe1igh teimpl\xe9ad...","Insert video":"Cuir f\xedse\xe1n isteach","Insert/Edit code sample":"Cuir sampla c\xf3id isteach/in eagar","Insert/edit image":"Cuir \xedomh\xe1 isteach/in eagar","Insert/edit link":"Cuir nasc isteach/in eagar","Insert/edit media":"Cuir me\xe1n isteach/in eagar","Insert/edit video":"Cuir f\xedse\xe1n isteach/in eagar","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Iod\xe1lach","Justify":"Comhfhadaigh","Keyboard Navigation":"","Language":"Teanga","Learn more...":"Tuilleadh eolais...","Left":"Ar Chl\xe9","Left to right":"Cl\xe9-go-deas","Light Blue":"","Light Gray":"","Light Green":"","Light Purple":"","Light Red":"","Light Yellow":"","Line height":"","Link list":"Liosta nascanna","Link...":"Nasc...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Alfa Beag","Lower Greek":"Litir Bheag Ghr\xe9agach","Lower Roman":"Litir Bheag R\xf3mh\xe1nach","Match case":"C\xe1s-\xedogair","Mathematical":"","Media poster (Image URL)":"","Media...":"Me\xe1n...","Medium Blue":"","Medium Gray":"","Medium Purple":"","Merge cells":"Cumaisc cealla","Middle":"L\xe1r","Midnight Blue":"","More...":"Tuilleadh...","Name":"Ainm","Navy Blue":"","New document":"C\xe1ip\xe9is nua","New window":"Fuinneog nua","Next":"Ar aghaidh","No":"","No alignment":"","No color":"Gan dath","Nonbreaking space":"Sp\xe1s neamhbhristeach","None":"Dada","Numbered list":"Liosta Uimhrithe","OR":"N\xd3","Objects":"","Ok":"OK","Open help dialog":"","Open link":"Oscail nasc","Open link in...":"Oscail nasc in...","Open popup menu for split buttons":"","Orange":"","Outset":"","Page break":"Briseadh leathanaigh","Paragraph":"Alt","Paste":"Greamaigh","Paste as text":"Greamaigh mar th\xe9acs","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Sa m\xf3d gn\xe1th-th\xe9acs anois. Gream\xf3far \xe1bhar mar ghn\xe1th-th\xe9acs go dt\xed go m\xfachfaidh t\xfa an rogha seo.","Paste or type a link":"Greamaigh n\xf3 cl\xf3scr\xedobh nasc","Paste row after":"Greamaigh r\xf3 faoi","Paste row before":"Greamaigh r\xf3 os a chionn","Paste your embed code below:":"Greamaigh do ch\xf3d leabaithe th\xedos:","People":"","Plugins":"Breise\xe1in","Plugins installed ({0}):":"Breise\xe1in shuite\xe1ilte ({0}):","Powered by {0}":"\xc1 chumhacht\xfa ag {0}","Pre":"R\xe9amh","Preferences":"","Preformatted":"R\xe9amhfhorm\xe1idithe","Premium plugins:":"Scothbhreise\xe1in:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"R\xe9amhamharc","Previous":"","Print":"","Print...":"Priont\xe1il...","Purple":"","Quotations":"","R":"D","Range 0 to 255":"","Red":"","Red component":"","Redo":"Athdh\xe9an","Remove":"","Remove color":"","Remove link":"Bain an nasc","Replace":"Ionadaigh","Replace all":"Ionadaigh uile","Replace with":"Ionadaigh le","Resize":"Athraigh m\xe9id","Restore last draft":"Oscail an dr\xe9acht is d\xe9ana\xed","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Limist\xe9ar M\xe9ith-Th\xe9acs. Br\xfaigh ALT-F9 le haghaidh roghchl\xe1ir, ALT-F10 le haghaidh barra uirlis\xed, agus ALT-0 le c\xfanamh a fh\xe1il","Ridge":"","Right":"Ar Dheis","Right to left":"Deas-go-cl\xe9","Row":"R\xf3","Row clipboard actions":"","Row group":"Gr\xfapa r\xf3nna","Row header":"","Row properties":"Air\xedonna an r\xf3","Row type":"Cine\xe1l an r\xf3","Rows":"R\xf3nna","Save":"S\xe1bh\xe1il","Save (if save plugin activated)":"S\xe1bh\xe1il (m\xe1 t\xe1 an breise\xe1n s\xe1bh\xe1la ar si\xfal)","Scope":"Sc\xf3ip","Search":"","Select all":"Roghnaigh uile","Select...":"","Selection":"","Shortcut":"Aicearra","Show blocks":"Taispe\xe1in blocanna","Show caption":"","Show invisible characters":"Taispe\xe1in carachtair dhofheicthe","Size":"","Solid":"","Source":"Foinse","Source code":"C\xf3d foinseach","Special Character":"","Special character...":"Carachtar speisialta,,,","Split cell":"Roinn cill","Square":"Cearn\xf3g","Start list at number":"","Strikethrough":"L\xedne tr\xedd","Style":"St\xedl","Subscript":"Foscript","Superscript":"Forscript","Switch to or from fullscreen mode":"","Symbols":"Siombail\xed","System Font":"Cl\xf3fhoireann C\xf3rais","Table":"T\xe1bla","Table caption":"","Table properties":"Air\xedonna an t\xe1bla","Table styles":"","Template":"Teimpl\xe9ad","Templates":"Teimpl\xe9id","Text":"","Text color":"Dath an t\xe9acs","Text color {0}":"","Text to display":"T\xe9acs le taispe\xe1int","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Is seoladh r\xedomhphoist \xe9 an URL a chuir t\xfa isteach. An bhfuil fonn ort an r\xe9im\xedr riachtanach mailto: a chur leis?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Is nasc seachtrach \xe9 an URL a chuir t\xfa isteach. An bhfuil fonn ort an r\xe9im\xedr riachtanach http:// a chur leis?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":" Is nasc seachtrach \xe9 an URL a chuir t\xfa isteach. An bhfuil fonn ort an r\xe9im\xedr riachtanach https:// a chur leis?","Title":"Teideal","To open the popup, press Shift+Enter":"","Toggle accordion":"","Tools":"Uirlis\xed","Top":"Barr","Travel and Places":"","Turquoise":"","Underline":"Fol\xedne","Undo":"Cealaigh","Upload":"Uasl\xf3d\xe1il","Uploading image":"","Upper Alpha":"Alfa M\xf3r","Upper Roman":"Litir Mh\xf3r R\xf3mh\xe1nach","Url":"URL","User Defined":"","Valid":"","Version":"","Vertical align":"","Vertical space":"Sp\xe1s ingearach","View":"Amharc","Visual aids":"\xc1iseanna amhairc","Warn":"","White":"","Width":"Leithead","Word count":"","Words":"","Words: {0}":"Focail: {0}","Yellow":"","Yes":"","You are using {0}":"T\xe1 t\xfa ag \xfas\xe1id {0}","You have unsaved changes are you sure you want to navigate away?":"T\xe1 athruithe gan s\xe1bh\xe1il ann. An bhfuil t\xfa cinnte gur mhaith leat imeacht amach as seo?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"N\xed f\xe9idir le do bhrabhs\xe1la\xed teacht go d\xedreach ar an ngearrthaisce. Bain \xfas\xe1id as na haicearra\xed Ctrl+X/C/V. ","alignment":"","austral sign":"","cedi sign":"","colon sign":"","cruzeiro sign":"","currency sign":"","dollar sign":"","dong sign":"","drachma sign":"","euro-currency sign":"","example":"","formatting":"","french franc sign":"","german penny symbol":"","guarani sign":"","history":"","hryvnia sign":"","indentation":"","indian rupee sign":"","kip sign":"","lira sign":"","livre tournois sign":"","manat sign":"","mill sign":"","naira sign":"","new sheqel sign":"","nordic mark sign":"","peseta sign":"","peso sign":"","ruble sign":"","rupee sign":"","spesmilo sign":"","styles":"","tenge sign":"","tugrik sign":"","turkish lira sign":"","won sign":"","yen character":"","yen/yuan character variant one":"","yuan character":"","yuan character, in hong kong and taiwan":"","{0} characters":"","{0} columns, {1} rows":"","{0} words":"{0} focal"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/gl.js b/staticfiles/tinymce/langs/gl.js new file mode 100644 index 0000000..40b3853 --- /dev/null +++ b/staticfiles/tinymce/langs/gl.js @@ -0,0 +1 @@ +tinymce.addI18n("gl",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Acci\xf3n","Activity":"Actividade","Address":"Enderezo","Advanced":"Avanzado","Align":"Ali\xf1amento","Align center":"Ali\xf1ar ao centro","Align left":"Ali\xf1ar \xe1 esquerda","Align right":"Ali\xf1ar \xe1 dereita","Alignment":"Ali\xf1amento","Alignment {0}":"","All":"Todo","Alternative description":"","Alternative source":"Orixe alternativa","Alternative source URL":"URL da orixe alternativa","Anchor":"","Anchor...":"Ancoraxe...","Anchors":"Ancoraxes","Animals and Nature":"Animais e natureza","Arrows":"Frechas","B":"","Background color":"Cor do fondo","Background color {0}":"","Black":"Negro","Block":"Bloque","Block {0}":"","Blockquote":"Bloque entre comi\xf1as","Blocks":"Bloques","Blue":"Azul","Blue component":"","Body":"Corpo","Bold":"Negra","Border":"Bordo","Border color":"Cor do bordo","Border style":"Estilo do bordo","Border width":"Largo do bordo","Bottom":"Abaixo","Browse files":"","Browse for an image":"Buscar unha imaxe","Browse links":"","Bullet list":"Lista de vi\xf1etas","Cancel":"Cancelar","Caption":"Subt\xedtulo","Cell":"Cela","Cell padding":"Marxe interior da cela","Cell properties":"Propiedades da cela","Cell spacing":"Marxe entre celas","Cell styles":"","Cell type":"Tipo de cela","Center":"Centro","Characters":"Caracteres","Characters (no spaces)":"Caracteres (sen espazos)","Circle":"Circulo","Class":"Clase","Clear formatting":"Limpar o formato","Close":"Pechar","Code":"C\xf3digo","Code sample...":"Mostra de c\xf3digo...","Code view":"","Color Picker":"Selector de cor","Color swatch":"Mostra de cores","Cols":"Cols.","Column":"Columna","Column clipboard actions":"","Column group":"Grupo de columnas","Column header":"","Constrain proportions":"Restrinxir as proporci\xf3ns","Copy":"Copiar","Copy column":"","Copy row":"Copiar fila","Could not find the specified string.":"Non foi pos\xedbel atopar a cadea de texto especificada.","Could not load emojis":"","Count":"","Currency":"Moeda","Current window":"Xanela actual","Custom color":"Cor personalizado","Custom...":"Personalizado...","Cut":"Cortar","Cut column":"","Cut row":"Cortar fila","Dark Blue":"","Dark Gray":"Gris escuro","Dark Green":"Verde escuro","Dark Orange":"Laranxa escuro","Dark Purple":"","Dark Red":"Vermello escuro","Dark Turquoise":"Turquesa escuro","Dark Yellow":"Amarelo escuro","Dashed":"","Date/time":"Data/hora","Decrease indent":"Reducir a sangr\xeda","Default":"Predeterminada","Delete accordion":"","Delete column":"Eliminar columna","Delete row":"Eliminar fila","Delete table":"Eliminar t\xe1boa","Dimensions":"Dimensi\xf3ns","Disc":"Disco","Div":"","Document":"","Dotted":"","Double":"","Drop an image here":"Soltar unha imaxe","Dropped file type is not supported":"","Edit":"Editar","Embed":"Integrado","Emojis":"","Emojis...":"Emoticonas...","Error":"Erro","Error: Form submit field collision.":"Erro: conflito de campo ao enviar o formulario ","Error: No form element found.":"Erro: non se atopou ning\xfan elemento de formulario","Extended Latin":"Latino extendido","Failed to initialize plugin: {0}":"Produciuse un fallo ao iniciar o engadido: {0}","Failed to load plugin url: {0}":"Produciuse un fallo ao cargar a o URL do engadido: {0}","Failed to load plugin: {0} from url {1}":"Produciuse un fallo ao cargar a o engadido: {0} dende o URL {1}","Failed to upload image: {0}":"Produciuse un fallo ao cargar a imaxe: {0}","File":"Ficheiro","Find":"Buscar","Find (if searchreplace plugin activated)":"Atopar (se o engadido para buscar e substitu\xedr estiver activado) ","Find and Replace":"","Find and replace...":"Atopar e substitu\xedr...","Find in selection":"","Find whole words only":"Atopar unicamente as palabras enteiras","Flags":"Bandeiras","Focus to contextual toolbar":"Foco na barra de ferramentas de contexto","Focus to element path":"Foco na ruta do elemento","Focus to menubar":"Foco na barra de menu","Focus to toolbar":"Foco na barra de ferramentas","Font":"","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Tipos de letra","Food and Drink":"Comida e bebida","Footer":"Rodap\xe9","Format":"Formato","Format {0}":"","Formats":"Formatos","Fullscreen":"Pantalla completa","G":"","General":"Xeral","Gray":"Gris","Green":"Verde","Green component":"","Groove":"","Handy Shortcuts":"Atallos \xfatiles","Header":"Cabeceira","Header cell":"Cela de cabeceira","Heading 1":"T\xedtulo 1","Heading 2":"T\xedtulo 2","Heading 3":"T\xedtulo 3","Heading 4":"T\xedtulo 4","Heading 5":"T\xedtulo 5","Heading 6":"T\xedtulo 6","Headings":"T\xedtulo","Height":"Alto","Help":"Axuda","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Li\xf1a horizontal","Horizontal space":"Espazo horizontal","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Lista de imaxes","Image title":"T\xedtulo da imaxe","Image...":"Imaxe...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Aumentar a sangr\xeda","Inline":"En li\xf1a","Insert":"Inserir","Insert Template":"","Insert accordion":"","Insert column after":"Inserir columna \xe1 dereita","Insert column before":"Inserir columna \xe1 esquerda","Insert date/time":"Inserir data/hora","Insert image":"Inserir imaxe","Insert link (if link plugin activated)":"Inserir a ligaz\xf3n (se o engadido de ligaz\xf3ns estiver activado) ","Insert row after":"Inserir unha fila embaixo","Insert row before":"Inserir unha fila enriba","Insert table":"Inserir t\xe1boa","Insert template...":"Inserir modelo...","Insert video":"Inserir v\xeddeo","Insert/Edit code sample":"Inserir/editar mostra de c\xf3digo","Insert/edit image":"Inserir/editar imaxe","Insert/edit link":"Inserir/editar ligaz\xf3n","Insert/edit media":"Inserir/editar medios","Insert/edit video":"Inserir/editar v\xeddeo","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Cursiva","Justify":"Xustificar","Keyboard Navigation":"","Language":"Idioma","Learn more...":"Saiba m\xe1is...","Left":"Esquerda","Left to right":"De esquerda a dereita","Light Blue":"","Light Gray":"Gris claro","Light Green":"","Light Purple":"","Light Red":"","Light Yellow":"","Line height":"","Link list":"Lista de ligaz\xf3ns","Link...":"Ligaz\xf3n...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Alfa min\xfascula","Lower Greek":"Grega min\xfascula","Lower Roman":"Romana min\xfascula","Match case":"Distinguir mai\xfasculas","Mathematical":"Matem\xe1tico","Media poster (Image URL)":"Cartel multimedia (URL da imaxe)","Media...":"Multimedia...","Medium Blue":"Azul medio","Medium Gray":"Gris medio","Medium Purple":"P\xfarpura medio","Merge cells":"Combinar celas","Middle":"Medio","Midnight Blue":"Azul noite","More...":"","Name":"Nome","Navy Blue":"Azul mari\xf1o","New document":"Novo documento","New window":"Nova xanela","Next":"Seguinte","No":"","No alignment":"","No color":"Sen cor","Nonbreaking space":"Espazo irromp\xedbel","None":"Ning\xfan","Numbered list":"Lista numerada","OR":"OU","Objects":"Obxectos","Ok":"Aceptar","Open help dialog":"Abrir o di\xe1logo de axuda","Open link":"","Open link in...":"Abrir a ligaz\xf3n en...","Open popup menu for split buttons":"","Orange":"Laranxa","Outset":"Exterior","Page break":"Quebra de p\xe1xina","Paragraph":"Par\xe1grafo","Paste":"Pegar","Paste as text":"Pegar como texto","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Neste momento o pegado est\xe1 definido en modo de texto simple. Os contidos pegaranse como texto sen formato ata que se active esta opci\xf3n.","Paste or type a link":"Pegue ou escriba unha ligaz\xf3n","Paste row after":"Pegar fila enriba","Paste row before":"Pegar fila embaixo","Paste your embed code below:":"Pegue embaixo o c\xf3digo integrado:","People":"Xente","Plugins":"Engadidos","Plugins installed ({0}):":"Engadidos instalados ({0}):","Powered by {0}":"Coa tecnolox\xeda de {0}","Pre":"","Preferences":"","Preformatted":"Preformatado","Premium plugins:":"Engadidos comerciais:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Vista previa","Previous":"Anterior","Print":"","Print...":"Imprimir...","Purple":"P\xfarpura","Quotations":"Citas","R":"","Range 0 to 255":"","Red":"Vermello","Red component":"","Redo":"Refacer","Remove":"","Remove color":"Retirar a cor","Remove link":"Retirar a ligaz\xf3n","Replace":"Substitu\xedr","Replace all":"Substitu\xedr todo","Replace with":"Substitu\xedr con","Resize":"Redimensionar","Restore last draft":"Restaurar o \xfaltimo borrador","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\xc1rea de texto mellorado. PremaALT-0 para obter axuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc1rea de texto mellorado. Prema ALT-F9 para o men\xfa. Prema ALT-F10 para a barra de ferramentas. Prema ALT-0 para a axuda","Ridge":"","Right":"Dereita","Right to left":"De dereita a esquerda","Row":"Fila","Row clipboard actions":"","Row group":"Grupo de filas","Row header":"","Row properties":"Propiedades das filas","Row type":"Tipo de fila","Rows":"Filas","Save":"Gardar","Save (if save plugin activated)":"Gardar (se o engadido para gardar estiver activado) ","Scope":"\xc1mbito","Search":"Buscar","Select all":"Seleccionar todo","Select...":"","Selection":"","Shortcut":"Atallo","Show blocks":"Amosar os bloques","Show caption":"Amosar subt\xedtulo","Show invisible characters":"Amosar caracteres invis\xedbeis","Size":"","Solid":"","Source":"Orixe","Source code":"C\xf3digo fonte","Special Character":"","Special character...":"","Split cell":"Dividir celas","Square":"Cadrado","Start list at number":"","Strikethrough":"Riscado","Style":"Estilo","Subscript":"Sub\xedndice","Superscript":"Super\xedndice","Switch to or from fullscreen mode":"Activar ou desactivar o modo de pantalla completa","Symbols":"S\xedmbolos","System Font":"Tipo de letra do sistema","Table":"T\xe1boa","Table caption":"","Table properties":"Propiedades da t\xe1boa","Table styles":"","Template":"Modelo","Templates":"Modelos","Text":"Texto","Text color":"Cor do texto","Text color {0}":"","Text to display":"Texto que amosar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"O URL que introduciu semella ser un enderezo de correo. Quere engadirlle o prefixo mailto: requirido?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"O URL que introduciu semella ser unha ligaz\xf3n externa. Quere engadirlle o prefixo http:// requirido?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"T\xedtulo","To open the popup, press Shift+Enter":"Para abrir a xanela emerxente, prema Mai\xfas+Intro","Toggle accordion":"","Tools":"Ferramentas","Top":"Arriba","Travel and Places":"Viaxes e lugares","Turquoise":"Turquesa","Underline":"Subli\xf1ado","Undo":"Desfacer","Upload":"Cargar","Uploading image":"","Upper Alpha":"Alfa mai\xfascula","Upper Roman":"Romana mai\xfascula","Url":"URL","User Defined":"Definido polo usuario","Valid":"V\xe1lido","Version":"","Vertical align":"","Vertical space":"Espazo vertical","View":"Ver","Visual aids":"Axudas visuais","Warn":"Aviso","White":"Branco","Width":"Largo","Word count":"Reconto de palabras","Words":"","Words: {0}":"Palabras: {0}","Yellow":"Amarelo","Yes":"","You are using {0}":"Est\xe1 a empregar {0}","You have unsaved changes are you sure you want to navigate away?":"Ten cambios sen gardar. Confirma que quere sa\xedr?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"O seu navegador non admite o acceso directo ao portapapeis. Empregue os atallos de teclado Ctrl+X/C/V no seu canto.","alignment":"ali\xf1amento","austral sign":"S\xedmbolo do austral","cedi sign":"S\xedmbolo do cedi","colon sign":"S\xedmbolo do col\xf3n","cruzeiro sign":"S\xedmbolo do cruzeiro","currency sign":"S\xedmbolo de moeda","dollar sign":"S\xedmbolo do dolar","dong sign":"S\xedmbolo do dong","drachma sign":"S\xedmbolo do dracma","euro-currency sign":"S\xedmbolo do euro","example":"exemplo","formatting":"formatado","french franc sign":"S\xedmbolo do franco franc\xe9s","german penny symbol":"S\xedmbolo do penique alem\xe1n","guarani sign":"S\xedmbolo do guaran\xed","history":"historial","hryvnia sign":"S\xedmbolo do grivna","indentation":"sangrado","indian rupee sign":"S\xedmbolo da rupia india","kip sign":"S\xedmbolo do kip","lira sign":"S\xedmbolo da lira","livre tournois sign":"S\xedmbolo da libre tournois","manat sign":"S\xedmbolo do manat","mill sign":"S\xedmbolo do mill","naira sign":"S\xedmbolo da naira","new sheqel sign":"S\xedmbolo do novo s\xe9quel","nordic mark sign":"S\xedmbolo do marco n\xf3rdico","peseta sign":"S\xedmbolo da peseta","peso sign":"S\xedmbolo do peso","ruble sign":"S\xedmbolo do rublo","rupee sign":"S\xedmbolo da rupia","spesmilo sign":"S\xedmbolo do spesmilo","styles":"estilos","tenge sign":"S\xedmbolo do tengue","tugrik sign":"S\xedmbolo do tugrik","turkish lira sign":"S\xedmbolo da lira turca","won sign":"S\xedmbolo do won","yen character":"Car\xe1cter do ien","yen/yuan character variant one":"Variante 1 do car\xe1cter do ien/yuan","yuan character":"Car\xe1cter do yuan","yuan character, in hong kong and taiwan":"Car\xe1cter do yuan, en Hong Kong e Taiwan","{0} characters":"","{0} columns, {1} rows":"","{0} words":"{0} palabras"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/he_IL.js b/staticfiles/tinymce/langs/he_IL.js new file mode 100644 index 0000000..cc26575 --- /dev/null +++ b/staticfiles/tinymce/langs/he_IL.js @@ -0,0 +1 @@ +tinymce.addI18n("he_IL",{"#":"#","Accessibility":"\u05e0\u05d2\u05d9\u05e9\u05d5\u05ea","Accordion":"\u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df","Accordion body...":"\u05d2\u05d5\u05e3 \u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df...","Accordion summary...":"\u05ea\u05e7\u05e6\u05d9\u05e8 \u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df...","Action":"\u05e4\u05e2\u05d5\u05dc\u05d4","Activity":"\u05e4\u05e2\u05d9\u05dc\u05d5\u05ea","Address":"\u05db\u05ea\u05d5\u05d1\u05ea","Advanced":"\u05de\u05ea\u05e7\u05d3\u05dd","Align":"\u05d9\u05e9\u05e8","Align center":"\u05de\u05e8\u05db\u05d6","Align left":"\u05d9\u05e9\u05e8 \u05dc\u05e9\u05de\u05d0\u05dc","Align right":"\u05d9\u05e9\u05e8 \u05dc\u05d9\u05de\u05d9\u05df","Alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8","Alignment {0}":"\u05d9\u05d9\u05e9\u05d5\u05e8 {0}","All":"\u05d4\u05db\u05dc","Alternative description":"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d0\u05dc\u05d8\u05e8\u05e0\u05d8\u05d9\u05d1\u05d9","Alternative source":"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9","Alternative source URL":"\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9","Anchor":"\u05e2\u05d5\u05d2\u05df","Anchor...":"\u05e2\u05d5\u05d2\u05df...","Anchors":"\u05e2\u05d5\u05d2\u05e0\u05d9\u05dd","Animals and Nature":"\u05d1\u05e2\u05dc\u05d9-\u05d7\u05d9\u05d9\u05dd \u05d5\u05d8\u05d1\u05e2","Arrows":"\u05d7\u05d9\u05e6\u05d9\u05dd","B":"B","Background color":"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","Background color {0}":"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2 {0}","Black":"\u05e9\u05d7\u05d5\u05e8","Block":"\u05d1\u05dc\u05d5\u05e7","Block {0}":"\u05d7\u05e1\u05d5\u05dd {0}","Blockquote":"\u05d1\u05dc\u05d5\u05e7 \u05e6\u05d9\u05d8\u05d5\u05d8","Blocks":"\u05d1\u05dc\u05d5\u05e7\u05d9\u05dd","Blue":"\u05db\u05d7\u05d5\u05dc","Blue component":"\u05de\u05e8\u05db\u05d9\u05d1 \u05db\u05d7\u05d5\u05dc","Body":"\u05d2\u05d5\u05e3","Bold":"\u05de\u05d5\u05d3\u05d2\u05e9","Border":"\u05d2\u05d1\u05d5\u05dc","Border color":"\u05e6\u05d1\u05e2 \u05d2\u05d1\u05d5\u05dc","Border style":"\u05e1\u05d2\u05e0\u05d5\u05df \u05d2\u05d1\u05d5\u05dc","Border width":"\u05e8\u05d5\u05d7\u05d1 \u05d2\u05d1\u05d5\u05dc","Bottom":"\u05e7\u05e6\u05d4 \u05ea\u05d7\u05ea\u05d5\u05df","Browse files":"\u05e2\u05d9\u05d9\u05df \u05d1\u05e7\u05d1\u05e6\u05d9\u05dd","Browse for an image":"\u05d7\u05e4\u05e9 \u05ea\u05de\u05d5\u05e0\u05d4","Browse links":"\u05e2\u05d9\u05d9\u05df \u05d1\u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","Bullet list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","Cancel":"\u05d1\u05d9\u05d8\u05d5\u05dc","Caption":"\u05db\u05d9\u05ea\u05d5\u05d1","Cell":"\u05ea\u05d0","Cell padding":"\u05de\u05e8\u05d5\u05d5\u05d7 \u05d1\u05d9\u05df \u05d2\u05d1\u05d5\u05dc \u05d4\u05ea\u05d0 \u05dc\u05ea\u05d5\u05db\u05df \u05d4\u05ea\u05d0","Cell properties":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05ea\u05d0","Cell spacing":"\u05de\u05e8\u05d5\u05d5\u05d7 \u05d1\u05d9\u05df \u05ea\u05d0\u05d9\u05dd","Cell styles":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0\u05d9\u05dd","Cell type":"\u05e1\u05d5\u05d2 \u05ea\u05d0","Center":"\u05de\u05e8\u05db\u05d6","Characters":"\u05ea\u05d5\u05d5\u05d9\u05dd","Characters (no spaces)":"\u05ea\u05d5\u05d5\u05d9\u05dd (\u05dc\u05dc\u05d0 \u05e8\u05d5\u05d5\u05d7\u05d9\u05dd)","Circle":"\u05e2\u05d9\u05d2\u05d5\u05dc","Class":"\u05de\u05d7\u05dc\u05e7\u05d4","Clear formatting":"\u05e0\u05e7\u05d4 \u05e2\u05d9\u05e6\u05d5\u05d1","Close":"\u05e1\u05d2\u05d5\u05e8","Code":"\u05e7\u05d5\u05d3","Code sample...":"\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3...","Code view":"\u05ea\u05e6\u05d5\u05d2\u05ea \u05e7\u05d5\u05d3","Color Picker":"\u05d1\u05d5\u05e8\u05e8 \u05e6\u05d1\u05e2\u05d9\u05dd","Color swatch":"\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea \u05e6\u05d1\u05e2","Cols":"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea","Column":"\u05e2\u05de\u05d5\u05d3\u05d4","Column clipboard actions":"\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05dc\u05d5\u05d7 \u05e7\u05dc\u05d9\u05e4 \u05dc\u05d8\u05d5\u05e8","Column group":"\u05e7\u05d1\u05d5\u05e6\u05ea \u05e2\u05de\u05d5\u05d3\u05d5\u05ea","Column header":"\u05db\u05d5\u05ea\u05e8\u05ea \u05d8\u05d5\u05e8","Constrain proportions":"\u05d0\u05dc\u05e5 \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea","Copy":"\u05d4\u05e2\u05ea\u05e7","Copy column":"\u05d4\u05e2\u05ea\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4","Copy row":"\u05d4\u05e2\u05ea\u05e7 \u05e9\u05d5\u05e8\u05d4","Could not find the specified string.":"\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05de\u05d7\u05e8\u05d5\u05d6\u05ea \u05e9\u05e6\u05d5\u05d9\u05e0\u05d4.","Could not load emojis":"\u05dc\u05d0 \u05d4\u05d9\u05d4 \u05e0\u05d9\u05ea\u05df \u05dc\u05d8\u05e2\u05d5\u05df \u05d0\u05d9\u05de\u05d5\u05d2'\u05d9","Count":"\u05e1\u05e4\u05d9\u05e8\u05d4","Currency":"\u05de\u05d8\u05d1\u05e2","Current window":"\u05d7\u05dc\u05d5\u05df \u05e0\u05d5\u05db\u05d7\u05d9","Custom color":"\u05e6\u05d1\u05e2 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea","Custom...":"\u05d4\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea...","Cut":"\u05d2\u05d6\u05d5\u05e8","Cut column":"\u05d7\u05ea\u05d5\u05da \u05e2\u05de\u05d5\u05d3\u05d4","Cut row":"\u05d2\u05d6\u05d5\u05e8 \u05e9\u05d5\u05e8\u05d4","Dark Blue":"\u05db\u05d7\u05d5\u05dc \u05db\u05d4\u05d4","Dark Gray":"\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4","Dark Green":"\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4","Dark Orange":"\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4","Dark Purple":"\u05e1\u05d2\u05d5\u05dc \u05db\u05d4\u05d4","Dark Red":"\u05d0\u05d3\u05d5\u05dd \u05db\u05d4\u05d4","Dark Turquoise":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4","Dark Yellow":"\u05e6\u05d4\u05d5\u05d1 \u05db\u05d4\u05d4","Dashed":"\u05de\u05de\u05d5\u05e7\u05e3","Date/time":"\u05ea\u05d0\u05e8\u05d9\u05da/\u05e9\u05e2\u05d4","Decrease indent":"\u05d4\u05e7\u05d8\u05df \u05d4\u05d6\u05d7\u05d4","Default":"\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc","Delete accordion":"\u05de\u05d7\u05e7 \u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df","Delete column":"\u05de\u05d7\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4","Delete row":"\u05de\u05d7\u05e7 \u05e9\u05d5\u05e8\u05d4","Delete table":"\u05de\u05d7\u05e7 \u05d8\u05d1\u05dc\u05d4","Dimensions":"\u05de\u05de\u05d3\u05d9\u05dd","Disc":"\u05d3\u05d9\u05e1\u05e7","Div":"Div","Document":"\u05de\u05e1\u05de\u05da","Dotted":"\u05de\u05e0\u05d5\u05e7\u05d3","Double":"\u05db\u05e4\u05d5\u05dc","Drop an image here":"\u05e9\u05d7\u05e8\u05e8 \u05ea\u05de\u05d5\u05e0\u05d4 \u05db\u05d0\u05df","Dropped file type is not supported":"\u05e1\u05d5\u05d2 \u05d4\u05e7\u05d5\u05d1\u05e5 \u05d4\u05de\u05d5\u05d8\u05dc \u05d0\u05d9\u05e0\u05d5 \u05e0\u05ea\u05de\u05da","Edit":"\u05e2\u05e8\u05d5\u05da","Embed":"\u05d4\u05d8\u05d1\u05e2","Emojis":"\u05d0\u05d9\u05de\u05d5\u05d2'\u05d9","Emojis...":"\u05d0\u05d9\u05de\u05d5\u05d2'\u05d9...","Error":"\u05e9\u05d2\u05d9\u05d0\u05d4","Error: Form submit field collision.":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05ea\u05e0\u05d2\u05e9\u05d5\u05ea \u05d1\u05e9\u05d3\u05d4 \u05e9\u05dc\u05d9\u05d7\u05ea \u05d8\u05d5\u05e4\u05e1.","Error: No form element found.":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 \u05e8\u05db\u05d9\u05d1 \u05d8\u05d5\u05e4\u05e1.","Extended Latin":"\u05dc\u05d8\u05d9\u05e0\u05d9\u05ea \u05de\u05d5\u05e8\u05d7\u05d1\u05ea","Failed to initialize plugin: {0}":"\u05db\u05e9\u05dc \u05d1\u05d0\u05ea\u05d7\u05d5\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}","Failed to load plugin url: {0}":"\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea URL \u05e9\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}","Failed to load plugin: {0} from url {1}":"\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05d9\u05d9\u05e9\u05d5\u05dd Plugin: {0} \u05de\u05db\u05ea\u05d5\u05d1\u05ea URL\u200f {1}","Failed to upload image: {0}":"\u05db\u05e9\u05dc \u05d1\u05d4\u05e2\u05dc\u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05d4: {0}","File":"\u05e7\u05d5\u05d1\u05e5","Find":"\u05d7\u05e4\u05e9","Find (if searchreplace plugin activated)":"\u05d7\u05e4\u05e9 (\u05d0\u05dd \u05d9\u05d9\u05e9\u05d5\u05dd \u05d4-Plugin \u05dc-searchreplace \u05d4\u05d5\u05e4\u05e2\u05dc)","Find and Replace":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4","Find and replace...":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4...","Find in selection":"\u05d7\u05e4\u05e9 \u05d1\u05ea\u05d5\u05da \u05d4\u05d1\u05d7\u05d9\u05e8\u05d4","Find whole words only":"\u05d7\u05e4\u05e9 \u05de\u05d9\u05dc\u05d9\u05dd \u05e9\u05dc\u05de\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3","Flags":"\u05d3\u05d2\u05dc\u05d9\u05dd","Focus to contextual toolbar":"\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05db\u05dc\u05d9\u05dd \u05d4\u05e7\u05e9\u05e8\u05d9","Focus to element path":"\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e0\u05ea\u05d9\u05d1 \u05d4\u05e8\u05db\u05d9\u05d1","Focus to menubar":"\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e9\u05e8\u05d5\u05ea \u05d4\u05ea\u05e4\u05e8\u05d9\u05d8\u05d9\u05dd","Focus to toolbar":"\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd","Font":"\u05d2\u05d5\u05e4\u05df","Font size {0}":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df {0}","Font sizes":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","Font {0}":"\u05d2\u05d5\u05e4\u05df {0}","Fonts":"\u05d2\u05d5\u05e4\u05e0\u05d9\u05dd","Food and Drink":"\u05d0\u05d5\u05db\u05dc \u05d5\u05e9\u05ea\u05d9\u05d9\u05d4","Footer":"\u05ea\u05d7\u05ea\u05d9\u05ea \u05e2\u05de\u05d5\u05d3","Format":"\u05e2\u05d9\u05e6\u05d5\u05d1","Format {0}":"\u05e4\u05d5\u05e8\u05de\u05d8 {0}","Formats":"\u05e2\u05d9\u05e6\u05d5\u05d1\u05d9\u05dd","Fullscreen":"\u05de\u05e1\u05da \u05de\u05dc\u05d0","G":"G","General":"\u05db\u05dc\u05dc\u05d9","Gray":"\u05d0\u05e4\u05d5\u05e8","Green":"\u05d9\u05e8\u05d5\u05e7","Green component":"\u05de\u05e8\u05db\u05d9\u05d1 \u05d9\u05e8\u05d5\u05e7","Groove":"\u05d7\u05e8\u05d9\u05e5","Handy Shortcuts":"\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9\u05dd \u05e9\u05d9\u05de\u05d5\u05e9\u05d9\u05d9\u05dd","Header":"\u05e8\u05d0\u05e9 \u05e2\u05de\u05d5\u05d3","Header cell":"\u05ea\u05d0 \u05db\u05d5\u05ea\u05e8\u05ea","Heading 1":"\u05db\u05d5\u05ea\u05e8\u05ea 1","Heading 2":"\u05db\u05d5\u05ea\u05e8\u05ea 2","Heading 3":"\u05db\u05d5\u05ea\u05e8\u05ea 3","Heading 4":"\u05db\u05d5\u05ea\u05e8\u05ea 4","Heading 5":"\u05db\u05d5\u05ea\u05e8\u05ea 5","Heading 6":"\u05db\u05d5\u05ea\u05e8\u05ea 6","Headings":"\u05db\u05d5\u05ea\u05e8\u05d5\u05ea","Height":"\u05d2\u05d5\u05d1\u05d4","Help":"\u05e2\u05d6\u05e8\u05d4","Hex color code":"\u05e7\u05d5\u05d3 \u05e6\u05d1\u05e2 Hex","Hidden":"\u05de\u05d5\u05e1\u05ea\u05e8","Horizontal align":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9","Horizontal line":"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9","Horizontal space":"\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9","ID":"\u05de\u05d6\u05d4\u05d4","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u05de\u05d6\u05d4\u05d4 \u05e6\u05e8\u05d9\u05da \u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1\u05d0\u05d5\u05ea \u05de\u05dc\u05d5\u05d5\u05d4 \u05e8\u05e7 \u05d1\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea, \u05de\u05e1\u05e4\u05e8\u05d9\u05dd, \u05de\u05e7\u05e4\u05d9\u05dd, \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea\u05d9\u05d9\u05dd \u05d0\u05d5 \u05de\u05e7\u05e3 \u05ea\u05d7\u05ea\u05d5\u05df.","Image is decorative":"\u05ea\u05de\u05d5\u05e0\u05d4 \u05dc\u05e7\u05d9\u05e9\u05d5\u05d8","Image list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea","Image title":"\u05db\u05d5\u05ea\u05e8\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","Image...":"\u05ea\u05de\u05d5\u05e0\u05d4...","ImageProxy HTTP error: Could not find Image Proxy":"\u05e9\u05d2\u05d9\u05d0\u05ea ImageProxy HTTP: Image Proxy \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u05e9\u05d2\u05d9\u05d0\u05ea ImageProxy HTTP: \u05e9\u05d2\u05d5\u05d9 Image Proxy URL","ImageProxy HTTP error: Rejected request":"\u05e9\u05d2\u05d9\u05d0\u05ea ImageProxy HTTP: \u05e9\u05d0\u05d9\u05dc\u05ea\u05d4 \u05e0\u05d3\u05d7\u05d4","ImageProxy HTTP error: Unknown ImageProxy error":"\u05e9\u05d2\u05d9\u05d0\u05ea ImageProxy HTTP: \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2 ImageProxy error","Increase indent":"\u05d4\u05d2\u05d3\u05dc \u05d4\u05d6\u05d7\u05d4","Inline":"\u05d1\u05ea\u05d5\u05da \u05e9\u05d5\u05e8\u05d4","Insert":"\u05d4\u05db\u05e0\u05e1","Insert Template":"\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea","Insert accordion":"\u05d4\u05db\u05e0\u05e1 \u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df","Insert column after":"\u05d4\u05db\u05e0\u05e1 \u05e2\u05de\u05d5\u05d3\u05d4 \u05d0\u05d7\u05e8\u05d9","Insert column before":"\u05d4\u05db\u05e0\u05e1 \u05e2\u05de\u05d5\u05d3\u05d4 \u05dc\u05e4\u05e0\u05d9","Insert date/time":"\u05d4\u05db\u05e0\u05e1 \u05ea\u05d0\u05e8\u05d9\u05da/\u05e9\u05e2\u05d4","Insert image":"\u05d4\u05db\u05e0\u05e1 \u05ea\u05de\u05d5\u05e0\u05d4","Insert link (if link plugin activated)":"\u05d4\u05db\u05e0\u05e1 \u05e7\u05d9\u05e9\u05d5\u05e8 (\u05d0\u05dd \u05d9\u05d9\u05e9\u05d5\u05dd \u05d4-Plugin \u05dc\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d4\u05d5\u05e4\u05e2\u05dc)","Insert row after":"\u05d4\u05db\u05e0\u05e1 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9","Insert row before":"\u05d4\u05db\u05e0\u05e1 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9","Insert table":"\u05d4\u05db\u05e0\u05e1 \u05d8\u05d1\u05dc\u05d4","Insert template...":"\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea...","Insert video":"\u05d4\u05db\u05e0\u05e1 \u05e1\u05e8\u05d8\u05d5\u05df","Insert/Edit code sample":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3","Insert/edit image":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05ea\u05de\u05d5\u05e0\u05d4","Insert/edit link":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05e7\u05d9\u05e9\u05d5\u05e8","Insert/edit media":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05de\u05d3\u05d9\u05d4","Insert/edit video":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05e1\u05e8\u05d8\u05d5\u05df","Inset":"\u05d4\u05db\u05e0\u05e1","Invalid hex color code: {0}":"\u05e7\u05d5\u05d3 \u05e6\u05d1\u05e2 Hex \u05e9\u05d2\u05d5\u05d9: {0}","Invalid input":"\u05e7\u05dc\u05d8 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9","Italic":"\u05e0\u05d8\u05d5\u05d9","Justify":"\u05d9\u05d9\u05e9\u05e8","Keyboard Navigation":"\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d1\u05de\u05e7\u05dc\u05d3\u05ea","Language":"\u05e9\u05e4\u05d4","Learn more...":"\u05dc\u05de\u05d3 \u05e2\u05d5\u05d3...","Left":"\u05e9\u05de\u05d0\u05dc","Left to right":"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df","Light Blue":"\u05db\u05d7\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8","Light Gray":"\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d4\u05d9\u05e8","Light Green":"\u05d9\u05e8\u05d5\u05e7 \u05d1\u05d4\u05d9\u05e8","Light Purple":"\u05e1\u05d2\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8","Light Red":"\u05d0\u05d3\u05d5\u05dd \u05d1\u05d4\u05d9\u05e8","Light Yellow":"\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8","Line height":"\u05d2\u05d5\u05d1\u05d4 \u05e7\u05d5","Link list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","Link...":"\u05e7\u05d9\u05e9\u05d5\u05e8...","List Properties":"\u05e0\u05db\u05e1\u05d9 \u05e8\u05e9\u05d9\u05de\u05d4","List properties...":"\u05e0\u05db\u05e1\u05d9 \u05e8\u05e9\u05d9\u05de\u05d4...","Loading emojis...":"\u05d8\u05d5\u05e2\u05df \u05d0\u05d9\u05de\u05d5\u05d2'\u05d9...","Loading...":"\u05d8\u05d5\u05e2\u05df...","Lower Alpha":"\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea","Lower Greek":"\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d9\u05d5\u05d5\u05e0\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea","Lower Roman":"\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea","Match case":"\u05d4\u05ea\u05d0\u05dd \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea","Mathematical":"\u05de\u05ea\u05de\u05d8\u05d9","Media poster (Image URL)":"\u05e4\u05d5\u05e1\u05d8\u05e8 \u05de\u05d3\u05d9\u05d4 (\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05ea\u05de\u05d5\u05e0\u05d4)","Media...":"\u05de\u05d3\u05d9\u05d4...","Medium Blue":"\u05db\u05d7\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9","Medium Gray":"\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9","Medium Purple":"\u05e1\u05d2\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9","Merge cells":"\u05de\u05d6\u05d2 \u05ea\u05d0\u05d9\u05dd","Middle":"\u05d0\u05de\u05e6\u05e2","Midnight Blue":"\u05db\u05d7\u05d5\u05dc \u05d7\u05e6\u05d5\u05ea","More...":"\u05e2\u05d5\u05d3...","Name":"\u05e9\u05dd","Navy Blue":"\u05db\u05d7\u05d5\u05dc \u05e6\u05d9","New document":"\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9","New window":"\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","Next":"\u05d4\u05d1\u05d0","No":"\u05dc\u05d0","No alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8","No color":"\u05dc\u05dc\u05d0 \u05e6\u05d1\u05e2","Nonbreaking space":"\u05e8\u05d5\u05d5\u05d7 \u05e7\u05e9\u05d9\u05d7","None":"\u05dc\u05dc\u05d0","Numbered list":"\u05e8\u05e9\u05d9\u05de\u05d4 \u05de\u05de\u05d5\u05e1\u05e4\u05e8\u05ea","OR":"\u05d0\u05d5","Objects":"\u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd","Ok":"\u05d0\u05d9\u05e9\u05d5\u05e8","Open help dialog":"\u05e4\u05ea\u05d7 \u05ea\u05d9\u05d1\u05ea \u05d3\u05d5-\u05e9\u05d9\u05d7 \u05e9\u05dc \u05e2\u05d6\u05e8\u05d4","Open link":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8","Open link in...":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1...","Open popup menu for split buttons":"\u05e4\u05ea\u05d7 \u05ea\u05e4\u05e8\u05d9\u05d8 \u05e8\u05e9\u05d9\u05de\u05d4 \u05dc\u05db\u05e4\u05ea\u05d5\u05e8\u05d9 \u05e4\u05d9\u05e6\u05d5\u05dc","Orange":"\u05db\u05ea\u05d5\u05dd","Outset":"\u05e4\u05bc\u05b0\u05ea\u05b4\u05d9\u05d7\u05b8\u05d4","Page break":"\u05de\u05e2\u05d1\u05e8 \u05e2\u05de\u05d5\u05d3","Paragraph":"\u05e4\u05e1\u05e7\u05d4","Paste":"\u05d4\u05d3\u05d1\u05e7","Paste as text":"\u05d4\u05d3\u05d1\u05e7 \u05db\u05d8\u05e7\u05e1\u05d8","Paste column after":"\u05d4\u05d3\u05d1\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05dc\u05e4\u05e0\u05d9","Paste column before":"\u05d4\u05d3\u05d1\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05dc\u05e4\u05e0\u05d9","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d1\u05de\u05e6\u05d1 \u05d8\u05e7\u05e1\u05d8 \u05e4\u05e9\u05d5\u05d8. \u05ea\u05db\u05e0\u05d9\u05dd \u05d9\u05d5\u05d3\u05d1\u05e7\u05d5 \u05db\u05d8\u05e7\u05e1\u05d8 \u05e4\u05e9\u05d5\u05d8 \u05e2\u05d3 \u05e9\u05ea\u05db\u05d1\u05d4 \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05d6\u05d5.","Paste or type a link":"\u05d4\u05d3\u05d1\u05e7 \u05d0\u05d5 \u05d4\u05e7\u05dc\u05d3 \u05e7\u05d9\u05e9\u05d5\u05e8","Paste row after":"\u05d4\u05d3\u05d1\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9","Paste row before":"\u05d4\u05d3\u05d1\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9","Paste your embed code below:":"\u05d4\u05d3\u05d1\u05e7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05d4\u05de\u05d5\u05d8\u05d1\u05e2 \u05dc\u05de\u05d8\u05d4:","People":"\u05d0\u05e0\u05e9\u05d9\u05dd","Plugins":"\u05d9\u05d9\u05e9\u05d5\u05de\u05d9 Plugin","Plugins installed ({0}):":"\u05d9\u05d9\u05e9\u05d5\u05de\u05d9 Plugin \u05e9\u05d4\u05d5\u05ea\u05e7\u05e0\u05d5 \u200f({0}):","Powered by {0}":"\u05de\u05d5\u05e4\u05e2\u05dc \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea {0}","Pre":"\u05dc\u05e4\u05e0\u05d9","Preferences":"\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea","Preformatted":"\u05de\u05e2\u05d5\u05e6\u05d1 \u05de\u05e8\u05d0\u05e9","Premium plugins:":"\u05d9\u05d9\u05e9\u05d5\u05de\u05d9 Plugin \u05de\u05ea\u05e7\u05d3\u05de\u05d9\u05dd:","Press the Up and Down arrow keys to resize the editor.":"\u05d4\u05e7\u05e9 \u05e2\u05dc \u05de\u05e7\u05e9\u05d9 \u05d4\u05d7\u05e6\u05d9\u05dd \u05dc\u05de\u05e2\u05dc\u05d4 \u05d5\u05dc\u05de\u05d8\u05d4 \u05db\u05d3\u05d9 \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d2\u05d5\u05d3\u05dc \u05d4\u05e2\u05d5\u05e8\u05da.","Press the arrow keys to resize the editor.":"\u05d4\u05e7\u05e9 \u05e2\u05dc \u05de\u05e7\u05e9\u05d9 \u05d4\u05d7\u05e6\u05d9\u05dd \u05db\u05d3\u05d9 \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d2\u05d5\u05d3\u05dc \u05d4\u05e2\u05d5\u05e8\u05da.","Press {0} for help":"\u05dc\u05d7\u05e5 \u05e2\u05dc {0} \u05dc\u05e7\u05d1\u05dc\u05ea \u05e2\u05d6\u05e8\u05d4","Preview":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4","Previous":"\u05d4\u05e7\u05d5\u05d3\u05dd","Print":"\u05d4\u05d3\u05e4\u05e1","Print...":"\u05d4\u05d3\u05e4\u05e1...","Purple":"\u05e1\u05d2\u05d5\u05dc","Quotations":"\u05e9\u05d0\u05dc\u05d5\u05ea","R":"R","Range 0 to 255":"\u05d8\u05d5\u05d5\u05d7 0 \u05e2\u05d3 255","Red":"\u05d0\u05d3\u05d5\u05dd","Red component":"\u05de\u05e8\u05db\u05d9\u05d1 \u05d0\u05d3\u05d5\u05dd","Redo":"\u05d1\u05e6\u05e2 \u05e9\u05d5\u05d1","Remove":"\u05d4\u05e1\u05e8","Remove color":"\u05d4\u05e1\u05e8 \u05e6\u05d1\u05e2","Remove link":"\u05d4\u05e1\u05e8 \u05e7\u05d9\u05e9\u05d5\u05e8","Replace":"\u05d4\u05d7\u05dc\u05e3","Replace all":"\u05d4\u05d7\u05dc\u05e3 \u05d4\u05db\u05dc","Replace with":"\u05d4\u05d7\u05dc\u05e3 \u05d1","Resize":"\u05e9\u05e0\u05d4 \u05d2\u05d5\u05d3\u05dc","Restore last draft":"\u05e9\u05d7\u05d6\u05e8 \u05d8\u05d9\u05d5\u05d8\u05d4 \u05d0\u05d7\u05e8\u05d5\u05e0\u05d4","Reveal or hide additional toolbar items":"\u05d7\u05e9\u05d5\u05e3 \u05d0\u05d5 \u05d4\u05e1\u05ea\u05e8 \u05e4\u05e8\u05d9\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd \u05d1\u05e1\u05e8\u05d2\u05dc \u05db\u05dc\u05d9\u05dd","Rich Text Area":"\u05d0\u05d6\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8","Rich Text Area. Press ALT-0 for help.":"\u05d0\u05d6\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8. \u05d4\u05e7\u05e9 \u05e2\u05dc ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u05d0\u05d6\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8. \u05d4\u05e7\u05e9 \u05e2\u05dc Alt-F9 \u05dc\u05ea\u05e4\u05e8\u05d9\u05d8. \u05d4\u05e7\u05e9 \u05e2\u05dc Alt-F10 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd. \u05d4\u05e7\u05e9 \u05e2\u05dc Alt-0 \u05dc\u05e2\u05d6\u05e8\u05d4","Ridge":"\u05e7\u05e6\u05d4","Right":"\u05d9\u05de\u05d9\u05df","Right to left":"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","Row":"\u05e9\u05d5\u05e8\u05d4","Row clipboard actions":"\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05dc\u05d5\u05d7 \u05e7\u05dc\u05d9\u05e4 \u05dc\u05e9\u05d5\u05e8\u05d4","Row group":"\u05e7\u05d1\u05d5\u05e6\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea","Row header":"\u05db\u05d5\u05ea\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4","Row properties":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e9\u05d5\u05e8\u05d4","Row type":"\u05e1\u05d5\u05d2 \u05e9\u05d5\u05e8\u05d4","Rows":"\u05e9\u05d5\u05e8\u05d5\u05ea","Save":"\u05e9\u05de\u05d5\u05e8","Save (if save plugin activated)":"\u05e9\u05de\u05d5\u05e8 (\u05d0\u05dd \u05d9\u05d9\u05e9\u05d5\u05dd \u05d4-Plugin \u05dc\u05e9\u05de\u05d9\u05e8\u05d4 \u05d4\u05d5\u05e4\u05e2\u05dc)","Scope":"\u05d8\u05d5\u05d5\u05d7","Search":"\u05d7\u05e4\u05e9","Select all":"\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc","Select...":"\u05d1\u05d7\u05e8...","Selection":"\u05d1\u05d7\u05d9\u05e8\u05d4","Shortcut":"\u05e7\u05d9\u05e6\u05d5\u05e8","Show blocks":"\u05d4\u05e6\u05d2 \u05d1\u05dc\u05d5\u05e7\u05d9\u05dd","Show caption":"\u05d4\u05e6\u05d2 \u05db\u05ea\u05d5\u05d1\u05d9\u05ea","Show invisible characters":"\u05d4\u05e6\u05d2 \u05ea\u05d5\u05d5\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e8\u05d0\u05d9\u05dd","Size":"\u05d2\u05d5\u05d3\u05dc","Solid":"\u05de\u05d5\u05e6\u05e7","Source":"\u05de\u05e7\u05d5\u05e8","Source code":"\u05e7\u05d5\u05d3 \u05de\u05e7\u05d5\u05e8","Special Character":"\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd","Special character...":"\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd...","Split cell":"\u05e4\u05e6\u05dc \u05ea\u05d0","Square":"\u05e8\u05d9\u05d1\u05d5\u05e2","Start list at number":"\u05d4\u05ea\u05d7\u05dc \u05e8\u05e9\u05d9\u05de\u05d4 \u05de\u05de\u05e1\u05e4\u05e8","Strikethrough":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","Style":"\u05e1\u05d2\u05e0\u05d5\u05df","Subscript":"\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9","Superscript":"\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9","Switch to or from fullscreen mode":"\u05d4\u05d7\u05dc\u05e3 \u05dc\u05de\u05e6\u05d1 \u05de\u05e1\u05da \u05de\u05dc\u05d0 \u05d0\u05d5 \u05e6\u05d0 \u05de\u05de\u05e0\u05d5","Symbols":"\u05e1\u05de\u05dc\u05d9\u05dd","System Font":"\u05d2\u05d5\u05e4\u05df \u05de\u05e2\u05e8\u05db\u05ea","Table":"\u05d8\u05d1\u05dc\u05d4","Table caption":"\u05db\u05d5\u05ea\u05e8\u05ea \u05d8\u05d1\u05dc\u05d0","Table properties":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d8\u05d1\u05dc\u05d4","Table styles":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea \u05d8\u05d1\u05dc\u05d4","Template":"\u05ea\u05d1\u05e0\u05d9\u05ea","Templates":"\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea","Text":"\u05d8\u05e7\u05e1\u05d8","Text color":"\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8","Text color {0}":"\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8 {0}","Text to display":"\u05d8\u05e7\u05e1\u05d8 \u05dc\u05ea\u05e6\u05d5\u05d2\u05d4","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u05e0\u05e8\u05d0\u05d4 \u05e9\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d6\u05e0\u05ea \u05d4\u05d9\u05d0 \u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0 \u05dc. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea :mailto?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u05e0\u05e8\u05d0\u05d4 \u05e9\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d6\u05e0\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea http://\u200e?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u05e0\u05e8\u05d0\u05d4 \u05e9\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d6\u05e0\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea https://\u200e?","Title":"\u05db\u05d5\u05ea\u05e8\u05ea","To open the popup, press Shift+Enter":"\u05db\u05d3\u05d9 \u05dc\u05e4\u05ea\u05d5\u05d7 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d9\u05d8 \u05d4\u05de\u05d5\u05e7\u05e4\u05e5, \u05d4\u05e7\u05e9 \u05e2\u05dc Shift+Enter","Toggle accordion":"\u05d4\u05d7\u05dc\u05e3 \u05d0\u05e7\u05d5\u05e8\u05d3\u05d9\u05d5\u05df","Tools":"\u05db\u05dc\u05d9\u05dd","Top":"\u05e7\u05e6\u05d4 \u05e2\u05dc\u05d9\u05d5\u05df","Travel and Places":"\u05e0\u05e1\u05d9\u05e2\u05d4 \u05d5\u05de\u05e7\u05d5\u05de\u05d5\u05ea","Turquoise":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6","Underline":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df","Undo":"\u05d1\u05d8\u05dc","Upload":"\u05d4\u05e2\u05dc\u05d4","Uploading image":"\u05de\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4","Upper Alpha":"\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea","Upper Roman":"\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea","Url":"\u05db\u05ea\u05d5\u05d1\u05ea URL","User Defined":"\u05de\u05d5\u05d2\u05d3\u05e8 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05de\u05e9\u05ea\u05de\u05e9","Valid":"\u05d7\u05d5\u05e7\u05d9","Version":"\u05d2\u05e8\u05e1\u05d4","Vertical align":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","Vertical space":"\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","View":"\u05ea\u05e6\u05d5\u05d2\u05d4","Visual aids":"\u05e2\u05d6\u05e8\u05d9\u05dd \u05d7\u05d6\u05d5\u05ea\u05d9\u05d9\u05dd","Warn":"\u05d0\u05d6\u05d4\u05e8\u05d4","White":"\u05dc\u05d1\u05df","Width":"\u05e8\u05d5\u05d7\u05d1","Word count":"\u05e1\u05e4\u05d9\u05e8\u05ea \u05de\u05d9\u05dc\u05d9\u05dd","Words":"\u05de\u05d9\u05dc\u05d9\u05dd","Words: {0}":"\u05de\u05d9\u05dc\u05d9\u05dd: {0}","Yellow":"\u05e6\u05d4\u05d5\u05d1","Yes":"\u05db\u05df","You are using {0}":"\u05d0\u05ea\u05d4 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1-{0}","You have unsaved changes are you sure you want to navigate away?":"\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e0\u05d5\u05d5\u05d8 \u05d4\u05d7\u05d5\u05e6\u05d4?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da \u05dc\u05d0 \u05ea\u05d5\u05de\u05da \u05d1\u05d2\u05d9\u05e9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 \u05dc\u05dc\u05d5\u05d7. \u05d0\u05e0\u05d0 \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e7\u05e9\u05d9 \u05d4\u05e7\u05d9\u05e6\u05d5\u05e8 Ctrl + X / C / V \u05d1\u05de\u05e7\u05d5\u05dd \u05d6\u05d0\u05ea.","_dir":"rtl","alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8","austral sign":"\u05e1\u05d9\u05de\u05df \u05d0\u05d5\u05e1\u05d8\u05e8\u05dc","cedi sign":"\u05e1\u05d9\u05de\u05df \u05e1\u05d3\u05d9","colon sign":"\u05e1\u05d9\u05de\u05df \u05e7\u05d5\u05dc\u05d5\u05df","cruzeiro sign":"\u05e1\u05d9\u05de\u05df \u05e7\u05e8\u05d5\u05d6\u05e8\u05d5","currency sign":"\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2","dollar sign":"\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05dc\u05e8","dong sign":"\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05e0\u05d2","drachma sign":"\u05e1\u05d9\u05de\u05df \u05d3\u05e8\u05db\u05de\u05d4","euro-currency sign":"\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2 \u05d0\u05d9\u05e8\u05d5","example":"\u05d3\u05d5\u05d2\u05de\u05d4","formatting":"\u05e2\u05d9\u05e6\u05d5\u05d1","french franc sign":"\u05e1\u05d9\u05de\u05df \u05e4\u05e8\u05e0\u05e7 \u05e6\u05e8\u05e4\u05ea\u05d9","german penny symbol":"\u05e1\u05de\u05dc \u05e4\u05e0\u05d9 \u05d2\u05e8\u05de\u05e0\u05d9","guarani sign":"\u05e1\u05d9\u05de\u05df \u05d2\u05d5\u05d0\u05e8\u05e0\u05d9\u05ea","history":"\u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4","hryvnia sign":"\u05e1\u05d9\u05de\u05df \u05e8\u05d9\u05d1\u05e0\u05d9\u05d4","indentation":"\u05d4\u05d6\u05d7\u05d4","indian rupee sign":"\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9 \u05d4\u05d5\u05d3\u05d9","kip sign":"\u05e1\u05d9\u05de\u05df \u05e7\u05d9\u05e4","lira sign":"\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4","livre tournois sign":"\u05e1\u05d9\u05de\u05df \u05dc\u05d1\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e0\u05d5","manat sign":"\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e0\u05d0\u05d8","mill sign":"\u05e1\u05d9\u05de\u05df \u05de\u05d9\u05dc","naira sign":"\u05e1\u05d9\u05de\u05df \u05e0\u05d0\u05d9\u05e8\u05d4","new sheqel sign":"\u05e1\u05d9\u05de\u05df \u05e9\u05e7\u05dc \u05d7\u05d3\u05e9","nordic mark sign":"\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e8\u05e7 \u05e1\u05e7\u05e0\u05d3\u05d9\u05e0\u05d1\u05d9","peseta sign":"\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d8\u05d4","peso sign":"\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d5","ruble sign":"\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05d1\u05dc","rupee sign":"\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9","spesmilo sign":"\u05e1\u05d9\u05de\u05df \u05e1\u05e4\u05e1\u05de\u05d9\u05dc\u05d5","styles":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea","tenge sign":"\u05e1\u05d9\u05de\u05df \u05d8\u05e0\u05d2\u05d4","tugrik sign":"\u05e1\u05d9\u05de\u05df \u05d8\u05d5\u05d2\u05e8\u05d9\u05e7","turkish lira sign":"\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e7\u05d9\u05ea","won sign":"\u05e1\u05d9\u05de\u05df \u05d5\u05d5\u05df","yen character":"\u05ea\u05d5 \u05d9\u05df","yen/yuan character variant one":"\u05de\u05e9\u05ea\u05e0\u05d4 \u05d0\u05d7\u05d3 \u05e9\u05dc \u05ea\u05d5 \u05d9\u05d5\u05d0\u05df/\u05d9\u05df","yuan character":"\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df","yuan character, in hong kong and taiwan":"\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df, \u05d1\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 \u05d5\u05d1\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df","{0} characters":"{0} \u05ea\u05d5\u05d5\u05d9\u05dd","{0} columns, {1} rows":"{0} \u05e2\u05de\u05d5\u05d3\u05d5\u05ea, {1} \u05e9\u05d5\u05e8\u05d5\u05ea","{0} words":"{0} \u05de\u05d9\u05dc\u05d9\u05dd"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/hr.js b/staticfiles/tinymce/langs/hr.js new file mode 100644 index 0000000..a8672ff --- /dev/null +++ b/staticfiles/tinymce/langs/hr.js @@ -0,0 +1 @@ +tinymce.addI18n("hr",{"#":"#","Accessibility":"Pristupa\u010dnost","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Radnja","Activity":"Aktivnosti","Address":"Adresa","Advanced":"Napredne postavke","Align":"Poravnaj","Align center":"Poravnaj po sredini","Align left":"Poravnaj lijevo","Align right":"Poravnaj desno","Alignment":"Poravnanje","Alignment {0}":"","All":"Svi","Alternative description":"Alternativni opis","Alternative source":"Alternativni izvor","Alternative source URL":"URL alternativnog izvora","Anchor":"Sidro","Anchor...":"Sidro...","Anchors":"Sidra","Animals and Nature":"\u017divotinje i priroda","Arrows":"Strelice","B":"B","Background color":"Boja pozadine","Background color {0}":"","Black":"Crna","Block":"Blok","Block {0}":"","Blockquote":"Blockquote","Blocks":"Blokovi","Blue":"Plava","Blue component":"Plava komponenta","Body":"Tijelo","Bold":"Podebljano","Border":"Granica","Border color":"Boja granice","Border style":"Stil granice","Border width":"\u0160irina granice","Bottom":"Dno","Browse files":"","Browse for an image":"Potra\u017eite sliku","Browse links":"","Bullet list":"Popis s oznakama","Cancel":"Odustani","Caption":"Naslov","Cell":"\u0106elija","Cell padding":"Podloga \u0107elije","Cell properties":"Svojstva \u0107elija","Cell spacing":"Razmak izme\u0111u \u0107elija","Cell styles":"Stilovi \u0107elije","Cell type":"Vrsta \u0107elije","Center":"Sredina","Characters":"Znakovi","Characters (no spaces)":"Znakovi (bez razmaka)","Circle":"Krug","Class":"Klasa","Clear formatting":"Izbri\u0161i oblikovanje","Close":"Zatvori","Code":"Kod","Code sample...":"Primjerak k\xf4da...","Code view":"Pregled koda","Color Picker":"Izabira\u010d boja","Color swatch":"Uzorak boje","Cols":"Stupci","Column":"Stupac","Column clipboard actions":"Akcije me\u0111uspremnika za stupac","Column group":"Grupa stupaca","Column header":"Zaglavlje stupca","Constrain proportions":"Ograni\u010di omjere","Copy":"Kopiraj","Copy column":"Kopiraj stupac","Copy row":"Kopiraj redak","Could not find the specified string.":"Nije bilo mogu\u0107e prona\u0107i navedeni niz.","Could not load emojis":"Nije mogu\u0107e u\u010ditati emotikone","Count":"Broj","Currency":"Valuta","Current window":"Trenuta\u010dni prozor","Custom color":"Prilago\u0111ena boja","Custom...":"Prilago\u0111eno...","Cut":"Izre\u017ei","Cut column":"Izre\u017ei stupac","Cut row":"Izre\u017ei redak","Dark Blue":"Tamnoplava","Dark Gray":"Tamnosiva","Dark Green":"Tamnozelena","Dark Orange":"Tamnonaran\u010dasta","Dark Purple":"Tamnoljubi\u010dasta","Dark Red":"Tamnocrvena","Dark Turquoise":"Tamnotirkizna","Dark Yellow":"Tamno\u017euta","Dashed":"Crtkani","Date/time":"Datum/vrijeme","Decrease indent":"Smanji uvla\u010denje","Default":"Standardna vrijednost","Delete accordion":"","Delete column":"Izbri\u0161i stupac","Delete row":"Izbri\u0161i redak","Delete table":"Izbri\u0161i tablicu","Dimensions":"Mjere","Disc":"Disk","Div":"Div","Document":"Dokument","Dotted":"To\u010dkasti","Double":"Dupli","Drop an image here":"Ispustite sliku ovdje","Dropped file type is not supported":"Dodana datoteka nije podr\u017eana","Edit":"Uredi","Embed":"Ugradi","Emojis":"Emotikoni","Emojis...":"Emotikoni...","Error":"Pogre\u0161ka","Error: Form submit field collision.":"Pogre\u0161ka: sukob polja za podno\u0161enje obrasca.","Error: No form element found.":"Pogre\u0161ka: nema elementa oblika.","Extended Latin":"Pro\u0161ireni latinski","Failed to initialize plugin: {0}":"Pokretanje dodatka nije uspjelo: {0}","Failed to load plugin url: {0}":"U\u010ditavanje dodatka nije uspjelo: {0}","Failed to load plugin: {0} from url {1}":"U\u010ditavanje dodatka nije uspjelo: {0} s URL-a {1}","Failed to upload image: {0}":"U\u010ditavanje slike nije uspjelo: {0}","File":"Datoteka","Find":"Na\u0111i","Find (if searchreplace plugin activated)":"Prona\u0111i (ako je dodatak za tra\u017eenje i zamjenjivanje aktiviran)","Find and Replace":"Prona\u0111i i izmjeni","Find and replace...":"Prona\u0111i i zamijeni...","Find in selection":"Prona\u0111i u selekciji","Find whole words only":"Prona\u0111i samo cijele rije\u010di","Flags":"Zastave","Focus to contextual toolbar":"Fokus na kontekstnu alatnu traku","Focus to element path":"Fokus na put elementa","Focus to menubar":"Fokus na traku izbornika","Focus to toolbar":"Fokus na alatnu traku","Font":"Font","Font size {0}":"","Font sizes":"Veli\u010dine fonta","Font {0}":"","Fonts":"Fontovi","Food and Drink":"Hrana i pi\u0107e","Footer":"Podno\u017eje","Format":"Oblikovanje","Format {0}":"","Formats":"Formati","Fullscreen":"Cijeli zaslon","G":"G","General":"Op\u0107e postavke","Gray":"Siva","Green":"Zelena","Green component":"Zelena komponenta","Groove":"Brazda","Handy Shortcuts":"Korisni pre\u010daci","Header":"Zaglavlje","Header cell":"\u0106elija zaglavlja","Heading 1":"Zaglavlje 1","Heading 2":"Zaglavlje 2","Heading 3":"Zaglavlje 3","Heading 4":"Zaglavlje 4","Heading 5":"Zaglavlje 5","Heading 6":"Zaglavlje 6","Headings":"Zaglavlja","Height":"Visina","Help":"Pomo\u0107","Hex color code":"Hex kod boje","Hidden":"Skriven","Horizontal align":"Horizontalno poravnanje","Horizontal line":"Vodoravna crta","Horizontal space":"Vodoravni prostor","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID treba po\u010dinjati sa slovom, te sadr\u017eavati samo slova, brojeve, povlake, to\u010dke, dvoto\u010dke i donje crte.","Image is decorative":"Fotografija je dekorativna","Image list":"Popis slika","Image title":"Naslov slike","Image...":"Slika...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Pove\u0107aj uvla\u010denje","Inline":"U retku","Insert":"Umetni","Insert Template":"Umetni predlo\u017eak","Insert accordion":"","Insert column after":"Umetni stupac iza","Insert column before":"Umetni stupac ispred","Insert date/time":"Umetni datum/vrijeme","Insert image":"Umetni sliku","Insert link (if link plugin activated)":"Umetni poveznicu (ako je dodatak za povezivanje aktiviran)","Insert row after":"Umetni redak iza","Insert row before":"Umetni redak ispred","Insert table":"Umetni tablicu","Insert template...":"Umetni predlo\u017eak...","Insert video":"Umetni videozapis","Insert/Edit code sample":"Umetni/uredi primjerak k\xf4da","Insert/edit image":"Umetni/izmijeni sliku","Insert/edit link":"Umetni/uredi poveznicu","Insert/edit media":"Umetni/uredi medije","Insert/edit video":"Umetni/uredi videozapis","Inset":"Udubljenje","Invalid hex color code: {0}":"Neispravan hex kod boje: {0}","Invalid input":"Neispravan unos","Italic":"Kurziv","Justify":"Obostrano poravnanje","Keyboard Navigation":"Navigacija na tipkovnici","Language":"Jezik","Learn more...":"Saznajte vi\u0161e...","Left":"Lijevo","Left to right":"Slijeva nadesno","Light Blue":"Svjetloplava","Light Gray":"Svijetlosiva","Light Green":"Svjetlozelena","Light Purple":"Svjetloljubi\u010dasta","Light Red":"Svjetlocrvena","Light Yellow":"Svjetlo\u017euta","Line height":"Visina reda","Link list":"Popis poveznica","Link...":"Poveznica...","List Properties":"Svojstva liste","List properties...":"Svojstva liste...","Loading emojis...":"U\u010ditavanje emotikona...","Loading...":"U\u010ditavanje...","Lower Alpha":"Mala slova","Lower Greek":"Mala gr\u010dka slova","Lower Roman":"Male rimske znamenke","Match case":"Prilagodi slova","Mathematical":"Matemati\u010dki","Media poster (Image URL)":"Medijski poster (URL slike)","Media...":"Mediji...","Medium Blue":"Srednje plava","Medium Gray":"Srednje siva","Medium Purple":"Srednje ljubi\u010dasta","Merge cells":"Spoji \u0107elije","Middle":"Sredina","Midnight Blue":"Pono\u0107no plava","More...":"Vi\u0161e...","Name":"Ime","Navy Blue":"Mornarsko plava","New document":"Novi dokument","New window":"Novi prozor","Next":"Sljede\u0107e","No":"Ne","No alignment":"Bez poravnavanja","No color":"Bez boje","Nonbreaking space":"Nerastavljaju\u0107i razmak","None":"Nema","Numbered list":"Numerirani popis","OR":"ILI","Objects":"Predmeti","Ok":"U redu","Open help dialog":"Otvori dijalo\u0161ki okvir za pomo\u0107","Open link":"Otvori poveznicu","Open link in...":"Otvori poveznicu u...","Open popup menu for split buttons":"Otvori padaju\u0107i izbornik na podijeljenim gumbima","Orange":"Naran\u010dasta","Outset":"Ispup\u010denje","Page break":"Prijelom stranice","Paragraph":"Odlomak","Paste":"Zalijepi","Paste as text":"Zalijepi kao tekst","Paste column after":"Zalijepi stupac iza","Paste column before":"Zalijepi stupac ispred","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Radnjom lijepljenja od sada se lijepi obi\u010dan tekst. Sadr\u017eaj \u0107e se lijepiti kao obi\u010dan tekst sve dok ne isklju\u010dite ovu opciju.","Paste or type a link":"Zalijepite ili upi\u0161ite poveznicu","Paste row after":"Zalijepi redak iza","Paste row before":"Zalijepi redak ispred","Paste your embed code below:":"Zalijepite k\xf4d za ugradnju u nastavku:","People":"Osobe","Plugins":"Dodaci","Plugins installed ({0}):":"Instalirani dodaci ({0}):","Powered by {0}":"Omogu\u0107uje {0}","Pre":"Pre","Preferences":"Postavke","Preformatted":"Prethodno oblikovano","Premium plugins:":"Premium dodaci:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"Pritisnite strelice za promjenu veli\u010dine ure\u0111iva\u010da.","Press {0} for help":"","Preview":"Pretpregled","Previous":"Prethodno","Print":"Ispi\u0161i","Print...":"Ispi\u0161i...","Purple":"Ljubi\u010dasta","Quotations":"Navodnici","R":"R","Range 0 to 255":"Raspon 0 do 255","Red":"Crvena","Red component":"Crvena komponenta","Redo":"Ponovi","Remove":"Ukloni","Remove color":"Ukloni boju","Remove link":"Ukloni poveznicu","Replace":"Zamijeni","Replace all":"Zamijeni sve","Replace with":"Zamijeni s","Resize":"Promijeni veli\u010dinu","Restore last draft":"Vrati posljednju skicu","Reveal or hide additional toolbar items":"","Rich Text Area":"Podru\u010dje oboga\u0107enog teksta","Rich Text Area. Press ALT-0 for help.":"Podru\u010dje oboga\u0107enog teksta. Pritisnite ALT-0 za pomo\u0107.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Podru\u010dje oboga\u0107enog teksta. Pritisnite ALT-F9 za izbornik. Pritisnite ALT-F10 za alatnu traku. Pritisnite ALT-0 za pomo\u0107","Ridge":"Izbo\u010denje","Right":"Desno","Right to left":"Zdesna ulijevo","Row":"Redak","Row clipboard actions":"Akcije me\u0111uspremnika za redak","Row group":"Grupa redaka","Row header":"Zaglavlje retka","Row properties":"Svojstva retka","Row type":"Vrsta retka","Rows":"Redovi","Save":"Spremi","Save (if save plugin activated)":"Spremi (ako je dodatak za spremanje aktiviran)","Scope":"Podru\u010dje va\u017eenja","Search":"Tra\u017ei","Select all":"Odaberi sve","Select...":"Odaberi...","Selection":"Odabir","Shortcut":"Pre\u010dac","Show blocks":"Prika\u017ei blokove","Show caption":"Prika\u017ei naslov","Show invisible characters":"Prika\u017ei nevidljive znakove","Size":"Veli\u010dina","Solid":"Puni","Source":"Izvor","Source code":"Izvorni k\xf4d","Special Character":"Poseban znak","Special character...":"Poseban znak...","Split cell":"Razdvoji \u0107elije","Square":"Kvadrat","Start list at number":"Kreni listu s brojem","Strikethrough":"Prekri\u017ei","Style":"Format","Subscript":"Indeks","Superscript":"Eksponent","Switch to or from fullscreen mode":"Prebacivanje u prikaz preko cijelog zaslona ili iz njega","Symbols":"Simboli","System Font":"Font sustava","Table":"Tablica","Table caption":"Naslov tablice","Table properties":"Svojstva tablice","Table styles":"Stilovi tablice","Template":"Predlo\u017eak","Templates":"Predlo\u0161ci","Text":"Tekst","Text color":"Boja teksta","Text color {0}":"","Text to display":"Tekst za prikaz","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Izgleda da je URL koji ste upisali adresa e-po\u0161te. \u017delite li dodati obavezan prefiks mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Izgleda da je URL koji ste upisali vanjska poveznica. \u017delite li dodati obavezan prefiks http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Izgleda da je URL koji ste upisali vanjska poveznica. \u017delite li dodati obavezan prefiks https://?","Title":"Naslov","To open the popup, press Shift+Enter":"Da biste otvorili sko\u010dni prozor, pritisnite Shift\xa0+\xa0Enter","Toggle accordion":"","Tools":"Alati","Top":"Vrh","Travel and Places":"Putovanje i mjesta","Turquoise":"Tirkizna","Underline":"Podcrtaj","Undo":"Poni\u0161ti","Upload":"U\u010ditaj","Uploading image":"U\u010ditavanje fotografije","Upper Alpha":"Velika slova","Upper Roman":"Velike rimske znamenke","Url":"URL","User Defined":"Korisni\u010dki definirano","Valid":"Valjano","Version":"Ina\u010dica","Vertical align":"Vertikalno poravnanje","Vertical space":"Uspravni prostor","View":"Prikaz","Visual aids":"Vizualna pomo\u0107","Warn":"Upozori","White":"Bijela","Width":"\u0160irina","Word count":"Broj rije\u010di","Words":"Rije\u010di","Words: {0}":"Rije\u010di: {0}","Yellow":"\u017duta","Yes":"Da","You are using {0}":"Upotrebljavate {0}","You have unsaved changes are you sure you want to navigate away?":"Imate nepohranjene izmjene, jeste li sigurni da \u017eelite oti\u0107i?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Va\u0161 preglednik ne podr\u017eava izravan pristup me\u0111uspremniku. Umjesto toga upotrijebite tipkovni\u010dke pre\u010dace Ctrl\xa0+\xa0X/C/V.","alignment":"poravnanje","austral sign":"znak za austral","cedi sign":"znak za cedi","colon sign":"znak za kolon","cruzeiro sign":"znak za cruzeiro","currency sign":"znak za valutu","dollar sign":"znak za dolar","dong sign":"znak za dong","drachma sign":"znak za drahmu","euro-currency sign":"znak za valutu \u2013 euro","example":"primjer","formatting":"oblikovanje","french franc sign":"znak za francuski franak","german penny symbol":"simbol za njema\u010dki peni","guarani sign":"znak za gvarani","history":"povijest","hryvnia sign":"znak za grivnju","indentation":"uvlaka","indian rupee sign":"znak za indijsku rupiju","kip sign":"znak za kip","lira sign":"znak za liru","livre tournois sign":"znak za livre tournois","manat sign":"znak za manat","mill sign":"znak za mill","naira sign":"znak za nairu","new sheqel sign":"znak za novi \u0161ekel","nordic mark sign":"znak za nordijsku marku","peseta sign":"znak za pezetu","peso sign":"znak za pezo","ruble sign":"znak za rubalj","rupee sign":"znak za rupiju","spesmilo sign":"znak za spesmilo","styles":"stilovi","tenge sign":"znak za tengu","tugrik sign":"znak za tugrik","turkish lira sign":"znak za tursku liru","won sign":"znak za von","yen character":"znak za jen","yen/yuan character variant one":"znak za jen/juan, prva varijanta","yuan character":"znak za juan","yuan character, in hong kong and taiwan":"znak za juan, u Hong Kongu i Tajvanu","{0} characters":"{0} znakova","{0} columns, {1} rows":"","{0} words":"{0} rije\u010d(i)"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/hu_HU.js b/staticfiles/tinymce/langs/hu_HU.js new file mode 100644 index 0000000..4d934b0 --- /dev/null +++ b/staticfiles/tinymce/langs/hu_HU.js @@ -0,0 +1 @@ +tinymce.addI18n("hu_HU",{"#":"#","Accessibility":"Akad\xe1lymentes\xedt\xe9s","Accordion":"Harmonika","Accordion body...":"Harmonika tartalma...","Accordion summary...":"Harmonika \xf6sszegz\xe9se...","Action":"M\u0171velet","Activity":"Tev\xe9kenys\xe9gek","Address":"C\xedm","Advanced":"Speci\xe1lis","Align":"Igaz\xedt\xe1s","Align center":"K\xf6z\xe9pre igaz\xedt\xe1s","Align left":"Balra igaz\xedt\xe1s","Align right":"Jobbra igaz\xedt\xe1s","Alignment":"Igaz\xedt\xe1s","Alignment {0}":"{0} igaz\xedt\xe1sa","All":"Minden","Alternative description":"Alternat\xedv le\xedr\xe1s","Alternative source":"Alternat\xedv forr\xe1s","Alternative source URL":"Alternat\xedv forr\xe1s URL","Anchor":"Horgony","Anchor...":"Horgony...","Anchors":"Horgonyok","Animals and Nature":"\xc1llatok \xe9s term\xe9szet","Arrows":"Nyilak","B":"B","Background color":"H\xe1tt\xe9rsz\xedn","Background color {0}":"H\xe1tt\xe9rsz\xedn {0}","Black":"Fekete","Block":"Blokk","Block {0}":"{0} sz\xf6vegblokk","Blockquote":"Id\xe9zetblokk","Blocks":"Blokkok","Blue":"K\xe9k","Blue component":"K\xe9k komponens","Body":"Sz\xf6vegt\xf6rzs","Bold":"F\xe9lk\xf6v\xe9r","Border":"Szeg\xe9ly","Border color":"Szeg\xe9lysz\xedn","Border style":"Szeg\xe9ly st\xedlusa","Border width":"Szeg\xe9ly vastags\xe1ga","Bottom":"Alulra","Browse files":"Tall\xf3z\xe1s a f\xe1jlok k\xf6z\xf6tt","Browse for an image":"K\xe9p keres\xe9se tall\xf3z\xe1ssal","Browse links":"Tall\xf3z\xe1s a linkek k\xf6z\xf6tt","Bullet list":"Listajeles lista","Cancel":"M\xe9gse","Caption":"Felirat","Cell":"Cella","Cell padding":"Cellamarg\xf3","Cell properties":"Cella tulajdons\xe1gai","Cell spacing":"Cellat\xe1vols\xe1g","Cell styles":"Cellast\xedlusok","Cell type":"Cellat\xedpus","Center":"K\xf6z\xe9pre","Characters":"Karakterek","Characters (no spaces)":"Karakterek (sz\xf3k\xf6z\xf6k n\xe9lk\xfcl)","Circle":"K\xf6r","Class":"Oszt\xe1ly","Clear formatting":"Form\xe1z\xe1s t\xf6rl\xe9se","Close":"Bez\xe1r\xe1s","Code":"K\xf3d","Code sample...":"K\xf3dminta...","Code view":"K\xf3dn\xe9zet","Color Picker":"Sz\xednv\xe1laszt\xf3","Color swatch":"Sz\xednpaletta","Cols":"Oszlopok","Column":"Oszlop","Column clipboard actions":"Oszlop v\xe1g\xf3lapi m\u0171veletek","Column group":"Oszlopcsoport","Column header":"Oszlopfejl\xe9c","Constrain proportions":"M\xe9retar\xe1ny","Copy":"M\xe1sol\xe1s","Copy column":"Oszlop m\xe1sol\xe1sa","Copy row":"Sor m\xe1sol\xe1sa","Could not find the specified string.":"A be\xedrt kifejez\xe9s nem tal\xe1lhat\xf3.","Could not load emojis":"A hangulatjeleket nem siker\xfclt bet\xf6lteni","Count":"Sz\xe1m","Currency":"P\xe9nznem","Current window":"Jelenlegi ablak","Custom color":"Egy\xe9ni sz\xedn","Custom...":"Egy\xe9ni...","Cut":"Kiv\xe1g\xe1s","Cut column":"Oszlop kiv\xe1g\xe1sa","Cut row":"Sor kiv\xe1g\xe1sa","Dark Blue":"S\xf6t\xe9tk\xe9k","Dark Gray":"S\xf6t\xe9tsz\xfcrke","Dark Green":"S\xf6t\xe9tz\xf6ld","Dark Orange":"S\xf6t\xe9t narancss\xe1rga","Dark Purple":"S\xf6t\xe9tlila","Dark Red":"S\xf6t\xe9tv\xf6r\xf6s","Dark Turquoise":"S\xf6t\xe9tt\xfcrkiz","Dark Yellow":"S\xf6t\xe9ts\xe1rga","Dashed":"Szaggatott","Date/time":"D\xe1tum/id\u0151","Decrease indent":"Beh\xfaz\xe1s cs\xf6kkent\xe9se","Default":"Alap\xe9rtelmezett","Delete accordion":"Harmonika t\xf6rl\xe9se","Delete column":"Oszlop t\xf6rl\xe9se","Delete row":"Sor t\xf6rl\xe9se","Delete table":"T\xe1bl\xe1zat t\xf6rl\xe9se","Dimensions":"M\xe9retek","Disc":"Pont","Div":"Div","Document":"Dokumentum","Dotted":"Pontozott","Double":"Dupla","Drop an image here":"H\xfazz ide egy k\xe9pet","Dropped file type is not supported":"Nem t\xe1mogatott f\xe1jlt\xedpus","Edit":"Szerkeszt\xe9s","Embed":"Be\xe1gyaz\xe1s","Emojis":"Hangulatjelek","Emojis...":"Hangulatjelek...","Error":"Hiba","Error: Form submit field collision.":"Hiba: \xdctk\xf6z\xe9s t\xf6rt\xe9nt az \u0171rlap elk\xfcld\xe9sekor.","Error: No form element found.":"Hiba: Nem tal\xe1lhat\xf3 \u0171rlap elem.","Extended Latin":"B\u0151v\xedtett latin","Failed to initialize plugin: {0}":"Nem siker\xfclt el\u0151k\xe9sz\xedteni a be\xe9p\xfcl\u0151 modult: {0}","Failed to load plugin url: {0}":"Nem siker\xfclt bet\xf6lteni a be\xe9p\xfcl\u0151 modul webc\xedm\xe9t: {0}","Failed to load plugin: {0} from url {1}":"Nem siker\xfclt bet\xf6lteni a be\xe9p\xfcl\u0151 modult: {0} err\u0151l a webc\xedmr\u0151l: {1}","Failed to upload image: {0}":"Nem siker\xfclt felt\xf6lteni a k\xe9pet: {0}","File":"F\xe1jl","Find":"Keres\xe9s","Find (if searchreplace plugin activated)":"Keres\xe9s (ha a keres\xe9s \xe9s csere be\xe9p\xfcl\u0151 modul enged\xe9lyezett)","Find and Replace":"Keres\xe9s \xe9s csere","Find and replace...":"Keres\xe9s \xe9s csere...","Find in selection":"Keres\xe9s a kiv\xe1laszt\xe1sban","Find whole words only":"Csak teljes szavak keres\xe9se","Flags":"Z\xe1szl\xf3k","Focus to contextual toolbar":"F\xf3kusz a k\xf6rnyezetf\xfcgg\u0151 eszk\xf6zt\xe1rra","Focus to element path":"F\xf3kusz az elem el\xe9r\xe9si \xfatj\xe1ra","Focus to menubar":"F\xf3kusz a men\xfcre","Focus to toolbar":"F\xf3kusz az eszk\xf6zt\xe1rra","Font":"Bet\u0171t\xedpus","Font size {0}":"{0} bet\u0171m\xe9ret","Font sizes":"Bet\u0171m\xe9ret","Font {0}":"{0} bet\u0171t\xedpus","Fonts":"Bet\u0171t\xedpusok","Food and Drink":"\xc9tel, ital","Footer":"L\xe1bl\xe9c","Format":"Form\xe1tum","Format {0}":"{0} form\xe1tum","Formats":"Form\xe1tumok","Fullscreen":"Teljes k\xe9perny\u0151","G":"G","General":"\xc1ltal\xe1nos","Gray":"Sz\xfcrke","Green":"Z\xf6ld","Green component":"Z\xf6ld komponens","Groove":"Faragott","Handy Shortcuts":"Hasznos billenty\u0171parancsok","Header":"Fejl\xe9c","Header cell":"C\xedmsor cella","Heading 1":"1. c\xedmsor","Heading 2":"2. c\xedmsor","Heading 3":"3. c\xedmsor","Heading 4":"4. c\xedmsor","Heading 5":"5. c\xedmsor","Heading 6":"6. c\xedmsor","Headings":"C\xedmsorok","Height":"Magass\xe1g","Help":"S\xfag\xf3","Hex color code":"Hexadecim\xe1lis sz\xednk\xf3d","Hidden":"Rejtett","Horizontal align":"V\xedzszintes igaz\xedt\xe1s","Horizontal line":"V\xedzszintes vonal","Horizontal space":"T\xe9rk\xf6z v\xedzszintesen","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"Az ID bet\u0171vel kezd\u0151dj\xf6n, \xe9s csak bet\u0171ket, sz\xe1mokat, k\xf6t\u0151jelet, pontot, kett\u0151spontot vagy alulvon\xe1st tartalmazzon.","Image is decorative":"Dekor\xe1ci\xf3s k\xe9p","Image list":"K\xe9plista","Image title":"K\xe9p c\xedme","Image...":"K\xe9p...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP hiba: nincs ilyen Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP hiba: helytelen Image Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP hiba: k\xe9r\xe9s elutas\xedtva","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP hiba: ismeretlen ImageProxy hiba","Increase indent":"Beh\xfaz\xe1s n\xf6vel\xe9se","Inline":"Foly\xf3 sz\xf6veg","Insert":"Besz\xfar\xe1s","Insert Template":"Sablon besz\xfar\xe1sa","Insert accordion":"Harmonika besz\xfar\xe1sa","Insert column after":"Oszlop besz\xfar\xe1sa m\xf6g\xe9","Insert column before":"Oszlop besz\xfar\xe1sa el\xe9","Insert date/time":"D\xe1tum/id\u0151 beilleszt\xe9se","Insert image":"K\xe9p beilleszt\xe9se","Insert link (if link plugin activated)":"Hivatkoz\xe1s besz\xfar\xe1sa (ha a hivatkoz\xe1s be\xe9p\xfcl\u0151 modul enged\xe9lyezett)","Insert row after":"Sor besz\xfar\xe1sa m\xf6g\xe9","Insert row before":"Sor besz\xfar\xe1sa el\xe9","Insert table":"T\xe1bl\xe1zat beilleszt\xe9se","Insert template...":"Sablon besz\xfar\xe1sa...","Insert video":"Vide\xf3 beilleszt\xe9se","Insert/Edit code sample":"K\xf3dminta besz\xfar\xe1sa/szerkeszt\xe9se","Insert/edit image":"K\xe9p beilleszt\xe9se/szerkeszt\xe9se","Insert/edit link":"Hivatkoz\xe1s besz\xfar\xe1sa/szerkeszt\xe9se","Insert/edit media":"M\xe9dia beilleszt\xe9se/szerkeszt\xe9se","Insert/edit video":"Vide\xf3 beilleszt\xe9se/szerkeszt\xe9se","Inset":"S\xfcllyesztett","Invalid hex color code: {0}":"\xc9rv\xe9nytelen hexadecim\xe1lis sz\xednk\xf3d: {0}","Invalid input":"\xc9rv\xe9nytelen bemenet","Italic":"D\u0151lt","Justify":"Sorkiz\xe1rt","Keyboard Navigation":"Billenty\u0171zettel val\xf3 navig\xe1l\xe1s","Language":"Nyelv","Learn more...":"Tudj meg t\xf6bbet...","Left":"Balra","Left to right":"Balr\xf3l jobbra","Light Blue":"Vil\xe1gosk\xe9k","Light Gray":"Vil\xe1gossz\xfcrke","Light Green":"Vil\xe1gosz\xf6ld","Light Purple":"Vil\xe1goslila","Light Red":"Vil\xe1gospiros","Light Yellow":"Vil\xe1goss\xe1rga","Line height":"Sor magass\xe1ga","Link list":"Hivatkoz\xe1slista","Link...":"Hivatkoz\xe1s...","List Properties":"Lista tulajdons\xe1gai","List properties...":"Lista tulajdons\xe1gai...","Loading emojis...":"Hangulatjelek bet\xf6lt\xe9se...","Loading...":"Bet\xf6lt\xe9s...","Lower Alpha":"Kisbet\u0171s","Lower Greek":"Kisbet\u0171s g\xf6r\xf6g","Lower Roman":"Kisbet\u0171s r\xf3mai sz\xe1mos","Match case":"Kis- \xe9s nagybet\u0171k megk\xfcl\xf6nb\xf6ztet\xe9se","Mathematical":"Matematikai","Media poster (Image URL)":"M\xe9dia poszter (k\xe9p URL)","Media...":"M\xe9dia...","Medium Blue":"Kir\xe1lyk\xe9k","Medium Gray":"K\xf6z\xe9psz\xfcrke","Medium Purple":"K\xf6z\xe9plila","Merge cells":"Cell\xe1k egyes\xedt\xe9se","Middle":"K\xf6z\xe9pre","Midnight Blue":"\xc9jf\xe9lk\xe9k","More...":"Tov\xe1bbiak...","Name":"N\xe9v","Navy Blue":"Tengerk\xe9k","New document":"\xdaj dokumentum","New window":"\xdaj ablak","Next":"K\xf6vetkez\u0151","No":"Nem","No alignment":"Igaz\xedt\xe1s n\xe9lk\xfcl","No color":"Nincs sz\xedn","Nonbreaking space":"Nem t\xf6rhet\u0151 sz\xf3k\xf6z","None":"Nincs","Numbered list":"Sz\xe1mozott lista","OR":"VAGY","Objects":"T\xe1rgyak","Ok":"Rendben","Open help dialog":"S\xfag\xf3ablak megnyit\xe1sa","Open link":"Hivatkoz\xe1s megnyit\xe1sa","Open link in...":"Hivatkoz\xe1s megnyit\xe1sa...","Open popup menu for split buttons":"Felugr\xf3 men\xfc megnyit\xe1sa az osztott gombokhoz","Orange":"Narancss\xe1rga","Outset":"Kiemelt","Page break":"Oldalt\xf6r\xe9s","Paragraph":"Bekezd\xe9s","Paste":"Beilleszt\xe9s","Paste as text":"Beilleszt\xe9s sz\xf6vegk\xe9nt","Paste column after":"Oszlop besz\xfar\xe1sa ut\xe1na","Paste column before":"Oszlop besz\xfar\xe1sa el\xe9","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Beilleszt\xe9s form\xe1zatlan sz\xf6vegk\xe9nt. A tartalom mostant\xf3l form\xe1zatlan sz\xf6vegk\xe9nt lesz beillesztve, am\xedg nem kapcsolod ki ezt az opci\xf3t.","Paste or type a link":"Hivatkoz\xe1s be\xedr\xe1sa vagy beilleszt\xe9se","Paste row after":"Sor besz\xfar\xe1sa ut\xe1na","Paste row before":"Sor beilleszt\xe9se el\xe9","Paste your embed code below:":"Illeszd be a be\xe1gyaz\xe1si k\xf3dot al\xe1bb:","People":"Emberek","Plugins":"Be\xe9p\xfcl\u0151 modulok","Plugins installed ({0}):":"Telep\xedtett be\xe9p\xfcl\u0151 modulok ({0}):","Powered by {0}":"Szolg\xe1ltat\xf3: {0}","Pre":"Pre","Preferences":"Be\xe1ll\xedt\xe1sok","Preformatted":"El\u0151form\xe1zott","Premium plugins:":"Pr\xe9mium be\xe9p\xfcl\u0151 modulok:","Press the Up and Down arrow keys to resize the editor.":"Nyomja meg a fel \xe9s a le ny\xedlgombot a szerkeszt\u0151 \xe1tm\xe9retez\xe9s\xe9hez.","Press the arrow keys to resize the editor.":"Nyomja meg a ny\xedlgombokat a szerkeszt\u0151 \xe1tm\xe9retez\xe9s\xe9hez.","Press {0} for help":"Seg\xedts\xe9g\xe9rt nyomja meg a(z) {0} gombot","Preview":"El\u0151n\xe9zet","Previous":"El\u0151z\u0151","Print":"Nyomtat\xe1s","Print...":"Nyomtat\xe1s...","Purple":"Lila","Quotations":"Id\xe9z\u0151jelek","R":"R","Range 0 to 255":"0-t\xf3l 255-ig","Red":"Piros","Red component":"Piros komponens","Redo":"Ism\xe9t","Remove":"Elt\xe1vol\xedt\xe1s","Remove color":"Sz\xedn t\xf6rl\xe9se","Remove link":"Hivatkoz\xe1s t\xf6rl\xe9se","Replace":"Csere","Replace all":"Az \xf6sszes cser\xe9je","Replace with":"Csere erre:","Resize":"\xc1tm\xe9retez\xe9s","Restore last draft":"Utols\xf3 piszkozat vissza\xe1ll\xedt\xe1sa","Reveal or hide additional toolbar items":"Az eszk\xf6zt\xe1r tov\xe1bbi elemeinek megjelen\xedt\xe9se vagy elrejt\xe9se","Rich Text Area":"Szabadsz\xf6veges mez\u0151","Rich Text Area. Press ALT-0 for help.":"Vizu\xe1lis szerkeszt\u0151 ter\xfclet. Nyomjon ALT-0-t a s\xfag\xf3hoz.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Vizu\xe1lis szerkeszt\u0151 ter\xfclet. Nyomjon ALT-F9-et a men\xfch\xf6z. Nyomjon ALT-F10-et az eszk\xf6zt\xe1rhoz. Nyomjon ALT-0-t a s\xfag\xf3hoz","Ridge":"Dombor\xfa","Right":"Jobbra","Right to left":"Jobbr\xf3l balra","Row":"Sor","Row clipboard actions":"Sor v\xe1g\xf3lapi m\u0171veletek","Row group":"Sorcsoport","Row header":"Sorfejl\xe9c","Row properties":"Sor tulajdons\xe1gai","Row type":"Sort\xedpus","Rows":"Sorok","Save":"Ment\xe9s","Save (if save plugin activated)":"Ment\xe9s (ha a ment\xe9s be\xe9p\xfcl\u0151 modul enged\xe9lyezett)","Scope":"Tartom\xe1ny","Search":"Keres\xe9s","Select all":"Minden kijel\xf6l\xe9se","Select...":"V\xe1lasszon...","Selection":"Kiv\xe1laszt\xe1s","Shortcut":"Billenty\u0171kombin\xe1ci\xf3","Show blocks":"Blokkok mutat\xe1sa","Show caption":"Felirat megjelen\xedt\xe9se","Show invisible characters":"L\xe1thatatlan karakterek mutat\xe1sa","Size":"M\xe9ret","Solid":"Szimpla","Source":"Forr\xe1s","Source code":"Forr\xe1sk\xf3d","Special Character":"Speci\xe1lis karakter","Special character...":"Speci\xe1lis karakter...","Split cell":"Cell\xe1k sz\xe9tv\xe1laszt\xe1sa","Square":"N\xe9gyzet","Start list at number":"Lista kezd\xe9se ett\u0151l a sz\xe1mt\xf3l","Strikethrough":"\xc1th\xfazott","Style":"St\xedlus","Subscript":"Als\xf3 index","Superscript":"Fels\u0151 index","Switch to or from fullscreen mode":"Teljes vagy norm\xe1l k\xe9perny\u0151s m\xf3dra v\xe1lt\xe1s","Symbols":"Szimb\xf3lumok","System Font":"Rendszer bet\u0171t\xedpusa","Table":"T\xe1bl\xe1zat","Table caption":"T\xe1bl\xe1zatfelirat","Table properties":"T\xe1bl\xe1zat tulajdons\xe1gai","Table styles":"T\xe1bl\xe1zatst\xedlusok","Template":"Sablon","Templates":"Sablonok","Text":"Sz\xf6veg","Text color":"Sz\xf6veg sz\xedne","Text color {0}":"Sz\xf6vegsz\xedn {0}","Text to display":"Megjelen\xedtend\u0151 sz\xf6veg","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"A megadott URL e-mail-c\xedmnek t\u0171nik. Szeretn\xe9d hozz\xe1adni a sz\xfcks\xe9ges mailto: el\u0151tagot?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"A megadott URL k\xfcls\u0151 c\xedmnek t\u0171nik. Szeretn\xe9d hozz\xe1adni a sz\xfcks\xe9ges http:// el\u0151tagot?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Az URL amit megadt\xe1l k\xfcls\u0151 hivatkoz\xe1s. Szeretn\xe9d https:// el\u0151taggal megnyitni?","Title":"C\xedm","To open the popup, press Shift+Enter":"A felugr\xf3 ablak megnyit\xe1s\xe1hoz nyomja meg a Shift+Enter billenty\u0171t","Toggle accordion":"Harmonika be- \xe9s kikapcsol\xe1sa","Tools":"Eszk\xf6z\xf6k","Top":"Fel\xfclre","Travel and Places":"Utaz\xe1s \xe9s helyek","Turquoise":"T\xfcrkiz","Underline":"Al\xe1h\xfazott","Undo":"Visszavon\xe1s","Upload":"Felt\xf6lt\xe9s","Uploading image":"K\xe9p felt\xf6lt\xe9se","Upper Alpha":"Nagybet\u0171s","Upper Roman":"Nagybet\u0171s r\xf3mai sz\xe1mos","Url":"Webc\xedm","User Defined":"Felhaszn\xe1l\xf3 \xe1ltal meghat\xe1rozott","Valid":"\xc9rv\xe9nyes","Version":"Verzi\xf3","Vertical align":"F\xfcgg\u0151leges igaz\xedt\xe1s","Vertical space":"T\xe9rk\xf6z f\xfcgg\u0151legesen","View":"N\xe9zet","Visual aids":"Vizu\xe1lis seg\xe9deszk\xf6z\xf6k","Warn":"Figyelmeztet\xe9s","White":"Feh\xe9r","Width":"Sz\xe9less\xe9g","Word count":"Szavak sz\xe1ma","Words":"Szavak","Words: {0}":"Szavak: {0}","Yellow":"S\xe1rga","Yes":"Igen","You are using {0}":"Haszn\xe1latban: {0}","You have unsaved changes are you sure you want to navigate away?":"Nem mentett m\xf3dos\xedt\xe1said vannak, biztosan el akarsz navig\xe1lni?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"A b\xf6ng\xe9sz\u0151d nem t\xe1mogatja a k\xf6zvetlen hozz\xe1f\xe9r\xe9st a v\xe1g\xf3laphoz. K\xe9rlek, haszn\xe1ld a Ctrl+X/C/V billenty\u0171ket.","alignment":"igaz\xedt\xe1s","austral sign":"austral jel","cedi sign":"cedi jel","colon sign":"kett\u0151spont","cruzeiro sign":"cruzeiro jel","currency sign":"valuta jel","dollar sign":"doll\xe1r jel","dong sign":"dong jel","drachma sign":"drachma jel","euro-currency sign":"euro-valuta jel","example":"p\xe9lda","formatting":"form\xe1z\xe1s","french franc sign":"francia frank jel","german penny symbol":"n\xe9met penny jel","guarani sign":"guarani jel","history":"el\u0151zm\xe9nyek","hryvnia sign":"hrivnya jel","indentation":"beh\xfaz\xe1s","indian rupee sign":"r\xfapia jel","kip sign":"kip jel","lira sign":"l\xedra jel","livre tournois sign":"livre tournois jel","manat sign":"manat jel","mill sign":"mill jel","naira sign":"naira jel","new sheqel sign":"\xfaj s\xe9kel jel","nordic mark sign":"\xe9szaki m\xe1rka jel","peseta sign":"peseta jel","peso sign":"peso jel","ruble sign":"rubel jel","rupee sign":"r\xfapia jel","spesmilo sign":"spesmilo jel","styles":"st\xedlusok","tenge sign":"tenge jel","tugrik sign":"tugrik jel","turkish lira sign":"t\xf6r\xf6k l\xedra jel","won sign":"won jel","yen character":"jen karakter","yen/yuan character variant one":"jen/j\xfcan karaktervari\xe1ns","yuan character":"j\xfcan karakter","yuan character, in hong kong and taiwan":"hongkongi \xe9s tajvani j\xfcan karakter","{0} characters":"{0} karakter","{0} columns, {1} rows":"{0} oszlop, {1} sor","{0} words":"{0} sz\xf3"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/hy.js b/staticfiles/tinymce/langs/hy.js new file mode 100644 index 0000000..3368963 --- /dev/null +++ b/staticfiles/tinymce/langs/hy.js @@ -0,0 +1 @@ +tinymce.addI18n("hy",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0533\u0578\u0580\u056e\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Activity":"\u0533\u0578\u0580\u056e\u0578\u0582\u0576\u0565\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Address":"\u0540\u0561\u057d\u0581\u0565","Advanced":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579","Align":"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0576\u0565\u056c","Align center":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u056f\u0561\u0576 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Align left":"\u0541\u0561\u056d\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Align right":"\u0531\u057b\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Alignment":"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","Alignment {0}":"","All":"\u0532\u0578\u056c\u0578\u0580\u0568","Alternative description":"","Alternative source":"\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u056f\u0578\u0564","Alternative source URL":"\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u0561\u0572\u0562\u0575\u0578\u0582\u0580\u056b \u0570\u0572\u0578\u0582\u0574","Anchor":"","Anchor...":"\u053d\u0561\u0580\u056b\u057d\u056d...","Anchors":"\u053d\u0561\u0580\u056b\u057d\u056d\u0576\u0565\u0580","Animals and Nature":"\u053f\u0565\u0576\u0564\u0561\u0576\u056b\u0576\u0565\u0580 \u0587 \u0532\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Arrows":"\u054d\u056c\u0561\u0584\u0576\u0565\u0580","B":"","Background color":"\u0556\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576","Background color {0}":"","Black":"\u054d\u0587","Block":"\u0532\u056c\u0578\u056f","Block {0}":"","Blockquote":"\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574","Blocks":"\u0532\u056c\u0578\u056f\u0576\u0565\u0580","Blue":"\u053f\u0561\u057a\u0578\u0582\u0575\u057f","Blue component":"","Body":"\u054a\u0561\u0580\u0578\u0582\u0576\u0561\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Bold":"\u0539\u0561\u057e\u0561\u057f\u0561\u057c","Border":"\u0535\u0566\u0580\u0561\u0563\u056b\u056e","Border color":"\u0535\u0566\u0580\u0561\u0563\u056b\u056e","Border style":"\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u0578\u0573\u0568","Border width":"\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","Bottom":"\u0546\u0565\u0580\u0584\u0587","Browse files":"","Browse for an image":"\u0538\u0576\u057f\u0580\u0565\u056c \u0576\u056f\u0561\u0580","Browse links":"","Bullet list":"\u0549\u0570\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f","Cancel":"\u0553\u0561\u056f\u0565\u056c","Caption":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","Cell":"\u054e\u0561\u0576\u0564\u0561\u056f","Cell padding":"\u0546\u0565\u0580\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Cell properties":"\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568","Cell spacing":"\u0531\u0580\u057f\u0561\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Cell styles":"","Cell type":"\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u057f\u056b\u057a","Center":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576","Characters":"\u0546\u056b\u0577\u0565\u0580","Characters (no spaces)":"\u0546\u056b\u0577\u0565\u0580 (\u0562\u0561\u0581\u0561\u057f\u0576\u0565\u0580)","Circle":"\u0547\u0580\u057b\u0561\u0576","Class":"\u0534\u0561\u057d","Clear formatting":"\u0544\u0561\u0584\u0580\u0565\u056c \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568","Close":"\u0553\u0561\u056f\u0565\u056c","Code":"\u053f\u0578\u0564","Code sample...":"\u053f\u0578\u0564\u056b \u0585\u0580\u0576\u0561\u056f","Code view":"","Color Picker":"\u0533\u0578\u0582\u0576\u0561\u057a\u0576\u0561\u056f","Color swatch":"\u0533\u0578\u0582\u0575\u0576\u056b \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0578\u0582\u0574","Cols":"\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580","Column":"\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f","Column clipboard actions":"","Column group":"\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562","Column header":"","Constrain proportions":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u0574\u0561\u0577\u057f\u0561\u0562\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568","Copy":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c","Copy column":"","Copy row":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c \u057f\u0578\u0572\u0568","Could not find the specified string.":"\u0546\u0577\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c","Could not load emojis":"","Count":"\u0554\u0561\u0576\u0561\u056f\u0568","Currency":"\u0531\u0580\u056a\u0578\u0582\u0575\u0569","Current window":"\u0538\u0576\u0569\u0561\u0581\u056b\u056f \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0568","Custom color":"\u0531\u0575\u056c \u0563\u0578\u0582\u0575\u0576","Custom...":"\u0531\u0575\u056c...","Cut":"\u053f\u057f\u0580\u0565\u056c","Cut column":"","Cut row":"\u053f\u057f\u0580\u0565\u056c \u057f\u0578\u0572\u0568","Dark Blue":"\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f","Dark Gray":"\u0544\u0578\u0582\u0563 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576","Dark Green":"\u0544\u0578\u0582\u0563 \u056f\u0561\u0576\u0561\u0579","Dark Orange":"\u0544\u0578\u0582\u0563 \u0576\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576","Dark Purple":"\u0544\u0578\u0582\u0563 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576","Dark Red":"\u0544\u0578\u0582\u0563 \u056f\u0561\u0580\u0574\u056b\u0580","Dark Turquoise":"\u0544\u0578\u0582\u0563 \u0583\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576","Dark Yellow":"\u0544\u0578\u0582\u0563 \u0564\u0565\u0572\u056b\u0576","Dashed":"","Date/time":"\u0531\u0574\u057d\u0561\u0569\u056b\u057e/\u056a\u0561\u0574\u0561\u0576\u0561\u056f","Decrease indent":"\u0553\u0578\u0584\u0580\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","Default":"\u054d\u057f\u0561\u0576\u0564\u0561\u0580\u057f","Delete accordion":"","Delete column":"\u0541\u0576\u057b\u0565\u056c \u057d\u0575\u0578\u0582\u0576\u0568","Delete row":"\u054b\u0576\u057b\u0565\u056c \u057f\u0578\u0572\u0568","Delete table":"\u054b\u0576\u057b\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u0568","Dimensions":"\u0549\u0561\u0583\u0565\u0580","Disc":"\u053f\u056c\u0578\u0580","Div":"","Document":"\u0553\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569","Dotted":"","Double":"","Drop an image here":"\u0546\u056f\u0561\u0580\u0568 \u0563\u0581\u0565\u0584 \u0561\u0575\u057d\u057f\u0565\u0572","Dropped file type is not supported":"","Edit":"\u053d\u0574\u0562\u0561\u0563\u0580\u0565\u056c","Embed":"\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0578\u0572 \u056f\u0578\u0564","Emojis":"","Emojis...":"","Error":"\u054d\u056d\u0561\u056c","Error: Form submit field collision.":"\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u0568 \u0570\u0561\u057d\u057f\u0561\u057f\u0565\u056c\u0578\u0582\u0581 \u0564\u0561\u0577\u057f\u056b \u0562\u0561\u056d\u0578\u0582\u0574:","Error: No form element found.":"\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u056b \u0578\u0579 \u0574\u056b \u057f\u0561\u0580\u0580 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c:","Extended Latin":"\u0538\u0576\u0564\u0561\u0580\u0571\u0561\u056f \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576","Failed to initialize plugin: {0}":"\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0574\u056b\u0561\u0581\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0}","Failed to load plugin url: {0}":"\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568 \u0570\u0572\u0578\u0582\u0574\u056b\u0581\u0589 {0}","Failed to load plugin: {0} from url {1}":"\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0} \u0570\u0572\u0578\u0582\u0574\u056b\u0581 {1}","Failed to upload image: {0}":"\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u057e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c \u057a\u0561\u057f\u056f\u0565\u0580\u0568: {0}","File":"\u0556\u0561\u0575\u056c","Find":"\u0553\u0576\u057f\u0580\u0565\u056c","Find (if searchreplace plugin activated)":"\u0553\u0576\u057f\u0580\u0565\u056c (\u0565\u0569\u0565 searchreplace \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)","Find and Replace":"","Find and replace...":"\u0553\u0576\u057f\u0580\u0565\u056c \u0587 \u0583\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c","Find in selection":"","Find whole words only":"\u0533\u057f\u0576\u0565\u056c \u0574\u056b\u0561\u0575\u0576 \u0561\u0574\u0562\u0578\u0572\u057b \u0562\u0561\u057c\u0565\u0580\u0568","Flags":"\u0534\u0580\u0578\u0577\u0576\u0565\u0580","Focus to contextual toolbar":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0576\u0561\u056c \u0570\u0561\u0574\u0561\u057f\u0565\u0584\u057d\u057f\u056b \u0563\u0578\u0580\u056e\u056b\u0584\u0561\u0563\u0578\u057f\u0578\u0582 \u057e\u0580\u0561","Focus to element path":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0565\u0584 \u057f\u0561\u0580\u0580\u0565\u0580\u056b \u0578\u0582\u0572\u0578\u0582 \u057e\u0580\u0561","Focus to menubar":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0576\u0561\u056c \u0574\u0565\u0576\u0575\u0578\u0582\u056b \u057e\u0580\u0561","Focus to toolbar":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0576\u0561\u056c \u0563\u0578\u0580\u056e\u056b\u0584\u0561\u0563\u0578\u057f\u0578\u0582 \u057e\u0580\u0561","Font":"\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"\u0556\u0578\u0576\u057f\u0565\u0580","Food and Drink":"\u054d\u0576\u0578\u0582\u0576\u0564 \u0587 \u056d\u0574\u056b\u0579\u0584","Footer":"\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0570\u0561\u057f\u057e\u0561\u056e","Format":"\u0556\u0578\u0580\u0574\u0561\u057f","Format {0}":"","Formats":"\u0556\u0578\u0580\u0574\u0561\u057f\u0576\u0565\u0580","Fullscreen":"\u0531\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u0578\u057e","G":"","General":"\u0533\u056c\u056d\u0561\u057e\u0578\u0580","Gray":"\u0544\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576","Green":"\u053f\u0561\u0576\u0561\u0579","Green component":"","Groove":"","Handy Shortcuts":"\u0555\u0563\u057f\u0561\u056f\u0561\u0580 \u056f\u0561\u0580\u0573\u0578\u0582\u0572\u056b\u0576\u0565\u0580","Header":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","Header cell":"\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u056b \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580","Heading 1":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1","Heading 2":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2","Heading 3":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3","Heading 4":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4","Heading 5":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5","Heading 6":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6","Headings":"\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u0565\u0580","Height":"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Help":"\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0563\u056b\u056e","Horizontal space":"\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","Image title":"\u0546\u056f\u0561\u0580\u056b \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","Image...":"\u0546\u056f\u0561\u0580","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0544\u0565\u056e\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","Inline":"\u054f\u0578\u0572\u0561\u0575\u056b\u0576","Insert":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","Insert Template":"","Insert accordion":"","Insert column after":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0561\u057b\u056b\u0581","Insert column before":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0571\u0561\u056d\u056b\u0581","Insert date/time":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0574\u057d\u0561\u0569\u056b\u057e/\u056a\u0561\u0574\u0561\u0576\u0561\u056f","Insert image":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u056f\u0561\u0580","Insert link (if link plugin activated)":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574 (\u0565\u0569\u0565 \u0570\u0572\u0578\u0582\u0574 \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u057e\u057f\u056b\u057e \u0567)","Insert row after":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574","Insert row before":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u057e\u0565\u0580\u0587\u0578\u0582\u0574","Insert table":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f","Insert template...":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0571\u0587\u0561\u0576\u0574\u0578\u0582\u0577","Insert video":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578","Insert/Edit code sample":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u056f\u0578\u0564\u0568","Insert/edit image":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0576\u056f\u0561\u0580","Insert/edit link":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574","Insert/edit media":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0574\u0565\u0564\u056b\u0561","Insert/edit video":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u0547\u0565\u0572\u0561\u057f\u0561\u057c","Justify":"\u0535\u0580\u056f\u056f\u0578\u0572\u0574\u0561\u0576\u056b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Keyboard Navigation":"\u054d\u057f\u0565\u0572\u0576\u0561\u0577\u0561\u0580\u056b \u0546\u0561\u057e\u056b\u0563\u0561\u0581\u056b\u0561","Language":"\u053c\u0565\u0566\u0578\u0582","Learn more...":"\u053b\u0574\u0561\u0576\u0561\u056c \u0561\u057e\u0565\u056c\u056b\u0576 \u2024\u2024\u2024","Left":"\u0541\u0561\u056d","Left to right":"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b","Light Blue":"\u0532\u0561\u0581 \u056f\u0561\u057a\u0578\u0582\u0575\u057f","Light Gray":"\u0532\u0561\u0581 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576","Light Green":"\u0532\u0561\u0581 \u056f\u0561\u0576\u0561\u0579","Light Purple":"\u0532\u0561\u0581 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576","Light Red":"\u0532\u0561\u0581 \u056f\u0561\u0580\u0574\u056b\u0580","Light Yellow":"\u0532\u0561\u0581 \u0564\u0565\u0572\u056b\u0576","Line height":"","Link list":"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0578\u0582\u0581\u0561\u056f","Link...":"\u0540\u0572\u0578\u0582\u0574","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580","Lower Greek":"\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u0578\u0582\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580","Lower Roman":"\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580","Match case":"\u0540\u0561\u0577\u057e\u056b \u0561\u057c\u0576\u0565\u056c \u057c\u0565\u0563\u056b\u057d\u057f\u0578\u0580\u0568","Mathematical":"\u0544\u0561\u0569\u0565\u0574\u0561\u057f\u056b\u056f\u0561\u056f\u0561\u0576","Media poster (Image URL)":"\u0544\u0565\u0564\u056b\u0561 \u057a\u0561\u057d\u057f\u0561\u057c (\u0546\u056f\u0561\u0580\u056b \u0570\u0572\u0578\u0582\u0574)","Media...":"\u0544\u0565\u0564\u056b\u0561","Medium Blue":"\u0544\u056b\u057b\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f","Medium Gray":"\u0544\u056b\u057b\u056b\u0576 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576","Medium Purple":"\u0544\u056b\u057b\u056b\u0576 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576","Merge cells":"\u0544\u056b\u0561\u057e\u0578\u0580\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580\u0568","Middle":"\u0544\u0565\u057b\u057f\u0565\u0572","Midnight Blue":"\u053f\u0565\u057d\u0563\u056b\u0577\u0565\u0580\u0561\u0575\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f","More...":"\u0531\u057e\u0565\u056c\u056b\u0576\u2024\u2024\u2024","Name":"\u0531\u0576\u0578\u0582\u0576","Navy Blue":"\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f","New document":"\u0546\u0578\u0580 \u0583\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569","New window":"\u0546\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576","Next":"\u0540\u0561\u057b\u0578\u0580\u0564","No":"\u0548\u0579","No alignment":"","No color":"\u0531\u0576\u0563\u0578\u0582\u0575\u0576","Nonbreaking space":"\u0531\u057c\u0561\u0576\u0581 \u0576\u0578\u0580 \u057f\u0578\u0572\u056b \u0562\u0561\u0581\u0561\u057f","None":"\u0548\u0579\u056b\u0576\u0579","Numbered list":"\u0540\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f","OR":"\u053f\u0531\u0544","Objects":"\u0555\u0562\u0575\u0565\u056f\u057f\u0576\u0565\u0580","Ok":"\u053c\u0561\u057e","Open help dialog":"\u0532\u0561\u0581\u0565\u056c \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0565\u0580\u056f\u056d\u0578\u057d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","Open link":"","Open link in...":"\u0532\u0561\u0581\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","Open popup menu for split buttons":"","Orange":"\u0546\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576","Outset":"","Page break":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0567\u057b\u056b \u0561\u0576\u057b\u0561\u057f\u056b\u0579","Paragraph":"\u054a\u0561\u0580\u0562\u0565\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Paste":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","Paste as text":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0578\u0580\u057a\u0565\u057d \u057f\u0565\u0584\u057d\u057f","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u054f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0578\u0582\u0574\u0568 \u056f\u0561\u057f\u0561\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u057c\u0565\u056a\u056b\u0574\u0578\u057e\u0589 \u054a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u057f\u0565\u0572\u0561\u0564\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u0571\u0587\u0578\u057e \u0574\u056b\u0576\u0579\u0587 \u0561\u0575\u057d \u057c\u0565\u056a\u056b\u0574\u056b \u0561\u0576\u057b\u0561\u057f\u0578\u0582\u0574\u0568\u0589","Paste or type a link":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u056f\u0561\u0574 \u0563\u0580\u0565\u0584 \u0570\u0572\u0578\u0582\u0574\u0568","Paste row after":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574","Paste row before":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u057e\u0565\u0580\u0587\u0578\u0582\u0574","Paste your embed code below:":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0541\u0565\u0580 \u056f\u0578\u0564\u0568 \u0561\u0575\u057d\u057f\u0565\u0572\u055d","People":"\u0544\u0561\u0580\u0564\u056b\u0584","Plugins":"\u0538\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580","Plugins installed ({0}):":"\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0561\u056e \u0583\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580 ({0}):","Powered by {0}":"\u0540\u0578\u057e\u0561\u0576\u0561\u057e\u0578\u0580\u057e\u0561\u056e \u0567 {0}","Pre":"","Preferences":"\u0546\u0561\u056d\u0561\u057a\u0561\u057f\u057e\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580","Preformatted":"\u0546\u0561\u056d\u0561\u057a\u0565\u057d \u0571\u0565\u0582\u0561\u057e\u0578\u0580\u057e\u0561\u056e","Premium plugins:":"\u054e\u0573\u0561\u0580\u0578\u057e\u056b \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u0546\u0561\u056d\u0576\u0561\u056f\u0561\u0576 \u0564\u056b\u057f\u0578\u0582\u0574","Previous":"\u0546\u0561\u056d\u0578\u0580\u0564","Print":"","Print...":"\u054f\u057a\u0565\u056c","Purple":"\u0544\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576","Quotations":"\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574\u0576\u0565\u0580","R":"","Range 0 to 255":"","Red":"\u053f\u0561\u0580\u0574\u056b\u0580","Red component":"","Redo":"\u0540\u0561\u057b\u0578\u0580\u0564 \u0584\u0561\u0575\u056c","Remove":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c","Remove color":"\u054b\u0576\u057b\u0565\u056c \u0563\u0578\u0582\u0575\u0576\u0568","Remove link":"\u054b\u0576\u057b\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","Replace":"\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c","Replace all":"\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568","Replace with":"\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c","Resize":"\u0553\u0578\u056d\u0565\u056c \u0579\u0561\u0583\u0568","Restore last draft":"\u054e\u0565\u0580\u0561\u056f\u0561\u0576\u0563\u0576\u0565\u056c \u057e\u0565\u0580\u057b\u056b\u0576 \u0576\u0561\u056d\u0561\u0563\u056b\u056e\u0568","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u0540\u0561\u0580\u0578\u0582\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0584: \u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 ALT-0:","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u054f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u0564\u0561\u0577\u057f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-F9 \u0574\u0565\u0576\u0575\u0578\u0582\u056b \u0570\u0561\u0574\u0561\u0580\u0589 ALT-F10 \u0563\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580\u056b \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-0 \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580","Ridge":"","Right":"\u0531\u057b","Right to left":"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d","Row":"\u054f\u0578\u0572","Row clipboard actions":"","Row group":"\u054f\u0578\u0572\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562","Row header":"","Row properties":"\u054f\u0578\u0572\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568","Row type":"\u054f\u0578\u0572\u056b \u057f\u056b\u057a","Rows":"\u054f\u0578\u0572\u0565\u0580","Save":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c","Save (if save plugin activated)":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c (\u0565\u0569\u0565 save \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)","Scope":"","Search":"\u0553\u0576\u057f\u0580\u0565\u056c","Select all":"\u0546\u0577\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568","Select...":"\u0538\u0576\u057f\u0580\u0565\u056c\u2024\u2024\u2024","Selection":"\u0538\u0576\u057f\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Shortcut":"\u053f\u0561\u0580\u0573\u0578\u0582\u0572\u056b","Show blocks":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0562\u056c\u0578\u056f\u0576\u0565\u0580\u0568","Show caption":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580\u0568","Show invisible characters":"\u0551\u0578\u0582\u0575\u0581 \u057f\u0561\u056c \u0561\u0576\u057f\u0565\u057d\u0561\u0576\u0565\u056c\u056b \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580\u0568","Size":"\u0549\u0561\u0583\u057d","Solid":"","Source":"\u0546\u056f\u0561\u0580\u056b \u0570\u0561\u057d\u0581\u0565","Source code":"\u053e\u0580\u0561\u0563\u0580\u0561\u0575\u056b\u0576 \u056f\u0578\u0564","Special Character":"","Special character...":"\u0540\u0561\u057f\u0578\u0582\u056f \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580...","Split cell":"\u0532\u0561\u056a\u0561\u0576\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0568","Square":"\u0554\u0561\u057c\u0561\u056f\u0578\u0582\u057d\u056b","Start list at number":"","Strikethrough":"\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","Style":"\u0548\u0573","Subscript":"\u054d\u057f\u0578\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","Superscript":"\u054e\u0565\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","Switch to or from fullscreen mode":"\u0531\u0576\u0581\u0565\u0584 \u0561\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u056b\u0576 \u057c\u0565\u056a\u056b\u0574\u056b\u0581 \u056f\u0561\u0574 \u0561\u0574\u0562\u0578\u0572\u057b \u057c\u0565\u056a\u056b\u0574\u056b\u0581","Symbols":"\u054d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580","System Font":"\u0540\u0561\u0574\u0561\u056f\u0561\u0580\u0563\u056b \u057f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","Table":"\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f","Table caption":"","Table properties":"\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568","Table styles":"","Template":"\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577","Templates":"\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577\u0576\u0565\u0580","Text":"\u054f\u0565\u0584\u057d\u057f","Text color":"\u054f\u0561\u057c\u056b \u0563\u0578\u0582\u0575\u0576","Text color {0}":"","Text to display":"\u0540\u0572\u0574\u0561\u0576 \u057f\u0565\u0584\u057d\u057f","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0537\u056c. \u0583\u0578\u057d\u057f\u056b \u0570\u0561\u057d\u0581\u0565 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto: \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0578\u0582\u0574 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http:// \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","To open the popup, press Shift+Enter":"\u0539\u057c\u0578\u0582\u0581\u056b\u056f\u0568 \u0562\u0561\u0581\u0565\u056c\u0578\u0582 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 Shift + Enter","Toggle accordion":"","Tools":"\u0533\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580","Top":"\u054e\u0565\u0580\u0587","Travel and Places":"\u0543\u0561\u0576\u0561\u057a\u0561\u0580\u0570\u0578\u0580\u0564\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580 \u0587 \u057e\u0561\u0575\u0580\u0565\u0580","Turquoise":"\u0553\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576","Underline":"\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e","Undo":"\u0546\u0561\u056d\u0578\u0580\u0564 \u0584\u0561\u0575\u056c","Upload":"\u054e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c","Uploading image":"","Upper Alpha":"\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576 \u057f\u0561\u057c\u0565\u0580","Upper Roman":"\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580","Url":"","User Defined":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0572\u056b \u056f\u0578\u0572\u0574\u056b\u0581 \u054d\u0561\u0570\u0574\u0561\u0576\u057e\u0561\u056e","Valid":"\u054e\u0561\u057e\u0565\u0580 \u0567","Version":"\u054f\u0561\u0580\u0562\u0565\u0580\u0561\u056f","Vertical align":"","Vertical space":"\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576","View":"\u054f\u0565\u057d\u0584","Visual aids":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u056f\u0578\u0576\u057f\u0578\u0582\u0580\u0576\u0565\u0580\u0568","Warn":"\u0536\u0563\u0578\u0582\u0577\u0561\u0581\u0578\u0582\u0574","White":"\u054d\u057a\u056b\u057f\u0561\u056f","Width":"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","Word count":"\u0532\u0561\u057c\u056b \u0584\u0561\u0576\u0561\u056f","Words":"\u0532\u0561\u057c\u0565\u0580","Words: {0}":"\u0532\u0561\u057c\u0565\u0580\u056b \u0584\u0561\u0576\u0561\u056f: {0}","Yellow":"\u0534\u0565\u0572\u056b\u0576","Yes":"\u0531\u0575\u0578","You are using {0}":"\u0534\u0578\u0582\u0584 \u0585\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0582\u0574 \u0565\u0584 {0}","You have unsaved changes are you sure you want to navigate away?":"\u053f\u0561\u0576 \u0579\u057a\u0561\u0570\u057a\u0561\u0576\u057e\u0561\u056e \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0589 \u0534\u0578\u0582\u0584 \u056b\u0580\u0578\u055e\u0584 \u0578\u0582\u0566\u0578\u0582\u0574 \u0565\u0584 \u0564\u0578\u0582\u0580\u057d \u0563\u0561\u056c","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0541\u0565\u0580 \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0568 \u0579\u056b \u0561\u057a\u0561\u0570\u0578\u057e\u0578\u0582\u0574 \u0561\u0576\u0574\u056b\u057b\u0561\u056f\u0561\u0576 \u0565\u056c\u0584 \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0574\u0561\u0576 \u0562\u0578\u0582\u0586\u0565\u0580\u056b\u0576\u0589 \u053d\u0576\u0564\u0580\u0578\u0582\u0574 \u0565\u0576\u0584 \u0585\u0563\u057f\u057e\u0565\u056c Ctrl+X/C/V \u057d\u057f\u0565\u0572\u0576\u0565\u0580\u056b\u0581\u0589","alignment":"\u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","austral sign":"\u0561\u057e\u057d\u057f\u0580\u0561\u056c\u056b \u0576\u0577\u0561\u0576","cedi sign":"\u0584\u0565\u0564\u056b \u0576\u0577\u0561\u0576","colon sign":"\u056f\u0580\u056f\u0576\u0561\u056f\u0565\u057f \u0576\u0577\u0561\u0576","cruzeiro sign":"\u0576\u0561\u057e\u0561\u0580\u056f\u0578\u0582\u0569\u0575\u0561\u0576 \u0576\u0577\u0561\u0576","currency sign":"\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576","dollar sign":"\u0564\u0578\u056c\u056c\u0561\u0580\u056b \u0576\u0577\u0561\u0576","dong sign":"\u0564\u0578\u0576\u0563\u056b \u0576\u0577\u0561\u0576","drachma sign":"\u0564\u0580\u0561\u0574\u0561\u056d\u0574\u0561\u0575\u056b \u0576\u0577\u0561\u0576","euro-currency sign":"\u0565\u057e\u0580\u0578-\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576","example":"\u0585\u0580\u056b\u0576\u0561\u056f","formatting":"\u0579\u0561\u0583\u0561\u0576\u0577\u0578\u0582\u0574","french franc sign":"\u0586\u0580\u0561\u0576\u057d\u056b\u0561\u056f\u0561\u0576 \u0586\u0580\u0561\u0576\u056f\u056b \u0576\u0577\u0561\u0576","german penny symbol":"\u0563\u0565\u0580\u0574\u0561\u0576\u0561\u056f\u0561\u0576 \u057a\u0565\u0576\u056b\u0575\u056b \u056d\u0578\u0580\u0570\u0580\u0564\u0561\u0576\u056b\u0577","guarani sign":"\u0563\u0578\u0582\u0561\u0580\u0561\u0576\u056b \u0576\u0577\u0561\u0576","history":"\u054a\u0561\u057f\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576","hryvnia sign":"\u0563\u0580\u056b\u057e\u0576\u0561\u0575\u056b \u0576\u0577\u0561\u0576","indentation":"\u056d\u0561\u0575\u0569\u0578\u0581","indian rupee sign":"\u0570\u0576\u0564\u056f\u0561\u056f\u0561\u0576 \u057c\u0578\u0582\u0583\u056b \u0576\u0577\u0561\u0576","kip sign":"\u056f\u056b\u057a \u0576\u0577\u0561\u0576","lira sign":"\u056c\u056b\u0580\u056b \u0576\u0577\u0561\u0576","livre tournois sign":"\u056c\u056b\u057e\u0580\u0565 \u0569\u0578\u0582\u0580\u0576\u0578\u056b\u057d \u0576\u0577\u0561\u0576","manat sign":"\u0574\u0561\u0576\u0561\u0569\u056b \u0576\u0577\u0561\u0576","mill sign":"\u057b\u0580\u0561\u0572\u0561\u0581\u056b \u0576\u0577\u0561\u0576","naira sign":"\u0576\u0561\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576","new sheqel sign":"\u0576\u0578\u0580 \u0577\u0565\u056f\u0565\u056c \u0576\u0577\u0561\u0576","nordic mark sign":"\u0570\u0575\u0578\u0582\u057d\u056b\u057d\u0561\u0575\u056b\u0576 \u0576\u0577\u0561\u0576\u056b \u0576\u0577\u0561\u0576","peseta sign":"\u057a\u0565\u057d\u0565\u057f\u0561\u0575\u056b \u0576\u0577\u0561\u0576","peso sign":"\u057a\u0565\u057d\u0578\u0575\u056b \u0576\u0577\u0561\u0576","ruble sign":"\u057c\u0578\u0582\u0562\u056c\u0578\u0582 \u0576\u0577\u0561\u0576","rupee sign":"\u057c\u0578\u0582\u0583\u056b\u056b \u0576\u0577\u0561\u0576","spesmilo sign":"\u057d\u057a\u0565\u057d\u0574\u056b\u056c\u0578 \u0576\u0577\u0561\u0576","styles":"\u0578\u0573\u0565\u0580\u0568","tenge sign":"\u057f\u0565\u0576\u0563\u0565 \u0576\u0577\u0561\u0576","tugrik sign":"\u057f\u0578\u0582\u0563\u0580\u056b\u056f\u056b \u0576\u0577\u0561\u0576","turkish lira sign":"\u0569\u0578\u0582\u0580\u0584\u0561\u056f\u0561\u0576 \u056c\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576","won sign":"\u0577\u0561\u0570\u0565\u056c\u0578\u0582 \u0576\u0577\u0561\u0576\u0568","yen character":"\u056b\u0565\u0576\u056b \u0576\u0577\u0561\u0576","yen/yuan character variant one":"\u0575\u0565\u0576\u056b/\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u057f\u0561\u0580\u0562\u0565\u0580\u0561\u056f \u0561\u057c\u0561\u057b\u056b\u0576","yuan character":"\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576","yuan character, in hong kong and taiwan":"\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u0570\u0578\u0576\u0563\u056f\u0578\u0576\u0563\u0578\u0582\u0574 \u0587 \u0569\u0561\u0575\u057e\u0561\u0576\u0578\u0582\u0574","{0} characters":"{0} \u0576\u056b\u0577\u0565\u0580","{0} columns, {1} rows":"","{0} words":"{0} \u0562\u0561\u057c"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/id.js b/staticfiles/tinymce/langs/id.js new file mode 100644 index 0000000..a74f2e8 --- /dev/null +++ b/staticfiles/tinymce/langs/id.js @@ -0,0 +1 @@ +tinymce.addI18n("id",{"#":"#","Accessibility":"Aksesibilitas","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Tindakan","Activity":"Aktivitas","Address":"Alamat","Advanced":"Lanjutan","Align":"Sejajarkan","Align center":"Rata tengah","Align left":"Rata kiri","Align right":"Rata kanan","Alignment":"Penyejajaran","Alignment {0}":"","All":"Semua","Alternative description":"Deskripsi alternatif","Alternative source":"Sumber alternatif","Alternative source URL":"URL Sumber alternatif","Anchor":"Jangkar","Anchor...":"Jangkar..","Anchors":"Jangkar","Animals and Nature":"Hewan dan Alam","Arrows":"Panah","B":"B","Background color":"Warna latar belakang","Background color {0}":"","Black":"Hitam","Block":"Blok","Block {0}":"","Blockquote":"Kutipan","Blocks":"Blok","Blue":"Biru","Blue component":"Komponen biru","Body":"Badan","Bold":"Tebal","Border":"Batas","Border color":"Warna pinggiran","Border style":"Gaya pinggiran","Border width":"Lebar pinggiran","Bottom":"Bawah","Browse files":"","Browse for an image":"Jelajahi gambar","Browse links":"","Bullet list":"Daftar bersimbol","Cancel":"Batal","Caption":"Judul","Cell":"Sel","Cell padding":"Lapisan sel","Cell properties":"Properti sel","Cell spacing":"Jarak sel","Cell styles":"Corak sel","Cell type":"Tipe sel","Center":"Tengah","Characters":"Karakter","Characters (no spaces)":"Karakter (tanpa spasi)","Circle":"Lingkaran","Class":"Kelas","Clear formatting":"Kosongkan format","Close":"Tutup","Code":"Kode","Code sample...":"Sampel kode...","Code view":"Tampilan Kode","Color Picker":"Pemilih warna","Color swatch":"Contoh warna","Cols":"Kolom","Column":"Kolom","Column clipboard actions":"Aksi kolom clipboard","Column group":"Grup kolom","Column header":"Kepala kolom","Constrain proportions":"Pertahankan proporsi","Copy":"Salin","Copy column":"Salin kolom","Copy row":"Salin baris","Could not find the specified string.":"Tidak dapat menemukan string yang dimaksud.","Could not load emojis":"Tidak dapat memuat emoji","Count":"Hitungan","Currency":"Mata Uang","Current window":"Jendela saat ini","Custom color":"Warna khusus","Custom...":"Khusus...","Cut":"Potong","Cut column":"Potong kolom","Cut row":"Potong baris","Dark Blue":"Biru Gelap","Dark Gray":"Abu Gelap","Dark Green":"Hijau Gelap","Dark Orange":"Jingga Gelap","Dark Purple":"Ungu Gelap","Dark Red":"Merah Gelap","Dark Turquoise":"Turquoise Gelap","Dark Yellow":"Kuning Gelap","Dashed":"Garis-garis","Date/time":"Tanggal/waktu","Decrease indent":"Kurangi inden","Default":"Bawaan","Delete accordion":"","Delete column":"Hapus kolom","Delete row":"Hapus baris","Delete table":"Hapus tabel","Dimensions":"Dimensi","Disc":"Cakram","Div":"Div","Document":"Dokumen","Dotted":"Titik-titik","Double":"Ganda","Drop an image here":"Letakkan gambar di sini","Dropped file type is not supported":"Jenis file yang dijatuhkan tidak didukung","Edit":"Edit","Embed":"Semat","Emojis":"Emoji","Emojis...":"Emoji...","Error":"Kesalahan","Error: Form submit field collision.":"Kesalahan: Benturan bidang pengiriman bentuk.","Error: No form element found.":"Kesalahan: tidak ditemukan elemen bentuk.","Extended Latin":"Latin Diperluas","Failed to initialize plugin: {0}":"Gagal memulai plugin: {0}","Failed to load plugin url: {0}":"Gagal memuat url plugin: {0}","Failed to load plugin: {0} from url {1}":"Gagal memuat plugin: {0} dari url {1}","Failed to upload image: {0}":"Gagal mengunggah gambar: {0}","File":"Berkas","Find":"Cari","Find (if searchreplace plugin activated)":"Cari (jika plugin cari ganti diaktifkan)","Find and Replace":"Temukan dan Ganti","Find and replace...":"Cari dan ganti...","Find in selection":"Cari dari yang dipilih","Find whole words only":"Cari hanya kata utuh","Flags":"Bendera","Focus to contextual toolbar":"Fokus ke bilah alat kontekstual","Focus to element path":"Fokus ke alur elemen","Focus to menubar":"Fokus ke bilah menu","Focus to toolbar":"Fokus ke bilah alat","Font":"Huruf","Font size {0}":"","Font sizes":"Ukuran huruf","Font {0}":"","Fonts":"Huruf","Food and Drink":"Makanan dan Minuman","Footer":"Catatan kaki","Format":"Format","Format {0}":"","Formats":"Format","Fullscreen":"Layar penuh","G":"G","General":"Umum","Gray":"Abu-abu","Green":"Hijau","Green component":"Komponen hijau","Groove":"Tumbuh","Handy Shortcuts":"Pintasan Bermanfaat","Header":"Judul","Header cell":"Sel judul","Heading 1":"Kepala 1","Heading 2":"Kepala 2","Heading 3":"Kepala 3","Heading 4":"Kepala 4","Heading 5":"Kepala 5","Heading 6":"Kepala 6","Headings":"Kepala","Height":"Tinggi","Help":"Bantuan","Hex color code":"Kode warna hex","Hidden":"Sembunyi","Horizontal align":"Sejajar horisontal","Horizontal line":"Garis horizontal","Horizontal space":"Ruang horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID harus dimulai dengan huruf, lalu diikuti hanya oleh huruf, angka, garis pisah, titik, titik dua, atau garis bawah.","Image is decorative":"Gambar Hiasan","Image list":"Daftar gambar","Image title":"Judul gambar","Image...":"Gambar...","ImageProxy HTTP error: Could not find Image Proxy":"Kesalahan HTTP ImageProxy: Tidak dapat menemukan Proxy Gambar","ImageProxy HTTP error: Incorrect Image Proxy URL":"Kesalahan HTTP ImageProxy: URL Proxy Gambar Salah","ImageProxy HTTP error: Rejected request":"Kesalahan HTTP ImageProxy: Permintaan ditolak","ImageProxy HTTP error: Unknown ImageProxy error":"Kesalahan HTTP ImageProxy: Kesalahan Proxy Gambar tidak diketahui","Increase indent":"Tambah inden","Inline":"Baris","Insert":"Masukkan","Insert Template":"Masukkan Template","Insert accordion":"","Insert column after":"Masukkan kolom setelah","Insert column before":"Masukkan kolom sebelum","Insert date/time":"Masukkan tanggal/waktu","Insert image":"Masukkan gambar","Insert link (if link plugin activated)":"Masukan tautan (jika plugin tautan diaktifkan)","Insert row after":"Sisipkan baris setelah","Insert row before":"Sisipkan baris sebelum","Insert table":"Masukkan tabel","Insert template...":"Masukkan template...","Insert video":"Masukkan video","Insert/Edit code sample":"Tambah/Edit sampel kode","Insert/edit image":"Masukkan/edit gambar","Insert/edit link":"Masukkan/edit tautan","Insert/edit media":"Masukkan/edit media","Insert/edit video":"Masukkan/edit video","Inset":"Inset","Invalid hex color code: {0}":"Kode warna hex tidak valid: {0}","Invalid input":"Masukan tidak valid","Italic":"Miring","Justify":"Rata penuh","Keyboard Navigation":"Navigasi Keyboard","Language":"Bahasa","Learn more...":"Ketahui selengkapnya...","Left":"Kiri","Left to right":"Kiri ke kanan","Light Blue":"Biru Muda","Light Gray":"Abu Muda","Light Green":"Hijau Muda","Light Purple":"Ungu Muda","Light Red":"Merah Muda","Light Yellow":"Kuning Muda","Line height":"Tinggi baris","Link list":"Daftar tautan","Link...":"Tautan...","List Properties":"Daftar properti","List properties...":"Daftar properti...","Loading emojis...":"Memuat emoji...","Loading...":"Memuat...","Lower Alpha":"Huruf Kecil","Lower Greek":"Huruf Kecil Yunani","Lower Roman":"Huruf Kecil Romawi","Match case":"Samakan besar kecil huruf","Mathematical":"Matematis","Media poster (Image URL)":"Poster media (URL gambar)","Media...":"Media...","Medium Blue":"Biru Medium","Medium Gray":"Abu Medium","Medium Purple":"Ungu Medium","Merge cells":"Gabung sel","Middle":"Tengah","Midnight Blue":"Biru Midnight","More...":"Lainnya...","Name":"Nama","Navy Blue":"Biru Navy","New document":"Dokumen baru","New window":"Jendela baru","Next":"Berikutnya","No":"Tidak","No alignment":"Tanpa pejajaran","No color":"Tanpa berwarna","Nonbreaking space":"Spasi","None":"Tidak ada","Numbered list":"Daftar bernomor","OR":"ATAU","Objects":"Objek","Ok":"Ok","Open help dialog":"Buka dialog bantuan","Open link":"Buka tautan","Open link in...":"Buka tautan dalam...","Open popup menu for split buttons":"Buka menu popup untuk tombol terpisah","Orange":"Jingga","Outset":"Outset","Page break":"Halaman baru","Paragraph":"Paragraf","Paste":"Rekat","Paste as text":"Rekatkan sebagai teks","Paste column after":"Tempel kolom ke setelah","Paste column before":"Tempel kolom ke sebelum","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Tempel sekarang dalam mode teks biasa. Konten sekarang akan ditempelkan sebagai teks biasa hingga Anda mematikan pilihan ini.","Paste or type a link":"Rekat atau ketik tautan","Paste row after":"Rekat baris setelah","Paste row before":"Rekat baris sebelum","Paste your embed code below:":"Rekatkan kode sematan di bawah:","People":"Orang","Plugins":"Plugin","Plugins installed ({0}):":"Plugin terpasang ({0}):","Powered by {0}":"Didayai oleh {0}","Pre":"Pre","Preferences":"Preferensi","Preformatted":"Praformat","Premium plugins:":"Plugin premium:","Press the Up and Down arrow keys to resize the editor.":"Tekan tombol panah Atas dan Bawah untuk mengubah ukuran editor.","Press the arrow keys to resize the editor.":"Tekan tombol panah untuk mengubah ukuran editor.","Press {0} for help":"","Preview":"Pratinjau","Previous":"Sebelumnya","Print":"Cetak","Print...":"Cetak...","Purple":"Ungu","Quotations":"Kutipan","R":"R","Range 0 to 255":"Rentang 0 hingga 255","Red":"Merah","Red component":"Komponen merah","Redo":"Ulang","Remove":"Hapus","Remove color":"Hapus warna","Remove link":"Hapus tautan","Replace":"Ganti","Replace all":"Ganti semua","Replace with":"Ganti dengan","Resize":"Ubah ukuran","Restore last draft":"Pulihkan draf sebelumnya","Reveal or hide additional toolbar items":"Tampilkan atau sembunyikan item bilah alat tambahan","Rich Text Area":"Area Rich Text","Rich Text Area. Press ALT-0 for help.":"Area Teks Kaya. Tekan ALT-0 untuk bantuan.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Area Teks Kaya. Tekan ALT-F9 untuk menu. Tekan ALT-F10 untuk bilah alat. Tekan ALT-0 untuk bantuan","Ridge":"Kerut","Right":"Kanan","Right to left":"Kanan ke kiri","Row":"Baris","Row clipboard actions":"Aksi baris clipboard","Row group":"Grup baris","Row header":"Baris kolom","Row properties":"Properti baris","Row type":"Tipe baris","Rows":"Baris","Save":"Simpan","Save (if save plugin activated)":"Simpan (jika plugin simpan diaktifkan)","Scope":"Cakupan","Search":"Cari","Select all":"Pilih semua","Select...":"Pilih...","Selection":"Pemilihan","Shortcut":"Pintasan","Show blocks":"Tampilkan blok","Show caption":"Perlihatkan keterangan","Show invisible characters":"Tampilkan karakter tak tampak","Size":"Ukuran","Solid":"Padat","Source":"Sumber","Source code":"Kode sumber","Special Character":"Karakter Khusus","Special character...":"Karakter khusus...","Split cell":"Bagi sel","Square":"Kotak","Start list at number":"Mulai daftar dari nomor","Strikethrough":"Coret","Style":"Gaya","Subscript":"Subskrip","Superscript":"Superskrip","Switch to or from fullscreen mode":"Alihkan ke atau dari mode layar penuh","Symbols":"Simbol","System Font":"Huruf Sistem","Table":"Tabel","Table caption":"Judul tabel","Table properties":"Properti tabel","Table styles":"Corak tabel","Template":"Template","Templates":"Template","Text":"Teks","Text color":"Warna teks","Text color {0}":"","Text to display":"Teks yang akan ditampilkan","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL yang dimasukkan sepertinya adalah alamat email. Apakah Anda ingin menambahkan prefiks mailto: yang dibutuhkan?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Tautan yang dimasukkan sepertinya adalah tautan eksternal. Apakah Anda ingin menambahkan prefiks http:// yang dibutuhkan?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL yang Anda masukkan tampaknya merupakan tautan eksternal. Apakah Anda ingin menambahkan awalan https:// yang diperlukan?","Title":"Judul","To open the popup, press Shift+Enter":"Untuk membuka popup, tekan Shift+Enter","Toggle accordion":"","Tools":"Alat","Top":"Atas","Travel and Places":"Perjalanan dan Lokasi","Turquoise":"Toska","Underline":"Garis bawah","Undo":"Batalkan","Upload":"Unggah","Uploading image":"Unggah gambar","Upper Alpha":"Huruf Besar","Upper Roman":"Huruf Besar Romawi","Url":"Url","User Defined":"Ditentukan Pengguna","Valid":"Valid","Version":"Versi","Vertical align":"Sejajar vertikal","Vertical space":"Ruang vertikal","View":"Tampilkan","Visual aids":"Alat bantu visual","Warn":"Peringatkan","White":"Putih","Width":"Lebar","Word count":"Hitungan kata","Words":"Kata","Words: {0}":"Kata: {0}","Yellow":"Kuning","Yes":"Ya","You are using {0}":"Anda menggunakan {0}","You have unsaved changes are you sure you want to navigate away?":"Anda memiliki perubahan yang belum disimpan, yakin ingin beralih ?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Browser anda tidak mendukung akses langsung ke papan klip. Silakan gunakan pintasan Ctrl+X/C/V dari keyboard.","alignment":"penyejajaran","austral sign":"tanda austral","cedi sign":"tanda cedi","colon sign":"tanda titik dua","cruzeiro sign":"tanda cruzeiro","currency sign":"tanda mata uang","dollar sign":"tanda dolar","dong sign":"tanda dong","drachma sign":"tanda drachma","euro-currency sign":"tanda mata uang eropa","example":"contoh","formatting":"pemformatan","french franc sign":"tanda franc prancis","german penny symbol":"simbol penny jerman","guarani sign":"tanda guarani","history":"riwayat","hryvnia sign":"tanda hryvnia","indentation":"indentasi","indian rupee sign":"tanda rupee india","kip sign":"tanda kip","lira sign":"tanda lira","livre tournois sign":"tanda livre tournois","manat sign":"tanda manat","mill sign":"tanda mill","naira sign":"tanda naira","new sheqel sign":"tanda sheqel baru","nordic mark sign":"tanda mark nordik","peseta sign":"tanda peseta","peso sign":"tanda peso","ruble sign":"tanda ruble","rupee sign":"tanda rupee","spesmilo sign":"tanda spesmilo","styles":"gaya","tenge sign":"tanda tenge","tugrik sign":"tanda tugrik","turkish lira sign":"tanda lira turki","won sign":"tanda won","yen character":"karakter yen","yen/yuan character variant one":"varian satu karakter yen/yuan","yuan character":"karakter yuan","yuan character, in hong kong and taiwan":"karakter yuan, di hong kong dan taiwan","{0} characters":"{0} karakter","{0} columns, {1} rows":"Kolom {0}, baris {1}","{0} words":"{0} kata"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/is_IS.js b/staticfiles/tinymce/langs/is_IS.js new file mode 100644 index 0000000..cf92099 --- /dev/null +++ b/staticfiles/tinymce/langs/is_IS.js @@ -0,0 +1 @@ +tinymce.addI18n("is_IS",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"A\xf0ger\xf0","Activity":"Virkni","Address":"","Advanced":"\xcdtarlegt","Align":"Stilla","Align center":"Mi\xf0jujafna","Align left":"Vinstrijafna","Align right":"H\xe6grijafna","Alignment":"J\xf6fnun","Alignment {0}":"","All":"Allt","Alternative description":"","Alternative source":"Valkv\xe6\xf0ur frumk\xf3\xf0i","Alternative source URL":"","Anchor":"","Anchor...":"","Anchors":"Akkeri","Animals and Nature":"D\xfdr og n\xe1tt\xfara","Arrows":"\xd6rvar","B":"","Background color":"Bakgrunnslitur","Background color {0}":"","Black":"Svartur","Block":"Blokka","Block {0}":"","Blockquote":"Blokk","Blocks":"Blokkir","Blue":"Bl\xe1r","Blue component":"","Body":"Innihald","Bold":"Feitletra\xf0","Border":"Rammi","Border color":"Litur \xe1 ramma","Border style":"","Border width":"","Bottom":"Ne\xf0st","Browse files":"","Browse for an image":"Finna mynd \xed t\xf6lvunni","Browse links":"","Bullet list":"K\xfalu listi","Cancel":"H\xe6tta vi\xf0","Caption":"Titill","Cell":"Reitur","Cell padding":"R\xfdmi reits","Cell properties":"Stillingar reits","Cell spacing":"Bil \xed reit","Cell styles":"","Cell type":"Tegund reits","Center":"Mi\xf0ja","Characters":"Stafabil","Characters (no spaces)":"Stafabil (engin bil)","Circle":"Hringur","Class":"Tegund","Clear formatting":"Hreinsa sni\xf0","Close":"Loka","Code":"K\xf3\xf0i","Code sample...":"K\xf3\xf0ad\xe6mi...","Code view":"","Color Picker":"Litaval","Color swatch":"Litaval","Cols":"D\xe1lkar","Column":"D\xe1lkur","Column clipboard actions":"","Column group":"H\xf3pur d\xe1lks","Column header":"","Constrain proportions":"Halda hlutf\xf6llum","Copy":"Afrita","Copy column":"","Copy row":"Afrita r\xf6\xf0","Could not find the specified string.":"Fann ekki umbe\xf0inn streng.","Could not load emojis":"","Count":"Fj\xf6ldi","Currency":"Gjaldmi\xf0ill","Current window":"N\xfaverandi gluggi","Custom color":"S\xe9rsni\xf0in litur","Custom...":"S\xe9rsni\xf0i\xf0...","Cut":"Skera","Cut column":"","Cut row":"Klippa r\xf6\xf0","Dark Blue":"D\xf6kkbl\xe1r","Dark Gray":"D\xf6kkgr\xe1r","Dark Green":"D\xf6kkgr\xe6nn","Dark Orange":"D\xf6kk appels\xednugulur","Dark Purple":"D\xf6kk fj\xf3lubl\xe1r","Dark Red":"D\xf6kkrau\xf0ur","Dark Turquoise":"D\xf6kk gr\xe6nbl\xe1r","Dark Yellow":"D\xf6kkgulur","Dashed":"","Date/time":"Dagur/t\xedmi","Decrease indent":"Minnka inndr\xe1tt","Default":"Sj\xe1lfgefi\xf0","Delete accordion":"","Delete column":"Ey\xf0a d\xe1lki","Delete row":"Ey\xf0a r\xf6\xf0","Delete table":"Ey\xf0a t\xf6flu","Dimensions":"Hlutf\xf6ll","Disc":"Diskur","Div":"","Document":"Skjal","Dotted":"","Double":"","Drop an image here":"Settu inn mynd h\xe9r","Dropped file type is not supported":"","Edit":"Breyta","Embed":"Hengja vi\xf0","Emojis":"","Emojis...":"","Error":"Villa","Error: Form submit field collision.":"Villa: Form submit field collision.","Error: No form element found.":"Villa: Ekkert form element fannst.","Extended Latin":"","Failed to initialize plugin: {0}":"Val","Failed to load plugin url: {0}":"Gat ekki hla\xf0i\xf0 vi\xf0b\xf3t url: {0}","Failed to load plugin: {0} from url {1}":"Gat ekki hla\xf0i\xf0 vi\xf0b\xf3t: {0} fr\xe1 urli {1}","Failed to upload image: {0}":"Gat ekki hala\xf0 upp mynd: {0}","File":"Skjal","Find":"Finna","Find (if searchreplace plugin activated)":"Leita (ef searchreplace vi\xf0b\xf3t er virk)","Find and Replace":"","Find and replace...":"","Find in selection":"","Find whole words only":"Finna einungis heil or\xf0","Flags":"F\xe1nar","Focus to contextual toolbar":"F\xf3kus \xe1 contextual toolbar","Focus to element path":"F\xf3kus \xe1 element path","Focus to menubar":"F\xf3kus \xe1 menubar","Focus to toolbar":"F\xf3kus \xe1 t\xe6kjastiku","Font":"Leturger\xf0","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Leturger\xf0ir","Food and Drink":"Matur og drykkur","Footer":"Ne\xf0anm\xe1l","Format":"Sni\xf0","Format {0}":"","Formats":"Sni\xf0m\xe1t","Fullscreen":"Fylla skj\xe1","G":"","General":"Almennt","Gray":"Gr\xe1r","Green":"Gr\xe6nn","Green component":"","Groove":"","Handy Shortcuts":"Sni\xf0ugar fl\xfdtilei\xf0ir","Header":"Fyrirs\xf6gn","Header cell":"Reitarhaus","Heading 1":"Fyrirs\xf6gn 1","Heading 2":"Fyrirs\xf6gn 2","Heading 3":"Fyrirs\xf6gn 3","Heading 4":"Fyrirs\xf6gn 4","Heading 5":"Fyrirs\xf6gn 5","Heading 6":"Fyrirs\xf6gn 6","Headings":"Fyrirsagnir","Height":"H\xe6\xf0","Help":"Hj\xe1lp","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"L\xe1r\xe9tt l\xedna","Horizontal space":"L\xe1r\xe9tt bil","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Myndalisti","Image title":"Titill myndar","Image...":"Mynd...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Auka inndr\xe1tt","Inline":"Inndregi\xf0","Insert":"Setja inn","Insert Template":"","Insert accordion":"","Insert column after":"Setja inn d\xe1lk fyrir aftan","Insert column before":"Setja inn d\xe1lk fyrir framan","Insert date/time":"Setja inn dagsetningu/t\xedma","Insert image":"Setja inn mynd","Insert link (if link plugin activated)":"Setja inn hlekk (ef link vi\xf0b\xf3t er virk)","Insert row after":"Setja inn r\xf6\xf0 fyrir aftan","Insert row before":"Setja inn r\xf6\xf0 fyrir framan","Insert table":"Setja inn t\xf6flu","Insert template...":"Setja inn sni\xf0m\xe1t...","Insert video":"Setja inn myndband","Insert/Edit code sample":"Setja inn/breyta k\xf3\xf0ad\xe6mi","Insert/edit image":"Setja inn/breyta mynd","Insert/edit link":"Setja inn/breyta hlekk","Insert/edit media":"Setja inn/breyta myndefni","Insert/edit video":"Setja inn/fjarl\xe6gja myndband","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Skr\xe1letra\xf0","Justify":"Jafna","Keyboard Navigation":"Lyklabor\xf0 Navigation","Language":"Tungum\xe1l","Learn more...":"Sj\xe1 meira...","Left":"Vinstri","Left to right":"Vinstri til h\xe6gri","Light Blue":"Lj\xf3sbl\xe1r","Light Gray":"Lj\xf3sgr\xe1r","Light Green":"Lj\xf3sgr\xe6nn","Light Purple":"Lj\xf3s fj\xf3lubl\xe1r","Light Red":"Lj\xf3srau\xf0ur","Light Yellow":"Lj\xf3sgulur","Line height":"","Link list":"Listi hlekkja","Link...":"Hlekkur...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"L\xe1gstafir Alpha","Lower Greek":"L\xe1gstafir Gr\xedskir","Lower Roman":"L\xe1gstafir R\xf3mverskir","Match case":"Samanbur\xf0ur","Mathematical":"St\xe6r\xf0fr\xe6\xf0i","Media poster (Image URL)":"Media poster (mynd URL)","Media...":"","Medium Blue":"Mi\xf0lungs bl\xe1r","Medium Gray":"Mi\xf0lungs gr\xe1r","Medium Purple":"Mi\xf0lungs fj\xf3lubl\xe1r","Merge cells":"Sameina reiti","Middle":"Mi\xf0ja","Midnight Blue":"N\xe6turbl\xe1r","More...":"Meira...","Name":"Nafn","Navy Blue":"D\xf6kkbl\xe1r","New document":"N\xfdtt skjal","New window":"N\xfdr gluggi","Next":"N\xe6sti","No":"Nei","No alignment":"","No color":"Enginn litur","Nonbreaking space":"Bil sem brotnar ekki","None":"Ekkert","Numbered list":"N\xfamera\xf0ur listi","OR":"E\xd0A","Objects":"Hlutir","Ok":"Sta\xf0festa","Open help dialog":"Opna hj\xe1lparkassa","Open link":"","Open link in...":"Opna hlekk \xed...","Open popup menu for split buttons":"","Orange":"Appels\xednugulur","Outset":"","Page break":"S\xed\xf0ubrot","Paragraph":"M\xe1lsgrein","Paste":"L\xedma","Paste as text":"L\xedma sem texta","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"L\xedming er \xed textaham. Texti ver\xf0ur l\xedmdur sem l\xe1tlaus \xfeanga\xf0 til \xfe\xfa afhakar vi\xf0 \xfeennan valm\xf6guleika.","Paste or type a link":"L\xedma e\xf0a sl\xe1 inn hlekk","Paste row after":"L\xedma r\xf6\xf0 fyrir aftan","Paste row before":"L\xedma r\xf6\xf0 fyrir framan","Paste your embed code below:":"L\xedma frumk\xf3\xf0a fyrir ne\xf0an:","People":"F\xf3lk","Plugins":"Vi\xf0b\xe6tur","Plugins installed ({0}):":"Uppsettar vi\xf0b\xf3tir ({0}):","Powered by {0}":"Keyrt af {0}","Pre":"\xd3st\xedla\xf0","Preferences":"Stillingar","Preformatted":"","Premium plugins:":"Premium vi\xf0b\xe6tur:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Forsko\xf0un","Previous":"Fyrri","Print":"","Print...":"Prenta...","Purple":"Fj\xf3lubl\xe1r","Quotations":"Tilvitnanir","R":"","Range 0 to 255":"","Red":"Rau\xf0ur","Red component":"","Redo":"Endurkalla","Remove":"","Remove color":"Fjarl\xe6gja lit","Remove link":"Fjarl\xe6gja hlekk","Replace":"Skipta \xfat","Replace all":"Skipta \xf6llum \xfat","Replace with":"Skipta \xfat me\xf0","Resize":"Breyta st\xe6r\xf0","Restore last draft":"Endurkalla s\xed\xf0asta uppkast","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Rich Text sv\xe6\xf0i. Smelltu \xe1 Alt-0 fyrir hj\xe1lp","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Textasv\xe6\xf0i \xed \xedtarham. \xddttu \xe1 ALT-F9 fyrir valmynd. \xddttu \xe1 ALT-F10 fyrir t\xf3lastiku. \xddttu \xe1 ALT-0 fyrir a\xf0sto\xf0.","Ridge":"","Right":"H\xe6gri","Right to left":"H\xe6gri til vinstri","Row":"R\xf6\xf0","Row clipboard actions":"","Row group":"H\xf3pur ra\xf0ar","Row header":"","Row properties":"Stillingar ra\xf0ar","Row type":"Tegund ra\xf0ar","Rows":"Ra\xf0ir","Save":"Vista","Save (if save plugin activated)":"Vista (ef vistunar vi\xf0b\xf3t er virk)","Scope":"Gildissvi\xf0","Search":"Leita","Select all":"Velja allt","Select...":"Velja...","Selection":"Val","Shortcut":"Fl\xfdtilei\xf0","Show blocks":"S\xfdna kubba","Show caption":"S\xfdna myndatexta","Show invisible characters":"S\xfdna \xf3s\xfdnilega stafi","Size":"St\xe6r\xf0","Solid":"","Source":"Sl\xf3\xf0i","Source code":"Frumk\xf3\xf0i","Special Character":"","Special character...":"S\xe9rstakur stafur...","Split cell":"Deila reiti","Square":"Ferningur","Start list at number":"","Strikethrough":"Yfirstrika\xf0","Style":"St\xedll","Subscript":"Ni\xf0urskrifa\xf0","Superscript":"Uppskrift","Switch to or from fullscreen mode":"Skipta \xed e\xf0a \xfar fullum skj\xe1","Symbols":"T\xe1kn","System Font":"Kerfis leturger\xf0","Table":"Tafla","Table caption":"","Table properties":"Stillingar t\xf6flu","Table styles":"","Template":"Sni\xf0m\xe1t","Templates":"Sni\xf0m\xe1t","Text":"Texti","Text color":"Litur texta","Text color {0}":"","Text to display":"Texti til a\xf0 s\xfdna","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Hlekkurinn sem \xfe\xfa rita\xf0ir inn l\xfdtur \xfat fyrir a\xf0 vera netfang. Viltu b\xe6ta vi\xf0 forskeytinu mailto: ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Hlekkurinn sem \xfe\xfa rita\xf0ir inn l\xfdtur \xfat fyrir a\xf0 vera ytri hlekkur. Viltu b\xe6ta vi\xf0 forskeytinu http:// ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"Titill","To open the popup, press Shift+Enter":"\xddttu \xe1 Shift+Enter til a\xf0 opna sprettiglugga","Toggle accordion":"","Tools":"T\xf3l","Top":"Efst","Travel and Places":"Fer\xf0al\xf6g og sta\xf0ir","Turquoise":"Gr\xe6nbl\xe1r","Underline":"Undirstrika\xf0","Undo":"Afturkalla","Upload":"Hla\xf0a upp","Uploading image":"","Upper Alpha":"H\xe1stafir Alpha","Upper Roman":"H\xe1stafir R\xf3mverskir","Url":"Veffang","User Defined":"Stillt af notanda","Valid":"Gilt","Version":"\xdatg\xe1fa","Vertical align":"","Vertical space":"L\xf3\xf0r\xe9tt bil","View":"Sko\xf0a","Visual aids":"Sj\xf3nr\xe6n hj\xe1lp","Warn":"A\xf0vara","White":"Hv\xedtur","Width":"Breidd","Word count":"Or\xf0afj\xf6ldi","Words":"Or\xf0","Words: {0}":"Or\xf0: {0}","Yellow":"Gulur","Yes":"J\xe1","You are using {0}":"\xde\xfa ert a\xf0 nota {0}","You have unsaved changes are you sure you want to navigate away?":"\xdea\xf0 eru \xf3vista\xf0ar breytingar, ertu viss um a\xf0 \xfe\xfa viljir vafra \xed burtu?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Vafrinn \xfeinn sty\xf0ur ekki beinann a\xf0gang a\xf0 klippibor\xf0inu. Nota\xf0u Ctrl-X/C/V \xe1 lyklabor\xf0inu \xed sta\xf0inn.","alignment":"textastilling","austral sign":"austral t\xe1kn","cedi sign":"cedi t\xe1kn","colon sign":"kommu t\xe1kn","cruzeiro sign":"cruzeiro t\xe1kn","currency sign":"gjaldmi\xf0ils t\xe1kn","dollar sign":"dollar t\xe1kn","dong sign":"dong t\xe1kn","drachma sign":"drachma t\xe1kn","euro-currency sign":"evru-gjaldmi\xf0ils t\xe1kn","example":"d\xe6mi","formatting":"","french franc sign":"franskur franki t\xe1kn","german penny symbol":"german penny t\xe1kn","guarani sign":"guarani t\xe1kn","history":"saga","hryvnia sign":"hryvnia t\xe1kn","indentation":"inndr\xe1ttur","indian rupee sign":"indverskt rupee t\xe1kn","kip sign":"kip t\xe1kn","lira sign":"lira t\xe1kn","livre tournois sign":"livre tournois t\xe1kn","manat sign":"manat t\xe1kn","mill sign":"mill t\xe1kn","naira sign":"naira t\xe1kn","new sheqel sign":"new sheqel t\xe1kn","nordic mark sign":"nordic mark t\xe1kn","peseta sign":"peseta t\xe1kn","peso sign":"peso t\xe1kn","ruble sign":"ruble t\xe1kn","rupee sign":"rupee t\xe1kn","spesmilo sign":"spesmilo t\xe1kn","styles":"st\xedlar","tenge sign":"tenge t\xe1kn","tugrik sign":"tugrik t\xe1kn","turkish lira sign":"tyrknesk l\xedra t\xe1kn","won sign":"won t\xe1kn","yen character":"yen stafur","yen/yuan character variant one":"yen/yuan t\xe1kn afbrig\xf0i eitt","yuan character":"yuan stafur","yuan character, in hong kong and taiwan":"yuan stafur, \xed Hong Kong og Ta\xedvan","{0} characters":"{0} stafabil","{0} columns, {1} rows":"","{0} words":"{0} or\xf0"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/it.js b/staticfiles/tinymce/langs/it.js new file mode 100644 index 0000000..963d4b8 --- /dev/null +++ b/staticfiles/tinymce/langs/it.js @@ -0,0 +1 @@ +tinymce.addI18n("it",{"#":"#","Accessibility":"Accessibilit\xe0","Accordion":"Accordion","Accordion body...":"Accordion body...","Accordion summary...":"Accordion summary...","Action":"Azione","Activity":"Attivit\xe0","Address":"Indirizzo","Advanced":"Avanzate","Align":"Allinea","Align center":"Allinea al centro","Align left":"Allinea a sinistra","Align right":"Allinea a destra","Alignment":"Allineamento","Alignment {0}":"Alignment {0}","All":"Tutto","Alternative description":"Descrizione alternativa","Alternative source":"Sorgente alternativa","Alternative source URL":"URL sorgente alternativa","Anchor":"Ancora","Anchor...":"Ancoraggio...","Anchors":"Ancoraggi","Animals and Nature":"Animali e natura","Arrows":"Frecce","B":"B","Background color":"Colore dello sfondo","Background color {0}":"Colore dello sfondo {0}","Black":"Nero","Block":"Blocco","Block {0}":"Block {0}","Blockquote":"Citazione","Blocks":"Blocchi","Blue":"Blu","Blue component":"Componente blu","Body":"Corpo","Bold":"Grassetto","Border":"Bordo","Border color":"Colore del bordo","Border style":"Stile del bordo","Border width":"Larghezza del bordo","Bottom":"In basso","Browse files":"Esplora i file","Browse for an image":"Cerca un'immagine","Browse links":"Esplora i collegamenti","Bullet list":"Elenco puntato","Cancel":"Annulla","Caption":"Didascalia","Cell":"Cella","Cell padding":"Spaziatura interna celle","Cell properties":"Propriet\xe0 cella","Cell spacing":"Spaziatura tra celle","Cell styles":"Stili cella","Cell type":"Tipo di cella","Center":"Centro","Characters":"Caratteri","Characters (no spaces)":"Caratteri (senza spazi)","Circle":"Circolo","Class":"Classe","Clear formatting":"Cancella la formattazione","Close":"Chiudi","Code":"Codice","Code sample...":"Esempio di codice...","Code view":"Visualizza codice","Color Picker":"Selettore di colori","Color swatch":"Campione di colore","Cols":"Colonne","Column":"Colonna","Column clipboard actions":"Azioni appunti colonna","Column group":"Gruppo di colonne","Column header":"Intestazione colonna","Constrain proportions":"Mantieni proporzioni","Copy":"Copia","Copy column":"Copia colonna","Copy row":"Copia riga","Could not find the specified string.":"Impossibile trovare la stringa specificata.","Could not load emojis":"Non posso caricare le emojis","Count":"Conteggio","Currency":"Valuta","Current window":"Finestra corrente","Custom color":"Colore personalizzato","Custom...":"Personalizzato...","Cut":"Taglia","Cut column":"Taglia colonna","Cut row":"Taglia riga","Dark Blue":"Blu scuro","Dark Gray":"Grigio scuro","Dark Green":"Verde scuro","Dark Orange":"Arancio scuro","Dark Purple":"Viola scuro","Dark Red":"Rosso scuro","Dark Turquoise":"Turchese scuro","Dark Yellow":"Giallo scuro","Dashed":"Trattini","Date/time":"Data/ora","Decrease indent":"Riduci rientro","Default":"Predefinito","Delete accordion":"Delete accordion","Delete column":"Elimina colonna","Delete row":"Elimina riga","Delete table":"Elimina tabella","Dimensions":"Dimensioni","Disc":"Disco","Div":"Div","Document":"Documento","Dotted":"Puntini","Double":"Doppio","Drop an image here":"Rilasciare un'immagine qui","Dropped file type is not supported":"Tipo di file non supportato","Edit":"Modifica","Embed":"Incorpora","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Errore","Error: Form submit field collision.":"Errore: Conflitto di campi nel modulo inviato.","Error: No form element found.":"Errore: Nessun elemento di modulo trovato.","Extended Latin":"Latino esteso","Failed to initialize plugin: {0}":"Inizializzazione plugin fallita: {0}","Failed to load plugin url: {0}":"Caricamento URL plugin fallito: {0}","Failed to load plugin: {0} from url {1}":"Caricamento plugin fallito: {0} dall'URL {1}","Failed to upload image: {0}":"Caricamento immagine fallito: {0}","File":"File","Find":"Trova","Find (if searchreplace plugin activated)":"Trova (se \xe8 attivato l'apposito plugin)","Find and Replace":"Trova e sostituisci","Find and replace...":"Trova e sostituisci...","Find in selection":"Trova nella selezione","Find whole words only":"Trova solo parole intere","Flags":"Bandiere","Focus to contextual toolbar":"Imposta stato attivo per la barra degli strumenti contestuale","Focus to element path":"Imposta stato attivo per il percorso dell'elemento","Focus to menubar":"Imposta stato attivo per la barra dei menu","Focus to toolbar":"Imposta stato attivo per la barra degli strumenti","Font":"Carattere","Font size {0}":"Font size {0}","Font sizes":"Dimensioni font","Font {0}":"Font {0}","Fonts":"Caratteri","Food and Drink":"Cibi e bevande","Footer":"Pi\xe8 di pagina","Format":"Formato","Format {0}":"Format {0}","Formats":"Formati","Fullscreen":"A tutto schermo","G":"V","General":"Generali","Gray":"Grigio","Green":"Verde","Green component":"Componente verde","Groove":"Groove","Handy Shortcuts":"Scorciatoie utili","Header":"Intestazione","Header cell":"Cella d'intestazione","Heading 1":"Titolo 1","Heading 2":"Titolo 2","Heading 3":"Titolo 3","Heading 4":"Titolo 4","Heading 5":"Titolo 5","Heading 6":"Titolo 6","Headings":"Titoli","Height":"Altezza","Help":"Guida","Hex color code":"Codice esadecimale del colore","Hidden":"Nascosto","Horizontal align":"Allineamento orizzontale","Horizontal line":"Linea orizzontale","Horizontal space":"Spazio orizzontale","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID dovrebbe iniziare con una lettera, seguita solo da lettere, numeri, trattini, punti, due punti.","Image is decorative":"L'immagine \xe8 decorativa","Image list":"Elenco immagini","Image title":"Titolo immagine","Image...":"Immagine...","ImageProxy HTTP error: Could not find Image Proxy":"Errore HTTP ImageProxy: impossibile trovare Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"Errore HTTP ImageProxy: URL Image Proxy non corretto","ImageProxy HTTP error: Rejected request":"Errore HTTP ImageProxy: richiesta rifiutata","ImageProxy HTTP error: Unknown ImageProxy error":"Errore HTTP ImageProxy: errore sconosciuto","Increase indent":"Aumenta rientro","Inline":"In linea","Insert":"Inserisci","Insert Template":"Inserisci modello","Insert accordion":"Insert accordion","Insert column after":"Inserisci colonna dopo","Insert column before":"Inserisci colonna prima","Insert date/time":"Inserisci data/ora","Insert image":"Inserisci immagine","Insert link (if link plugin activated)":"Inserisci un collegamento (se \xe8 attivato l'apposito plugin)","Insert row after":"Inserisci riga dopo","Insert row before":"Inserisci riga prima","Insert table":"Inserisci tabella","Insert template...":"Inserisci modello...","Insert video":"Inserisci video","Insert/Edit code sample":"Inserisci/modifica esempio di codice","Insert/edit image":"Inserisci/modifica immagine","Insert/edit link":"Inserisci/modifica collegamento","Insert/edit media":"Inserisci/modifica oggetti multimediali","Insert/edit video":"Inserisci/modifica video","Inset":"Inserto","Invalid hex color code: {0}":"Codice esadecimale del colore non valido: {0}","Invalid input":"Dato non valido","Italic":"Corsivo","Justify":"Giustifica","Keyboard Navigation":"Navigazione tramite tastiera","Language":"Lingua","Learn more...":"Maggiori informazioni...","Left":"Sinistra","Left to right":"Da sinistra a destra","Light Blue":"Azzurro","Light Gray":"Grigio chiaro","Light Green":"Verde chiaro","Light Purple":"Viola chiaro","Light Red":"Rosso chiaro","Light Yellow":"Giallo chiaro","Line height":"Altezza linea","Link list":"Elenco collegamenti","Link...":"Collegamento...","List Properties":"Propriet\xe0 Lista","List properties...":"Propriet\xe0 lista...","Loading emojis...":"Caricamento emojis...","Loading...":"Lettura in corso...","Lower Alpha":"Alfabetico minuscolo","Lower Greek":"Greco minuscolo","Lower Roman":"Romano minuscolo","Match case":"Maiuscole/minuscole","Mathematical":"Caratteri matematici","Media poster (Image URL)":"Poster dell'oggetto multimediale (URL dell'immagine)","Media...":"Oggetto multimediale...","Medium Blue":"Blu medio","Medium Gray":"Grigio medio","Medium Purple":"Viola medio","Merge cells":"Unisci le celle","Middle":"Centrato","Midnight Blue":"Blu notte","More...":"Altro\u2026","Name":"Nome","Navy Blue":"Blu scuro","New document":"Nuovo documento","New window":"Nuova finestra","Next":"Avanti","No":"No","No alignment":"Senza allineamento","No color":"Nessun colore","Nonbreaking space":"Spazio indivisibile","None":"Nessuno","Numbered list":"Elenco numerato","OR":"OPPURE","Objects":"Oggetti","Ok":"Ok","Open help dialog":"Apri la finestra di aiuto","Open link":"Apri link","Open link in...":"Apri collegamento in...","Open popup menu for split buttons":"Apri il menu a comparsa per i pulsanti divisi","Orange":"Arancio","Outset":"Inizio","Page break":"Interruzione di pagina","Paragraph":"Paragrafo","Paste":"Incolla","Paste as text":"Incolla senza formattazioni","Paste column after":"Inserisci colonna dopo","Paste column before":"Inserisci colonna prima","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Incolla \xe8 in modalit\xe0 testo normale. I contenuti saranno incollati come testo normale se non viene disattivata questa opzione.","Paste or type a link":"Incolla o digita un collegamento","Paste row after":"Incolla riga dopo","Paste row before":"Incolla riga prima","Paste your embed code below:":"Incolla il codice d'incorporamento di seguito:","People":"Persone","Plugins":"Plugin","Plugins installed ({0}):":"Plugin installati ({0}):","Powered by {0}":"Con tecnologia {0}","Pre":"Pre","Preferences":"Preferenze","Preformatted":"Preformattato","Premium plugins:":"Plugin Premium:","Press the Up and Down arrow keys to resize the editor.":"Premi le frecce in su e in gi\xf9 per ridimensionare l'editor.","Press the arrow keys to resize the editor.":"Premi le frecce per ridimensionare l'editor.","Press {0} for help":"Premi {0} per ricevere aiuto","Preview":"Anteprima","Previous":"Indietro","Print":"Stampa","Print...":"Stampa...","Purple":"Viola","Quotations":"Citazioni","R":"R","Range 0 to 255":"Intervallo da 0 a 255","Red":"Rosso","Red component":"Componente rosso","Redo":"Ripristina","Remove":"Rimuovi","Remove color":"Rimuovi colore","Remove link":"Rimuovi collegamento","Replace":"Sostituisci","Replace all":"Sostituisci tutto","Replace with":"Sostituisci con","Resize":"Ridimensiona","Restore last draft":"Ripristina l'ultima bozza","Reveal or hide additional toolbar items":"Mostra o nascondi componenti aggiuntivi","Rich Text Area":"Area di testo ricco","Rich Text Area. Press ALT-0 for help.":"Area di testo RTF. Premere ALT-0 per la guida.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Area di testo RTF. Premere ALT-F9 per il menu. Premere ALT-F10 per la barra degli strumenti. Premere ALT-0 per la guida.","Ridge":"Ridge","Right":"Destra","Right to left":"Da destra a sinistra","Row":"Riga","Row clipboard actions":"Azioni appunti riga","Row group":"Gruppo di righe","Row header":"Intestazione riga","Row properties":"Propriet\xe0 della riga","Row type":"Tipo di riga","Rows":"Righe","Save":"Salva","Save (if save plugin activated)":"Salva (se \xe8 attivato l'apposito plugin)","Scope":"Ambito","Search":"Cerca","Select all":"Seleziona tutto","Select...":"Seleziona...","Selection":"Selezione","Shortcut":"Collegamento","Show blocks":"Mostra blocchi","Show caption":"Mostra didascalia","Show invisible characters":"Mostra caratteri invisibili","Size":"Dimensione carattere","Solid":"Pieno","Source":"Fonte","Source code":"Codice sorgente","Special Character":"Carattere Speciale","Special character...":"Carattere speciale...","Split cell":"Dividi la cella","Square":"Quadrato","Start list at number":"La lista inizia con il numero","Strikethrough":"Barrato","Style":"Stile","Subscript":"Pedice","Superscript":"Apice","Switch to or from fullscreen mode":"Attiva/disattiva la modalit\xe0 schermo intero","Symbols":"Simboli","System Font":"Carattere di sistema","Table":"Tabella","Table caption":"Titolo tabella","Table properties":"Propriet\xe0 della tabella","Table styles":"Stili tabella","Template":"Modello","Templates":"Modelli","Text":"Testo","Text color":"Colore testo","Text color {0}":"Colore del testo {0}","Text to display":"Testo da visualizzare","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"L'URL inserito sembra essere un indirizzo email. Si vuole aggiungere il necessario prefisso mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"L'URL inserito sembra essere un collegamento esterno. Si vuole aggiungere il necessario prefisso http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"L'URL che hai inserito sembra essere un collegamento esterno. Vuoi aggiungere il prefisso https:// necessario?","Title":"Titolo","To open the popup, press Shift+Enter":"Per aprire il popup, premere Shift+Invio","Toggle accordion":"Toggle accordion","Tools":"Strumenti","Top":"In alto","Travel and Places":"Viaggi e luoghi","Turquoise":"Turchese","Underline":"Sottolineato","Undo":"Annulla","Upload":"Carica","Uploading image":"Caricamento immagine","Upper Alpha":"Alfabetico maiuscolo","Upper Roman":"Romano maiuscolo","Url":"URL","User Defined":"Definito dall'utente","Valid":"Valido","Version":"Versione","Vertical align":"Allineamento verticale","Vertical space":"Spazio verticale","View":"Visualizza","Visual aids":"Aiuti visivi","Warn":"Avviso","White":"Bianco","Width":"Larghezza","Word count":"Conteggio parole","Words":"Parole","Words: {0}":"Parole: {0}","Yellow":"Giallo","Yes":"S\xec","You are using {0}":"Si sta utilizzando {0}","You have unsaved changes are you sure you want to navigate away?":"Ci sono modifiche non salvate, si \xe8 sicuro di volere uscire?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Il browser non supporta l'accesso diretto alla cartella degli appunti. Usare i tasti di scelta rapida Ctrl+X/C/V.","alignment":"allineamento","austral sign":"simbolo dell'austral","cedi sign":"simbolo del cedi","colon sign":"simbolo del col\xf3n","cruzeiro sign":"simbolo del cruzeiro","currency sign":"simbolo di valuta","dollar sign":"simbolo del dollaro","dong sign":"simbolo del dong","drachma sign":"simbolo della dracma","euro-currency sign":"simbolo dell'euro","example":"esempio","formatting":"formattazione","french franc sign":"simbolo del franco francese","german penny symbol":"simbolo del pfennig tedesco","guarani sign":"simbolo del guaran\xec","history":"cronologia","hryvnia sign":"simbolo della hryvnia","indentation":"indentazione","indian rupee sign":"simbolo della rup\xeca indiana","kip sign":"simbolo del kip","lira sign":"simbolo della lira","livre tournois sign":"simbolo della lira di Tours","manat sign":"simbolo del manat","mill sign":"simbolo del mill","naira sign":"simbolo della naira","new sheqel sign":"simbolo del nuovo shekel","nordic mark sign":"simbolo del marco nordico","peseta sign":"simbolo della peseta","peso sign":"simbolo del peso","ruble sign":"simbolo del rublo","rupee sign":"simbolo della rup\xeca","spesmilo sign":"simbolo dello spesmilo","styles":"stili","tenge sign":"simbolo del tenge","tugrik sign":"simbolo del tugrik","turkish lira sign":"simbolo della lira turca","won sign":"simbolo del won","yen character":"simbolo dello yen","yen/yuan character variant one":"simbolo yen/yuan variante uno","yuan character":"simbolo dello yuan","yuan character, in hong kong and taiwan":"simbolo dello yuan, Hong Kong e Taiwan","{0} characters":"{0} caratteri","{0} columns, {1} rows":"{0} colonne, {1} righe","{0} words":"{0} parole"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ja.js b/staticfiles/tinymce/langs/ja.js new file mode 100644 index 0000000..0134f1a --- /dev/null +++ b/staticfiles/tinymce/langs/ja.js @@ -0,0 +1 @@ +tinymce.addI18n("ja",{"#":"#","Accessibility":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3","Accordion":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3","Accordion body...":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u672c\u6587...","Accordion summary...":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u6982\u8981...","Action":"\u30a2\u30af\u30b7\u30e7\u30f3","Activity":"\u884c\u52d5","Address":"\u30a2\u30c9\u30ec\u30b9","Advanced":"\u8a73\u7d30","Align":"\u914d\u7f6e","Align center":"\u4e2d\u592e\u63c3\u3048","Align left":"\u5de6\u63c3\u3048","Align right":"\u53f3\u63c3\u3048","Alignment":"\u914d\u7f6e","Alignment {0}":"\u6574\u5217 {0}","All":"\u3059\u3079\u3066","Alternative description":"\u4ee3\u66ff\u306e\u8aac\u660e\u6587","Alternative source":"\u4ee3\u66ff\u30bd\u30fc\u30b9","Alternative source URL":"\u4ee3\u66ff\u30bd\u30fc\u30b9URL","Anchor":"\u30a2\u30f3\u30ab\u30fc","Anchor...":"\u30a2\u30f3\u30ab\u30fc...","Anchors":"\u30a2\u30f3\u30ab\u30fc","Animals and Nature":"\u52d5\u7269\u3068\u81ea\u7136","Arrows":"\u77e2\u5370","B":"\u9752","Background color":"\u80cc\u666f\u8272","Background color {0}":"\u80cc\u666f\u8272 {0}","Black":"\u30d6\u30e9\u30c3\u30af","Block":"\u30d6\u30ed\u30c3\u30af","Block {0}":"\u30d6\u30ed\u30c3\u30af {0}","Blockquote":"\u5f15\u7528","Blocks":"\u30d6\u30ed\u30c3\u30af","Blue":"\u30d6\u30eb\u30fc","Blue component":"\u9752\u8272\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8","Body":"\u672c\u6587","Bold":"\u592a\u5b57","Border":"\u30dc\u30fc\u30c0\u30fc","Border color":"\u30dc\u30fc\u30c0\u30fc\u306e\u8272","Border style":"\u67a0\u7dda\u30b9\u30bf\u30a4\u30eb","Border width":"\u67a0\u7dda\u5e45","Bottom":"\u4e0b\u63c3\u3048","Browse files":"\u30d5\u30a1\u30a4\u30eb\u3092\u30d6\u30e9\u30a6\u30ba","Browse for an image":"\u753b\u50cf\u3092\u53c2\u7167","Browse links":"\u30ea\u30f3\u30af\u3092\u30d6\u30e9\u30a6\u30ba","Bullet list":"\u7b87\u6761\u66f8\u304d","Cancel":"\u53d6\u6d88","Caption":"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3","Cell":"\u30bb\u30eb","Cell padding":"\u30bb\u30eb\u5185\u306e\u30b9\u30da\u30fc\u30b9","Cell properties":"\u30bb\u30eb\u306e\u30d7\u30ed\u30d1\u30c6\u30a3","Cell spacing":"\u30bb\u30eb\u306e\u9593\u9694","Cell styles":"\u30bb\u30eb\u306e\u7a2e\u985e","Cell type":"\u30bb\u30eb\u306e\u7a2e\u985e","Center":"\u4e2d\u592e\u63c3\u3048","Characters":"\u6587\u5b57\u6570","Characters (no spaces)":"\u6587\u5b57\u6570 (\u30b9\u30da\u30fc\u30b9\u306a\u3057)","Circle":"\u4e38","Class":"\u30af\u30e9\u30b9","Clear formatting":"\u66f8\u5f0f\u3092\u30af\u30ea\u30a2","Close":"\u9589\u3058\u308b","Code":"\u30b3\u30fc\u30c9","Code sample...":"\u30b3\u30fc\u30c9\u306e\u30b5\u30f3\u30d7\u30eb...","Code view":"\u30b3\u30fc\u30c9\u8868\u793a","Color Picker":"\u30ab\u30e9\u30fc\u30d4\u30c3\u30ab\u30fc","Color swatch":"\u8272\u306e\u898b\u672c","Cols":"\u5217\u6570","Column":"\u5217","Column clipboard actions":"\u5217\u306e\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u30a2\u30af\u30b7\u30e7\u30f3","Column group":"\u5217\u30b0\u30eb\u30fc\u30d7","Column header":"\u5217\u306e\u30d8\u30c3\u30c0\u30fc","Constrain proportions":"\u7e26\u6a2a\u6bd4\u3092\u56fa\u5b9a","Copy":"\u30b3\u30d4\u30fc","Copy column":"\u5217\u3092\u30b3\u30d4\u30fc","Copy row":"\u884c\u306e\u30b3\u30d4\u30fc","Could not find the specified string.":"\u304a\u63a2\u3057\u306e\u6587\u5b57\u5217\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","Could not load emojis":"\u7d75\u6587\u5b57\u304c\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f","Count":"\u30ab\u30a6\u30f3\u30c8","Currency":"\u901a\u8ca8","Current window":"\u540c\u3058\u30a6\u30a3\u30f3\u30c9\u30a6","Custom color":"\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u306e\u8272","Custom...":"\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a...","Cut":"\u5207\u308a\u53d6\u308a","Cut column":"\u5217\u3092\u30ab\u30c3\u30c8","Cut row":"\u884c\u306e\u5207\u308a\u53d6\u308a","Dark Blue":"\u30c0\u30fc\u30af\u30d6\u30eb\u30fc","Dark Gray":"\u30c0\u30fc\u30af\u30b0\u30ec\u30fc","Dark Green":"\u30c0\u30fc\u30af\u30b0\u30ea\u30fc\u30f3","Dark Orange":"\u30c0\u30fc\u30af\u30aa\u30ec\u30f3\u30b8","Dark Purple":"\u30c0\u30fc\u30af\u30d1\u30fc\u30d7\u30eb","Dark Red":"\u30c0\u30fc\u30af\u30ec\u30c3\u30c9","Dark Turquoise":"\u30c0\u30fc\u30af\u30bf\u30fc\u30b3\u30a4\u30ba","Dark Yellow":"\u30c0\u30fc\u30af\u30a4\u30a8\u30ed\u30fc","Dashed":"\u7834\u7dda","Date/time":"\u65e5\u4ed8/\u6642\u523b","Decrease indent":"\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u6e1b\u3089\u3059","Default":"\u65e2\u5b9a","Delete accordion":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u524a\u9664","Delete column":"\u5217\u306e\u524a\u9664","Delete row":"\u884c\u306e\u524a\u9664","Delete table":"\u30c6\u30fc\u30d6\u30eb\u306e\u524a\u9664","Dimensions":"\u30b5\u30a4\u30ba","Disc":"\u9ed2\u4e38","Div":"\u5206\u5272","Document":"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","Dotted":"\u70b9\u7dda","Double":"\u4e8c\u91cd\u7dda","Drop an image here":"\u3053\u3053\u306b\u753b\u50cf\u3092\u30c9\u30ed\u30c3\u30d7","Dropped file type is not supported":"\u30c9\u30ed\u30c3\u30d7\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093","Edit":"\u7de8\u96c6","Embed":"\u57cb\u3081\u8fbc\u307f","Emojis":"\u7d75\u6587\u5b57","Emojis...":"\u7d75\u6587\u5b57...","Error":"\u30a8\u30e9\u30fc","Error: Form submit field collision.":"\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002","Error: No form element found.":"\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u8981\u7d20\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","Extended Latin":"\u30e9\u30c6\u30f3\u6587\u5b57\u62e1\u5f35","Failed to initialize plugin: {0}":"\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u521d\u671f\u5316\u306b\u5931\u6557\u3057\u307e\u3057\u305f","Failed to load plugin url: {0}":"\u30d7\u30e9\u30b0\u30a4\u30f3\u306eURL{0}\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f","Failed to load plugin: {0} from url {1}":"URL{1}\u304b\u3089\u306e\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f","Failed to upload image: {0}":"\u753b\u50cf{0}\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f","File":"\u30d5\u30a1\u30a4\u30eb","Find":"\u691c\u7d22...","Find (if searchreplace plugin activated)":"\u691c\u7d22 (\u7f6e\u63db\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)","Find and Replace":"\u691c\u7d22\u3068\u7f6e\u63db","Find and replace...":"\u7f6e\u63db...","Find in selection":"\u9078\u629e\u90e8\u5206\u3067\u691c\u7d22","Find whole words only":"\u8a9e\u5168\u4f53\u3092\u542b\u3080\u3082\u306e\u306e\u307f\u691c\u7d22","Flags":"\u65d7","Focus to contextual toolbar":"\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9","Focus to element path":"\u8981\u7d20\u30d1\u30b9\u306b\u30d5\u30a9\u30fc\u30ab\u30b9","Focus to menubar":"\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9","Focus to toolbar":"\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9","Font":"\u30d5\u30a9\u30f3\u30c8","Font size {0}":"\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba {0}","Font sizes":"\u30d5\u30a9\u30f3\u30c8\u306e\u30b5\u30a4\u30ba","Font {0}":"\u30d5\u30a9\u30f3\u30c8 {0}","Fonts":"\u30d5\u30a9\u30f3\u30c8","Food and Drink":"\u98df\u3079\u7269\u3068\u98f2\u307f\u7269","Footer":"\u30d5\u30c3\u30bf\u30fc","Format":"\u66f8\u5f0f\u8a2d\u5b9a","Format {0}":"\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 {0}","Formats":"\u66f8\u5f0f","Fullscreen":"\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3","G":"\u7dd1","General":"\u4e00\u822c","Gray":"\u30b0\u30ec\u30fc","Green":"\u30b0\u30ea\u30fc\u30f3","Green component":"\u7dd1\u8272\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8","Groove":"\u8c37\u7dda","Handy Shortcuts":"\u4fbf\u5229\u306a\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8","Header":"\u30d8\u30c3\u30c0\u30fc","Header cell":"\u30d8\u30c3\u30c0\u30fc\u30bb\u30eb","Heading 1":"\u898b\u51fa\u30571","Heading 2":"\u898b\u51fa\u30572","Heading 3":"\u898b\u51fa\u30573","Heading 4":"\u898b\u51fa\u30574","Heading 5":"\u898b\u51fa\u30575","Heading 6":"\u898b\u51fa\u30576","Headings":"\u898b\u51fa\u3057","Height":"\u9ad8\u3055","Help":"\u30d8\u30eb\u30d7","Hex color code":"16\u9032\u30ab\u30e9\u30fc\u30b3\u30fc\u30c9","Hidden":"\u975e\u8868\u793a","Horizontal align":"\u6c34\u5e73\u306b\u6574\u5217","Horizontal line":"\u6c34\u5e73\u7f6b\u7dda","Horizontal space":"\u5de6\u53f3\u4f59\u767d","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u306f\u6587\u5b57\u3067\u59cb\u307e\u308a\u3001\u305d\u306e\u5f8c\u306b\u6587\u5b57\u3001\u6570\u5b57\u3001\u30c0\u30c3\u30b7\u30e5\u3001\u30d4\u30ea\u30aa\u30c9\u3001\u30b3\u30ed\u30f3\u3001\u307e\u305f\u306f\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u304c\u7d9a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002","Image is decorative":"\u753b\u50cf\u306f\u88c5\u98fe\u753b\u50cf","Image list":"\u753b\u50cf\u30ea\u30b9\u30c8","Image title":"\u753b\u50cf\u30bf\u30a4\u30c8\u30eb","Image...":"\u753b\u50cf..","ImageProxy HTTP error: Could not find Image Proxy":"\u753b\u50cf\u30d7\u30ed\u30ad\u30b7 HTTP\u30a8\u30e9\u30fc\uff1a\u753b\u50cf\u30d7\u30ed\u30ad\u30b7\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u753b\u50cf\u30d7\u30ed\u30ad\u30b7 HTTP\u30a8\u30e9\u30fc\uff1a\u4e0d\u6b63\u306a\u753b\u50cf\u30d7\u30ed\u30ad\u30b7URL","ImageProxy HTTP error: Rejected request":"\u753b\u50cf\u30d7\u30ed\u30ad\u30b7 HTTP\u30a8\u30e9\u30fc\uff1a\u62d2\u5426\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8","ImageProxy HTTP error: Unknown ImageProxy error":"\u753b\u50cf\u30d7\u30ed\u30ad\u30b7 HTTP\u30a8\u30e9\u30fc\uff1a\u4e0d\u660e\u306a\u753b\u50cf\u30d7\u30ed\u30ad\u30b7\u30a8\u30e9\u30fc","Increase indent":"\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u5897\u3084\u3059","Inline":"\u30a4\u30f3\u30e9\u30a4\u30f3","Insert":"\u633f\u5165","Insert Template":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165..","Insert accordion":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u633f\u5165","Insert column after":"\u5f8c\u306b\u5217\u3092\u633f\u5165","Insert column before":"\u524d\u306b\u5217\u3092\u633f\u5165","Insert date/time":"\u65e5\u4ed8/\u6642\u523b\u306e\u633f\u5165","Insert image":"\u753b\u50cf\u306e\u633f\u5165","Insert link (if link plugin activated)":"\u30ea\u30f3\u30af\u3092\u633f\u5165 (\u30ea\u30f3\u30af\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)","Insert row after":"\u5f8c\u306b\u884c\u3092\u633f\u5165","Insert row before":"\u524d\u306b\u884c\u3092\u633f\u5165","Insert table":"\u8868\u306e\u633f\u5165","Insert template...":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165..","Insert video":"\u52d5\u753b\u306e\u633f\u5165","Insert/Edit code sample":"\u30b3\u30fc\u30c9\u30b5\u30f3\u30d7\u30eb\u306e\u633f\u5165/\u7de8\u96c6","Insert/edit image":"\u753b\u50cf\u306e\u633f\u5165/\u7de8\u96c6","Insert/edit link":"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","Insert/edit media":"\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165/\u7de8\u96c6","Insert/edit video":"\u52d5\u753b\u306e\u633f\u5165/\u7de8\u96c6","Inset":"\u5185\u7dda","Invalid hex color code: {0}":"\u7121\u52b9\u306a16\u9032\u30ab\u30e9\u30fc\u30b3\u30fc\u30c9: {0}","Invalid input":"\u7121\u52b9\u306a\u5165\u529b","Italic":"\u659c\u4f53","Justify":"\u4e21\u7aef\u63c3\u3048","Keyboard Navigation":"\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3","Language":"\u8a00\u8a9e","Learn more...":"\u8a73\u7d30...","Left":"\u5de6\u63c3\u3048","Left to right":"\u5de6\u304b\u3089\u53f3","Light Blue":"\u30e9\u30a4\u30c8\u30d6\u30eb\u30fc","Light Gray":"\u30e9\u30a4\u30c8\u30b0\u30ec\u30fc","Light Green":"\u30e9\u30a4\u30c8\u30b0\u30ea\u30fc\u30f3","Light Purple":"\u30e9\u30a4\u30c8\u30d1\u30fc\u30d7\u30eb","Light Red":"\u30e9\u30a4\u30c8\u30ec\u30c3\u30c9","Light Yellow":"\u30e9\u30a4\u30c8\u30a4\u30a8\u30ed\u30fc","Line height":"\u884c\u306e\u9ad8\u3055","Link list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","Link...":"\u30ea\u30f3\u30af...","List Properties":"\u7b87\u6761\u66f8\u304d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3","List properties...":"\u7b87\u6761\u66f8\u304d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3...","Loading emojis...":"\u7d75\u6587\u5b57\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u2026","Loading...":"\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...","Lower Alpha":"\u5c0f\u6587\u5b57\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8","Lower Greek":"\u5c0f\u6587\u5b57\u30ae\u30ea\u30b7\u30e3\u6587\u5b57","Lower Roman":"\u5c0f\u6587\u5b57\u30ed\u30fc\u30de\u5b57","Match case":"\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u533a\u5225","Mathematical":"\u6570\u5b66\u8a18\u53f7","Media poster (Image URL)":"\u30e1\u30c7\u30a3\u30a2\u30dd\u30b9\u30bf\u30fc (\u753b\u50cfURL)","Media...":"\u30e1\u30c7\u30a3\u30a2\u2026","Medium Blue":"\u30e1\u30c7\u30a3\u30a2\u30e0\u30d6\u30eb\u30fc","Medium Gray":"\u30df\u30c7\u30a3\u30a2\u30e0\u30b0\u30ec\u30fc","Medium Purple":"\u30df\u30c7\u30a3\u30a2\u30e0\u30d1\u30fc\u30d7\u30eb","Merge cells":"\u30bb\u30eb\u306e\u7d50\u5408","Middle":"\u4e2d\u592e\u63c3\u3048","Midnight Blue":"\u30df\u30c3\u30c9\u30ca\u30a4\u30c8\u30d6\u30eb\u30fc","More...":"\u8a73\u7d30...","Name":"\u540d\u524d","Navy Blue":"\u30cd\u30a4\u30d3\u30fc","New document":"\u65b0\u898f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","New window":"\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6","Next":"\u6b21\u3078","No":"\u3044\u3044\u3048","No alignment":"\u914d\u7f6e\u306a\u3057","No color":"\u8272\u306a\u3057","Nonbreaking space":"\u56fa\u5b9a\u30b9\u30da\u30fc\u30b9","None":"\u306a\u3057","Numbered list":"\u756a\u53f7\u4ed8\u304d\u7b87\u6761\u66f8\u304d","OR":"\u307e\u305f\u306f","Objects":"\u7269","Ok":"OK","Open help dialog":"\u30d8\u30eb\u30d7\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u958b\u304f","Open link":"\u30ea\u30f3\u30af\u3092\u958b\u304f","Open link in...":"\u30ea\u30f3\u30af\u306e\u958b\u304d\u65b9...","Open popup menu for split buttons":"\u5206\u5272\u30dc\u30bf\u30f3\u306e\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f","Orange":"\u30aa\u30ec\u30f3\u30b8","Outset":"\u5916\u7dda","Page break":"\u30da\u30fc\u30b8\u533a\u5207\u308a","Paragraph":"\u6bb5\u843d","Paste":"\u8cbc\u308a\u4ed8\u3051","Paste as text":"\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051","Paste column after":"\u5f8c\u306b\u5217\u3092\u8cbc\u308a\u4ed8\u3051","Paste column before":"\u524d\u306b\u5217\u3092\u8cbc\u308a\u4ed8\u3051","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u8cbc\u308a\u4ed8\u3051\u306f\u73fe\u5728\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u30e2\u30fc\u30c9\u3067\u3059\u3002\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u30aa\u30d5\u306b\u3057\u306a\u3044\u9650\u308a\u5185\u5bb9\u306f\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002","Paste or type a link":"\u30ea\u30f3\u30af\u3092\u30da\u30fc\u30b9\u30c8\u307e\u305f\u306f\u5165\u529b","Paste row after":"\u4e0b\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","Paste row before":"\u4e0a\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","Paste your embed code below:":"\u57cb\u3081\u8fbc\u307f\u7528\u30b3\u30fc\u30c9\u3092\u4ee5\u4e0b\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","People":"\u4eba","Plugins":"\u30d7\u30e9\u30b0\u30a4\u30f3","Plugins installed ({0}):":"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u30d7\u30e9\u30b0\u30a4\u30f3 ({0})\uff1a","Powered by {0}":"{0} \u306b\u3088\u3063\u3066\u642d\u8f09\u3055\u308c\u305f","Pre":"\u6574\u5f62\u6e08\u307f\u30c6\u30ad\u30b9\u30c8","Preferences":"\u30d7\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9","Preformatted":"\u66f8\u5f0f\u8a2d\u5b9a\u6e08\u307f","Premium plugins:":"\u30d7\u30ec\u30df\u30a2\u30e0\u30d7\u30e9\u30b0\u30a4\u30f3\uff1a","Press the Up and Down arrow keys to resize the editor.":"\u4e0a\u77e2\u5370\u3068\u4e0b\u77e2\u5370\u306e\u30ad\u30fc\u3092\u62bc\u3057\u3066\u30a8\u30c7\u30a3\u30bf\u30fc\u306e\u30b5\u30a4\u30ba\u3092\u5909\u66f4\u3057\u307e\u3059\u3002","Press the arrow keys to resize the editor.":"\u77e2\u5370\u30ad\u30fc\u3092\u62bc\u3057\u3066\u30a8\u30c7\u30a3\u30bf\u30fc\u306e\u30b5\u30a4\u30ba\u3092\u5909\u66f4\u3057\u307e\u3059\u3002","Press {0} for help":"\u30d8\u30eb\u30d7\u3092\u898b\u308b\u306b\u306f {0} \u3092\u62bc\u3057\u307e\u3059","Preview":"\u30d7\u30ec\u30d3\u30e5\u30fc","Previous":"\u524d\u3078","Print":"\u5370\u5237","Print...":"\u5370\u5237...","Purple":"\u30d1\u30fc\u30d7\u30eb","Quotations":"\u5f15\u7528","R":"\u8d64","Range 0 to 255":"\u7bc4\u56f20\u301c255","Red":"\u30ec\u30c3\u30c9","Red component":"\u8d64\u8272\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8","Redo":"\u3084\u308a\u76f4\u3057","Remove":"\u524a\u9664","Remove color":"\u8272\u8a2d\u5b9a\u3092\u89e3\u9664","Remove link":"\u30ea\u30f3\u30af\u306e\u524a\u9664","Replace":"\u7f6e\u63db","Replace all":"\u3059\u3079\u3066\u7f6e\u63db","Replace with":"\u7f6e\u63db\u5f8c\u306e\u6587\u5b57\u5217","Resize":"\u30b5\u30a4\u30ba\u5909\u66f4","Restore last draft":"\u524d\u56de\u306e\u4e0b\u66f8\u304d\u3092\u56de\u5fa9","Reveal or hide additional toolbar items":"\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb \u30d0\u30fc \u30a2\u30a4\u30c6\u30e0\u306e\u8868\u793a\u307e\u305f\u306f\u975e\u8868\u793a","Rich Text Area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2","Rich Text Area. Press ALT-0 for help.":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3002Alt-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3002ALT-F9\u3067\u30e1\u30cb\u30e5\u30fc\u3001ALT-F10\u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002","Ridge":"\u5c71\u7dda","Right":"\u53f3\u63c3\u3048","Right to left":"\u53f3\u304b\u3089\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u306e\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u30a2\u30af\u30b7\u30e7\u30f3","Row group":"\u884c\u30b0\u30eb\u30fc\u30d7","Row header":"\u884c\u306e\u30d8\u30c3\u30c0\u30fc","Row properties":"\u884c\u306e\u30d7\u30ed\u30d1\u30c6\u30a3","Row type":"\u884c\u30bf\u30a4\u30d7","Rows":"\u884c\u6570","Save":"\u4fdd\u5b58","Save (if save plugin activated)":"\u4fdd\u5b58 (\u4fdd\u5b58\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)","Scope":"\u30b9\u30b3\u30fc\u30d7","Search":"\u691c\u7d22","Select all":"\u3059\u3079\u3066\u9078\u629e","Select...":"\u9078\u629e...","Selection":"\u9078\u629e","Shortcut":"\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8","Show blocks":"\u6587\u7ae0\u306e\u533a\u5207\u308a\u3092\u70b9\u7dda\u3067\u8868\u793a","Show caption":"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u306e\u8868\u793a","Show invisible characters":"\u975e\u8868\u793a\u6587\u5b57\u3092\u8868\u793a","Size":"\u30b5\u30a4\u30ba","Solid":"\u5b9f\u7dda","Source":"\u30bd\u30fc\u30b9","Source code":"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9","Special Character":"\u7279\u6b8a\u6587\u5b57","Special character...":"\u7279\u6b8a\u6587\u5b57...","Split cell":"\u30bb\u30eb\u306e\u5206\u5272","Square":"\u56db\u89d2","Start list at number":"\u756a\u53f7\u30ea\u30b9\u30c8\u306e\u958b\u59cb","Strikethrough":"\u53d6\u6d88\u7dda","Style":"\u30b9\u30bf\u30a4\u30eb","Subscript":"\u4e0b\u4ed8\u304d","Superscript":"\u4e0a\u4ed8\u304d","Switch to or from fullscreen mode":"\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30e2\u30fc\u30c9\u5207\u66ff","Symbols":"\u8a18\u53f7","System Font":"\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8","Table":"\u8868","Table caption":"\u30c6\u30fc\u30d6\u30eb\u306e\u898b\u51fa\u3057","Table properties":"\u30c6\u30fc\u30d6\u30eb\u306e\u30d7\u30ed\u30d1\u30c6\u30a3","Table styles":"\u30c6\u30fc\u30d6\u30eb\u306e\u7a2e\u985e","Template":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","Templates":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","Text":"\u30c6\u30ad\u30b9\u30c8","Text color":"\u30c6\u30ad\u30b9\u30c8\u8272","Text color {0}":"\u30c6\u30ad\u30b9\u30c8\u8272 {0}","Text to display":"\u8868\u793a\u3059\u308b\u30c6\u30ad\u30b9\u30c8","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u5165\u529b\u3055\u308c\u305fURL\u306f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u300cmailto:\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u5165\u529b\u3055\u308c\u305fURL\u306f\u5916\u90e8\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u300chttp://\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u5165\u529b\u3055\u308c\u305fURL\u306f\u5916\u90e8\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u5fc5\u8981\u306a\u300chttps://\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f","Title":"\u30bf\u30a4\u30c8\u30eb","To open the popup, press Shift+Enter":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u958b\u304f\u306b\u306f\u3001Shift+Enter\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044","Toggle accordion":"\u30a2\u30b3\u30fc\u30c7\u30a3\u30aa\u30f3\u306e\u5207\u308a\u66ff\u3048","Tools":"\u30c4\u30fc\u30eb","Top":"\u4e0a\u63c3\u3048","Travel and Places":"\u65c5\u884c\u3068\u5834\u6240","Turquoise":"\u30bf\u30fc\u30b3\u30a4\u30ba","Underline":"\u4e0b\u7dda","Undo":"\u5143\u306b\u623b\u3059","Upload":"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9","Uploading image":"\u753b\u50cf\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u4e2d","Upper Alpha":"\u5927\u6587\u5b57\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8","Upper Roman":"\u5927\u6587\u5b57\u30ed\u30fc\u30de\u5b57","Url":"URL","User Defined":"\u30e6\u30fc\u30b6\u30fc\u5b9a\u7fa9","Valid":"\u6709\u52b9","Version":"\u30d0\u30fc\u30b8\u30e7\u30f3","Vertical align":"\u5782\u76f4\u306b\u6574\u5217","Vertical space":"\u4e0a\u4e0b\u4f59\u767d","View":"\u8868\u793a","Visual aids":"\u8868\u306e\u67a0\u7dda\u3092\u70b9\u7dda\u3067\u8868\u793a","Warn":"\u8b66\u544a","White":"\u30db\u30ef\u30a4\u30c8","Width":"\u5e45","Word count":"\u6587\u5b57\u6570\u30ab\u30a6\u30f3\u30c8","Words":"\u5358\u8a9e\u6570","Words: {0}":"\u5358\u8a9e\u6570\uff1a{0}","Yellow":"\u30a4\u30a8\u30ed\u30fc","Yes":"\u306f\u3044","You are using {0}":"{0}\u3092\u4f7f\u7528\u4e2d","You have unsaved changes are you sure you want to navigate away?":"\u307e\u3060\u4fdd\u5b58\u3057\u3066\u3044\u306a\u3044\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30da\u30fc\u30b8\u3092\u96e2\u308c\u307e\u3059\u304b\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u304a\u4f7f\u3044\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u306f\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\uff08Ctrl+X, Ctrl+C, Ctrl+V\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002","alignment":"\u914d\u7f6e","austral sign":"\u30a2\u30a6\u30b9\u30c8\u30e9\u30eb\u8a18\u53f7","cedi sign":"\u30bb\u30c7\u30a3\u8a18\u53f7","colon sign":"\u30b3\u30ed\u30f3\u8a18\u53f7","cruzeiro sign":"\u30af\u30eb\u30bc\u30a4\u30ed\u8a18\u53f7","currency sign":"\u901a\u8ca8\u8a18\u53f7","dollar sign":"\u30c9\u30eb\u8a18\u53f7","dong sign":"\u30c9\u30f3\u8a18\u53f7","drachma sign":"\u30c9\u30e9\u30af\u30de\u8a18\u53f7","euro-currency sign":"\u30e6\u30fc\u30ed\u8a18\u53f7","example":"\u4f8b","formatting":"\u66f8\u5f0f","french franc sign":"\u30d5\u30e9\u30f3\u30b9\u30d5\u30e9\u30f3\u8a18\u53f7","german penny symbol":"\u30c9\u30a4\u30c4\u30da\u30cb\u30fc\u8a18\u53f7","guarani sign":"\u30ac\u30e9\u30cb\u8a18\u53f7","history":"\u5c65\u6b74","hryvnia sign":"\u30d5\u30ea\u30f4\u30cb\u30e3\u8a18\u53f7","indentation":"\u30a4\u30f3\u30c7\u30f3\u30c8","indian rupee sign":"\u30a4\u30f3\u30c9\u30eb\u30d4\u30fc\u8a18\u53f7","kip sign":"\u30ad\u30fc\u30d7\u8a18\u53f7","lira sign":"\u30ea\u30e9\u8a18\u53f7","livre tournois sign":"\u30c8\u30a5\u30fc\u30eb\u30dd\u30f3\u30c9\u8a18\u53f7","manat sign":"\u30de\u30ca\u30c8\u8a18\u53f7","mill sign":"\u30df\u30eb\u8a18\u53f7","naira sign":"\u30ca\u30a4\u30e9\u8a18\u53f7","new sheqel sign":"\u65b0\u30b7\u30a7\u30b1\u30eb\u8a18\u53f7","nordic mark sign":"\u5317\u6b27\u30de\u30eb\u30af\u8a18\u53f7","peseta sign":"\u30da\u30bb\u30bf\u8a18\u53f7","peso sign":"\u30da\u30bd\u8a18\u53f7","ruble sign":"\u30eb\u30fc\u30d6\u30eb\u8a18\u53f7","rupee sign":"\u30eb\u30d4\u30fc\u8a18\u53f7","spesmilo sign":"\u30b9\u30da\u30b9\u30df\u30fc\u30ed\u8a18\u53f7","styles":"\u30b9\u30bf\u30a4\u30eb","tenge sign":"\u30c6\u30f3\u30b2\u8a18\u53f7","tugrik sign":"\u30c8\u30a5\u30b0\u30eb\u30b0\u8a18\u53f7","turkish lira sign":"\u30c8\u30eb\u30b3\u30ea\u30e9\u8a18\u53f7","won sign":"\u30a6\u30a9\u30f3\u8a18\u53f7","yen character":"\u5186\u8a18\u53f7","yen/yuan character variant one":"\u5186/\u5143\u8a18\u53f7\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3","yuan character":"\u4eba\u6c11\u5143\u8a18\u53f7","yuan character, in hong kong and taiwan":"\u9999\u6e2f\u304a\u3088\u3073\u53f0\u6e7e\u306b\u304a\u3051\u308b\u5143\u8a18\u53f7","{0} characters":"{0}\u6587\u5b57","{0} columns, {1} rows":"{0} \u5217\u3001{1} \u884c","{0} words":"{0}\u8a9e"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ka_GE.js b/staticfiles/tinymce/langs/ka_GE.js new file mode 100644 index 0000000..5505e95 --- /dev/null +++ b/staticfiles/tinymce/langs/ka_GE.js @@ -0,0 +1 @@ +tinymce.addI18n("ka_GE",{"#":"#","Accessibility":"\u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10dd\u10d1\u10d0","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u10e5\u10db\u10d4\u10d3\u10d4\u10d1\u10d0","Activity":"\u10d0\u10e5\u10e2\u10d8\u10d5\u10dd\u10d1\u10d0","Address":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","Advanced":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8","Align":"\u10e9\u10d0\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d4\u10d1\u10d0","Align center":"\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10ea\u10d4\u10dc\u10e2\u10e0\u10e8\u10d8","Align left":"\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","Align right":"\u10d2\u10d0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","Alignment":"\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Alignment {0}":"","All":"\u10e7\u10d5\u10d4\u10da\u10d0","Alternative description":"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0","Alternative source":"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd","Alternative source URL":"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd","Anchor":"\u10e6\u10e3\u10d6\u10d0","Anchor...":"\u10e6\u10e3\u10d6\u10d0...","Anchors":"\u10e6\u10e3\u10d6\u10d0","Animals and Nature":"\u10ea\u10ee\u10dd\u10d5\u10d4\u10da\u10d4\u10d1\u10d8 \u10d3\u10d0 \u10d1\u10e3\u10dc\u10d4\u10d1\u10d0","Arrows":"\u10d8\u10e1\u10e0\u10d4\u10d1\u10d8","B":"\u10da","Background color":"\u10e3\u10d9\u10d0\u10dc\u10d0 \u10e4\u10d4\u10e0\u10d8","Background color {0}":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8 {0}","Black":"\u10e8\u10d0\u10d5\u10d8","Block":"\u10e9\u10d0\u10d9\u10d4\u10e2\u10d5\u10d0","Block {0}":"","Blockquote":"\u10d1\u10da\u10dd\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10ea\u10d8\u10e2\u10d0\u10e2\u10d0","Blocks":"\u10d1\u10da\u10dd\u10d9\u10d4\u10d1\u10d8","Blue":"\u10da\u10e3\u10e0\u10ef\u10d8","Blue component":"\u10da\u10e3\u10e0\u10ef\u10d8 \u10d9\u10dd\u10db\u10de\u10dd\u10dc\u10d4\u10dc\u10e2\u10d8","Body":"\u10e2\u10d0\u10dc\u10d8","Bold":"\u10db\u10d9\u10d5\u10d4\u10d7\u10e0\u10d8","Border":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8","Border color":"\u10e1\u10d0\u10d6\u10d0\u10e0\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","Border style":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10e0\u10d8\u10e1 \u10e1\u10e2\u10d8\u10da\u10d8","Border width":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10e0\u10d8\u10e1 \u10e1\u10d8\u10d2\u10d0\u10dc\u10d4","Bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0","Browse files":"\u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0","Browse for an image":"\u10d0\u10d8\u10e0\u10e9\u10d8\u10d4\u10d7 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8","Browse links":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0","Bullet list":"\u10d1\u10e3\u10da\u10d4\u10e2 \u10e1\u10d8\u10d0","Cancel":"\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0","Caption":"\u10ec\u10d0\u10e0\u10ec\u10d4\u10e0\u10d0","Cell":"\u10e3\u10ef\u10e0\u10d0","Cell padding":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10e4\u10d0\u10e0\u10d7\u10dd\u10d1\u10d8","Cell properties":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8","Cell spacing":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","Cell styles":"\u10e3\u10ef\u10e0\u10d4\u10d3\u10d8\u10e1 \u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8","Cell type":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8","Center":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10e8\u10d8","Characters":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8","Characters (no spaces)":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8 (\u10d8\u10dc\u10e2\u10d4\u10e0\u10d5\u10d0\u10da\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4)","Circle":"\u10ec\u10e0\u10d4","Class":"\u10d9\u10da\u10d0\u10e1\u10d8","Clear formatting":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0","Close":"\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0","Code":"\u10d9\u10dd\u10d3\u10d8","Code sample...":"\u10d9\u10dd\u10d3\u10d8\u10e1 \u10e4\u10e0\u10d0\u10d2\u10db\u10d4\u10dc\u10e2\u10d8","Code view":"\u10d9\u10dd\u10d3\u10d8\u10e1 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0","Color Picker":"\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d0\u10db\u10dd\u10db\u10e0\u10e9\u10d4\u10d5\u10d4\u10da\u10d8","Color swatch":"\u10e4\u10d4\u10e0\u10d8\u10e1 \u10dc\u10d8\u10db\u10e3\u10e8\u10d8","Cols":"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8","Column":"\u10e1\u10d5\u10d4\u10e2\u10d8","Column clipboard actions":"\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d8\u10e1 \u10d1\u10e3\u10e4\u10d4\u10e0\u10e8\u10d8 \u10db\u10dd\u10e5\u10db\u10d4\u10d3\u10d4\u10d1\u10d4\u10d1\u10d8","Column group":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8","Column header":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","Constrain proportions":"\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d8\u10e1 \u10d3\u10d0\u10ea\u10d5\u10d0","Copy":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","Copy column":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","Copy row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","Could not find the specified string.":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e9\u10d0\u10dc\u10d0\u10ec\u10d4\u10e0\u10d8 \u10d5\u10d4\u10e0 \u10db\u10dd\u10d8\u10eb\u10d4\u10d1\u10dc\u10d0.","Could not load emojis":"\u10d4\u10db\u10dd\u10ef\u10d8\u10d4\u10d1\u10d8 \u10d5\u10d4\u10e0 \u10e9\u10d0\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d0","Count":"\u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0","Currency":"\u10d5\u10d0\u10da\u10e3\u10e2\u10d0","Current window":"\u10db\u10d8\u10db\u10d3\u10d8\u10dc\u10d0\u10e0\u10d4 \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0","Custom color":"\u10db\u10dd\u10e0\u10d2\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d4\u10e0\u10d8","Custom...":"\u10db\u10dd\u10e0\u10d2\u10d4\u10d1\u10e3\u10da\u10d8","Cut":"\u10d0\u10db\u10dd\u10ed\u10e0\u10d0","Cut column":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d0\u10db\u10dd\u10ed\u10e0\u10d0","Cut row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d0\u10db\u10dd\u10ed\u10e0\u10d0","Dark Blue":"\u1c9b\u10e3\u10e5\u10d8 \u10da\u10e3\u10e0\u10ef\u10d8","Dark Gray":"\u1c9b\u10e3\u10e5\u10d8 \u10dc\u10d0\u10ea\u10e0\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Dark Green":"\u1c9b\u10e3\u10e5\u10d8 \u10db\u10ec\u10d5\u10d0\u10dc\u10d4","Dark Orange":"\u10db\u10e3\u10e5\u10d8 \u10dc\u10d0\u10e0\u10d8\u10dc\u10ef\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Dark Purple":"\u1c9b\u10e3\u10e5\u10d8 \u10d8\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Dark Red":"\u1c9b\u10e3\u10e5\u10d8 \u10ec\u10d8\u10d7\u10d4\u10da\u10d8","Dark Turquoise":"\u10db\u10e3\u10e5\u10d8 \u10e4\u10d8\u10e0\u10e3\u10d6\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Dark Yellow":"\u10db\u10e3\u10e5\u10d8 \u10e7\u10d5\u10d8\u10d7\u10d4\u10da\u10d8","Dashed":"\u10ec\u10e7\u10d5\u10d4\u10e2\u10d8\u10da\u10d8","Date/time":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8/\u10d3\u10e0\u10dd","Decrease indent":"\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8\u10e1 \u10e8\u10d4\u10db\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0","Default":"\u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d8","Delete accordion":"","Delete column":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","Delete row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","Delete table":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","Dimensions":"\u10d2\u10d0\u10dc\u10d6\u10dd\u10db\u10d8\u10da\u10d4\u10d1\u10d0","Disc":"\u10d3\u10d8\u10e1\u10d9\u10d8","Div":"\u10d2\u10d0\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10d1\u10d0","Document":"\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8","Dotted":"\u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10dd\u10d5\u10d0\u10dc\u10d8","Double":"\u1c9d\u10e0\u10db\u10d0\u10d2\u10d8","Drop an image here":"\u10e9\u10d0\u10d0\u10d2\u10d3\u10d4\u10d7 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8 \u10d0\u10e5","Dropped file type is not supported":"\u10e9\u10d0\u10d2\u10d3\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8 \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d8\u10da\u10d8","Edit":"\u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Embed":"\u10e9\u10d0\u10e8\u10d4\u10dc\u10d4\u10d1\u10d0","Emojis":"\u10d4\u10db\u10dd\u10ef\u10d8\u10d4\u10d1\u10d8","Emojis...":"\u10d4\u10db\u10dd\u10ef\u10d8\u10d4\u10d1\u10d8...","Error":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0","Error: Form submit field collision.":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10e4\u10dd\u10e0\u10db\u10d8\u10e1 \u10d2\u10d0\u10d2\u10d6\u10d0\u10d5\u10dc\u10d8\u10e1 \u10d5\u10d4\u10da\u10d8\u10e1 \u10e8\u10d4\u10ef\u10d0\u10ee\u10d4\u10d1\u10d0.","Error: No form element found.":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10e4\u10dd\u10e0\u10db\u10d8\u10e1 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 \u10d5\u10d4\u10e0 \u10db\u10dd\u10d8\u10eb\u10d4\u10d1\u10dc\u10d0.","Extended Latin":"\u10d2\u10d0\u10e4\u10d0\u10e0\u10d7\u10dd\u10d4\u10d1\u10e3\u10da\u10d8 \u10da\u10d0\u10d7\u10d8\u10dc\u10e3\u10e0\u10d8","Failed to initialize plugin: {0}":"\u10e4\u10da\u10d0\u10d2\u10d8\u10dc\u10d8\u10e1 \u10d8\u10dc\u10d8\u10ea\u10d8\u10d0\u10da\u10d8\u10d6\u10d0\u10ea\u10d8\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0: {0}","Failed to load plugin url: {0}":"\u10e4\u10da\u10d0\u10d2\u10d8\u10dc\u10d8\u10e1 url \u10d5\u10d4\u10e0 \u10e9\u10d0\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d0: {0}","Failed to load plugin: {0} from url {1}":"\u10e4\u10da\u10d0\u10d2\u10d8\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0: {0} url-\u10d3\u10d0\u10dc {1}","Failed to upload image: {0}":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0: {0}","File":"\u10e4\u10d0\u10d8\u10da\u10d8","Find":"\u10eb\u10d4\u10d1\u10dc\u10d0","Find (if searchreplace plugin activated)":"\u10eb\u10d4\u10d1\u10dc\u10d0 (\u10d7\u10e3 searchreplace \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d8 \u10d0\u10e5\u10e2\u10d8\u10d5\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0)","Find and Replace":"\u1c98\u10de\u10dd\u10d5\u10d4 \u10d3\u10d0 \u10e9\u10d0\u10d0\u10dc\u10d0\u10ea\u10d5\u10da\u10d4","Find and replace...":"\u1c98\u10de\u10dd\u10d5\u10d4 \u10d3\u10d0 \u10e9\u10d0\u10d0\u10dc\u10d0\u10ea\u10d5\u10da\u10d4...","Find in selection":"\u10d8\u10de\u10dd\u10d5\u10dc\u10d4\u10d7 \u10e8\u10d4\u10e0\u10e9\u10d4\u10d5\u10d0\u10e8\u10d8","Find whole words only":"\u10d8\u10de\u10dd\u10d5\u10d4\u10d7 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10db\u10d7\u10d4\u10da\u10d8 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8","Flags":"\u10d3\u10e0\u10dd\u10e8\u10d4\u10d1\u10d8","Focus to contextual toolbar":"\u10e4\u10dd\u10d9\u10e3\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0 \u10d9\u10dd\u10dc\u10e2\u10d4\u10e5\u10e1\u10e2\u10e3\u10d0\u10da\u10e3\u10e0 \u10e2\u10e3\u10da\u10d1\u10d0\u10e0\u10d6\u10d4","Focus to element path":"\u10e4\u10dd\u10d9\u10e3\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d6\u10d4","Focus to menubar":"\u10e4\u10dd\u10d9\u10e3\u10e1\u10d8 \u10db\u10d4\u10dc\u10d8\u10e3\u10d1\u10d0\u10e0\u10d6\u10d4","Focus to toolbar":"\u10e4\u10dd\u10d9\u10e3\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0 \u10e2\u10e3\u10da\u10d1\u10d0\u10e0\u10d6\u10d4","Font":"\u10e4\u10dd\u10dc\u10e2\u10d8","Font size {0}":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0 {0}","Font sizes":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d4\u10d1\u10d8","Font {0}":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8 {0}","Fonts":"\u10e4\u10dd\u10dc\u10e2\u10d8","Food and Drink":"\u1ca1\u10d0\u10d9\u10d5\u10d4\u10d1\u10d8 \u10d3\u10d0 \u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d8","Footer":"\u10eb\u10d8\u10e0\u10d8","Format":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8","Format {0}":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8 {0}","Formats":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8","Fullscreen":"\u10e1\u10d0\u10d5\u10e1\u10d4 \u10d4\u10d9\u10e0\u10d0\u10dc\u10d8","G":"\u10db","General":"\u10db\u10d7\u10d0\u10d5\u10d0\u10e0\u10d8","Gray":"\u10e0\u10e3\u10ee\u10d8","Green":"\u10db\u10ec\u10d5\u10d0\u10dc\u10d4","Green component":"\u10db\u10ec\u10d5\u10d0\u10dc\u10d4 \u10d9\u10dd\u10db\u10de\u10dd\u10dc\u10d4\u10dc\u10e2\u10d8","Groove":"\u10ed\u10e0\u10d8\u10da\u10d8","Handy Shortcuts":"\u10db\u10dd\u10e1\u10d0\u10ee\u10d4\u10e0\u10ee\u10d4\u10d1\u10d4\u10da\u10d8 \u10e1\u10ec\u10e0\u10d0\u10e4\u10d8 \u10d2\u10d0\u10db\u10dd\u10eb\u10d0\u10ee\u10d4\u10d1\u10d4\u10d1\u10d8","Header":"\u10d7\u10d0\u10d5\u10d8","Header cell":"\u10d7\u10d0\u10d5\u10d8\u10e1 \u10e3\u10ef\u10e0\u10d0","Heading 1":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 1","Heading 2":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 2","Heading 3":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 3","Heading 4":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 4","Heading 5":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 5","Heading 6":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 6","Headings":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","Height":"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","Help":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0","Hex color code":"Hex \u10e4\u10d4\u10e0\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8","Hidden":"\u10d3\u10d0\u10db\u10d0\u10da\u10e3\u10da\u10d8","Horizontal align":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Horizontal line":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10ee\u10d0\u10d6\u10d8","Horizontal space":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4","ID":"\u10d0\u10d8\u10d3\u10d8","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u10d0\u10d8\u10d3\u10d8 \u10e3\u10dc\u10d3\u10d0 \u10d3\u10d0\u10ec\u10e7\u10dd\u10e1 \u10d0\u10e1\u10dd\u10d7\u10d8, \u10e8\u10d4\u10db\u10d3\u10d4\u10d2 \u10e3\u10dc\u10d3\u10d0 \u10d2\u10d0\u10d2\u10e0\u10eb\u10d4\u10da\u10d3\u10d4\u10e1 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8\u10d7, \u10e0\u10d8\u10ea\u10ee\u10d5\u10d4\u10d1\u10d8\u10d7, \u10e2\u10d8\u10e0\u10d4\u10d4\u10d1\u10d8\u10d7, \u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10d7, \u10dd\u10e0\u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10d7 \u10d0\u10dc \u10e5\u10d5\u10d4\u10d3\u10d0\u10e2\u10d8\u10e0\u10d4\u10d4\u10d1\u10d8\u10d7.","Image is decorative":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0 \u10d0\u10e0\u10d8\u10e1 \u10d3\u10d4\u10d9\u10dd\u10e0\u10d0\u10e2\u10d8\u10e3\u10da\u10d8","Image list":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","Image title":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","Image...":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP \u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10d5\u10d4\u10e0 \u10db\u10dd\u10d8\u10eb\u10d4\u10d1\u10dc\u10d0 Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP \u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10d0\u10e0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d8 Image Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP \u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10db\u10dd\u10d7\u10ee\u10dd\u10d5\u10dc\u10d0 \u10e3\u10d0\u10e0\u10e7\u10dd\u10e4\u10d8\u10da\u10d8\u10d0","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP \u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10e3\u10ea\u10dc\u10dd\u10d1\u10d8 ImageProxy \u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0","Increase indent":"\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8\u10e1 \u10d2\u10d0\u10d6\u10e0\u10d3\u10d0","Inline":"\u10ee\u10d0\u10d6\u10e8\u10d8\u10d3\u10d0","Insert":"\u10e9\u10d0\u10e1\u10db\u10d0","Insert Template":"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0","Insert accordion":"","Insert column after":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Insert column before":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Insert date/time":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8/\u10d3\u10e0\u10dd\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0","Insert image":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0","Insert link (if link plugin activated)":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0 (\u10d7\u10e3 \u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d8 \u10d0\u10e5\u10e2\u10d8\u10d5\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0)","Insert row after":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Insert row before":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Insert table":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0","Insert template...":"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0...","Insert video":"\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0","Insert/Edit code sample":"\u10e9\u10d0\u10e1\u10d5\u10d8/\u10e8\u10d4\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10d0\u10d2\u10d0\u10da\u10d8\u10d7\u10d8","Insert/edit image":"\u10e9\u10d0\u10e1\u10d5\u10d8/\u10e8\u10d4\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8","Insert/edit link":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d0","Insert/edit media":"\u10db\u10d4\u10d3\u10d8\u10d0\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","Insert/edit video":"\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","Inset":"\u10e9\u10d0\u10e1\u10db\u10d0","Invalid hex color code: {0}":"\u10d0\u10e0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d8 \u10d7\u10d4\u10e5\u10d5\u10e1\u10db\u10d4\u10e2\u10dd\u10d1\u10d8\u10d7\u10d8 \u10e4\u10d4\u10e0\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8: {0}","Invalid input":"\u10d0\u10e0\u10d0\u10e1\u10ec\u10dd\u10e0\u10d8 \u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d0","Italic":"\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8","Justify":"\u10d2\u10d0\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d8","Keyboard Navigation":"\u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10d8\u10e1 \u10dc\u10d0\u10d5\u10d8\u10d2\u10d0\u10ea\u10d8\u10d0","Language":"\u10d4\u10dc\u10d0","Learn more...":"\u10db\u10d4\u10e2\u10d8\u10e1 \u10dc\u10d0\u10ee\u10d5\u10d0...","Left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","Left to right":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","Light Blue":"\u10e6\u10d8\u10d0 \u10da\u10e3\u10e0\u10ef\u10d8","Light Gray":"\u10e6\u10d8\u10d0 \u10dc\u10d0\u10ea\u10e0\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Light Green":"\u10e6\u10d8\u10d0 \u10db\u10ec\u10d5\u10d0\u10dc\u10d4","Light Purple":"\u10e6\u10d8\u10d0 \u10d8\u10d0\u10e1\u10d0\u10db\u10dc\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Light Red":"\u10e6\u10d8\u10d0 \u10ec\u10d8\u10d7\u10d4\u10da\u10d8","Light Yellow":"\u10e6\u10d8\u10d0 \u10e7\u10d5\u10d8\u10d7\u10d4\u10da\u10d8","Line height":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","Link list":"\u10d1\u10db\u10e3\u10da\u10d8 \u10e1\u10d8\u10d0","Link...":"\u10d1\u10db\u10e3\u10da\u10d8...","List Properties":"\u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","List properties...":"\u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0...","Loading emojis...":"\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0 \u10d4\u10db\u10dd\u10ef\u10d8\u10d4\u10d1\u10d8...","Loading...":"\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0...","Lower Alpha":"\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10d0\u10da\u10e4\u10d0","Lower Greek":"\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10d1\u10d4\u10e0\u10eb\u10dc\u10e3\u10da\u10d8","Lower Roman":"\u10d3\u10d0\u10d1\u10d0\u10da\u10d8 \u10e0\u10dd\u10db\u10d0\u10e3\u10da\u10d8","Match case":"\u10d3\u10d0\u10d0\u10db\u10d7\u10ee\u10d5\u10d8\u10d4 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0","Mathematical":"\u10db\u10d0\u10d7\u10d4\u10db\u10d0\u10e2\u10d8\u10d9\u10e3\u10e0\u10d8","Media poster (Image URL)":"\u10db\u10d4\u10d3\u10d8\u10d0 \u10de\u10dd\u10e1\u10e2\u10d4\u10e0\u10d8 (\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8\u10e1 URL)","Media...":"\u10db\u10d4\u10d3\u10d8\u10d0...","Medium Blue":"\u10e1\u10d0\u10e8\u10e3\u10d0\u10da\u10dd \u10da\u10e3\u10e0\u10ef\u10d8","Medium Gray":"\u10e1\u10d0\u10e8\u10e3\u10d0\u10da\u10dd \u10dc\u10d0\u10ea\u10e0\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Medium Purple":"\u10e1\u10d0\u10e8\u10e3\u10d0\u10da\u10dd \u10d8\u10d0\u10e1\u10d0\u10db\u10dc\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Merge cells":"\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0","Middle":"\u10e8\u10e3\u10d0","Midnight Blue":"\u10eb\u10d0\u10da\u10d8\u10d0\u10dc \u10db\u10e3\u10e5\u10d8 \u10da\u10e3\u10e0\u10ef\u10d8","More...":"\u10db\u10d4\u10e2\u10d8...","Name":"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","Navy Blue":"\u1c9b\u10e3\u10e5\u10d8 \u10da\u10e3\u10e0\u10ef\u10d8","New document":"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8","New window":"\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8","Next":"\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8","No":"\u10d0\u10e0\u10d0","No alignment":"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4","No color":"\u10e4\u10d4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4","Nonbreaking space":"\u10e3\u10ec\u10e7\u10d5\u10d4\u10e2\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4","None":"\u10d0\u10e0\u10ea\u10d4\u10e0\u10d7\u10d8","Numbered list":"\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0","OR":"\u10d0\u10dc","Objects":"\u10dd\u10d1\u10d8\u10d4\u10e5\u10e2\u10d4\u10d1\u10d8","Ok":"\u10d9\u10d0\u10e0\u10d2\u10d8","Open help dialog":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d8\u10d0\u10da\u10dd\u10d2\u10d8\u10e1 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","Open link":"\u1c92\u10d0\u10ee\u10e1\u10d4\u10dc\u10d8 \u10d1\u10db\u10e3\u10da\u10d8","Open link in...":"\u10d2\u10d0\u10ee\u10e1\u10d4\u10dc\u10d8\u10d7 \u10d1\u10db\u10e3\u10da\u10d8...","Open popup menu for split buttons":"\u10d2\u10d0\u10ee\u10e1\u10d4\u10dc\u10d8\u10d7 \u10d0\u10db\u10dd\u10db\u10ee\u10e2\u10d0\u10e0\u10d8 \u10db\u10d4\u10dc\u10d8\u10e3 \u10d2\u10d0\u10e7\u10dd\u10e4\u10d8\u10e1 \u10e6\u10d8\u10da\u10d0\u10d9\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1","Orange":"\u10dc\u10d0\u10e0\u10d8\u10dc\u10ef\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Outset":"\u10d3\u10d0\u10e1\u10d0\u10ec\u10e7\u10d8\u10e1\u10d8","Page break":"\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d2\u10d0\u10ec\u10e7\u10d5\u10d4\u10e2\u10d0","Paragraph":"\u10de\u10d0\u10e0\u10d0\u10d2\u10e0\u10d0\u10e4\u10d8","Paste":"\u10e9\u10d0\u10e1\u10db\u10d0","Paste as text":"\u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8","Paste column after":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Paste column before":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u10d0\u10ee\u10da\u10d0 \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0 \u10e9\u10d5\u10d4\u10e3\u10da\u10d4\u10d1\u10e0\u10d8\u10d5 \u10e0\u10d4\u10df\u10d8\u10db\u10e8\u10d8\u10d0. \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8 \u10e9\u10d0\u10d8\u10e1\u10db\u10d4\u10d5\u10d0 \u10e3\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10dd\u10d7 \u10e1\u10d0\u10dc\u10d0\u10db \u10d0\u10db \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d0\u10e1 \u10d0\u10e0 \u10d2\u10d0\u10d7\u10d8\u10e8\u10d0\u10d5\u10d7.","Paste or type a link":"\u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10d0\u10dc \u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d8","Paste row after":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8 \u10e9\u10d0\u10e1\u10db\u10d0","Paste row before":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d0\u10d5\u10e8\u10d8 \u10e9\u10d0\u10e1\u10db\u10d0","Paste your embed code below:":"\u10d0\u10e5 \u10e9\u10d0\u10e1\u10d5\u10d8\u10d7 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d9\u10dd\u10d3\u10d8:","People":"\u10ee\u10d0\u10da\u10ee\u10d8","Plugins":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8","Plugins installed ({0}):":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8 \u10d3\u10d0\u10d8\u10dc\u10e1\u10e2\u10d0\u10da\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0 ({0}):","Powered by {0}":"\u10e3\u10d6\u10e0\u10e3\u10dc\u10d5\u10d4\u10da\u10e7\u10dd\u10e4\u10d8\u10da\u10d8\u10d0 {0}-\u10d8\u10e1 \u10db\u10d8\u10d4\u10e0","Pre":"\u10de\u10e0\u10d4\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8","Preferences":"\u10de\u10e0\u10d4\u10e4\u10d4\u10e0\u10d4\u10dc\u10ea\u10d8\u10d4\u10d1\u10d8","Preformatted":"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0 \u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8","Premium plugins:":"\u10de\u10e0\u10d4\u10db\u10d8\u10e3\u10db \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"\u10d3\u10d0\u10e1\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10da\u10d0\u10d3 \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 {0}","Preview":"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0 \u10dc\u10d0\u10ee\u10d5\u10d0","Previous":"\u10ec\u10d8\u10dc\u10d0","Print":"\u10d1\u10d4\u10ed\u10d3\u10d5\u10d0","Print...":"\u10d1\u10d4\u10ed\u10d3\u10d5\u10d0...","Purple":"\u10d8\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Quotations":"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d4\u10d1\u10d8","R":"\u10ec","Range 0 to 255":"\u10d3\u10d8\u10d0\u10de\u10d0\u10d6\u10dd\u10dc\u10d8 0-\u10d3\u10d0\u10dc 255-\u10db\u10d3\u10d4","Red":"\u10ec\u10d8\u10d7\u10d4\u10da\u10d8","Red component":"\u10ec\u10d8\u10d7\u10d4\u10da\u10d8 \u10d9\u10dd\u10db\u10de\u10dd\u10dc\u10d4\u10dc\u10e2\u10d8","Redo":"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0","Remove":"\u10ec\u10d0\u10e8\u10da\u10d0","Remove color":"\u10e4\u10d4\u10e0\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","Remove link":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","Replace":"\u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Replace all":"\u10e7\u10d5\u10d4\u10da\u10d0\u10e1 \u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Replace with":"\u10e8\u10d4\u10e1\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d4\u10da\u10d8 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d0","Resize":"\u10d6\u10dd\u10db\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0","Restore last draft":"\u10d1\u10dd\u10da\u10dd\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0","Reveal or hide additional toolbar items":"\u10d2\u10d0\u10db\u10dd\u10d0\u10e9\u10d8\u10dc\u10d4 \u10d0\u10dc \u10d3\u10d0\u10db\u10d0\u10da\u10d4 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10e2\u10e3\u10da\u10d1\u10d0\u10e0\u10d8\u10e1 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8","Rich Text Area":"\u10d2\u10d0\u10e4\u10d0\u10e0\u10d7\u10dd\u10d4\u10d1\u10e3\u10da\u10d8 \u10e2\u10d4\u10e5\u10e1\u10e2\u10e3\u10e0\u10d8 \u10d6\u10dd\u10dc\u10d0","Rich Text Area. Press ALT-0 for help.":"\u10d2\u10d0\u10e4\u10d0\u10e0\u10d7\u10dd\u10d4\u10d1\u10e3\u10da\u10d8 \u10e2\u10d4\u10e5\u10e1\u10e2\u10e3\u10e0\u10d8 \u10d6\u10dd\u10dc\u10d0. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-0 \u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d0\u10e0\u10d7\u10d8. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-F9\u10e1 \u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10eb\u10d0\u10ee\u10d4\u10d1\u10da\u10d0\u10d3. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-F10\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1. \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 ALT-0\u10e1 \u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1","Ridge":"\u10e5\u10d4\u10d3\u10d8","Right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","Right to left":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","Row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8","Row clipboard actions":"\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d8\u10e1 \u10d1\u10e3\u10e4\u10d4\u10e0\u10e8\u10d8 \u10db\u10dd\u10e5\u10db\u10d4\u10d3\u10d4\u10d1\u10d4\u10d1\u10d8","Row group":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8","Row header":"\u10db\u10ec\u10d9\u10e0\u10d8\u10d5\u10d8\u10e1 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","Row properties":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8","Row type":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8","Rows":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8","Save":"\u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","Save (if save plugin activated)":"\u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0 (\u10d7\u10e3 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d8\u10e1 \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d8 \u10d0\u10e5\u10e2\u10d8\u10d5\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0)","Scope":"\u10e9\u10d0\u10e0\u10e9\u10dd","Search":"\u10eb\u10d8\u10d4\u10d1\u10d0","Select all":"\u10e7\u10d5\u10d4\u10da\u10d0\u10e1 \u10db\u10dd\u10e6\u10dc\u10d8\u10e8\u10d5\u10dc\u10d0","Select...":"\u10db\u10dd\u10dc\u10d8\u10e8\u10dc\u10d4\u10d7...","Selection":"\u10d0\u10e0\u10e9\u10d4\u10e3\u10da\u10d8","Shortcut":"\u10e1\u10ec\u10e0\u10d0\u10e4\u10d8 \u10d2\u10d0\u10db\u10dd\u10eb\u10d0\u10ee\u10d4\u10d1\u10d0","Show blocks":"\u10d1\u10da\u10dd\u10d9\u10d4\u10d1\u10d8\u10e1 \u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0","Show caption":"\u10ec\u10d0\u10e0\u10ec\u10d4\u10e0\u10d8\u10e1 \u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0","Show invisible characters":"\u10e3\u10ee\u10d8\u10da\u10d0\u10d5\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0","Size":"\u10d6\u10dd\u10db\u10d0","Solid":"\u1c9b\u10e7\u10d0\u10e0\u10d8","Source":"\u10d1\u10db\u10e3\u10da\u10d8","Source code":"\u10ec\u10e7\u10d0\u10e0\u10dd\u10e1 \u10d9\u10dd\u10d3\u10d8","Special Character":"\u10e1\u10de\u10d4\u10ea\u10d8\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","Special character...":"\u10e1\u10de\u10d4\u10ea\u10d8\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","Split cell":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e7\u10dd\u10e4\u10d0","Square":"\u10d9\u10d5\u10d0\u10d3\u10e0\u10d0\u10e2\u10d8","Start list at number":"\u10e1\u10d8\u10d8\u10e1 \u10d3\u10d0\u10ec\u10e7\u10d4\u10d1\u10d0 \u10dc\u10dd\u10db\u10d4\u10e0\u10d6\u10d4","Strikethrough":"\u10e8\u10e3\u10d0 \u10ee\u10d0\u10d6\u10d8","Style":"\u10e1\u10e2\u10d8\u10da\u10d8","Subscript":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8","Superscript":"\u10d6\u10d4\u10d3\u10d0 \u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8","Switch to or from fullscreen mode":"\u10e1\u10e0\u10e3\u10da\u10d4\u10d9\u10e0\u10d0\u10dc\u10d8\u10d0\u10dc\u10d8 \u10e0\u10d4\u10df\u10d8\u10db\u10d8\u10e1 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0","Symbols":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8","System Font":"\u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d8\u10e1 \u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","Table":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8","Table caption":"\u10db\u10d0\u10d2\u10d8\u10d3\u10d8\u10e1 \u10ec\u10d0\u10e0\u10ec\u10d4\u10e0\u10d0","Table properties":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8","Table styles":"Table styles","Template":"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8","Templates":"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d4\u10d1\u10d8","Text":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8","Text color":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","Text color {0}":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8 {0}","Text to display":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u10d7\u10e5\u10d5\u10d4\u10dc \u10db\u10d8\u10e3\u10d7\u10d8\u10d7\u10d4\u10d7 \u10d4\u10da-\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10dc\u10d0\u10ea\u10d5\u10da\u10d0\u10d3 \u10d5\u10d4\u10d1-\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1\u10d0. \u10d2\u10e1\u10e3\u10e0\u10d7, \u10e0\u10dd\u10db \u10db\u10d8\u10d5\u10d0\u10dc\u10d8\u10ed\u10dd mailto: \u10e4\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10db\u10d8\u10d4\u10e0 \u10db\u10d8\u10d7\u10d8\u10d7\u10d4\u10d1\u10e3\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10ec\u10d0\u10e0\u10db\u10dd\u10d0\u10d3\u10d2\u10d4\u10dc\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1. \u10d2\u10e1\u10e3\u10e0\u10d7, \u10e0\u10dd\u10db \u10db\u10d8\u10d5\u10d0\u10dc\u10d8\u10ed\u10dd http:// \u10e4\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10db\u10d8\u10d4\u10e0 \u10db\u10d8\u10d7\u10d8\u10d7\u10d4\u10d1\u10e3\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10ec\u10d0\u10e0\u10db\u10dd\u10d0\u10d3\u10d2\u10d4\u10dc\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1. \u10d2\u10e1\u10e3\u10e0\u10d7, \u10e0\u10dd\u10db \u10d3\u10d0\u10d4\u10db\u10d0\u10e2\u10dd\u10e1 https:// \u10e4\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8?","Title":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","To open the popup, press Shift+Enter":"\u10d0\u10db\u10dd\u10db\u10ee\u10e2\u10d0\u10e0\u10d8 \u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e1\u10d0\u10ee\u10e1\u10dc\u10d4\u10da\u10d0\u10d3 \u10d3\u10d0\u10d0\u10ed\u10d8\u10e0\u10d4\u10d7 Shift+Enter","Toggle accordion":"","Tools":"\u10d8\u10d0\u10e0\u10d0\u10e6\u10d4\u10d1\u10d8","Top":"\u10db\u10d0\u10e6\u10da\u10d0","Travel and Places":"\u10db\u10dd\u10d2\u10d6\u10d0\u10e3\u10e0\u10dd\u10d1\u10d0 \u10d3\u10d0 \u10d0\u10d3\u10d2\u10d8\u10da\u10d4\u10d1\u10d8","Turquoise":"\u10e4\u10d8\u10e0\u10e3\u10d6\u10d8\u10e1\u10e4\u10d4\u10e0\u10d8","Underline":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10ee\u10d0\u10d6\u10d8","Undo":"\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0","Upload":"\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0","Uploading image":"\u10e1\u10e3\u10e0\u10d0\u10d7\u10d8 \u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0","Upper Alpha":"\u10db\u10d0\u10e6\u10d0\u10da\u10d8 \u10d0\u10da\u10e4\u10d0","Upper Roman":"\u10db\u10d0\u10e6\u10d0\u10da\u10d8 \u10e0\u10dd\u10db\u10d0\u10e3\u10da\u10d8","Url":"Url","User Defined":"\u10db\u10dd\u10db\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10da\u10d8\u10e1 \u10d2\u10d0\u10dc\u10e1\u10d0\u10d6\u10e6\u10d5\u10e0\u10e3\u10da\u10d8","Valid":"\u10ed\u10d4\u10e8\u10db\u10d0\u10e0\u10d8\u10e2\u10d8","Version":"\u10d5\u10d4\u10e0\u10e1\u10d8\u10d0","Vertical align":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","Vertical space":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10e1\u10d8\u10d5\u10e0\u10ea\u10d4","View":"\u10dc\u10d0\u10ee\u10d5\u10d0","Visual aids":"\u10d5\u10d8\u10d6\u10e3\u10d0\u10da\u10d8\u10d6\u10d0\u10ea\u10d8\u10d0","Warn":"\u10d2\u10d0\u10e4\u10e0\u10d7\u10ee\u10d8\u10da\u10d4\u10d1\u10d0","White":"\u10d7\u10d4\u10d7\u10e0\u10d8","Width":"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4","Word count":"\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8\u10e1 \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0","Words":"\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8","Words: {0}":"\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8: {0}","Yellow":"\u10e7\u10d5\u10d8\u10d7\u10d4\u10da\u10d8","Yes":"\u10d3\u10d8\u10d0\u10ee","You are using {0}":"\u10e8\u10d4\u10dc \u10d8\u10e7\u10d4\u10dc\u10d4\u10d1 {0}","You have unsaved changes are you sure you want to navigate away?":"\u10d7\u10e5\u10d5\u10d4\u10dc \u10d2\u10d0\u10e5\u10d5\u10d7 \u10e8\u10d4\u10e3\u10dc\u10d0\u10ee\u10d0\u10d5\u10d8 \u10e8\u10d4\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d4\u10d1\u10d8, \u10d3\u10d0\u10e0\u10ec\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10d7 \u10e0\u10dd\u10db \u10e1\u10ee\u10d5\u10d0\u10d2\u10d0\u10dc \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 \u10d2\u10e1\u10e3\u10e0\u10d7?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u10d7\u10e5\u10d5\u10d4\u10dc \u10d1\u10e0\u10d0\u10e3\u10d6\u10d4\u10e0\u10e1 \u10d0\u10e0 \u10d0\u10e5\u10d5\u10e1 \u10d1\u10e3\u10e4\u10d4\u10e0\u10e8\u10d8 \u10e8\u10d4\u10e6\u10ec\u10d4\u10d5\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0. \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7 \u10e1\u10d0\u10dc\u10d0\u10ea\u10d5\u10da\u10dd\u10d3 \u10d8\u10e1\u10d0\u10e0\u10d2\u10d4\u10d1\u10da\u10dd\u10d7 Ctrl+X/C/V \u10db\u10d0\u10da\u10e1\u10d0\u10ee\u10db\u10dd\u10d1\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d4\u10d1\u10d8\u10d7.","alignment":"\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","austral sign":"\u10d0\u10d5\u10e1\u10e2\u10e0\u10d0\u10da\u10d8\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","cedi sign":"\u10ea\u10d4\u10d3\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","colon sign":"\u10dd\u10e0\u10ec\u10d4\u10e0\u10e2\u10d8\u10da\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","cruzeiro sign":"\u10d9\u10e0\u10e3\u10d6\u10d4\u10d8\u10e0\u10dd\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","currency sign":"\u10d5\u10d0\u10da\u10e3\u10e2\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","dollar sign":"\u10d3\u10dd\u10da\u10d0\u10e0\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","dong sign":"\u10d3\u10dd\u10dc\u10d2\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","drachma sign":"\u10d3\u10e0\u10d0\u10e5\u10db\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","euro-currency sign":"\u10d4\u10d5\u10e0\u10dd \u10d5\u10d0\u10da\u10e3\u10e2\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","example":"\u10db\u10d0\u10d2\u10d0\u10da\u10d8\u10d7\u10d8","formatting":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","french franc sign":"\u10e4\u10e0\u10d0\u10dc\u10d2\u10e3\u10da\u10d8 \u10e4\u10e0\u10d0\u10dc\u10d9\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","german penny symbol":"\u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10e3\u10da\u10d8 \u10de\u10d4\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","guarani sign":"\u10d2\u10e3\u10d0\u10e0\u10d0\u10dc\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","history":"\u10d8\u10e1\u10e2\u10dd\u10e0\u10d8\u10d0","hryvnia sign":"\u10d2\u10e0\u10d8\u10d5\u10dc\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","indentation":"\u10e9\u10d0\u10e6\u10e0\u10db\u10d0\u10d5\u10d4\u10d1\u10d0","indian rupee sign":"\u10d8\u10dc\u10d3\u10e3\u10e0\u10d8 \u10e0\u10e3\u10de\u10d8\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","kip sign":"\u10d9\u10d8\u10de\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","lira sign":"\u10da\u10d8\u10e0\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","livre tournois sign":"\u10da\u10d8\u10d5\u10e0\u10d4 \u10e2\u10e3\u10e0\u10dc\u10dd\u10d8\u10e1\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","manat sign":"\u10db\u10d0\u10dc\u10d0\u10d7\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","mill sign":"\u10db\u10d8\u10da\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","naira sign":"\u10dc\u10d0\u10d8\u10e0\u10d0\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","new sheqel sign":"\u10d0\u10ee\u10d0\u10da\u10d8 \u10e8\u10d4\u10d9\u10d4\u10da\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","nordic mark sign":"\u10dc\u10dd\u10e0\u10d3\u10d8\u10e3\u10da\u10d8 \u10db\u10d0\u10e0\u10d9\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","peseta sign":"\u10de\u10d4\u10e1\u10d4\u10e2\u10d0\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","peso sign":"\u10de\u10d4\u10e1\u10dd\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","ruble sign":"\u10e0\u10e3\u10de\u10d8\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","rupee sign":"\u10e0\u10e3\u10de\u10d8\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","spesmilo sign":"\u10e1\u10de\u10d4\u10e1\u10db\u10d8\u10da\u10dd\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","styles":"\u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8","tenge sign":"\u10e2\u10d4\u10dc\u10d2\u10d4\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","tugrik sign":"\u10e2\u10e3\u10d2\u10e0\u10d8\u10d9\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","turkish lira sign":"\u10d7\u10e3\u10e0\u10e5\u10e3\u10da\u10d8 \u10da\u10d8\u10e0\u10d0\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","won sign":"\u10db\u10dd\u10d2\u10d4\u10d1\u10d8\u10e1 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8","yen character":"\u10d8\u10d4\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","yen/yuan character variant one":"\u10d8\u10d4\u10dc/\u10d8\u10e3\u10d0\u10dc\u10d8 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10e1 \u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10d8 \u10d4\u10e0\u10d7\u10d8","yuan character":"\u10d8\u10e3\u10d0\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","yuan character, in hong kong and taiwan":"\u10d8\u10e3\u10d0\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd, \u10f0\u10dd\u10dc\u10d2 \u10d9\u10dd\u10dc\u10d2\u10e1\u10d0 \u10d3\u10d0 \u10e2\u10d0\u10d8\u10d5\u10d0\u10dc\u10e8\u10d8","{0} characters":"{0} \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8","{0} columns, {1} rows":"\u10e1\u10d5\u10d4\u10e2\u10d8 {0}, \u10e0\u10d8\u10d2\u10d8 {1}","{0} words":"{0} \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/kab.js b/staticfiles/tinymce/langs/kab.js new file mode 100644 index 0000000..c9ae71b --- /dev/null +++ b/staticfiles/tinymce/langs/kab.js @@ -0,0 +1 @@ +tinymce.addI18n("kab",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Tigawt","Activity":"Armud","Address":"Tansa","Advanced":"Ana\u1e93i","Align":"Settef","Align center":"Di tlemast","Align left":"Tarigla \u0263er zelma\u1e0d","Align right":"tarigla \u0263er zelma\u1e0d","Alignment":"Tarigla","Alignment {0}":"","All":"Akk","Alternative description":"","Alternative source":"A\u0263balu amlellay","Alternative source URL":"A\u0263balu n URL amlellay","Anchor":"","Anchor...":"Tamdeyt...","Anchors":"Timdyin","Animals and Nature":"i\u0263ersiwen akked ugama","Arrows":"Tineccabin","B":"","Background color":"Ini n ugilal","Background color {0}":"","Black":"Aberkan","Block":"Sew\u1e25el","Block {0}":"","Blockquote":"Tanebdurt","Blocks":"I\u1e25edran","Blue":"Anili","Blue component":"","Body":"Tafka","Bold":"Tira tazurant","Border":"Iri","Border color":"Ini n yiri","Border style":"A\u0263anib n yiri","Border width":"Tehri n yiri","Bottom":"Uksar","Browse files":"","Browse for an image":"Snirem iwakken ad tferne\u1e0d tugna","Browse links":"","Bullet list":"Tabdart s tlillac","Cancel":"Semmet","Caption":"","Cell":"Taxxamt","Cell padding":"Tama n texxamt","Cell properties":"Iraten n texxamt","Cell spacing":"Tlunt ger texxamin","Cell styles":"","Cell type":"Anaw n texxamt","Center":"Di tlemmast","Characters":"Isekkilen","Characters (no spaces)":"Isekkilen (tallunin ur ttekkint ara)","Circle":"Tawinest","Class":"Asmil","Clear formatting":"","Close":"Mdel","Code":"Tangalt","Code sample...":"Amedya n tengalt...","Code view":"Abeqqe\u1e0d n tengalt","Color Picker":"Amelqa\u1e0d n yini","Color swatch":"Talemmict n yini","Cols":"Tigejda","Column":"Tagejdit","Column clipboard actions":"","Column group":"Agraw n tgejda","Column header":"","Constrain proportions":"","Copy":"N\u0263el","Copy column":"","Copy row":"N\u0263el adur","Could not find the specified string.":"Ur d-nufi ara azrar i d-yettunefken.","Could not load emojis":"","Count":"A\u0263rud","Currency":"Adrim","Current window":"Asfaylu amiran","Custom color":"","Custom...":"","Cut":"Gzem","Cut column":"","Cut row":"Gzem adur","Dark Blue":"Anili a\u0263mayan","Dark Gray":"Amelli\u0263di a\u0263mayan","Dark Green":"Azegzaw a\u0263mayan","Dark Orange":"A\u010dinawi a\u0263mayan","Dark Purple":"Amidadi a\u0263mayan","Dark Red":"Azegga\u0263 a\u0263mayan","Dark Turquoise":"Ajenjari a\u0263mayan","Dark Yellow":"Awra\u0263 a\u0263mayan","Dashed":"","Date/time":"Azemz/Asrag","Decrease indent":"Simc\u1e6du\u1e25 asi\u1e93i","Default":"Lex\u1e63as","Delete accordion":"","Delete column":"Kkes tagejdit","Delete row":"Kkes tagejdit","Delete table":"Kkes tafelwit","Dimensions":"Tisekta","Disc":"A\u1e0debsi","Div":"","Document":"Isemli","Dotted":"","Double":"","Drop an image here":"Ssers tugna dagi","Dropped file type is not supported":"","Edit":"\u1e92reg","Embed":"","Emojis":"","Emojis...":"","Error":"Tucc\u1e0da","Error: Form submit field collision.":"Tucc\u1e0da: amgirred n wurtan di tuzzna n tferkit.","Error: No form element found.":"Ulac aferdis n tferkit i yettwafen.","Extended Latin":"Talatinit ye\u1e93len","Failed to initialize plugin: {0}":"Tucc\u1e0da deg wallus n uwennez n usi\u0263zef: {0}","Failed to load plugin url: {0}":"Tucc\u1e0da deg usali n usi\u0263zef: {0}","Failed to load plugin: {0} from url {1}":"Tucc\u1e0da deg usili n usi\u0263zef: {0} seg url {1}","Failed to upload image: {0}":"Tucc\u1e0da deg usili n tugna: {0}","File":"Afaylu","Find":"Nadi","Find (if searchreplace plugin activated)":"Nadi (ma yermed uzegrir searchreplace)","Find and Replace":"","Find and replace...":"Nadi semselsi...","Find in selection":"Af-d di tefrayt","Find whole words only":"Af-d awal ummid kan","Flags":"Annayen","Focus to contextual toolbar":"Asa\u1e0des \u0263ef tfeggagt n ifecka tanattalt","Focus to element path":"Asa\u1e0des \u0263ef ubrid n uferdis","Focus to menubar":"Asa\u1e0des \u0263ef tfeggagt n wumu\u0263","Focus to toolbar":"Asa\u1e0des \u0263ef tfeggagt n ifecka","Font":"Tasefsit","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Tisefsa","Food and Drink":"Tu\u010d\u010dit akked tisit","Footer":"A\u1e0dar","Format":"Amasal","Format {0}":"","Formats":"Imasalen","Fullscreen":"Agdil a\u010duran","G":"","General":"Amatu","Gray":"Amelli\u0263di","Green":"Azegzaw","Green component":"","Groove":"","Handy Shortcuts":"Inegzumen","Header":"Tasenti\u1e0dt","Header cell":"Tasen\u1e6di\u1e0dt n texxamt","Heading 1":"Inixf 1","Heading 2":"Inixf 2","Heading 3":"Inixf 3","Heading 4":"Inixf 4","Heading 5":"Inixf 5","Heading 6":"Inixf 6","Headings":"Izewlen","Height":"Te\u0263zi","Help":"Tallalt","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Ajerri\u1e0d aglawan","Horizontal space":"Talunt taglawant","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Tabdart n tugniwin","Image title":"Azwel n tugna","Image...":"Tugna...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Sim\u0263ur asi\u1e93i","Inline":"","Insert":"Ger","Insert Template":"","Insert accordion":"","Insert column after":"Sente\u1e0d tagejdit deffir","Insert column before":"Sente\u1e0d tagejdit sdat","Insert date/time":"Ger azemz/asrag","Insert image":"Ger tugna","Insert link (if link plugin activated)":"Ger ase\u0263wen (ma yermed uzegrir n use\u0263wen)","Insert row after":"Ger adur sdat","Insert row before":"Ger adur deffir","Insert table":"Ger tafelwit","Insert template...":"Ger tane\u0263ruft...","Insert video":"Ger avidyu","Insert/Edit code sample":"Ger/\u1e92reg tangalt n umedya","Insert/edit image":"Ger/\u1e92reg tugna","Insert/edit link":"Ger/\u1e93reg azday","Insert/edit media":"Ger/\u1e92reg amiya","Insert/edit video":"Ger/\u1e93reg avidyu","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Tira yeknan","Justify":"","Keyboard Navigation":"Tunigin s unasiw","Language":"Tutlayt","Learn more...":"\u1e92er ugar...","Left":"\u0194er zelma\u1e0d","Left to right":"Seg zelma\u1e0d \u0263er yefus","Light Blue":"Anili afaw","Light Gray":"Amelli\u0263di afaw","Light Green":"Azegzaw afaw","Light Purple":"Amidadi afaw","Light Red":"Azegga\u0263 afaw","Light Yellow":"Awra\u0263 afaw","Line height":"","Link list":"Tabdart n is\u0263ewnen","Link...":"As\u0263en...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Alpha ame\u1e93yan","Lower Greek":"Grik ame\u1e93yan","Lower Roman":"Ruman amectu\u1e25","Match case":"","Mathematical":"Inemhalen usnaken","Media poster (Image URL)":"Abeqqi\u1e0d n umidya (URL n tugna)","Media...":"Amidya...","Medium Blue":"Anili alemmas","Medium Gray":"Amelli\u0263di alemmas","Medium Purple":"Amidadi alemmas","Merge cells":"Seddukel tixxamin","Middle":"Di tlemmast","Midnight Blue":"Anili n yi\u1e0d","More...":"Ugar...","Name":"Isem","Navy Blue":"Anili n yilel","New document":"Attaftar amaynut","New window":"Asfaylu amaynut","Next":"Win \u0263ers","No":"Ala","No alignment":"","No color":"Ulac ini","Nonbreaking space":"Talunt ur nettwagzam ara","None":"Ulac","Numbered list":"Tabdart s wu\u1e6d\u1e6dunen","OR":"Ih","Objects":"Ti\u0263awsiwin","Ok":"Ih","Open help dialog":"Ldi tankult n udiwenni n tallelt","Open link":"Ldi ase\u0263wen","Open link in...":"Ldi as\u0263en di...","Open popup menu for split buttons":"","Orange":"A\u010d\u010dinawi","Outset":"","Page break":"Angaz n usebter","Paragraph":"taseddart","Paste":"Sente\u1e0d","Paste as text":"Sente\u1e0d d a\u1e0dris","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"","Paste or type a link":"Sente\u1e0d ne\u0263 sekcem ase\u0263wen","Paste row after":"Sente\u1e0d adur deffir","Paste row before":"Sente\u1e0d adur sdat","Paste your embed code below:":"","People":"L\u0263aci","Plugins":"Isi\u0263zifen","Plugins installed ({0}):":"Izegriren yettwasbedden ({0}):","Powered by {0}":"Iteddu s {0} ","Pre":"","Preferences":"Imenyafen","Preformatted":"Yettwamsel si tazwara","Premium plugins:":"Izegriren premium :","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Sken","Previous":"Uzwir","Print":"","Print...":"Siggez...","Purple":"Amidadi","Quotations":"Tinebdurin","R":"","Range 0 to 255":"","Red":"Azegga\u0263","Red component":"","Redo":"Err-d","Remove":"","Remove color":"Kkes ini","Remove link":"Kkes azday","Replace":"Semselsi","Replace all":"Semselsi kulec","Replace with":"Semselsi s","Resize":"Beddel tiddi","Restore last draft":"","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Ta\u0263zut n u\u1e0dris anesba\u0263ur. Ssed ALT-0 i tallelt.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"","Ridge":"","Right":"\u0194er yefus","Right to left":"Seg yefus \u0263er zelma\u1e0d","Row":"Adur","Row clipboard actions":"","Row group":"Agraw n waduren","Row header":"","Row properties":"Iraten n udur","Row type":"Anaw n wadur","Rows":"Aduren","Save":"Sekles","Save (if save plugin activated)":"Sekles (ma yermed uzegrir save)","Scope":"","Search":"Nadi","Select all":"Fren kulec","Select...":"Fren...","Selection":"Tafrayt","Shortcut":"Anegzum","Show blocks":"Beqqe\u1e0d i\u1e25edran","Show caption":"Sken taw\u1e6d\u1e6dfa","Show invisible characters":"Beqqe\u1e0d isekkilen uffiren","Size":"Tiddi","Solid":"","Source":"A\u0263balu","Source code":"Tangalt ta\u0263balut","Special Character":"","Special character...":"Isekkilen uzzigen...","Split cell":"B\u1e0du tixxamin","Square":"Amku\u1e93","Start list at number":"","Strikethrough":"","Style":"A\u0263anib","Subscript":"","Superscript":"","Switch to or from fullscreen mode":"Kcem ne\u0263 ffe\u0263 agdil a\u010d\u010duran","Symbols":"Izamulen","System Font":"Anagraw n tsefsa","Table":"Tafelwit","Table caption":"","Table properties":"Iraten n tfelwit","Table styles":"","Template":"Tine\u0263rufin","Templates":"Timudimin","Text":"A\u1e0dris","Text color":"Ini n u\u1e0dris","Text color {0}":"","Text to display":"A\u1e0dris ara yettwabeqq\u1e0den","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL i teskecme\u1e0d tettban-d d tansa email. teb\u0263i\u1e0d ad s-ternu\u1e0d azwir mailto : ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL i teskecme\u1e0d tettban-d d azday uffi\u0263. Teb\u0263i\u1e0d ad s-ternu\u1e0d azwir http:// ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"Azwel","To open the popup, press Shift+Enter":"Iwakken ad teldi\u1e0d asfaylu udhim, ssed Shift+Kcem","Toggle accordion":"","Tools":"Ifecka","Top":"Uksawen","Travel and Places":"Asikel akked ime\u1e0dqan","Turquoise":"Ajenjari","Underline":"Aderrer","Undo":"Semmet","Upload":"Sili","Uploading image":"","Upper Alpha":"Alfa ameqran","Upper Roman":"Ruman ameqran","Url":"","User Defined":"Yesbadu-t useqdac","Valid":"Ame\u0263tu","Version":"Lqem","Vertical align":"","Vertical space":"Talunt taratakt","View":"Tamu\u0263li","Visual aids":"","Warn":"\u0190eyyen","White":"Amellal","Width":"Tehri","Word count":"Am\u1e0dan n wawalen","Words":"Awalen","Words: {0}":"","Yellow":"Awra\u0263","Yes":"Ih","You are using {0}":"Tsseqdace\u1e0d {0}","You have unsaved changes are you sure you want to navigate away?":"Ibeddilen ur twaskelsen ara teb\u0263i\u1e0d ad teff\u0263e\u1e0d ?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"","alignment":"aderrec","austral sign":"azamul n ustral","cedi sign":"azamul n siddi","colon sign":"azamul n kulun","cruzeiro sign":"azamul n krutayru","currency sign":"Azamul n wedrim","dollar sign":"Azamul n dular","dong sign":"azamul n dung","drachma sign":"azamul n d\u1e5bacma","euro-currency sign":"azamul n euro","example":"amedya","formatting":"amsal","french franc sign":"azamul n f\u1e5bank afransi","german penny symbol":"azamul n pini almani","guarani sign":"azamul n gwa\u1e5bani","history":"Amazray","hryvnia sign":"azamul n hrivniya","indentation":"asi\u1e93i","indian rupee sign":"azamul n urupi ahindi","kip sign":"azamul n kip","lira sign":"azamul n lira","livre tournois sign":"azamul lira aturnwa","manat sign":"azamul n mana\u1e6d","mill sign":"azamul n mil","naira sign":"azamul n nayra","new sheqel sign":"azamul n ciqel amaynut","nordic mark sign":"azamul n ma\u1e5bk n ugafa","peseta sign":"azamul n pizi\u1e6da","peso sign":"azamul n pizu","ruble sign":"azamul n rubl","rupee sign":"azamul n urupi","spesmilo sign":"azamul n spismilu","styles":"i\u0263unab","tenge sign":"azamul n tingi","tugrik sign":"azamul n tugrik","turkish lira sign":"azamul n lira a\u1e6durki","won sign":"azamul n wun","yen character":"azamul n yan","yen/yuan character variant one":"yan/yuwan tasenfelt n usekkil yiwen","yuan character":"azamul n yuwan","yuan character, in hong kong and taiwan":"asekkil n yuwan, di hunkung akked \u1e6daywan","{0} characters":"{0} n yisekkilen","{0} columns, {1} rows":"","{0} words":"{0} n wawalen"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/kk.js b/staticfiles/tinymce/langs/kk.js new file mode 100644 index 0000000..5250de5 --- /dev/null +++ b/staticfiles/tinymce/langs/kk.js @@ -0,0 +1 @@ +tinymce.addI18n("kk",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u04d8\u0440\u0435\u043a\u0435\u0442","Activity":"\u0411\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u043b\u0456\u043a","Address":"\u041c\u0435\u043a\u0435\u043d\u0436\u0430\u0439","Advanced":"\u041a\u0435\u04a3\u0435\u0439\u0442\u0456\u043b\u0433\u0435\u043d","Align":"\u0422\u0443\u0440\u0430\u043b\u0430\u0443","Align center":"\u041e\u0440\u0442\u0430\u0441\u044b\u043d\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443","Align left":"\u0421\u043e\u043b\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443","Align right":"\u041e\u04a3\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443","Alignment":"\u0422\u0443\u0440\u0430\u043b\u0430\u0443","Alignment {0}":"","All":"\u0411\u0430\u0440\u043b\u044b\u0493\u044b","Alternative description":"","Alternative source":"\u0411\u0430\u043b\u0430\u043c\u0430\u043b\u044b \u043a\u04e9\u0437","Alternative source URL":"\u0411\u0430\u043b\u0430\u043c\u0430\u043b\u044b \u043a\u04e9\u0437\u0434\u0456\u04a3 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b","Anchor":"","Anchor...":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435...","Anchors":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440","Animals and Nature":"\u0416\u0430\u043d\u0443\u0430\u0440\u043b\u0430\u0440 \u0436\u04d9\u043d\u0435 \u0442\u0430\u0431\u0438\u0493\u0430\u0442","Arrows":"\u041a\u04e9\u0440\u0441\u0435\u0442\u043a\u0456\u043b\u0435\u0440","B":"","Background color":"\u04e8\u04a3\u0456\u043d\u0456\u04a3 \u0442\u04af\u0441\u0456","Background color {0}":"","Black":"\u049a\u0430\u0440\u0430","Block":"\u0411\u043b\u043e\u043a","Block {0}":"","Blockquote":"\u0414\u04d9\u0439\u0435\u043a\u0441\u04e9\u0437","Blocks":"\u0411\u043b\u043e\u043a\u0442\u0430\u0440","Blue":"\u041a\u04e9\u043a","Blue component":"","Body":"\u041d\u0435\u0433\u0456\u0437\u0433\u0456 \u0431\u04e9\u043b\u0456\u0433\u0456","Bold":"\u049a\u0430\u043b\u044b\u04a3","Border":"\u0416\u0438\u0435\u043a","Border color":"\u0416\u0438\u0435\u043a \u0442\u04af\u0441\u0456","Border style":"\u0416\u0438\u0435\u043a \u043c\u04d9\u043d\u0435\u0440\u0456","Border width":"\u0416\u0438\u0435\u043a \u0435\u043d\u0456","Bottom":"\u0410\u0441\u0442\u044b","Browse files":"","Browse for an image":"\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u0448\u043e\u043b\u0443","Browse links":"","Bullet list":"\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u043d\u0493\u0430\u043d \u0442\u0456\u0437\u0456\u043c","Cancel":"\u0411\u0430\u0441 \u0442\u0430\u0440\u0442\u0443","Caption":"\u0410\u0442\u0430\u0443\u044b","Cell":"\u04b0\u044f\u0448\u044b\u049b","Cell padding":"\u04b0\u044f\u0448\u044b\u049b \u043a\u0435\u04a3\u0434\u0456\u0433\u0456","Cell properties":"\u04b0\u044f\u0448\u044b\u049b \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b","Cell spacing":"\u04b0\u044f\u0448\u044b\u049b \u0430\u0440\u0430\u043b\u044b\u0493\u044b","Cell styles":"","Cell type":"\u04b0\u044f\u0448\u044b\u049b \u0442\u04af\u0440\u0456","Center":"\u041e\u0440\u0442\u0430\u0441\u044b","Characters":"\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440","Characters (no spaces)":"\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440 (\u043e\u0440\u044b\u043d\u0434\u0430\u0440\u0441\u044b\u0437)","Circle":"\u0428\u0435\u04a3\u0431\u0435\u0440","Class":"\u0421\u044b\u043d\u044b\u043f","Clear formatting":"\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u0443\u0434\u0456 \u0442\u0430\u0437\u0430\u043b\u0430\u0443","Close":"\u0416\u0430\u0431\u0443","Code":"\u041a\u043e\u0434","Code sample...":"\u041a\u043e\u0434 \u04af\u043b\u0433\u0456\u0441\u0456...","Code view":"","Color Picker":"\u0422\u04af\u0441 \u0442\u0430\u04a3\u0434\u0430\u0443 \u049b\u04b1\u0440\u0430\u043b\u044b","Color swatch":"\u0422\u04af\u0441 \u04af\u043b\u0433\u0456\u0441\u0456","Cols":"\u0411\u0430\u0493\u0430\u043d\u0434\u0430\u0440","Column":"\u0411\u0430\u0493\u0430\u043d","Column clipboard actions":"","Column group":"\u0411\u0430\u0493\u0430\u043d\u0434\u0430\u0440 \u0442\u043e\u0431\u044b","Column header":"","Constrain proportions":"\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f\u043b\u0430\u0440\u0434\u044b \u0441\u0430\u049b\u0442\u0430\u0443","Copy":"\u041a\u04e9\u0448\u0456\u0440\u0443","Copy column":"","Copy row":"\u0416\u043e\u043b\u0434\u044b \u043a\u04e9\u0448\u0456\u0440\u0443","Could not find the specified string.":"\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0433\u0435\u043d \u0436\u043e\u043b\u0434\u044b \u0442\u0430\u0431\u0443 \u043c\u04af\u043c\u043a\u0456\u043d \u0431\u043e\u043b\u043c\u0430\u0434\u044b.","Could not load emojis":"","Count":"\u0421\u0430\u043d\u044b","Currency":"\u0412\u0430\u043b\u044e\u0442\u0430","Current window":"\u0410\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0442\u0435\u0440\u0435\u0437\u0435","Custom color":"\u0420\u0435\u0442\u0442\u0435\u043b\u043c\u0435\u043b\u0456 \u0442\u04af\u0441","Custom...":"\u0420\u0435\u0442\u0442\u0435\u043b\u043c\u0435\u043b\u0456...","Cut":"\u049a\u0438\u044b\u043f \u0430\u043b\u0443","Cut column":"","Cut row":"\u0416\u043e\u043b\u0434\u044b \u049b\u0438\u044b\u043f \u0430\u043b\u0443","Dark Blue":"\u049a\u0430\u0440\u0430 \u043a\u04e9\u043a","Dark Gray":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u04b1\u0440","Dark Green":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0436\u0430\u0441\u044b\u043b","Dark Orange":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u0430\u0440\u0493\u044b\u0448","Dark Purple":"\u049a\u0430\u0440\u0430 \u043a\u04af\u043b\u0433\u0456\u043d","Dark Red":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u049b\u044b\u0437\u044b\u043b","Dark Turquoise":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u043a\u04e9\u0433\u0456\u043b\u0434\u0456\u0440","Dark Yellow":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u0430\u0440\u044b","Dashed":"","Date/time":"\u041a\u04af\u043d/\u0443\u0430\u049b\u044b\u0442","Decrease indent":"\u0428\u0435\u0433\u0456\u043d\u0456\u0441\u0442\u0456 \u043a\u0435\u043c\u0456\u0442\u0443","Default":"\u04d8\u0434\u0435\u043f\u043a\u0456","Delete accordion":"","Delete column":"\u0411\u0430\u0493\u0430\u043d\u0434\u044b \u0436\u043e\u044e","Delete row":"\u0416\u043e\u043b\u0434\u044b \u0436\u043e\u044e","Delete table":"\u041a\u0435\u0441\u0442\u0435\u043d\u0456 \u0436\u043e\u044e","Dimensions":"\u04e8\u043b\u0448\u0435\u043c\u0434\u0435\u0440\u0456","Disc":"\u0414\u04e9\u04a3\u0433\u0435\u043b\u0435\u043a","Div":"","Document":"\u049a\u04b1\u0436\u0430\u0442","Dotted":"","Double":"","Drop an image here":"\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u043e\u0441\u044b \u0436\u0435\u0440\u0434\u0435 \u0442\u0430\u0441\u0442\u0430\u04a3\u044b\u0437","Dropped file type is not supported":"","Edit":"\u04e8\u04a3\u0434\u0435\u0443","Embed":"\u0415\u043d\u0434\u0456\u0440\u0443","Emojis":"","Emojis...":"","Error":"\u049a\u0430\u0442\u0435","Error: Form submit field collision.":"\u049a\u0430\u0442\u0435: \u043f\u0456\u0448\u0456\u043d\u0434\u0456 \u0436\u0456\u0431\u0435\u0440\u0443 \u04e9\u0440\u0456\u0441\u0456\u043d\u0456\u04a3 \u049b\u0430\u0439\u0448\u044b\u043b\u044b\u0493\u044b.","Error: No form element found.":"\u049a\u0430\u0442\u0435: \u043f\u0456\u0448\u0456\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0456 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.","Extended Latin":"\u041a\u0435\u04a3\u0435\u0439\u0442\u0456\u043b\u0433\u0435\u043d \u043b\u0430\u0442\u044b\u043d","Failed to initialize plugin: {0}":"\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0430\u043f\u0442\u0430\u043d\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b: {0}","Failed to load plugin url: {0}":"\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0436\u04af\u043a\u0442\u0435\u043b\u043c\u0435\u0434\u0456 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b: {0}","Failed to load plugin: {0} from url {1}":"\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0436\u04af\u043a\u0442\u0435\u043b\u043c\u0435\u0434\u0456: {0} {1} URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b\u043d\u0430\u043d","Failed to upload image: {0}":"\u041a\u0435\u0441\u043a\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0441\u0430\u043b\u044b\u043d\u0431\u0430\u0434\u044b: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0422\u0430\u0431\u0443","Find (if searchreplace plugin activated)":"\u0422\u0430\u0431\u0443 (\u0456\u0437\u0434\u0435\u0443/\u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)","Find and Replace":"","Find and replace...":"\u0422\u0430\u0431\u0443 \u0436\u04d9\u043d\u0435 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443...","Find in selection":"","Find whole words only":"\u0422\u0435\u043a \u0431\u04af\u0442\u0456\u043d \u0441\u04e9\u0437\u0434\u0435\u0440\u0434\u0456 \u0442\u0430\u0431\u0443","Flags":"\u0422\u0443\u043b\u0430\u0440","Focus to contextual toolbar":"\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d\u0434\u0456\u043a \u049b\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443","Focus to element path":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0436\u043e\u043b\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443","Focus to menubar":"\u041c\u04d9\u0437\u0456\u0440 \u0436\u043e\u043b\u0430\u0493\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443","Focus to toolbar":"\u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443","Font":"\u049a\u0430\u0440\u0456\u043f","Font size {0}":"","Font sizes":"\u049a\u0430\u0440\u0456\u043f \u04e9\u043b\u0448\u0435\u043c\u0456","Font {0}":"","Fonts":"\u049a\u0430\u0440\u0456\u043f\u0442\u0435\u0440","Food and Drink":"\u0422\u0430\u0493\u0430\u043c\u0434\u0430\u0440 \u0436\u04d9\u043d\u0435 \u0441\u0443\u0441\u044b\u043d\u0434\u0430\u0440","Footer":"\u0422\u04e9\u043c\u0435\u043d\u0433\u0456 \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u043c\u0435","Format":"\u041f\u0456\u0448\u0456\u043c","Format {0}":"","Formats":"\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u0440","Fullscreen":"\u0422\u043e\u043b\u044b\u049b \u044d\u043a\u0440\u0430\u043d","G":"","General":"\u0416\u0430\u043b\u043f\u044b","Gray":"\u0421\u04b1\u0440","Green":"\u0416\u0430\u0441\u044b\u043b","Green component":"","Groove":"","Handy Shortcuts":"\u042b\u04a3\u0493\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0434\u0435\u0440\u0456","Header":"\u0416\u043e\u0493\u0430\u0440\u0493\u044b \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u043c\u0435","Header cell":"\u0422\u0430\u049b\u044b\u0440\u044b\u043f \u04b1\u044f\u0448\u044b\u0493\u044b","Heading 1":"1-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Heading 2":"2-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Heading 3":"3-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Heading 4":"4-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Heading 5":"5-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Heading 6":"6-\u0442\u0430\u049b\u044b\u0440\u044b\u043f","Headings":"\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0442\u0430\u0440","Height":"\u0411\u0438\u0456\u043a\u0442\u0456\u0433\u0456","Help":"\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3 \u0441\u044b\u0437\u044b\u049b","Horizontal space":"\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3 \u043a\u0435\u04a3\u0456\u0441\u0442\u0456\u043a","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0435\u0440 \u0442\u0456\u0437\u0456\u043c\u0456","Image title":"\u041a\u0435\u0441\u043a\u0456\u043d \u0430\u0442\u0430\u0443\u044b","Image...":"\u041a\u0435\u0441\u043a\u0456\u043d...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0428\u0435\u0433\u0456\u043d\u0456\u0441\u0442\u0456 \u0430\u0440\u0442\u0442\u044b\u0440\u0443","Inline":"\u041a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d","Insert":"\u0415\u043d\u0433\u0456\u0437\u0443","Insert Template":"","Insert accordion":"","Insert column after":"\u0410\u0440\u0442\u044b\u043d\u0430 \u0431\u0430\u0493\u0430\u043d \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert column before":"\u0410\u043b\u0434\u044b\u043d\u0430 \u0431\u0430\u0493\u0430\u043d \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert date/time":"\u041a\u04af\u043d/\u0443\u0430\u049b\u044b\u0442 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert image":"\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert link (if link plugin activated)":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443 (\u0441\u0456\u043b\u0442\u0435\u043c\u0435 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)","Insert row after":"\u0410\u0441\u0442\u044b\u043d\u0430 \u0436\u043e\u043b \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert row before":"\u04ae\u0441\u0442\u0456\u043d\u0435 \u0436\u043e\u043b \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert table":"\u041a\u0435\u0441\u0442\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert template...":"\u04ae\u043b\u0433\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443...","Insert video":"\u0411\u0435\u0439\u043d\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443","Insert/Edit code sample":"\u041a\u043e\u0434 \u04af\u043b\u0433\u0456\u0441\u0456\u043d \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443/\u04e9\u04a3\u0434\u0435\u0443","Insert/edit image":"\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443/\u04e9\u04a3\u0434\u0435\u0443","Insert/edit link":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443/\u04e9\u04a3\u0434\u0435\u0443","Insert/edit media":"\u041c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443/\u04e9\u04a3\u0434\u0435\u0443","Insert/edit video":"\u0411\u0435\u0439\u043d\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443/\u04e9\u04a3\u0434\u0435\u0443","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u041a\u04e9\u043b\u0431\u0435\u0443","Justify":"\u0415\u043d\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443","Keyboard Navigation":"\u041f\u0435\u0440\u043d\u0435\u0442\u0430\u049b\u0442\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f\u0441\u044b","Language":"\u0422\u0456\u043b","Learn more...":"\u049a\u043e\u0441\u044b\u043c\u0448\u0430 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0442\u0435\u0440...","Left":"\u0421\u043e\u043b \u0436\u0430\u049b","Left to right":"\u0421\u043e\u043b\u0434\u0430\u043d \u043e\u04a3\u0493\u0430","Light Blue":"\u0410\u0448\u044b\u049b \u043a\u04e9\u043a","Light Gray":"\u0410\u0448\u044b\u049b \u0441\u04b1\u0440","Light Green":"\u0410\u0448\u044b\u049b \u0436\u0430\u0441\u044b\u043b","Light Purple":"\u0410\u0448\u044b\u049b \u043a\u04af\u043b\u0433\u0456\u043d","Light Red":"\u0410\u0448\u044b\u049b \u049b\u044b\u0437\u044b\u043b","Light Yellow":"\u0410\u0448\u044b\u049b \u0441\u0430\u0440\u044b","Line height":"","Link list":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440 \u0442\u0456\u0437\u0456\u043c\u0456","Link...":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"\u041a\u0456\u0448\u0456 \u043b\u0430\u0442\u044b\u043d \u04d9\u0440\u0456\u043f\u0442\u0435\u0440\u0456","Lower Greek":"\u041a\u0456\u0448\u0456 \u0433\u0440\u0435\u043a \u04d9\u0440\u0456\u043f\u0442\u0435\u0440\u0456","Lower Roman":"\u041a\u0456\u0448\u0456 \u0420\u0438\u043c \u0441\u0430\u043d\u0434\u0430\u0440\u044b","Match case":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0433\u0435 \u0441\u04d9\u0439\u043a\u0435\u0441","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043b\u044b\u049b","Media poster (Image URL)":"\u041c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u0434\u044b \u0436\u0430\u0440\u0438\u044f\u043b\u0430\u0443\u0448\u044b (\u043a\u0435\u0441\u043a\u0456\u043d\u043d\u0456\u04a3 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b)","Media...":"\u041c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b...","Medium Blue":"\u041e\u0440\u0442\u0430\u0448\u0430 \u043a\u04e9\u043a","Medium Gray":"\u041e\u0440\u0442\u0430\u0448\u0430 \u0441\u04b1\u0440","Medium Purple":"\u041e\u0440\u0442\u0430\u0448\u0430 \u043a\u04af\u043b\u0433\u0456\u043d","Merge cells":"\u04b0\u044f\u0448\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0431\u0456\u0440\u0456\u043a\u0442\u0456\u0440\u0443","Middle":"\u041e\u0440\u0442\u0430\u0441\u044b","Midnight Blue":"\u0422\u04af\u043d\u0433\u0456 \u043a\u04e9\u043a","More...":"\u049a\u043e\u0441\u044b\u043c\u0448\u0430...","Name":"\u0410\u0442\u0430\u0443","Navy Blue":"\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u043a\u04e9\u043a","New document":"\u0416\u0430\u04a3\u0430 \u049b\u04b1\u0436\u0430\u0442","New window":"\u0416\u0430\u04a3\u0430 \u0442\u0435\u0440\u0435\u0437\u0435","Next":"\u041a\u0435\u043b\u0435\u0441\u0456","No":"\u0416\u043e\u049b","No alignment":"\u0422\u0435\u0433\u0456\u0441\u0442\u0435\u0443\u0441\u0456\u0437","No color":"\u0422\u04af\u0441\u0441\u0456\u0437","Nonbreaking space":"\u04ae\u0437\u0434\u0456\u043a\u0441\u0456\u0437 \u0431\u043e\u0441 \u043e\u0440\u044b\u043d","None":"\u0416\u043e\u049b","Numbered list":"\u041d\u04e9\u043c\u0456\u0440\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u0456\u0437\u0456\u043c","OR":"\u041d\u0415\u041c\u0415\u0421\u0415","Objects":"\u041d\u044b\u0441\u0430\u043d\u0434\u0430\u0440","Ok":"\u041e\u041a","Open help dialog":"\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u0442\u044b\u049b \u0442\u0435\u0440\u0435\u0437\u0435\u0441\u0456\u043d \u0430\u0448\u0443","Open link":"","Open link in...":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u0430\u0448\u0443...","Open popup menu for split buttons":"","Orange":"\u0421\u0430\u0440\u0493\u044b\u0448","Outset":"","Page break":"\u0411\u0435\u0442 \u04af\u0437\u0456\u043b\u0456\u043c\u0456","Paragraph":"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444","Paste":"\u049a\u043e\u044e","Paste as text":"\u041c\u04d9\u0442\u0456\u043d \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u049b\u043e\u044e","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u049a\u043e\u044e \u0435\u043d\u0434\u0456 \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u043c\u04d9\u0442\u0456\u043d \u0440\u0435\u0436\u0438\u043c\u0456\u043d\u0434\u0435 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456. \u041e\u0441\u044b \u043e\u043f\u0446\u0438\u044f \u04e9\u0448\u0456\u0440\u0456\u043b\u0433\u0435\u043d\u0448\u0435, \u0430\u0440\u0430\u043b\u044b\u049b \u0441\u0430\u049b\u0442\u0430\u0493\u044b\u0448\u0442\u0430\u0493\u044b \u043c\u04d9\u0442\u0456\u043d \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u043c\u04d9\u0442\u0456\u043d \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u049b\u043e\u0439\u044b\u043b\u0430\u0434\u044b.","Paste or type a link":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u049b\u043e\u0439\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u0435\u0440\u0456\u04a3\u0456\u0437","Paste row after":"\u0410\u0441\u0442\u044b\u043d\u0430 \u0436\u043e\u044e \u049b\u043e\u044e","Paste row before":"\u04ae\u0441\u0442\u0456\u043d\u0435 \u0436\u043e\u043b \u049b\u043e\u044e","Paste your embed code below:":"\u0422\u04e9\u043c\u0435\u043d\u0434\u0435 \u0435\u043d\u0434\u0456\u0440\u0443 \u043a\u043e\u0434\u044b\u043d \u049b\u043e\u0439\u044b\u04a3\u044b\u0437:","People":"\u0410\u0434\u0430\u043c\u0434\u0430\u0440","Plugins":"\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440","Plugins installed ({0}):":"\u041e\u0440\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440 ({0}):","Powered by {0}":"{0} \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0441\u044b\u043d\u0430 \u043d\u0435\u0433\u0456\u0437\u0434\u0435\u043b\u0433\u0435\u043d","Pre":"","Preferences":"\u0411\u0430\u043f\u0442\u0430\u043b\u044b\u043c\u0434\u0430\u0440","Preformatted":"\u0410\u043b\u0434\u044b\u043d \u0430\u043b\u0430 \u043f\u0456\u0448\u0456\u043c\u0434\u0435\u043b\u0433\u0435\u043d","Premium plugins:":"\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u0410\u043b\u0434\u044b\u043d \u0430\u043b\u0430 \u049b\u0430\u0440\u0430\u0443","Previous":"\u0410\u043b\u0434\u044b\u04a3\u0493\u044b","Print":"","Print...":"\u0411\u0430\u0441\u044b\u043f \u0448\u044b\u0493\u0430\u0440\u0443...","Purple":"\u041a\u04af\u043b\u0433\u0456\u043d","Quotations":"\u0422\u044b\u0440\u043d\u0430\u049b\u0448\u0430\u043b\u0430\u0440","R":"","Range 0 to 255":"","Red":"\u049a\u044b\u0437\u044b\u043b","Red component":"","Redo":"\u049a\u0430\u0439\u0442\u0430\u0440\u0443","Remove":"\u04e8\u0448\u0456\u0440\u0443","Remove color":"\u0422\u04af\u0441\u0442\u0456 \u0436\u043e\u044e","Remove link":"\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u0436\u043e\u044e","Replace":"\u0410\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443","Replace all":"\u0411\u0430\u0440\u043b\u044b\u0493\u044b\u043d \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443","Replace with":"\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u0430\u0442\u044b\u043d \u043c\u04d9\u0442\u0456\u043d","Resize":"\u04e8\u043b\u0448\u0435\u043c\u0456\u043d \u04e9\u0437\u0433\u0435\u0440\u0442\u0443","Restore last draft":"\u0421\u043e\u04a3\u0493\u044b \u0441\u0430\u049b\u0442\u0430\u043b\u0493\u0430\u043d \u0436\u043e\u0431\u0430 \u0436\u0430\u0437\u0431\u0430\u043d\u044b \u049b\u0430\u043b\u043f\u044b\u043d\u0430 \u043a\u0435\u043b\u0442\u0456\u0440\u0443","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u043b\u0433\u0435\u043d \u043c\u04d9\u0442\u0456\u043d \u0430\u0443\u043c\u0430\u0493\u044b. \u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u0430\u043b\u0443 \u04af\u0448\u0456\u043d ALT-0 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u043b\u0433\u0435\u043d \u043c\u04d9\u0442\u0456\u043d \u0430\u0443\u043c\u0430\u0493\u044b. \u041c\u04d9\u0437\u0456\u0440\u0434\u0456 \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d ALT-F9 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d ALT-F10 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u041a\u04e9\u043c\u0435\u043a \u0430\u043b\u0443 \u04af\u0448\u0456\u043d ALT-0 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.","Ridge":"","Right":"\u041e\u04a3 \u0436\u0430\u049b","Right to left":"\u041e\u04a3\u043d\u0430\u043d \u0441\u043e\u043b\u0493\u0430","Row":"\u049a\u0430\u0442\u0430\u0440","Row clipboard actions":"","Row group":"\u0416\u043e\u043b\u0434\u0430\u0440 \u0442\u043e\u0431\u044b","Row header":"","Row properties":"\u0416\u043e\u043b \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b","Row type":"\u0416\u043e\u043b \u0442\u04af\u0440\u0456","Rows":"\u0416\u043e\u043b\u0434\u0430\u0440","Save":"\u0421\u0430\u049b\u0442\u0430\u0443","Save (if save plugin activated)":"\u0421\u0430\u049b\u0442\u0430\u0443 (\u0441\u0430\u049b\u0442\u0430\u0443 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)","Scope":"\u0410\u0443\u049b\u044b\u043c","Search":"\u0406\u0437\u0434\u0435\u0443","Select all":"\u0411\u0430\u0440\u043b\u044b\u0493\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443","Select...":"\u0422\u0430\u04a3\u0434\u0430\u0443...","Selection":"\u0422\u0430\u04a3\u0434\u0430\u0443","Shortcut":"\u041f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0456","Show blocks":"\u0411\u043b\u043e\u043a\u0442\u0430\u0440\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443","Show caption":"\u0416\u0430\u0437\u0431\u0430\u043d\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443","Show invisible characters":"\u041a\u04e9\u0440\u0456\u043d\u0431\u0435\u0439\u0442\u0456\u043d \u0442\u0430\u04a3\u0431\u0430\u043b\u0430\u0440\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443","Size":"\u04e8\u043b\u0448\u0435\u043c","Solid":"","Source":"\u041a\u04e9\u0437","Source code":"\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u043a\u043e\u0434","Special Character":"","Special character...":"\u0410\u0440\u043d\u0430\u0439\u044b \u0442\u0430\u04a3\u0431\u0430...","Split cell":"\u04b0\u044f\u0448\u044b\u049b\u0442\u044b \u0431\u04e9\u043b\u0443","Square":"\u0428\u0430\u0440\u0448\u044b","Start list at number":"","Strikethrough":"\u0421\u044b\u0437\u044b\u043b\u0493\u0430\u043d","Style":"\u041c\u04d9\u043d\u0435\u0440","Subscript":"\u0416\u043e\u043b \u0430\u0441\u0442\u044b","Superscript":"\u0416\u043e\u043b \u04af\u0441\u0442\u0456","Switch to or from fullscreen mode":"\u0422\u043e\u043b\u044b\u049b \u044d\u043a\u0440\u0430\u043d \u0440\u0435\u0436\u0438\u043c\u0456\u043d\u0435 \u043d\u0435\u043c\u0435\u0441\u0435 \u043e\u0434\u0430\u043d \u0430\u0443\u044b\u0441\u0443","Symbols":"\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440","System Font":"\u0416\u04af\u0439\u0435 \u049b\u0430\u0440\u043f\u0456","Table":"\u041a\u0435\u0441\u0442\u0435","Table caption":"","Table properties":"\u041a\u0435\u0441\u0442\u0435 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b","Table styles":"","Template":"\u04ae\u043b\u0433\u0456","Templates":"\u04ae\u043b\u0433\u0456\u043b\u0435\u0440","Text":"\u041c\u04d9\u0442\u0456\u043d","Text color":"\u041c\u04d9\u0442\u0456\u043d \u0442\u04af\u0441\u0456","Text color {0}":"","Text to display":"\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0435\u0442\u0456\u043d \u043c\u04d9\u0442\u0456\u043d","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0421\u0456\u0437 \u0435\u04a3\u0433\u0456\u0437\u0433\u0435\u043d URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0434\u044b\u049b \u043f\u043e\u0448\u0442\u0430 \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b \u0441\u0438\u044f\u049b\u0442\u044b. \u041c\u0456\u043d\u0434\u0435\u0442\u0442\u0456 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0456\u043d \u049b\u043e\u0441\u0443\u0434\u044b \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0421\u0456\u0437 \u0435\u04a3\u0433\u0456\u0437\u0433\u0435\u043d URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b \u0441\u044b\u0440\u0442\u049b\u044b \u0441\u0456\u043b\u0442\u0435\u043c\u0435 \u0441\u0438\u044f\u049b\u0442\u044b. \u041c\u0456\u043d\u0434\u0435\u0442\u0442\u0456 http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0456\u043d \u049b\u043e\u0441\u0443\u0434\u044b \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"\u0422\u0430\u049b\u044b\u0440\u044b\u043f","To open the popup, press Shift+Enter":"\u049a\u0430\u043b\u049b\u044b\u043c\u0430\u043b\u044b \u0442\u0435\u0440\u0435\u0437\u0435\u043d\u0456 \u0430\u0448\u0443 \u04af\u0448\u0456\u043d Shift+Enter \u0431\u0430\u0441\u044b\u04a3\u044b\u0437","Toggle accordion":"","Tools":"\u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440","Top":"\u04ae\u0441\u0442\u0456","Travel and Places":"\u0421\u0430\u044f\u0445\u0430\u0442 \u0436\u04d9\u043d\u0435 \u043e\u0440\u044b\u043d\u0434\u0430\u0440","Turquoise":"\u041a\u04e9\u0433\u0456\u043b\u0434\u0456\u0440","Underline":"\u0410\u0441\u0442\u044b \u0441\u044b\u0437\u044b\u043b\u0493\u0430\u043d","Undo":"\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443","Upload":"\u0416\u04af\u043a\u0442\u0435\u043f \u0441\u0430\u043b\u0443","Uploading image":"\u0421\u0443\u0440\u0435\u0442 \u0436\u04af\u043a\u0442\u0435\u043b\u0443\u0434\u0435","Upper Alpha":"\u0411\u0430\u0441 \u043b\u0430\u0442\u044b\u043d \u04d9\u0440\u0456\u043f\u0442\u0435\u0440\u0456","Upper Roman":"\u0411\u0430\u0441 \u0420\u0438\u043c \u0441\u0430\u043d\u0434\u0430\u0440\u044b","Url":"URL","User Defined":"\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u0493\u0430\u043d","Valid":"\u0416\u0430\u0440\u0430\u043c\u0434\u044b","Version":"\u041d\u04b1\u0441\u049b\u0430","Vertical align":"","Vertical space":"\u0422\u0456\u043a \u043a\u0435\u04a3\u0456\u0441\u0442\u0456\u043a","View":"\u041a\u04e9\u0440\u0456\u043d\u0456\u0441","Visual aids":"\u041a\u04e9\u0440\u043d\u0435\u043a\u0456 \u049b\u04b1\u0440\u0430\u043b\u0434\u0430\u0440","Warn":"\u0415\u0441\u043a\u0435\u0440\u0442\u0443","White":"\u0410\u049b","Width":"\u0415\u043d\u0456","Word count":"\u0421\u04e9\u0437 \u0441\u0430\u043d\u044b","Words":"\u0421\u04e9\u0437\u0434\u0435\u0440","Words: {0}":"\u0421\u04e9\u0437\u0434\u0435\u0440 \u0441\u0430\u043d\u044b: {0}","Yellow":"\u0421\u0430\u0440\u044b","Yes":"\u0418\u04d9","You are using {0}":"\u0421\u0456\u0437 {0} \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0434\u0430\u0441\u044b\u0437","You have unsaved changes are you sure you want to navigate away?":"\u0421\u0430\u049b\u0442\u0430\u043b\u043c\u0430\u0493\u0430\u043d \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440 \u0431\u0430\u0440. \u0421\u0456\u0437 \u0448\u044b\u043d\u044b\u043c\u0435\u043d \u0431\u0430\u0441\u049b\u0430 \u0436\u0435\u0440\u0433\u0435 \u043a\u0435\u0442\u0443\u0434\u0456 \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0456\u04a3\u0456\u0437 \u0430\u0440\u0430\u043b\u044b\u049b \u0441\u0430\u049b\u0442\u0430\u0493\u044b\u0448\u049b\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u049b\u0430\u0442\u044b\u043d\u0430\u0439 \u0430\u043b\u043c\u0430\u0439\u0434\u044b. Ctrl+X/C/V \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437.","alignment":"\u0442\u0443\u0440\u0430\u043b\u0430\u0443","austral sign":"\u0430\u0443\u0441\u0442\u0440\u0430\u043b \u0431\u0435\u0433\u043b\u0456\u0441\u0456","cedi sign":"\u0441\u0435\u0434\u0438 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","colon sign":"\u049b\u043e\u0441 \u043d\u04af\u043a\u0442\u0435 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","cruzeiro sign":"\u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456","currency sign":"\u0432\u0430\u043b\u044e\u0442\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","dollar sign":"\u0434\u043e\u043b\u043b\u0430\u0440 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","dong sign":"\u0434\u043e\u043d\u0433 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","drachma sign":"\u0434\u0440\u0430\u0445\u043c\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","euro-currency sign":"\u0435\u0443\u0440\u043e \u0432\u0430\u043b\u044e\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","example":"\u043c\u044b\u0441\u0430\u043b","formatting":"\u043f\u0456\u0448\u0456\u043c\u0434\u0435\u0443","french franc sign":"\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0434\u044b\u049b \u0444\u0440\u0430\u043d\u043a \u0431\u0435\u043b\u0433\u0456\u0441\u0456","german penny symbol":"\u0433\u0435\u0440\u043c\u0430\u043d\u0434\u044b\u049b \u043f\u0435\u043d\u043d\u0438 \u0442\u0430\u04a3\u0431\u0430\u0441\u044b","guarani sign":"\u0433\u0443\u0430\u0440\u0430\u043d\u0438 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","history":"\u0442\u0430\u0440\u0438\u0445","hryvnia sign":"\u0433\u0440\u0438\u0432\u043d\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","indentation":"\u0448\u0435\u0433\u0456\u043d\u0456\u0441","indian rupee sign":"\u04af\u043d\u0434\u0456 \u0440\u0443\u043f\u0438\u044f\u0441\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456","kip sign":"\u043a\u0438\u043f \u0431\u0435\u043b\u0433\u0456\u0441\u0456","lira sign":"\u043b\u0438\u0440\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","livre tournois sign":"\u0442\u0443\u0440 \u043b\u0438\u0432\u0440\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456","manat sign":"\u043c\u0430\u043d\u0430\u0442 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","mill sign":"\u043c\u0438\u043b\u043b \u0431\u0435\u043b\u0433\u0456\u0441\u0456","naira sign":"\u043d\u0430\u0439\u0440\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","new sheqel sign":"\u0436\u0430\u04a3\u0430 \u0448\u0435\u043a\u0435\u043b\u044c \u0431\u0435\u043b\u0433\u0456\u0441\u0456","nordic mark sign":"\u0441\u043a\u0430\u043d\u0434\u0438\u043d\u0430\u0432\u0438\u044f\u043b\u044b\u049b \u043c\u0430\u0440\u043a\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","peseta sign":"\u043f\u0435\u0441\u0435\u0442\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","peso sign":"\u043f\u0435\u0441\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456","ruble sign":"\u0440\u0443\u0431\u043b\u044c \u0431\u0435\u043b\u0433\u0456\u0441\u0456","rupee sign":"\u0440\u0443\u043f\u0438\u044f \u0431\u0435\u043b\u0433\u0456\u0441\u0456","spesmilo sign":"\u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456","styles":"\u0441\u0442\u0438\u043b\u044c\u0434\u0435\u0440","tenge sign":"\u0442\u0435\u04a3\u0433\u0435 \u0431\u0435\u043b\u0433\u0456\u0441\u0456","tugrik sign":"\u0442\u0443\u0433\u0440\u0438\u043a \u0431\u0435\u043b\u0433\u0456\u0441\u0456","turkish lira sign":"\u0442\u04af\u0440\u0456\u043a \u043b\u0438\u0440\u0430\u0441\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456","won sign":"\u0432\u043e\u043d \u0431\u0435\u043b\u0433\u0456\u0441\u0456","yen character":"\u0439\u0435\u043d\u0430 \u0442\u0430\u04a3\u0431\u0430\u0441\u044b","yen/yuan character variant one":"\u0439\u0435\u043d\u0430/\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b\u043d\u044b\u04a3 \u0431\u0456\u0440\u0456\u043d\u0448\u0456 \u043d\u04b1\u0441\u049b\u0430\u0441\u044b","yuan character":"\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b","yuan character, in hong kong and taiwan":"\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b, \u0413\u043e\u043d\u043a\u043e\u043d\u0433 \u043f\u0435\u043d \u0422\u0430\u0439\u0432\u0430\u043d\u044c\u0434\u0430","{0} characters":"{0} \u0442\u0430\u04a3\u0431\u0430","{0} columns, {1} rows":"","{0} words":"{0} \u0441\u04e9\u0437"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ko_KR.js b/staticfiles/tinymce/langs/ko_KR.js new file mode 100644 index 0000000..be0c215 --- /dev/null +++ b/staticfiles/tinymce/langs/ko_KR.js @@ -0,0 +1 @@ +tinymce.addI18n("ko_KR",{"#":"#","Accessibility":"\uc811\uadfc\uc131","Accordion":"\uc544\ucf54\ub514\uc5b8","Accordion body...":"\uc544\ucf54\ub514\uc5b8 \ubcf8\ubb38...","Accordion summary...":"\uc544\ucf54\ub514\uc5b8 \uc694\uc57d...","Action":"\uc791\uc5c5","Activity":"\ud65c\ub3d9","Address":"\uc8fc\uc18c","Advanced":"\uc0c1\uc138","Align":"\uc815\ub82c","Align center":"\uc911\uc559 \uc815\ub82c","Align left":"\uc67c\ucabd \uc815\ub82c","Align right":"\uc624\ub978\ucabd \uc815\ub82c","Alignment":"\uc815\ub82c","Alignment {0}":"\uc815\ub82c {0}","All":"\ubaa8\ub450","Alternative description":"\ub300\uccb4 \uc124\uba85\ubb38","Alternative source":"\ub300\uccb4 \uc18c\uc2a4","Alternative source URL":"\ub300\uccb4 \uc18c\uc2a4 URL","Anchor":"\ub9c1\ud06c \uc9c0\uc810","Anchor...":"\uc575\ucee4...","Anchors":"\uc575\ucee4","Animals and Nature":"\ub3d9\ubb3c\uacfc \uc790\uc5f0","Arrows":"\ud654\uc0b4\ud45c","B":"\ud30c\ub791","Background color":"\ubc30\uacbd \uc0c9","Background color {0}":"\ubc30\uacbd \uc0c9\uc0c1 {0}","Black":"\uac80\uc740\uc0c9","Block":"\ube14\ub85d","Block {0}":"\ube14\ub85d {0}","Blockquote":"\uc778\uc6a9","Blocks":"\ube14\ub85d","Blue":"\ud30c\ub780\uc0c9","Blue component":"\uccad\uc0c9 \uc694\uc18c","Body":"\ubcf8\ubb38","Bold":"\uad75\uac8c","Border":"\ud14c\ub450\ub9ac","Border color":"\ud14c\ub450\ub9ac \uc0c9","Border style":"\ud14c\ub450\ub9ac \uc2a4\ud0c0\uc77c","Border width":"\ud14c\ub450\ub9ac \ub450\uaed8","Bottom":"\uc544\ub798 \ub9de\ucda4","Browse files":"\ud30c\uc77c \ud0d0\uc0c9","Browse for an image":"\uc774\ubbf8\uc9c0 \ucc3e\uae30","Browse links":"\ub9c1\ud06c \ud0d0\uc0c9","Bullet list":"\uae00\uba38\ub9ac \uae30\ud638 \ubaa9\ub85d","Cancel":"\ucde8\uc18c","Caption":"\ucea1\uc158","Cell":"\uc140","Cell padding":"\uc140 \uc548\ucabd \uc5ec\ubc31","Cell properties":"\uc140 \uc18d\uc131","Cell spacing":"\uc140 \uac04\uaca9","Cell styles":"\uc140 \ubaa8\uc591","Cell type":"\uc140 \uc720\ud615","Center":"\uac00\uc6b4\ub370 \ub9de\ucda4","Characters":"\ubb38\uc790 \uc218","Characters (no spaces)":"\ubb38\uc790 \uc218 (\uacf5\ubc31 \uc5c6\uc74c)","Circle":"\ub3d9\uadf8\ub77c\ubbf8","Class":"Class","Clear formatting":"\uc11c\uc2dd \uc9c0\uc6b0\uae30","Close":"\ub2eb\uae30","Code":"Code","Code sample...":"\ucf54\ub4dc \uc0d8\ud50c...","Code view":"\ucf54\ub4dc \ud45c\uc2dc","Color Picker":"\uc0c9 \uc120\ud0dd\uae30","Color swatch":"\uc0c9\uc0c1 \uacac\ubcf8","Cols":"\uc5f4 \uc218","Column":"\uc5f4","Column clipboard actions":"\uc5f4 \ud074\ub9bd\ubcf4\ub4dc \ub3d9\uc791","Column group":"\uc5f4 \uadf8\ub8f9","Column header":"\uc5f4 \uc81c\ubaa9","Constrain proportions":"\ube44\uc728 \uace0\uc815","Copy":"\ubcf5\uc0ac","Copy column":"\uc5f4 \ubcf5\uc0ac","Copy row":"\ud589 \ubcf5\uc0ac","Could not find the specified string.":"\uc9c0\uc815\ud55c \ubb38\uc790\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.","Could not load emojis":"\uc774\ubaa8\uc9c0\ub97c \ubd88\ub7ec\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4","Count":"\uac1c\uc218","Currency":"\ud1b5\ud654","Current window":"\ud604\uc7ac \ucc3d","Custom color":"\uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc0c9","Custom...":"\uc0ac\uc6a9\uc790 \uc9c0\uc815...","Cut":"\uc798\ub77c\ub0b4\uae30","Cut column":"\uc5f4 \uc798\ub77c\ub0b4\uae30","Cut row":"\ud589 \uc798\ub77c\ub0b4\uae30","Dark Blue":"\uc9c4\ud55c \ud30c\ub780\uc0c9","Dark Gray":"\uc9c4\ud55c \ud68c\uc0c9","Dark Green":"\uc9c4\ud55c \ucd08\ub85d\uc0c9","Dark Orange":"\uc9c4\ud55c \uc8fc\ud669\uc0c9","Dark Purple":"\uc9c4\ud55c \ubcf4\ub77c\uc0c9","Dark Red":"\uc9c4\ud55c \ube68\uac04\uc0c9","Dark Turquoise":"\uc9c4\ud55c \uccad\ub85d\uc0c9","Dark Yellow":"\uc9c4\ud55c \ub178\ub780\uc0c9","Dashed":"\ud30c\uc120","Date/time":"\ub0a0\uc9dc/\uc2dc\uac04","Decrease indent":"\ub0b4\uc5b4\uc4f0\uae30","Default":"\uae30\ubcf8\uac12","Delete accordion":"\uc544\ucf54\ub514\uc5b8 \uc0ad\uc81c","Delete column":"\uc5f4 \uc0ad\uc81c","Delete row":"\ud589 \uc0ad\uc81c","Delete table":"\ud45c \uc0ad\uc81c","Dimensions":"\ud06c\uae30","Disc":"\ub514\uc2a4\ud06c","Div":"Div","Document":"\ubb38\uc11c","Dotted":"\uc810\uc120","Double":"\uc774\uc911 \uc2e4\uc120","Drop an image here":"\uc5ec\uae30\ub85c \uc774\ubbf8\uc9c0\ub97c \ub04c\uc5b4\uc624\uc138\uc694","Dropped file type is not supported":"\ub04c\uc5b4\ub2e4 \ub193\uc740 \ud30c\uc77c \ud615\uc2dd\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4","Edit":"\ud3b8\uc9d1","Embed":"\uc0bd\uc785","Emojis":"\uc774\ubaa8\uc9c0","Emojis...":"\uc774\ubaa8\uc9c0...","Error":"\uc624\ub958","Error: Form submit field collision.":"\uc624\ub958: \uc591\uc2dd \uc81c\ucd9c \ud544\ub4dc \ubd88\uc77c\uce58","Error: No form element found.":"\uc624\ub958: \uc591\uc2dd \ud56d\ubaa9 \uc5c6\uc74c","Extended Latin":"\ud655\uc7a5 \ub77c\ud2f4\uc5b4","Failed to initialize plugin: {0}":"\ud50c\ub7ec\uadf8\uc778 {0}\uc758 \ucd08\uae30\ud654\uac00 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4","Failed to load plugin url: {0}":"\ud50c\ub7ec\uadf8\uc778 URL {0}\uc744 \ubd88\ub7ec\uc624\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.","Failed to load plugin: {0} from url {1}":"URL {1}\ub85c\ubd80\ud130 \ud50c\ub7ec\uadf8\uc778 {0}\uc744 \ubd88\ub7ec\uc624\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.","Failed to upload image: {0}":"\uc774\ubbf8\uc9c0{0}\uc744(\ub97c) \uc5c5\ub85c\ub4dc \ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.","File":"\ud30c\uc77c","Find":"\ucc3e\uae30","Find (if searchreplace plugin activated)":"\ucc3e\uae30 (searchreplace \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0)","Find and Replace":"\ucc3e\uae30 \ubc0f \ubc14\uafb8\uae30","Find and replace...":"\ucc3e\uae30 \ubc0f \ubc14\uafb8\uae30...","Find in selection":"\uc120\ud0dd\ub41c \ubd80\ubd84\uc5d0\uc11c \uac80\uc0c9","Find whole words only":"\ubaa8\ub450 \uc77c\uce58\ud558\ub294 \ub2e8\uc5b4 \ucc3e\uae30","Flags":"\uae43\ubc1c","Focus to contextual toolbar":"\ucee8\ud14d\uc2a4\ud2b8 \ud234\ubc14\uc5d0 \uac15\uc870\ud45c\uc2dc","Focus to element path":"\uc694\uc18c \uacbd\ub85c\uc5d0 \uac15\uc870\ud45c\uc2dc","Focus to menubar":"\uba54\ub274\ubc14\uc5d0 \uac15\uc870\ud45c\uc2dc","Focus to toolbar":"\ud234\ubc14\uc5d0 \uac15\uc870\ud45c\uc2dc","Font":"\uae00\uaf34","Font size {0}":"\ud3f0\ud2b8 \ud06c\uae30 {0}","Font sizes":"\uae00\uaf34 \ud06c\uae30","Font {0}":"\ud3f0\ud2b8 {0}","Fonts":"\uae00\uaf34","Food and Drink":"\uc74c\uc2dd\uacfc \uc74c\ub8cc","Footer":"\ud478\ud130","Format":"\uc11c\uc2dd","Format {0}":"\ud3ec\ub9f7 {0}","Formats":"\uc11c\uc2dd","Fullscreen":"\uc804\uccb4 \ud654\uba74","G":"\ub179\uc0c9","General":"\uc77c\ubc18","Gray":"\ud68c\uc0c9","Green":"\ucd08\ub85d\uc0c9","Green component":"\ub179\uc0c9 \uc694\uc18c","Groove":"\uc785\uccb4 \ud14c\ub450\ub9ac","Handy Shortcuts":"\uc720\uc6a9\ud55c \ub2e8\ucd95\ud0a4","Header":"\uc81c\ubaa9","Header cell":"\ud5e4\ub354 \uc140","Heading 1":"\uc81c\ubaa9 1","Heading 2":"\uc81c\ubaa9 2","Heading 3":"\uc81c\ubaa9 3","Heading 4":"\uc81c\ubaa9 4","Heading 5":"\uc81c\ubaa9 5","Heading 6":"\uc81c\ubaa9 6","Headings":"\uc81c\ubaa9","Height":"\ub192\uc774","Help":"\ub3c4\uc6c0\ub9d0","Hex color code":"16\uc9c4\uc218 \uc0c9\uc0c1 \ucf54\ub4dc","Hidden":"\uc228\uae40","Horizontal align":"\uc218\ud3c9 \uc815\ub82c","Horizontal line":"\uad6c\ubd84\uc120","Horizontal space":"\uc88c\uc6b0 \uc5ec\ubc31","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\ub294 \ubb38\uc790\ub85c \uc2dc\uc791\ud574\uc57c \ud558\uba70, \uadf8 \ub2e4\uc74c\uc5d0\ub294 \ubb38\uc790, \uc22b\uc790, \ub300\uc2dc, \uad6c\ub450\uc810, \ucf5c\ub860, \ubc11\uc904 \ubb38\uc790\uac00 \uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.","Image is decorative":"\uc774\ubbf8\uc9c0 \uc7a5\uc2dd \uac00\ub2a5","Image list":"\uc774\ubbf8\uc9c0 \ubaa9\ub85d","Image title":"\uc774\ubbf8\uc9c0 \uc81c\ubaa9","Image...":"\uc774\ubbf8\uc9c0...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP \uc624\ub958: \uc774\ubbf8\uc9c0 \ud504\ub85d\uc2dc\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP \uc624\ub958: \uc62c\ubc14\ub974\uc9c0 \uc54a\uc740 \uc774\ubbf8\uc9c0 \ud504\ub85d\uc2dc URL \uc8fc\uc18c","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP \uc624\ub958: \uc694\uccad \uac70\ubd80","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP \uc624\ub958: \uc54c \uc218 \uc5c6\ub294 \uc774\ubbf8\uc9c0 \ud504\ub85d\uc2dc \uc624\ub958","Increase indent":"\ub4e4\uc5ec\uc4f0\uae30","Inline":"\uc778\ub77c\uc778","Insert":"\uc0bd\uc785","Insert Template":"\ud15c\ud50c\ub9bf \uc0bd\uc785","Insert accordion":"\uc544\ucf54\ub514\uc5b8 \uc0bd\uc785","Insert column after":"\ub2e4\uc74c\uc5d0 \uc5f4 \uc0bd\uc785","Insert column before":"\uc774\uc804\uc5d0 \uc5f4 \uc0bd\uc785","Insert date/time":"\ub0a0\uc9dc/\uc2dc\uac04 \uc0bd\uc785","Insert image":"\uc774\ubbf8\uc9c0 \uc0bd\uc785","Insert link (if link plugin activated)":"\ub9c1\ud06c \uc0bd\uc785 (link \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0)","Insert row after":"\ub2e4\uc74c\uc5d0 \ud589 \uc0bd\uc785","Insert row before":"\uc774\uc804\uc5d0 \ud589 \uc0bd\uc785","Insert table":"\ud45c \uc0bd\uc785","Insert template...":"\ud15c\ud50c\ub9bf \uc0bd\uc785...","Insert video":"\ube44\ub514\uc624 \uc0bd\uc785","Insert/Edit code sample":"\ucf54\ub4dc \uc0d8\ud50c \uc0bd\uc785/\ud3b8\uc9d1","Insert/edit image":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","Insert/edit link":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","Insert/edit media":"\ubbf8\ub514\uc5b4 \uc0bd\uc785/\ud3b8\uc9d1","Insert/edit video":"\ube44\ub514\uc624 \uc0bd\uc785/\ud3b8\uc9d1","Inset":"\uc140 \ud568\ubab0","Invalid hex color code: {0}":"\ubd80\uc801\uc808\ud55c 16\uc9c4\uc218 \uc0c9\uc0c1 \ucf54\ub4dc: {0}","Invalid input":"\ubd80\uc801\uc808\ud55c \uc785\ub825","Italic":"\uae30\uc6b8\uc784\uaf34","Justify":"\uc591\ucabd \uc815\ub82c","Keyboard Navigation":"\ub2e8\ucd95\ud0a4","Language":"\uc5b8\uc5b4","Learn more...":"\uc880 \ub354 \uc0b4\ud3b4\ubcf4\uae30...","Left":"\uc67c\ucabd \ub9de\ucda4","Left to right":"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd","Light Blue":"\ubc1d\uc740 \ud30c\ub780\uc0c9","Light Gray":"\ubc1d\uc740 \ud68c\uc0c9","Light Green":"\ubc1d\uc740 \ub179\uc0c9","Light Purple":"\ubc1d\uc740 \ubcf4\ub77c\uc0c9","Light Red":"\ubc1d\uc740 \ube68\uac04\uc0c9","Light Yellow":"\ubc1d\uc740 \ub178\ub780\uc0c9","Line height":"\uc904 \uac04\uaca9","Link list":"\ub9c1\ud06c \ubaa9\ub85d","Link...":"\ub9c1\ud06c...","List Properties":"\ud56d\ubaa9 \uc18d\uc131","List properties...":"\ud56d\ubaa9 \uc18d\uc131...","Loading emojis...":"\uc774\ubaa8\uc9c0 \ubd88\ub7ec\uc624\ub294 \uc911...","Loading...":"\ubd88\ub7ec\uc624\ub294 \uc911...","Lower Alpha":"\uc54c\ud30c\ubcb3 \uc18c\ubb38\uc790","Lower Greek":"\uadf8\ub9ac\uc2a4\uc5b4 \uc18c\ubb38\uc790","Lower Roman":"\ub85c\ub9c8\uc790 \uc18c\ubb38\uc790","Match case":"\ub300/\uc18c\ubb38\uc790 \uad6c\ubd84","Mathematical":"\uc218\ud559\uae30\ud638","Media poster (Image URL)":"\ubbf8\ub514\uc5b4 \ud3ec\uc2a4\ud130 (\uc774\ubbf8\uc9c0 URL)","Media...":"\ubbf8\ub514\uc5b4...","Medium Blue":"\uc911\uac04 \ud30c\ub780\uc0c9","Medium Gray":"\uc911\uac04 \ud68c\uc0c9","Medium Purple":"\uc911\uac04 \ubcf4\ub77c\uc0c9","Merge cells":"\uc140 \ubcd1\ud569","Middle":"\uac00\uc6b4\ub370 \ub9de\ucda4","Midnight Blue":"\uc9c4\ud55c \ud30c\ub780\uc0c9","More...":"\ub354 \ubcf4\uae30...","Name":"\uc774\ub984","Navy Blue":"\ub0a8\uc0c9","New document":"\uc0c8 \ubb38\uc11c","New window":"\uc0c8 \ucc3d","Next":"\ub2e4\uc74c","No":"\uc544\ub2c8\uc624","No alignment":"\uc815\ub82c \uc5c6\uc74c","No color":"\uc0c9 \uc5c6\uc74c","Nonbreaking space":"\ub744\uc5b4\uc4f0\uae30","None":"\uc5c6\uc74c","Numbered list":"\ubc88\ud638 \ub9e4\uae30\uae30 \ubaa9\ub85d","OR":"\ub610\ub294","Objects":"\ubb3c\uac74","Ok":"\ud655\uc778","Open help dialog":"\ub3c4\uc6c0\ub9d0 \ub2e4\uc774\uc5bc\ub85c\uadf8 \uc5f4\uae30","Open link":"\ub9c1\ud06c \uc5f4\uae30","Open link in...":"...\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30","Open popup menu for split buttons":"\ubd84\ud560 \ubc84\ud2bc\uc73c\ub85c \ud31d\uc5c5 \uba54\ub274 \uc5f4\uae30","Orange":"\uc8fc\ud669\uc0c9","Outset":"\uc140 \ub3cc\ucd9c","Page break":"\ud398\uc774\uc9c0 \uad6c\ubd84\uc790","Paragraph":"\ub2e8\ub77d","Paste":"\ubd99\uc5ec\ub123\uae30","Paste as text":"\ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uae30","Paste column after":"\ub2e4\uc74c\uc5d0 \uc5f4 \ubd99\uc5ec\ub123\uae30","Paste column before":"\uc774\uc804\uc5d0 \uc5f4 \ubd99\uc5ec\ub123\uae30","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\ud604\uc7ac \uc77c\ubc18 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\uc5d0\uc11c \ubd99\uc5ec\ub123\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc635\uc158\uc744 \ub04c \ub54c\uae4c\uc9c0 \uc77c\ubc18 \ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uc2b5\ub2c8\ub2e4.","Paste or type a link":"\ub9c1\ud06c\ub97c \ubd99\uc5ec\ub123\uac70\ub098 \uc785\ub825\ud558\uc2ed\uc2dc\uc624.","Paste row after":"\ub2e4\uc74c\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","Paste row before":"\uc774\uc804\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","Paste your embed code below:":"\uc0bd\uc785\ud560 \ucf54\ub4dc\ub97c \uc544\ub798\uc5d0 \ubd99\uc5ec \ub123\uc5b4\uc8fc\uc138\uc694.","People":"\uc0ac\ub78c","Plugins":"\ud50c\ub7ec\uadf8\uc778","Plugins installed ({0}):":"\uc124\uce58\ub41c \ud50c\ub7ec\uadf8\uc778({0}):","Powered by {0}":"{0}\uc5d0\uc11c \uc9c0\uc6d0","Pre":"Pre","Preferences":"\ud658\uacbd\uc124\uc815","Preformatted":"\uc0ac\uc804 \uc11c\uc2dd","Premium plugins:":"\ud504\ub9ac\ubbf8\uc5c4 \ud50c\ub7ec\uadf8\uc778:","Press the Up and Down arrow keys to resize the editor.":"\uc704\uc544\ub798 \ud654\uc0b4\ud45c \ud0a4\ub97c \ub20c\ub7ec \ud3b8\uc9d1\uae30 \ud06c\uae30\ub97c \uc870\uc815\ud558\uc138\uc694.","Press the arrow keys to resize the editor.":"\ud654\uc0b4\ud45c \ud0a4\ub97c \ub20c\ub7ec \ud3b8\uc9d1\uae30 \ud06c\uae30\ub97c \uc870\uc815\ud558\uc138\uc694.","Press {0} for help":"\ub3c4\uc6c0\ub9d0\uc744 \ubcf4\ub824\uba74 {0}\ub97c \ub204\ub974\uc138\uc694","Preview":"\ubbf8\ub9ac \ubcf4\uae30","Previous":"\uc774\uc804","Print":"\uc778\uc1c4","Print...":"\uc778\uc1c4...","Purple":"\ubcf4\ub77c\uc0c9","Quotations":"\uc778\uc6a9\ubb38","R":"\ube68\uac15","Range 0 to 255":"0\ubd80\ud130 255\uae4c\uc9c0\uc758 \ubc94\uc704","Red":"\ube68\uac04\uc0c9","Red component":"\uc801\uc0c9 \uc694\uc18c","Redo":"\ub2e4\uc2dc \uc2e4\ud589","Remove":"\uc81c\uac70","Remove color":"\uc0c9 \uc81c\uac70","Remove link":"\ub9c1\ud06c \uc81c\uac70","Replace":"\ubc14\uafb8\uae30","Replace all":"\ubaa8\ub450 \ubc14\uafb8\uae30","Replace with":"\ub2e4\uc74c\uc73c\ub85c \ubc14\uafb8\uae30:","Resize":"\ud06c\uae30 \uc870\uc808","Restore last draft":"\ub9c8\uc9c0\ub9c9 \ucd08\uc548 \ubcf5\uc6d0","Reveal or hide additional toolbar items":"\ud234\ubc14 \ud56d\ubaa9\uc744 \ucd94\uac00\ub85c \ud45c\uc2dc\ud558\uac70\ub098 \uc228\uae41\ub2c8\ub2e4","Rich Text Area":"\uc11c\uc2dd \ud14d\uc2a4\ud2b8 \uc601\uc5ed","Rich Text Area. Press ALT-0 for help.":"\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \uc601\uc5ed. ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \uc601\uc5ed. ALT-F9\ub97c \ub204\ub974\uba74 \uba54\ub274, ALT-F10\uc744 \ub204\ub974\uba74 \ud234\ubc14, ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.","Ridge":"\ub3cc\ucd9c \ud14c\ub450\ub9ac","Right":"\uc624\ub978\ucabd \ub9de\ucda4","Right to left":"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd","Row":"\ud589","Row clipboard actions":"\ud589 \ud074\ub9bd\ubcf4\ub4dc \ub3d9\uc791","Row group":"\ud589 \uadf8\ub8f9","Row header":"\ud589 \uc81c\ubaa9","Row properties":"\ud589 \uc18d\uc131","Row type":"\ud589 \uc720\ud615","Rows":"\ud589 \uc218","Save":"\uc800\uc7a5","Save (if save plugin activated)":"\uc800\uc7a5 (save \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0)","Scope":"\ubc94\uc704","Search":"\uac80\uc0c9","Select all":"\uc804\uccb4 \uc120\ud0dd","Select...":"\uc120\ud0dd...","Selection":"\uc120\ud0dd","Shortcut":"\ubc14\ub85c\uac00\uae30","Show blocks":"\ube14\ub85d \ud45c\uc2dc","Show caption":"\ucea1\uc158 \ud45c\uc2dc","Show invisible characters":"\ube44\ud45c\uc2dc \ubb38\uc790 \ud45c\uc2dc","Size":"\ud06c\uae30","Solid":"\uc2e4\uc120","Source":"\uc18c\uc2a4","Source code":"\uc18c\uc2a4\ucf54\ub4dc","Special Character":"\ud2b9\uc218 \ubb38\uc790","Special character...":"\ud2b9\uc218 \ubb38\uc790...","Split cell":"\uc140 \ubd84\ud560","Square":"\ub124\ubaa8","Start list at number":"\ubc88\ud638 \ub9ac\uc2a4\ud2b8 \uc2dc\uc791","Strikethrough":"\ucde8\uc18c\uc120","Style":"\uc2a4\ud0c0\uc77c","Subscript":"\uc544\ub798 \ucca8\uc790","Superscript":"\uc704 \ucca8\uc790","Switch to or from fullscreen mode":"\uc804\uccb4 \ud654\uba74 \ubaa8\ub4dc \uc804\ud658","Symbols":"\uae30\ud638","System Font":"\uc2dc\uc2a4\ud15c \uae00\uaf34","Table":"\ud45c","Table caption":"\ud45c \ucea1\uc158","Table properties":"\ud45c \uc18d\uc131","Table styles":"\ud45c \ubaa8\uc591","Template":"\ud15c\ud50c\ub9bf","Templates":"\ud15c\ud50c\ub9bf","Text":"\ud14d\uc2a4\ud2b8","Text color":"\uae00\uc790 \uc0c9","Text color {0}":"\ud14d\uc2a4\ud2b8 \uc0c9\uc0c1 {0}","Text to display":"\ud45c\uc2dc\ud560 \ud14d\uc2a4\ud2b8","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":'\uc785\ub825\ud558\uc2e0 URL\uc774 \uc774\uba54\uc77c \uc8fc\uc18c\uc778 \uac83 \uac19\uc2b5\ub2c8\ub2e4. "mailto:" \uc811\ub450\uc0ac\ub97c \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?',"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":'\uc785\ub825\ud558\uc2e0 URL\uc774 \uc678\ubd80 \ub9c1\ud06c\uc778 \uac83 \uac19\uc2b5\ub2c8\ub2e4. "http://" \uc811\ub450\uc0ac\ub97c \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?',"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":'\uc785\ub825\ud558\uc2e0 URL\uc774 \uc678\ubd80 \ub9c1\ud06c\uc778 \uac83 \uac19\uc2b5\ub2c8\ub2e4. "https://" \uc811\ub450\uc0ac\ub97c \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?',"Title":"\uc81c\ubaa9","To open the popup, press Shift+Enter":"\ud31d\uc5c5\uc744 \uc5f4\ub824\uba74 Shift+Enter\ub97c \ub204\ub974\uc2ed\uc2dc\uc624.","Toggle accordion":"\uc544\ucf54\ub514\uc5b8 \ud1a0\uae00","Tools":"\ub3c4\uad6c","Top":"\uc704\ucabd \ub9de\ucda4","Travel and Places":"\uc5ec\ud589\uacfc \uc7a5\uc18c","Turquoise":"\uccad\ub85d\uc0c9","Underline":"\ubc11\uc904","Undo":"\uc2e4\ud589 \ucde8\uc18c","Upload":"\uc5c5\ub85c\ub4dc","Uploading image":"\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc \uc911","Upper Alpha":"\uc54c\ud30c\ubcb3 \ub300\ubb38\uc790","Upper Roman":"\ub85c\ub9c8\uc790 \ub300\ubb38\uc790","Url":"URL","User Defined":"\uc0ac\uc6a9\uc790 \uc815\uc758","Valid":"\uc720\ud6a8\ud568","Version":"\ubc84\uc804","Vertical align":"\uc218\uc9c1 \uc815\ub82c","Vertical space":"\uc0c1\ud558 \uc5ec\ubc31","View":"\ubcf4\uae30","Visual aids":"\ud45c\uc758 \ud14c\ub450\ub9ac\ub97c \uc810\uc120\uc73c\ub85c \ud45c\uc2dc","Warn":"\uacbd\uace0","White":"\ud770\uc0c9","Width":"\ub108\ube44","Word count":"\ubb38\uc790 \uc218","Words":"\ub2e8\uc5b4 \uc218","Words: {0}":"\ub2e8\uc5b4 \uc218: {0}","Yellow":"\ub178\ub780\uc0c9","Yes":"\ub124","You are using {0}":"{0} \uc0ac\uc6a9 \uc911","You have unsaved changes are you sure you want to navigate away?":"\uc800\uc7a5\ud558\uc9c0 \uc54a\uc740 \uc815\ubcf4\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \ub098\uac00\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\ube0c\ub77c\uc6b0\uc800\uac00 \ud074\ub9bd\ubcf4\ub4dc \uc811\uadfc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Ctrl+X/C/V \ub2e8\ucd95\ud0a4\ub97c \uc774\uc6a9\ud574\uc8fc\uc138\uc694.","alignment":"\uc815\ub82c","austral sign":"\uc544\uc6b0\uc2a4\ud2b8\ub784 \uae30\ud638","cedi sign":"\uc138\ub514 \uae30\ud638","colon sign":"\ucf5c\ub860 \uae30\ud638","cruzeiro sign":"\ud06c\ub8e8\uc81c\uc774\ub85c \uae30\ud638","currency sign":"\ud1b5\ud654 \uae30\ud638","dollar sign":"\ub2ec\ub7ec \uae30\ud638","dong sign":"\ub3d9 \uae30\ud638","drachma sign":"\ub4dc\ub77c\ud06c\ub9c8 \uae30\ud638","euro-currency sign":"\uc720\ub85c\ud654 \uae30\ud638","example":"\uc608\uc81c","formatting":"\uc11c\uc2dd","french franc sign":"\ud504\ub791\uc2a4 \ud504\ub791 \uae30\ud638","german penny symbol":"\ub3c5\uc77c \ud398\ub2c8 \uae30\ud638","guarani sign":"\uacfc\ub77c\ub2c8 \uae30\ud638","history":"\uc774\ub825","hryvnia sign":"\uadf8\ub9ac\ube0c\ub098 \uae30\ud638","indentation":"\ub4e4\uc5ec\uc4f0\uae30","indian rupee sign":"\uc778\ub3c4 \ub8e8\ud53c \uae30\ud638","kip sign":"\ud0b5 \uae30\ud638","lira sign":"\ub9ac\ub77c \uae30\ud638","livre tournois sign":"\ub9ac\ube0c\ub974 \ud2b8\ub974\ub204\uc544 \uae30\ud638","manat sign":"\ub9c8\ub098\ud2b8 \uae30\ud638","mill sign":"\ubc00 \uae30\ud638","naira sign":"\ub098\uc774\ub77c \uae30\ud638","new sheqel sign":"\ub274 \uc138\ucf08 \uae30\ud638","nordic mark sign":"\ub178\ub974\ub515 \ub9c8\ub974\ud06c \uae30\ud638","peseta sign":"\ud398\uc138\ud0c0 \uae30\ud638","peso sign":"\ud398\uc18c \uae30\ud638","ruble sign":"\ub8e8\ube14 \uae30\ud638","rupee sign":"\ub8e8\ud53c \uae30\ud638","spesmilo sign":"\uc2a4\ud398\uc2a4\ubc00\ub85c \uae30\ud638","styles":"\uc2a4\ud0c0\uc77c","tenge sign":"\ud161\uac8c \uae30\ud638","tugrik sign":"\ud22c\uadf8\ub9ac\ud06c \uae30\ud638","turkish lira sign":"\ud130\ud0a4 \ub9ac\ub77c \uae30\ud638","won sign":"\uc6d0 \uae30\ud638","yen character":"\uc5d4 \uae30\ud638","yen/yuan character variant one":"\uc5d4/\uc704\uc548 \ubb38\uc790 \ubcc0\ud615","yuan character":"\uc704\uc548 \uae30\ud638","yuan character, in hong kong and taiwan":"\ub300\ub9cc \uc704\uc548 \uae30\ud638","{0} characters":"{0} \ubb38\uc790","{0} columns, {1} rows":"{0} \uc5f4, {1} \ud589","{0} words":"{0}\uac1c\uc758 \ub2e8\uc5b4"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ku.js b/staticfiles/tinymce/langs/ku.js new file mode 100644 index 0000000..9517b80 --- /dev/null +++ b/staticfiles/tinymce/langs/ku.js @@ -0,0 +1 @@ +tinymce.addI18n("ku",{"#":"#","Accessibility":"\u062f\u06d5\u0633\u062a\u06af\u06d5\u06cc\u0634\u062a\u0646","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u06a9\u0631\u062f\u0627\u0631","Activity":"\u0686\u0627\u0644\u0627\u06a9\u06cc","Address":"\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646","Advanced":"\u067e\u06ce\u0634\u06a9\u06d5\u0648\u062a\u0648\u0648","Align":"\u0644\u0627\u06af\u0631\u062a\u0646","Align center":"\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a","Align left":"\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0686\u06d5\u067e","Align right":"\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0695\u0627\u0633\u062a","Alignment":"\u0644\u0627\u06af\u0631\u062a\u0646","Alignment {0}":"","All":"\u0647\u06d5\u0645\u0648\u0648","Alternative description":"\u0648\u06d5\u0633\u0641\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5","Alternative source":"\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631","Alternative source URL":"\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5","Anchor":"\u0644\u06d5\u0646\u06af\u06d5\u0631","Anchor...":"\u0644\u06d5\u0646\u06af\u06d5\u0631...","Anchors":"\u0644\u06d5\u0646\u06af\u06d5\u0631\u06d5\u06a9\u0627\u0646","Animals and Nature":"\u0626\u0627\u0698\u06d5\u06b5 \u0648 \u0633\u0631\u0648\u0634\u062a","Arrows":"\u062a\u06cc\u0631\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646","B":"\u06a9\u06d5\u0648\u06d5","Background color":"\u0695\u06d5\u0646\u06af\u06cc \u067e\u0627\u0634\u0628\u0646\u06d5\u0645\u0627","Background color {0}":"","Black":"\u0695\u06d5\u0634","Block":"\u0628\u0644\u06c6\u06a9","Block {0}":"","Blockquote":"\u0648\u062a\u06d5","Blocks":"\u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646","Blue":"\u06a9\u06d5\u0648\u06d5","Blue component":"\u06a9\u06c6\u0645\u067e\u06c6\u0646\u06ce\u0646\u062a\u06ce\u06a9\u06cc \u0634\u06cc\u0646","Body":"\u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9","Bold":"\u062a\u06c6\u062e\u06a9\u0631\u062f\u0646","Border":"\u0633\u0646\u0648\u0648\u0631","Border color":"\u0695\u06d5\u0646\u06af\u06cc \u0633\u0646\u0648\u0648\u0631","Border style":"\u0634\u06ce\u0648\u0627\u0632\u06cc \u0644\u06ce\u0648\u0627\u0631","Border width":"\u067e\u0627\u0646\u06cc\u06cc \u0644\u06ce\u0648\u0627\u0631","Bottom":"\u0698\u06ce\u0631\u06d5\u0648\u06d5","Browse files":"","Browse for an image":"\u0628\u06af\u06d5\u0695\u06ce \u0628\u06c6 \u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9","Browse links":"","Bullet list":"\u0644\u06cc\u0633\u062a\u06cc \u062e\u0627\u06b5","Cancel":"\u067e\u0627\u0634\u06af\u06d5\u0632\u0628\u0648\u0648\u0646\u06d5\u0648\u06d5","Caption":"\u0633\u06d5\u0631\u062f\u06ce\u0695","Cell":"\u062e\u0627\u0646\u06d5","Cell padding":"\u0646\u0627\u0648\u067e\u06c6\u0634\u06cc \u062e\u0627\u0646\u06d5","Cell properties":"\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0627\u0646\u06d5","Cell spacing":"\u0628\u06c6\u0634\u0627\u06cc\u06cc\u06cc \u0628\u06d5\u06cc\u0646\u06cc \u062e\u0627\u0646\u06d5\u06a9\u0627\u0646","Cell styles":"\u0633\u062a\u0627\u06cc\u06b5\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0627\u0646\u06d5","Cell type":"\u062c\u06c6\u0631\u06cc \u062e\u0627\u0646\u06d5","Center":"\u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a","Characters":"\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646","Characters (no spaces)":"\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646 (\u0628\u06d5\u0628\u06ce \u0628\u06c6\u0634\u0627\u06cc\u06cc)","Circle":"\u0628\u0627\u0632\u0646\u06d5","Class":"\u067e\u06c6\u0644","Clear formatting":"\u067e\u0627\u06a9\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646","Close":"\u062f\u0627\u062e\u0633\u062a\u0646","Code":"\u06a9\u06c6\u062f","Code sample...":"\u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f...","Code view":"\u0628\u06cc\u0646\u06cc\u0646\u06cc \u06a9\u06c6\u062f","Color Picker":"\u0647\u06d5\u06b5\u0686\u0646\u06cc \u0695\u06d5\u0646\u06af","Color swatch":"\u0646\u0645\u0648\u0648\u0646\u06d5 \u0695\u06d5\u0646\u06af","Cols":"\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646","Column":"\u0633\u062a\u0648\u0648\u0646","Column clipboard actions":"\u06a9\u0631\u062f\u0627\u0631\u06d5\u06a9\u0627\u0646\u06cc \u06a9\u0644\u06cc\u067e \u0628\u06c6\u0631\u062f\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc","Column group":"\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0633\u062a\u0648\u0648\u0646","Column header":"\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc","Constrain proportions":"\u0695\u06d5\u0647\u06d5\u0646\u062f\u06cc \u0645\u06d5\u0631\u062c\u06d5\u06a9\u0627\u0646","Copy":"\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5","Copy column":"\u06a9\u06c6\u067e\u06cc\u06a9\u0631\u062f\u0646\u06cc \u0633\u062a\u0648\u0648\u0646","Copy row":"\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632","Could not find the specified string.":"\u0695\u06cc\u0632\u0628\u06d5\u0646\u062f\u06cc \u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648 \u0646\u0627\u062f\u06c6\u0632\u0631\u06ce\u062a\u06d5\u0648\u06d5.","Could not load emojis":"\u0646\u06d5\u062a\u0648\u0627\u0646\u0631\u0627 \u0626\u06cc\u0645\u06c6\u062c\u06cc\u06d5\u06a9\u0627\u0646 \u0628\u0627\u0646\u06af\u0628\u06a9\u0631\u06ce\u0646","Count":"\u0698\u0645\u0627\u0631\u06d5","Currency":"\u062f\u0631\u0627\u0648","Current window":"\u0647\u06d5\u0631\u0626\u06d5\u0645 \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc\u06d5","Custom color":"\u0695\u06d5\u0646\u06af\u06cc \u062f\u0627\u0646\u0631\u0627\u0648","Custom...":"\u062f\u0627\u0646\u0631\u0627\u0648...","Cut":"\u0628\u0695\u06cc\u0646","Cut column":"\u0628\u0695\u06cc\u0646 \u0626\u06d5\u0633\u062a\u0648\u0648\u0646","Cut row":"\u0628\u0695\u06cc\u0646\u06cc \u0695\u06cc\u0632","Dark Blue":"\u06a9\u06d5\u0648\u06d5\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Gray":"\u0628\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Green":"\u0633\u06d5\u0648\u0632\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Orange":"\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Purple":"\u0645\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Red":"\u0633\u0648\u0648\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Turquoise":"\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dark Yellow":"\u0632\u06d5\u0631\u062f\u06cc \u062a\u0627\u0631\u06cc\u06a9","Dashed":"\u0647\u06ce\u06b5\u06a9\u0631\u0627\u0648\u06cc \u0628\u0686\u0648\u0648\u06a9","Date/time":"\u0695\u06ce\u06a9\u06d5\u0648\u062a/\u06a9\u0627\u062a","Decrease indent":"\u06a9\u06d5\u0645\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc","Default":"\u0628\u0646\u06d5\u0695\u06d5\u062a\u06cc","Delete accordion":"","Delete column":"\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0633\u062a\u0648\u0648\u0646","Delete row":"\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632","Delete table":"\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062c\u06d5\u062f\u0648\u06d5\u0644","Dimensions":"\u062f\u0648\u0648\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646","Disc":"\u067e\u06d5\u067e\u06a9\u06d5","Div":"\u062f\u06cc\u06a4","Document":"\u0628\u06d5\u06b5\u06af\u06d5","Dotted":"\u062e\u0627\u06b5\u06a9\u0631\u0627\u0648","Double":"\u062f\u0648\u0648 \u0647\u06ce\u0646\u062f\u06d5","Drop an image here":"\u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9 \u0695\u0627\u06a9\u06ce\u0634\u06d5 \u0628\u06c6 \u0626\u06ce\u0631\u06d5","Dropped file type is not supported":"","Edit":"\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc","Embed":"\u062a\u06ce\u062e\u0633\u062a\u0646","Emojis":"\u0626\u06cc\u0645\u06c6\u062c\u06cc\u06d5\u06a9\u0627\u0646","Emojis...":"\u0626\u06cc\u0645\u06c6\u062c\u06cc\u06d5\u06a9\u0627\u0646...","Error":"\u0647\u06d5\u06b5\u06d5","Error: Form submit field collision.":"\u0647\u06d5\u06b5\u06d5: \u062a\u06ce\u06a9\u0686\u0648\u0648\u0646\u06cc \u0646\u0627\u0631\u062f\u0646\u06cc \u0641\u06c6\u0631\u0645.","Error: No form element found.":"\u0647\u06d5\u06b5\u06d5: \u0647\u06cc\u0686 \u0639\u0648\u0646\u0633\u0648\u0631\u06ce\u06a9\u06cc \u0641\u06c6\u0631\u0645 \u0646\u06d5\u062f\u06c6\u0632\u0631\u0627\u06cc\u06d5\u0648\u06d5.","Extended Latin":"\u0644\u0627\u062a\u06cc\u0646\u06cc \u067e\u06d5\u0631\u06d5\u067e\u06ce\u062f\u0631\u0627\u0648","Failed to initialize plugin: {0}":"\u0695\u06ce\u062e\u0633\u062a\u0646\u06cc \u0633\u06d5\u0631\u06d5\u062a\u0627\u06cc\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}","Failed to load plugin url: {0}":"\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}","Failed to load plugin: {0} from url {1}":"\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}","Failed to upload image: {0}":"\u0628\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}","File":"\u067e\u06d5\u0695\u06af\u06d5","Find":"\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5","Find (if searchreplace plugin activated)":"\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u06af\u06d5\u0695\u0627\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)","Find and Replace":"\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 \u0648 \u062c\u06ce\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5","Find and replace...":"\u062f\u06c6\u0632\u06cc\u0646 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646...","Find in selection":"\u0644\u06d5 \u0628\u06d5\u0634\u06cc \u0647\u06d5\u06b5\u0628\u0698\u06ce\u0631\u062f\u0631\u0627\u0648\u062f\u0627 \u0628\u062f\u06c6\u0632\u06d5\u0648\u06d5","Find whole words only":"\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062a\u06d5\u0646\u06cc\u0627 \u062a\u06d5\u0648\u0627\u0648\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646","Flags":"\u0626\u0627\u06b5\u0627\u06a9\u0627\u0646","Focus to contextual toolbar":"\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06cc \u062f\u06d5\u0642\u06cc","Focus to element path":"\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0695\u06ce\u0686\u06a9\u06d5\u06cc \u0639\u0648\u0646\u0633\u0648\u0631","Focus to menubar":"\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0645\u06ce\u0646\u0648\u0648","Focus to toolbar":"\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06d5\u06a9\u0627\u0646","Font":"\u0641\u06c6\u0646\u062a","Font size {0}":"","Font sizes":"\u0642\u06d5\u0628\u0627\u0631\u06d5\u06cc \u0641\u06c6\u0646\u062a","Font {0}":"","Fonts":"\u0641\u06c6\u0646\u062a\u06d5\u06a9\u0627\u0646","Food and Drink":"\u0686\u06ce\u0634\u062a \u0648 \u062e\u0648\u0627\u0631\u062f\u0646","Footer":"\u067e\u06ce\u067e\u06d5\u0695\u06d5","Format":"\u0634\u06ce\u0648\u0627\u0632","Format {0}":"","Formats":"\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646\u06d5\u06a9\u0627\u0646","Fullscreen":"\u0695\u0648\u0648\u067e\u0695\u06cc","G":"\u0633\u06d5\u0648\u0632","General":"\u06af\u0634\u062a\u06cc","Gray":"\u0628\u06c6\u0631","Green":"\u0633\u06d5\u0648\u0632","Green component":"\u06a9\u06c6\u0645\u067e\u06c6\u0646\u06ce\u0646\u062a\u06ce\u06a9\u06cc \u0633\u06d5\u0648\u0632","Groove":"\u0628\u06c6\u0634\u0627\u06cc\u06cc","Handy Shortcuts":"\u0646\u0627\u0648\u0628\u0695\u06d5 \u062f\u06d5\u0633\u062a\u06cc\u06cc\u06d5\u06a9\u0627\u0646","Header":"\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5","Header cell":"\u062e\u0627\u0646\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5","Heading 1":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 1","Heading 2":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 2","Heading 3":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 3","Heading 4":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 4","Heading 5":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 5","Heading 6":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 6","Headings":"\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646","Height":"\u0628\u06d5\u0631\u0632\u06cc","Help":"\u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc","Hex color code":"\u06a9\u06c6\u062f\u06cc \u0695\u06d5\u0646\u06af \u0644\u06d5 \u062c\u06c6\u0631\u06cc Hex","Hidden":"\u0634\u0627\u0631\u0627\u0648\u06d5","Horizontal align":"\u0695\u06ce\u06a9\u062e\u0633\u062a\u0646\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc","Horizontal line":"\u0647\u06ce\u06b5\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc","Horizontal space":"\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc","ID":"\u0626\u0627\u06cc \u062f\u06cc","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u0626\u0627\u06cc \u062f\u06cc \u062f\u06d5\u0628\u06ce \u0628\u06d5 \u0646\u0627\u0645\u06d5\u06cc\u06d5\u06a9 \u062f\u06d5\u0633\u062a \u067e\u06ce \u0628\u06a9\u0627\u062a\u060c \u062f\u0648\u0627\u06cc \u0626\u06d5\u0648\u06d5 \u062a\u06d5\u0646\u0647\u0627 \u067e\u06cc\u062a\u06d5\u06a9\u0627\u0646\u060c \u0698\u0645\u0627\u0631\u06d5\u06a9\u0627\u0646\u060c \u062f\u0627\u0634\u06d5\u06a9\u0627\u0646\u060c \u062e\u0627\u06b5\u06d5\u06a9\u0627\u0646\u060c \u06a9\u06c6\u0644\u06c6\u0646\u06d5\u06a9\u0627\u0646 \u06cc\u0627\u0646 \u0628\u0646\u06d5\u0631\u06d5\u06a9\u0627\u0646.","Image is decorative":"\u0648\u06ce\u0646\u06d5\u06a9\u06d5 \u0695\u0627\u0632\u0627\u0648\u06d5\u06cc\u06d5","Image list":"\u067e\u06ce\u0631\u0633\u062a\u06cc \u0648\u06ce\u0646\u06d5","Image title":"\u0633\u06d5\u0631\u062f\u06ce\u0631\u06cc \u0648\u06ce\u0646\u06d5","Image...":"\u0648\u06ce\u0646\u06d5...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc","Inline":"\u0644\u06d5\u0633\u06d5\u0631\u062f\u06ce\u0631","Insert":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648","Insert Template":"\u0628\u06d5\u06a9\u0627\u0631\u0647\u06ce\u0646\u0627\u0646\u06cc \u0695\u0648\u0648\u06a9\u0627\u0631","Insert accordion":"","Insert column after":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631","Insert column before":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631","Insert date/time":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0695\u06ce\u06a9\u06d5\u0648\u062a/\u06a9\u0627\u062a","Insert image":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0648\u06ce\u0646\u06d5","Insert link (if link plugin activated)":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0644\u06cc\u0646\u06a9 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)","Insert row after":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5\u062f\u0648\u0627\u0648\u06d5","Insert row before":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5\u067e\u06ce\u0634\u062a\u06d5\u0648\u06d5","Insert table":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u062c\u06d5\u062f\u0648\u06d5\u0644","Insert template...":"\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0642\u0627\u06b5\u0628...","Insert video":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u06a4\u06cc\u062f\u06cc\u06c6","Insert/Edit code sample":"\u062a\u06ce\u062e\u0633\u062a\u0646/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f","Insert/edit image":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0648\u06ce\u0646\u06d5","Insert/edit link":"\u062a\u06ce\u062e\u0633\u062a\u0646/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631","Insert/edit media":"\u062a\u06ce\u062e\u0633\u062a\u0646/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5","Insert/edit video":"\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a4\u06cc\u062f\u06cc\u06c6","Inset":"","Invalid hex color code: {0}":"\u06a9\u06c6\u062f\u06ce\u06a9\u06cc \u0647\u06d5\u06b5\u06d5\u06cc \u0695\u06d5\u0646\u06af \u0644\u06d5 \u062c\u06c6\u0631\u06cc Hex: {0}","Invalid input":"\u062f\u0627\u062e\u06b5\u06a9\u0631\u062f\u0646\u06ce\u06a9\u06cc \u0647\u06d5\u06b5\u06d5","Italic":"\u0644\u0627\u0631\u06a9\u0631\u062f\u0646","Justify":"\u0647\u0627\u0648\u0695\u06ce\u06a9\u06cc ","Keyboard Navigation":"\u0695\u06ce\u067e\u06ce\u0648\u0627\u0646 \u0628\u06d5 \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644","Language":"\u0632\u0645\u0627\u0646","Learn more...":"\u0632\u06cc\u0627\u062a\u0631 \u0628\u0632\u0627\u0646\u06d5...","Left":"\u0686\u06d5\u067e","Left to right":"\u0686\u06d5\u067e \u0628\u06c6 \u0695\u0627\u0633\u062a","Light Blue":"\u06a9\u06d5\u0648\u06d5\u06cc \u06a9\u0627\u06b5","Light Gray":"\u0628\u06c6\u0631\u06cc \u06a9\u0627\u06b5","Light Green":"\u0633\u06d5\u0648\u0632\u06cc \u06a9\u0627\u06b5","Light Purple":"\u0645\u06c6\u0631\u06cc \u06a9\u0627\u06b5","Light Red":"\u0633\u0648\u0648\u0631\u06cc \u06a9\u0627\u06b5","Light Yellow":"\u0632\u06d5\u0631\u062f\u06cc \u06a9\u0627\u06b5","Line height":"","Link list":"\u067e\u06ce\u0633\u0631\u062a\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631","Link...":"\u0628\u06d5\u0633\u062a\u06d5\u0631...","List Properties":"","List properties...":"","Loading emojis...":"\u0628\u0627\u0646\u06af\u06a9\u0631\u062f\u0646\u06cc \u0626\u06cc\u0645\u06c6\u062c\u06cc\u06d5\u06a9\u0627\u0646...","Loading...":"","Lower Alpha":"\u0626\u06d5\u0644\u0641\u0627\u06cc \u0628\u0686\u0648\u0648\u06a9","Lower Greek":"\u06cc\u06c6\u0646\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9","Lower Roman":"\u0695\u06c6\u0645\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9","Match case":"\u0628\u0698\u0627\u0631\u062f\u06d5\u06cc \u0647\u0627\u0648\u062a\u0627","Mathematical":"\u0628\u06cc\u0631\u06a9\u0627\u0631\u06cc\u0627\u0646\u06d5","Media poster (Image URL)":"\u067e\u06c6\u0633\u062a\u06d5\u0631\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5 (\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0648\u06ce\u0646\u06d5)","Media...":"\u06af\u06d5\u06cc\u0627\u0646\u06d5...","Medium Blue":"\u06a9\u06d5\u0648\u06d5\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f","Medium Gray":"\u0628\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f","Medium Purple":"\u0645\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f","Merge cells":"\u062a\u06ce\u06a9\u06d5\u06b5\u06a9\u0631\u062f\u0646\u06cc \u062e\u0627\u0646\u06d5\u06a9\u0627\u0646","Middle":"\u0646\u0627\u0648\u06d5\u0646\u062f","Midnight Blue":"\u06a9\u06d5\u0648\u06d5\u06cc \u0646\u06cc\u0648\u06d5\u0634\u06d5\u0648","More...":"\u0632\u06cc\u0627\u062a\u0631...","Name":"\u0646\u0627\u0648","Navy Blue":"\u0633\u0648\u0631\u0645\u06d5\u06cc\u06cc","New document":"\u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5\u06cc \u0646\u0648\u06ce","New window":"\u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0646\u0648\u06ce","Next":"\u062f\u0648\u0627\u062a\u0631","No":"\u0646\u06d5\u062e\u06ce\u0631","No alignment":"\u0628\u06ce \u062a\u06d5\u0631\u0627\u0632\u0628\u06d5\u0646\u062f\u06cc","No color":"\u0628\u06d5\u0628\u06ce \u0695\u06d5\u0646\u06af","Nonbreaking space":"\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0646\u06d5\u0628\u0695\u0627\u0648","None":"\u0647\u06cc\u0686","Numbered list":"\u0644\u06cc\u0633\u062a\u06cc \u0698\u0645\u0627\u0631\u06d5","OR":"\u06cc\u0627\u0646","Objects":"\u0634\u062a\u06d5\u06a9\u0627\u0646","Ok":"\u0628\u0627\u0634\u06d5","Open help dialog":"\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0648\u062a\u0648\u0648\u06ce\u0698\u06cc \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc","Open link":"\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0644\u06cc\u0646\u06a9","Open link in...":"\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631 \u0644\u06d5...","Open popup menu for split buttons":"","Orange":"\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc","Outset":"","Page break":"\u0628\u0695\u06cc\u0646\u06cc \u067e\u06d5\u0695\u06d5","Paragraph":"\u0628\u0695\u06af\u06d5","Paste":"\u0644\u06a9\u0627\u0646\u062f\u0646","Paste as text":"\u0644\u06a9\u0627\u0646\u062f\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642","Paste column after":"\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u06d5 \u0628\u0686\u06d5\u0633\u067e\u06ce\u0646\u06d5 \u062f\u0648\u0627\u06cc","Paste column before":"\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u06d5 \u0628\u0686\u06d5\u0633\u067e\u06ce\u0646\u06d5 \u0628\u06a9\u06d5 \u067e\u06ce\u0634","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0644\u06a9\u0627\u0646\u062f\u0646 \u0626\u06ce\u0633\u062a\u0627 \u0644\u06d5 \u0628\u0627\u0631\u06cc \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5\u06cc\u06d5. \u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u062f\u06d5\u0644\u06a9\u06ce\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5 \u0647\u06d5\u062a\u0627 \u0626\u06d5\u0645 \u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5 \u0646\u0627\u06a9\u0627\u0631\u0627 \u062f\u06d5\u06a9\u06d5\u06cc\u062a.","Paste or type a link":"\u0644\u06a9\u0627\u0646\u062f\u0646 \u06cc\u0627\u0646 \u0646\u0648\u0648\u0633\u06cc\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631","Paste row after":"\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u062f\u0648\u0627\u062a\u0631","Paste row before":"\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u067e\u06ce\u0634\u062a\u0631","Paste your embed code below:":"\u06a9\u06c6\u062f\u06cc \u062a\u06ce\u062e\u0633\u062a\u0646\u06d5\u06a9\u06d5\u062a \u0644\u06d5\u062e\u0648\u0627\u0631\u06d5\u0648\u06d5 \u0628\u0644\u06a9\u06ce\u0646\u06d5:","People":"\u062e\u06d5\u06b5\u06a9","Plugins":"\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646","Plugins installed ({0}):":"\u0626\u06d5\u0648 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u0627\u0646\u06d5\u06cc \u062f\u0627\u0645\u06d5\u0632\u0631\u0627\u0648\u0646 ({0}):","Powered by {0}":"\u0647\u06ce\u0632\u06af\u0631\u062a\u0648\u0648 \u0644\u06d5 {0}","Pre":"\u062f\u06d5\u0642\u06cc \u0641\u06c6\u0631\u0645\u0627\u062a\u06a9\u0631\u0627\u0648","Preferences":"\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5\u06a9\u0627\u0646","Preformatted":"\u067e\u06ce\u0634\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u0627\u0648","Premium plugins:":"\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5 \u067e\u0627\u0631\u06d5\u06cc\u06cc\u06cc\u06d5\u06a9\u0627\u0646:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u067e\u06ce\u0634\u062f\u06cc\u062a\u0646","Previous":"\u067e\u06ce\u0634\u0648\u0648","Print":"\u0686\u0627\u067e\u06a9\u0631\u062f\u0646","Print...":"\u0686\u0627\u067e\u06a9\u0631\u062f\u0646...","Purple":"\u0645\u06c6\u0631","Quotations":"\u0648\u062a\u06d5\u06cc \u06af\u06ce\u0695\u0627\u0648\u06d5","R":"\u0633\u0648\u0648\u0631","Range 0 to 255":"\u0644\u06d5 \u0646\u06ce\u0648\u0627\u0646 \u0660 \u0628\u06c6 \u0662\u0665\u0665","Red":"\u0633\u0648\u0648\u0631","Red component":"\u06a9\u06c6\u0645\u067e\u06c6\u0646\u06ce\u0646\u062a\u06ce\u06a9\u06cc \u0633\u0648\u0648\u0631","Redo":"\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5","Remove":"\u0644\u0627\u0628\u0631\u062f\u0646","Remove color":"\u0644\u0627\u0628\u0631\u062f\u0646\u06cc \u0695\u06d5\u0646\u06af","Remove link":"\u0644\u0627\u0628\u0631\u062f\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631","Replace":"\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646","Replace all":"\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648","Replace with":"\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5\u06af\u06d5\u06b5","Resize":"\u06af\u06c6\u0695\u06cc\u0646\u06cc \u0626\u06d5\u0646\u062f\u0627\u0632\u06d5","Restore last draft":"\u06af\u06d5\u0695\u0627\u0646\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062f\u0648\u0627\u06cc\u06cc\u0646 \u0695\u06d5\u0634\u0646\u0648\u0648\u0633","Reveal or hide additional toolbar items":"","Rich Text Area":"\u0634\u0648\u06ce\u0646\u06cc \u0646\u0648\u0648\u0633\u0646\u06cc \u0626\u0627\u06b5\u06c6\u0632","Rich Text Area. Press ALT-0 for help.":"\u062f\u06d5\u06a4\u06d5\u0631\u06cc \u062f\u06d5\u0642\u06cc \u062f\u06d5\u0648\u06b5\u06d5\u0645\u06d5\u0646\u062f. \u0628\u06c6 \u0695\u06ce\u0646\u0645\u0627\u06cc\u06cc ALT-0 \u0644\u06ce\u062f\u06d5.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0646\u0627\u0648\u0686\u06d5\u06cc \u062f\u06d5\u0642\u06cc \u062a\u06d5\u0648\u0627\u0648. ALT-F9 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u0644\u06cc\u0633\u062a\u06d5. ALT-F10 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u062a\u0648\u0648\u06b5\u0627\u0645\u0631\u0627\u0632. ALT-0 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc","Ridge":"","Right":"\u0695\u0627\u0633\u062a","Right to left":"\u0695\u0627\u0633\u062a \u0628\u06c6 \u0686\u06d5\u067e","Row":"\u0695\u06cc\u0632","Row clipboard actions":"\u06a9\u0631\u062f\u0627\u0631\u06d5\u06a9\u0627\u0646\u06cc \u06a9\u0644\u06cc\u067e \u0628\u06c6\u0631\u062f\u06cc \u0695\u06cc\u0632\u06cc","Row group":"\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0695\u06cc\u0632","Row header":"\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5\u06cc \u0695\u06cc\u0632","Row properties":"\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0695\u06cc\u0632","Row type":"\u062c\u06c6\u0631\u06cc \u0695\u06cc\u0632","Rows":"\u0695\u06cc\u0632\u06d5\u06a9\u0627\u0646","Save":"\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646","Save (if save plugin activated)":"\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)","Scope":"\u0628\u0648\u0627\u0631","Search":"\u06af\u06d5\u0695\u0627\u0646","Select all":"\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648","Select...":"\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646...","Selection":"\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646","Shortcut":"\u0646\u0627\u0648\u0628\u0695","Show blocks":"\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646","Show caption":"\u0646\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0633\u06d5\u0631\u062f\u06ce\u0695","Show invisible characters":"\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0646\u0648\u0648\u0633\u06d5 \u0634\u0627\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646","Size":"\u0626\u06d5\u0646\u062f\u0627\u0632\u06d5","Solid":"\u0695\u06d5\u0642","Source":"\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5","Source code":"\u06a9\u06c6\u062f\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5","Special Character":"\u06a9\u0627\u0631\u0627\u06a9\u062a\u06d5\u0631\u06cc \u062a\u0627\u06cc\u0628\u06d5\u062a","Special character...":"\u0646\u0648\u0648\u0633\u06d5 \u062a\u0627\u06cc\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646...","Split cell":"\u062c\u06cc\u0627\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0627\u0646\u06d5","Square":"\u0686\u0648\u0627\u0631\u06af\u06c6\u0634\u06d5","Start list at number":"","Strikethrough":"\u0647\u06ce\u06b5 \u0628\u06d5\u0646\u0627\u0648\u062f\u0627\u0646","Style":"\u0634\u06ce\u0648\u0627\u0632","Subscript":"\u0698\u06ce\u0631\u0646\u0648\u0648\u0633","Superscript":"\u0633\u06d5\u0631\u0646\u0648\u0648\u0633","Switch to or from fullscreen mode":"\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5 \u06cc\u0627\u0646 \u0628\u06c6 \u062d\u0627\u06b5\u06d5\u062a\u06cc \u067e\u0695\u062f\u06cc\u0645\u06d5\u0646","Symbols":"\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646","System Font":"\u0641\u06c6\u0646\u062a\u06cc \u0633\u06cc\u0633\u062a\u0645","Table":"\u062e\u0634\u062a\u06d5","Table caption":"\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646\u06cc \u062e\u0634\u062a\u06d5","Table properties":"\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062c\u06d5\u062f\u0648\u06d5\u0644","Table styles":"\u0633\u062a\u0627\u06cc\u06b5\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0634\u062a\u06d5","Template":"\u0642\u0627\u06b5\u0628","Templates":"\u062f\u0627\u0695\u06ce\u0698\u06d5\u06a9\u0627\u0646","Text":"\u062f\u06d5\u0642","Text color":"\u0695\u06d5\u0646\u06af\u06cc \u062f\u06d5\u0642","Text color {0}":"","Text to display":"\u062f\u06d5\u0642 \u0628\u06c6 \u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0644\u06d5 \u0626\u06cc\u0645\u06d5\u06cc\u0644 \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a \u067e\u06ce\u0634\u06af\u0631\u06cc mailto:\u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0644\u06d5 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u062f\u06d5\u0631\u06d5\u06a9\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a \u067e\u06ce\u0634\u06af\u0631\u06cc http://\u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0626\u06d5\u0648 URL\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u067e\u06ce \u062f\u06d5\u0686\u06ce\u062a \u0644\u06cc\u0646\u06a9\u06ce\u06a9\u06cc \u062f\u06d5\u0631\u06d5\u06a9\u06cc \u0628\u06ce\u062a. \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a \u067e\u06ce\u0634\u06af\u0631\u06cc \u067e\u06ce\u0648\u06cc\u0633\u062a https:// \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a?","Title":"\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646","To open the popup, press Shift+Enter":"\u0628\u06c6 \u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u060c Shift+Enter \u0644\u06ce\u062f\u06d5","Toggle accordion":"","Tools":"\u0626\u0627\u0645\u0631\u0627\u0632\u06d5\u06a9\u0627\u0646","Top":"\u0633\u06d5\u0631\u06d5\u0648\u06d5","Travel and Places":"\u0633\u06d5\u0641\u06d5\u0631 \u0648 \u0634\u0648\u06ce\u0646\u06d5\u06a9\u0627\u0646","Turquoise":"\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc","Underline":"\u0647\u06ce\u06b5 \u0628\u06d5\u0698\u06ce\u0631\u062f\u0627\u0646","Undo":"\u06af\u06d5\u0695\u0627\u0646\u06d5\u0648\u06d5","Upload":"\u0628\u0627\u0631\u06a9\u0631\u062f\u0646","Uploading image":"\u0628\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5","Upper Alpha":"\u0626\u06d5\u0644\u0641\u0627\u06cc \u06af\u06d5\u0648\u0631\u06d5","Upper Roman":"\u0695\u06c6\u0645\u0627\u0646\u06cc \u06af\u06d5\u0648\u0631\u06d5","Url":"\u0628\u06d5\u0633\u062a\u06d5\u0631","User Defined":"\u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648\u06cc \u0628\u06d5\u06a9\u0627\u0631\u0647\u06ce\u0646\u06d5\u0631","Valid":"\u062f\u0631\u0648\u0633\u062a","Version":"\u0648\u06d5\u0634\u0627\u0646","Vertical align":"\u0695\u06ce\u06a9\u062e\u0633\u062a\u0646\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc","Vertical space":"\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc","View":"\u0628\u06cc\u0646\u06cc\u0646","Visual aids":"\u0647\u0627\u0648\u06a9\u0627\u0631\u06cc \u0628\u06cc\u0646\u06d5\u06cc\u06cc","Warn":"\u0647\u06c6\u0634\u06cc\u0627\u0631\u06cc","White":"\u0633\u067e\u06cc","Width":"\u062f\u0631\u06ce\u0698\u06cc","Word count":"\u0698\u0645\u0627\u0631\u06d5\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646","Words":"\u0648\u0634\u06d5\u06a9\u0627\u0646","Words: {0}":"\u0648\u0634\u06d5\u06a9\u0627\u0646: {0}","Yellow":"\u0632\u06d5\u0631\u062f","Yes":"\u0626\u06d5\u0631\u06ce","You are using {0}":"\u062a\u06c6 {0} \u0628\u06d5\u06a9\u0627\u0631 \u062f\u06ce\u0646\u06cc","You have unsaved changes are you sure you want to navigate away?":"\u062a\u06c6 \u06af\u06c6\u0695\u0627\u0646\u06a9\u0627\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u062a \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a \u0646\u06d5\u06a9\u0631\u062f\u0648\u0648\u06d5\u060c \u0626\u0627\u06cc\u0627 \u062f\u06b5\u0646\u06cc\u0627\u06cc\u062a \u0644\u06d5 \u062f\u06d5\u0631\u0686\u0648\u0648\u0646\u062a\u061f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0648\u06ce\u0628\u06af\u06d5\u0695\u06d5\u06a9\u06d5\u062a \u067e\u0627\u06b5\u067e\u0634\u062a\u06cc \u062f\u06d5\u0633\u062a\u06a9\u06d5\u0648\u062a\u0646\u06cc \u0695\u0627\u0633\u062a\u06d5\u0648\u062e\u06c6\u06cc \u06a9\u0644\u06cc\u067e\u0628\u06c6\u0631\u062f \u0646\u0627\u06a9\u0627\u062a. \u062a\u06a9\u0627\u06cc\u06d5 \u0644\u06d5\u062c\u06cc\u0627\u062a\u06cc \u06a9\u0648\u0631\u062a\u0628\u0695\u06d5\u06a9\u0627\u0646\u06cc Ctrl+X/C/V \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644 \u0628\u06d5\u06a9\u0627\u0631\u0628\u06ce\u0646\u06d5.","_dir":"rtl","alignment":"\u0644\u0627\u06af\u0631\u062a\u0646","austral sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0626\u0627\u0648\u0633\u062a\u0631\u0627\u0644","cedi sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u06ce\u062f\u06cc","colon sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062c\u0648\u0648\u062a\u062e\u0627\u06b5","cruzeiro sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u0631\u0648\u0648\u0632\u06cc\u0631\u06c6","currency sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648","dollar sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0644\u0627\u0631","dong sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0646\u06af","drachma sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u062e\u0645\u0627","euro-currency sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648\u06cc \u06cc\u06c6\u0631\u06c6","example":"\u0646\u0645\u0648\u0648\u0646\u06d5","formatting":"\u0634\u06ce\u0648\u06d5\u067e\u06ce\u062f\u0627\u0646","french franc sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0641\u0631\u0627\u0646\u06a9\u06cc \u0641\u06d5\u0695\u06d5\u0646\u0633\u0627","german penny symbol":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0646\u06cc\u06cc \u0626\u06d5\u06b5\u0645\u0627\u0646\u06cc","guarani sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0648\u0627\u0631\u0627\u0646\u06cc","history":"\u0645\u06ce\u0698\u0648\u0648","hryvnia sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0631\u06cc\u06a4\u0646\u06cc\u0627","indentation":"\u0646\u0627\u0648\u0648\u06d5\u0686\u0648\u0648\u0646","indian rupee sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5\u06cc \u0647\u0646\u062f\u06cc","kip sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u06cc\u067e","lira sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5","livre tournois sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u06a4\u0631\u06ce \u062a\u0648\u0631\u0646\u06c6\u06cc\u0633","manat sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06d5\u0646\u0627\u062a","mill sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06cc\u0644","naira sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0627\u06cc\u0631\u0627","new sheqel sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0648\u06ce\u06cc \u0634\u06ce\u06a9\u06ce\u0644","nordic mark sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u0627\u0631\u06a9\u06cc \u0646\u06c6\u0631\u0648\u06cc\u0698","peseta sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06ce\u062a\u0627","peso sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06c6","ruble sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u0628\u06b5","rupee sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5","spesmilo sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u067e\u06ce\u0633\u0645\u0627\u06cc\u06b5\u06c6","styles":"\u0634\u06ce\u0648\u06d5\u06a9\u0627\u0646","tenge sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u06ce\u0646\u062c","tugrik sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u0648\u06af\u0631\u0648\u06af","turkish lira sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5\u06cc \u062a\u0648\u0631\u06a9","won sign":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u0648\u06c6\u0646","yen character":"\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u06ce\u0646","yen/yuan character variant one":"\u0646\u0648\u0648\u0633\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06cc \u06cc\u06ce\u0646/\u06cc\u0648\u0627\u0646","yuan character":"\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u0648\u0627\u0646","yuan character, in hong kong and taiwan":"\u0646\u06cc\u0634\u0627\u0646\u06cc \u06cc\u0648\u0627\u0646\u060c \u0644\u06d5 \u0647\u06c6\u0646\u06af \u06a9\u06c6\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646","{0} characters":"{0} \u0646\u0648\u0648\u0633\u06d5","{0} columns, {1} rows":"","{0} words":"{0} \u0648\u0634\u06d5"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ky.js b/staticfiles/tinymce/langs/ky.js new file mode 100644 index 0000000..8dc9ea5 --- /dev/null +++ b/staticfiles/tinymce/langs/ky.js @@ -0,0 +1 @@ +tinymce.addI18n("ky",{"#":"#","Accessibility":"\u0416\u0435\u0442\u043a\u0438\u043b\u0438\u043a\u0442\u04af\u04af\u043b\u04af\u043a","Accordion":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d","Accordion body...":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d \u0434\u0435\u043d\u0435\u0441\u0438...","Accordion summary...":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d \u0431\u043e\u044e\u043d\u0447\u0430 \u043a\u044b\u0441\u043a\u0430\u0447\u0430...","Action":"\u0410\u0440\u0430\u043a\u0435\u0442","Activity":"Activity","Address":"\u0414\u0430\u0440\u0435\u043a","Advanced":"\u04e8\u0440\u043a\u04af\u043d\u0434\u04e9\u0442\u04af\u043b\u0433\u04e9\u043d","Align":"\u0422\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9","Align center":"\u041e\u0440\u0442\u043e\u0433\u043e","Align left":"\u0421\u043e\u043b \u0436\u0430\u043a","Align right":"\u041e\u04a3 \u0436\u0430\u043a\u043a\u0430","Alignment":"\u0422\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9","Alignment {0}":"\u0422\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9 {0}","All":"\u0411\u0430\u0430\u0440\u044b","Alternative description":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0434\u0438\u043a \u0441\u04af\u0440\u04e9\u0442\u0442\u04e9\u043c\u04e9","Alternative source":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0434\u0438\u043a \u0431\u0443\u043b\u0430\u043a","Alternative source URL":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u0431\u0443\u043b\u0430\u0433\u044b URL","Anchor":"\u042f\u043a\u043e\u0440\u044c","Anchor...":"\u042f\u043a\u043e\u0440\u044c...","Anchors":"\u042f\u043a\u043e\u0440\u044f","Animals and Nature":"\u0416\u0430\u043d\u044b\u0431\u0430\u0440\u043b\u0430\u0440 \u0436\u0430\u043d\u0430 \u0436\u0430\u0440\u0430\u0442\u044b\u043b\u044b\u0448","Arrows":"\u0416\u0435\u0431\u0435\u043b\u0435\u0440","B":"B","Background color":"\u0424\u043e\u043d\u0434\u0443\u043d \u0442\u04af\u0441\u04af","Background color {0}":"\u0424\u043e\u043d\u0434\u0443\u043d \u0442\u04af\u0441\u04af {0}","Black":"\u041a\u0430\u0440\u0430","Block":"\u0411\u043b\u043e\u043a","Block {0}":"\u0411\u043b\u043e\u043a{0}","Blockquote":"\u0411\u043b\u043e\u043a \u0430\u0440\u0430\u0441\u044b\u043d\u0434\u0430\u0433\u044b \u0446\u0438\u0442\u0430\u0442\u0430","Blocks":"\u0411\u043b\u043e\u043a\u0442\u043e\u0440","Blue":"\u041a\u04e9\u043a","Blue component":"\u041a\u04e9\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Body":"\u0414\u0435\u043d\u0435\u0441\u0438","Bold":"\u0416\u043e\u043e\u043d","Border":"\u0427\u0435\u043a \u0430\u0440\u0430","Border color":"\u0427\u0435\u043a\u0442\u0438\u043d \u0442\u04af\u0441\u04af","Border style":"\u0427\u0435\u043a \u0430\u0440\u0430 \u0441\u0442\u0438\u043b\u0438","Border width":"\u0427\u0435\u043a \u0430\u0440\u0430\u043d\u044b\u043d \u0442\u0443\u0443\u0440\u0430\u0441\u044b","Bottom":"\u0422\u04e9\u043c\u04e9\u043d\u043a\u04af","Browse files":"\u0424\u0430\u0439\u043b\u0434\u0430\u0440\u0434\u044b \u043a\u0430\u0440\u0430\u043f \u0447\u044b\u0433\u0443\u0443","Browse for an image":"\u0421\u04af\u0440\u04e9\u0442\u0442\u04af \u043a\u0430\u0440\u0430\u043f \u043a\u04e9\u0440\u04af\u04a3\u04af\u0437","Browse links":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440\u0434\u0438 \u043a\u0430\u0440\u0430\u043f \u0447\u044b\u0433\u0443\u0443","Bullet list":"\u0411\u0435\u043b\u0433\u0438 \u043a\u043e\u044e\u043b\u0433\u0430\u043d \u0442\u0438\u0437\u043c\u0435","Cancel":"\u0411\u0430\u0448 \u0442\u0430\u0440\u0442\u0443\u0443","Caption":"\u041a\u043e\u0448\u0442\u043e\u043c\u043e \u0436\u0430\u0437\u0443\u0443","Cell":"\u041a\u043b\u0435\u0442\u043a\u0430","Cell padding":"\u041a\u043b\u0435\u0442\u043a\u0430 \u043c-\u043d \u0442\u0435\u043a\u0441\u0442 \u0430\u0440\u0430\u043b\u044b\u043a\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0448\u043a\u0430\u0440\u0443\u0443","Cell properties":"\u041a\u043b\u0435\u0442\u043a\u0430 \u04e9\u0437\u0433\u04e9\u0447\u04e9\u043b\u04af\u043a\u0442\u04e9\u0440\u04af","Cell spacing":"\u041a\u043b\u0435\u0442\u043a\u0430 \u0430\u0440\u0430\u043b\u044b\u043a\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0448\u043a\u0430\u0440\u0443\u0443","Cell styles":"\u041a\u043b\u0435\u0442\u043a\u0430 \u0441\u0442\u0438\u043b\u0434\u0435\u0440\u0438","Cell type":"\u041a\u043b\u0435\u0442\u043a\u0430 \u0442\u04af\u0440\u04af","Center":"\u0411\u043e\u0440\u0431\u043e\u0440","Characters":"\u0411\u0435\u043b\u0433\u0438\u043b\u0435\u0440/\u0421\u0438\u043c\u0432\u043e\u043b\u0434\u043e\u0440","Characters (no spaces)":"\u0411\u0435\u043b\u0433\u0438\u043b\u0435\u0440 (\u0431\u043e\u0448\u0442\u0443\u043a \u0436\u043e\u043a)","Circle":"\u0422\u0435\u0433\u0435\u0440\u0435\u043a","Class":"\u041a\u043b\u0430\u0441\u0441","Clear formatting":"\u0424\u043e\u0440\u043c\u0430\u0442\u0442\u044b \u04e9\u0447\u04af\u0440\u04af\u04af","Close":"\u0416\u0430\u0431\u0443\u0443","Code":"\u041a\u043e\u0434","Code sample...":"\u041a\u043e\u0434 \u04af\u043b\u0433\u04af\u0441\u04af...","Code view":"\u041a\u043e\u0434 \u043a\u04e9\u0440\u04af\u043d\u04af\u0448\u04af","Color Picker":"\u0422\u04af\u0441 \u0442\u0430\u043d\u0434\u0430\u0433\u044b\u0447","Color swatch":"\u0422\u04af\u0441 \u04af\u043b\u0433\u04af\u0441\u04af","Cols":"\u041c\u0430\u043c\u044b\u0447\u0430\u043b\u0430\u0440","Column":"\u041c\u0430\u043c\u044b\u0447\u0430","Column clipboard actions":"\u041c\u0430\u043c\u044b\u0447\u0430 \u0430\u043b\u043c\u0430\u0448\u0443\u0443 \u0431\u0443\u0444\u0435\u0440\u0438\u043d\u0438\u043d \u0430\u0440\u0430\u043a\u0435\u0442\u0442\u0435\u0440\u0438","Column group":"\u041c\u0430\u043c\u044b\u0447\u0430 \u0442\u043e\u0431\u0443","Column header":"\u041c\u0430\u043c\u044b\u0447\u0430\u043d\u044b\u043d \u0430\u0442\u0430\u043b\u044b\u0448\u044b","Constrain proportions":"\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f\u043b\u0430\u0440\u0434\u044b \u0447\u0435\u043a\u0442\u04e9\u04e9","Copy":"\u041a\u04e9\u0447\u04af\u0440\u04af\u04af","Copy column":"\u041c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u043a\u04e9\u0447\u04af\u0440\u04af\u04af","Copy row":"\u0421\u0430\u043f\u0442\u044b \u043a\u04e9\u0447\u04af\u0440\u04af\u04af","Could not find the specified string.":"\u041a\u04e9\u0440\u0441\u04e9\u0442\u04af\u043b\u0433\u04e9\u043d \u0441\u0430\u043f \u0442\u0430\u0431\u044b\u043b\u0433\u0430\u043d \u0436\u043e\u043a.","Could not load emojis":"\u0411\u044b\u0439\u0442\u044b\u043a\u0447\u0430\u043b\u0430\u0440 \u0436\u04af\u043a\u0442\u04e9\u043b\u0433\u04e9\u043d \u0436\u043e\u043a","Count":"\u0421\u0430\u043d\u043e\u043e","Currency":"\u0412\u0430\u043b\u044e\u0442\u0430","Current window":"\u0423\u0447\u0443\u0440\u0434\u0430\u0433\u044b \u0442\u0435\u0440\u0435\u0437\u0435","Custom color":"\u042b\u04a3\u0433\u0430\u0439\u043b\u0430\u0448\u0442\u044b\u0440\u044b\u043b\u0433\u0430\u043d \u0442\u04af\u0441","Custom...":"\u042b\u04a3\u0433\u0430\u0439\u043b\u0430\u0448\u0442\u044b\u0440\u044b\u043b\u0433\u0430\u043d...","Cut":"\u041a\u0435\u0441\u0438\u043f \u0430\u043b\u0443\u0443","Cut column":"\u041c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u043a\u0435\u0441\u04af\u04af","Cut row":"\u0421\u0430\u043f\u0442\u044b \u043a\u0435\u0441\u04af\u04af","Dark Blue":"\u041a\u043e\u0447\u043a\u0443\u043b \u043a\u04e9\u043a","Dark Gray":"\u041a\u043e\u0447\u043a\u0443\u043b \u0431\u043e\u0437","Dark Green":"\u041a\u043e\u0447\u043a\u0443\u043b \u0436\u0430\u0448\u044b\u043b","Dark Orange":"\u041a\u043e\u0447\u043a\u0443\u043b \u0430\u0447\u044b\u043a \u043a\u04af\u0440\u04e9\u04a3","Dark Purple":"\u041a\u043e\u0447\u043a\u0443\u043b \u043a\u044b\u0437\u0433\u044b\u043b\u0442 \u043a\u04e9\u043a","Dark Red":"\u041a\u043e\u0447\u043a\u0443\u043b \u043a\u044b\u0437\u044b\u043b","Dark Turquoise":"\u0422\u0435\u043c\u043d\u043e-\u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","Dark Yellow":"\u041a\u043e\u0447\u043a\u0443\u043b \u0441\u0430\u0440\u044b","Dashed":"\u04ae\u0437\u0443\u043a \u0441\u044b\u0437\u044b\u043a\u0442\u0430\u043b\u0433\u0430\u043d","Date/time":"\u0414\u0430\u0442\u0430/\u0443\u0431\u0430\u043a\u044b\u0442","Decrease indent":"\u0410\u0431\u0437\u0430\u0446\u0442\u044b \u0430\u0437\u0430\u0439\u0442\u0443\u0443","Default":"\u0414\u0435\u043c\u0435\u0439\u043a\u0438","Delete accordion":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d\u0434\u0443 \u04e9\u0447\u04af\u0440\u04af\u04af","Delete column":"\u041c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u0436\u043e\u043a \u043a\u044b\u043b\u0443\u0443","Delete row":"\u0421\u0430\u043f\u0442\u044b \u0436\u043e\u043a \u043a\u044b\u043b\u0443\u0443","Delete table":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430\u043d\u044b \u0436\u043e\u043a \u043a\u044b\u043b\u0443\u0443","Dimensions":"\u04e8\u043b\u0447\u04e9\u043c\u0434\u04e9\u0440","Disc":"\u0414\u0438\u0441\u043a","Div":"Div","Document":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442","Dotted":"\u0427\u0435\u043a\u0438\u0442\u0442\u04af\u04af","Double":"\u041a\u043e\u0448 \u0441\u044b\u0437\u044b\u043a\u0442\u0430\u043b\u0433\u0430\u043d","Drop an image here":"\u0421\u04af\u0440\u04e9\u0442\u0442\u04af \u0431\u0443\u043b \u0436\u0435\u0440\u0433\u0435 \u0442\u0430\u0448\u0442\u0430\u04a3\u044b\u0437","Dropped file type is not supported":"\u0422\u04af\u0448\u04af\u0440\u04af\u043b\u0433\u04e9\u043d \u0444\u0430\u0439\u043b \u0442\u04af\u0440\u04af \u043a\u043e\u043b\u0434\u043e\u043e\u0433\u043e \u0430\u043b\u044b\u043d\u0431\u0430\u0439\u0442","Edit":"\u0422\u04af\u0437\u04e9\u0442\u04af\u04af","Embed":"\u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c","Emojis":"\u0411\u044b\u0439\u0442\u044b\u043a\u0447\u0430\u043b\u0430\u0440","Emojis...":"\u0411\u044b\u0439\u0442\u044b\u043a\u0447\u0430\u043b\u0430\u0440...","Error":"\u041a\u0430\u0442\u0430","Error: Form submit field collision.":"\u041a\u0430\u0442\u0430: \u0424\u043e\u0440\u043c\u0430 \u0442\u0430\u043f\u0448\u044b\u0440\u0443\u0443 \u0442\u0430\u043b\u0430\u0430\u0441\u044b\u043d\u044b\u043d \u043a\u0430\u0433\u044b\u043b\u044b\u0448\u0443\u0443\u0441\u0443.","Error: No form element found.":"\u041a\u0430\u0442\u0430: \u0444\u043e\u0440\u043c\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0442\u0430\u0431\u044b\u043b\u0433\u0430\u043d \u0436\u043e\u043a.","Extended Latin":"\u041a\u0435\u04a3\u0435\u0439\u0442\u0438\u043b\u0433\u0435\u043d \u041b\u0430\u0442\u044b\u043d","Failed to initialize plugin: {0}":"\u041f\u043b\u0430\u0433\u0438\u043d \u0431\u0430\u0448\u0442\u0430\u043b\u0434\u0430\u0439 \u043a\u0430\u043b\u0434\u044b: {0}","Failed to load plugin url: {0}":"\u041f\u043b\u0430\u0433\u0438\u043d\u0434\u0438\u043d Url \u0434\u0430\u0440\u0435\u0433\u0438 \u0436\u04af\u043a\u0442\u04e9\u043b\u0431\u04e9\u0439 \u043a\u0430\u043b\u0434\u044b: {0}","Failed to load plugin: {0} from url {1}":"\u041f\u043b\u0430\u0433\u0438\u043d \u0436\u04af\u043a\u0442\u04e9\u043b\u0431\u04e9\u0439 \u043a\u0430\u043b\u0434\u044b: {1} url\u0434\u0435\u043d {0}","Failed to upload image: {0}":"\u0421\u04af\u0440\u04e9\u0442 \u0436\u04af\u043a\u0442\u04e9\u043b\u0431\u04e9\u0439 \u043a\u0430\u043b\u0434\u044b: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0418\u0437\u0434\u0435\u043f \u0442\u0430\u0431\u0443\u0443","Find (if searchreplace plugin activated)":"\u0422\u0430\u0431\u0443\u0443 (\u044d\u0433\u0435\u0440\u0434\u0435 \u0438\u0437\u0434\u04e9\u04e9 \u0436\u0435\u0440\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u0438\u0448\u0442\u0435\u0442\u0438\u043b\u0441\u0435)","Find and Replace":"\u0418\u0437\u0434\u0435\u043f \u0442\u0430\u043f \u0436\u0430\u043d\u0430 \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443\u0443","Find and replace...":"\u0418\u0437\u0434\u0435\u043f \u0442\u0430\u043f \u0436\u0430\u043d\u0430 \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443\u0443...","Find in selection":"\u0422\u0430\u043d\u0434\u043e\u043e\u043d\u0443\u043d \u0438\u0447\u0438\u043d\u0435\u043d \u0442\u0430\u0431\u0443\u0443","Find whole words only":"\u0422\u043e\u043b\u0443\u043a \u0441\u04e9\u0437\u0434\u04e9\u0440\u0434\u04af \u0433\u0430\u043d\u0430 \u0442\u0430\u0431\u044b\u04a3\u044b\u0437","Flags":"\u0416\u0435\u043b\u0435\u043a\u0442\u0435\u0440","Focus to contextual toolbar":"\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0442\u0438\u043a \u043a\u0443\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0438\u043b\u043a\u0435\u0441\u0438\u043d\u0435 \u043a\u04e9\u04a3\u04af\u043b \u0431\u0443\u0440\u0443\u0443","Focus to element path":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0436\u043e\u043b\u0443\u043d\u0430 \u043a\u04e9\u04a3\u04af\u043b \u0431\u0443\u0440\u0443\u0443","Focus to menubar":"\u041c\u0435\u043d\u044e \u0442\u0438\u043b\u043a\u0435\u0441\u0438\u043d\u0435 \u043a\u04e9\u04a3\u04af\u043b \u0431\u0443\u0440\u0443\u0443","Focus to toolbar":"\u041a\u0443\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0438\u043b\u043a\u0435\u0441\u0438\u043d\u0435 \u043a\u04e9\u04a3\u04af\u043b \u0431\u0443\u0440\u0443\u0443","Font":"\u0428\u0440\u0438\u0444\u0442","Font size {0}":"\u0410\u0440\u0438\u043f \u04e9\u043b\u0447\u04e9\u043c\u04af {0}","Font sizes":"\u0410\u0440\u0438\u043f \u04e9\u043b\u0447\u04e9\u043c\u0434\u04e9\u0440\u04af","Font {0}":"\u0410\u0440\u0438\u043f {0}","Fonts":"\u0410\u0440\u0438\u043f\u0442\u0435\u0440","Food and Drink":"\u0422\u0430\u043c\u0430\u043a-\u0430\u0448 \u0436\u0430\u043d\u0430 \u0441\u0443\u0443\u0441\u0443\u043d\u0434\u0443\u043a","Footer":"\u0410\u0441\u0442\u044b","Format":"\u0424\u043e\u0440\u043c\u0430\u0442","Format {0}":"\u0424\u043e\u0440\u043c\u0430\u0442 {0}","Formats":"\u0424\u043e\u0440\u043c\u0430\u0442\u0442\u0430\u0440","Fullscreen":"\u0422\u043e\u043b\u0443\u043a \u044d\u043a\u0440\u0430\u043d","G":"G","General":"\u0416\u0430\u043b\u043f\u044b","Gray":"\u0411\u043e\u0437","Green":"\u0416\u0430\u0448\u044b\u043b","Green component":"\u0416\u0430\u0448\u044b\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Groove":"\u041a\u0430\u043d\u0430\u0432\u043a\u0430","Handy Shortcuts":"\u042b\u04a3\u0433\u0430\u0439\u043b\u0443\u0443 \u043a\u044b\u0441\u043a\u0430 \u0436\u043e\u043b\u0434\u043e\u0440","Header":"\u0411\u0430\u0448\u044b","Header cell":"\u0411\u0430\u0448\u043a\u044b \u043a\u043b\u0435\u0442\u043a\u0430","Heading 1":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 1","Heading 2":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 2","Heading 3":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 3","Heading 4":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 4","Heading 5":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 5","Heading 6":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448 6","Headings":"\u0411\u0430\u0448\u043a\u044b \u0430\u0442\u0430\u043b\u044b\u0448\u0442\u0430\u0440","Height":"\u0411\u0438\u0439\u0438\u043a\u0442\u0438\u0433\u0438","Help":"\u0416\u0430\u0440\u0434\u0430\u043c","Hex color code":"Hex \u0442\u04af\u0441 \u043a\u043e\u0434\u0443","Hidden":"\u0416\u0430\u0448\u044b\u0440\u044b\u043b\u0433\u0430\u043d","Horizontal align":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0434\u0443\u0443 \u0442\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9","Horizontal line":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0434\u044b\u043a \u0441\u044b\u0437\u044b\u043a","Horizontal space":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0434\u044b\u043a \u043c\u0435\u0439\u043a\u0438\u043d\u0434\u0438\u043a","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID \u0442\u0430\u043c\u0433\u0430 \u043c\u0435\u043d\u0435\u043d \u0431\u0430\u0448\u0442\u0430\u043b\u044b\u0448\u044b \u043a\u0435\u0440\u0435\u043a, \u0430\u043d\u0434\u0430\u043d \u043a\u0438\u0439\u0438\u043d \u0442\u0430\u043c\u0433\u0430\u043b\u0430\u0440, \u0441\u0430\u043d\u0434\u0430\u0440, \u0441\u044b\u0437\u044b\u043a\u0442\u0430\u0440, \u0447\u0435\u043a\u0438\u0442\u0442\u0435\u0440, \u043a\u043e\u0448 \u0447\u0435\u043a\u0438\u0442\u0442\u0435\u0440 \u0436\u0435 \u0430\u0441\u0442\u044b\u043d\u043a\u044b \u0441\u044b\u0437\u044b\u043a\u0442\u0430\u0440 \u0433\u0430\u043d\u0430 \u043a\u043e\u044e\u043b\u0443\u0448\u0443 \u043a\u0435\u0440\u0435\u043a.","Image is decorative":"\u0421\u04af\u0440\u04e9\u0442\u04af \u043a\u043e\u043e\u0437\u0434\u043e\u0441\u043e \u0431\u043e\u043b\u043e\u0442","Image list":"\u0421\u04af\u0440\u04e9\u0442 \u0442\u0438\u0437\u043c\u0435\u0441\u0438","Image title":"\u0421\u04af\u0440\u04e9\u0442\u0442\u04af\u043d \u0430\u0442\u0430\u043b\u044b\u0448\u044b","Image...":"\u0421\u04af\u0440\u04e9\u0442...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP \u043a\u0430\u0442\u0430\u0441\u044b: Image Proxy \u0442\u0430\u0431\u044b\u043b\u0433\u0430\u043d \u0436\u043e\u043a","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP \u043a\u0430\u0442\u0430\u0441\u044b: \u0422\u0443\u0443\u0440\u0430 \u044d\u043c\u0435\u0441 \u0441\u04af\u0440\u04e9\u0442 Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP \u043a\u0430\u0442\u0430\u0441\u044b: \u0421\u0443\u0440\u0430\u043c \u0447\u0435\u0442\u043a\u0435 \u043a\u0430\u0433\u044b\u043b\u0434\u044b","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP \u043a\u0430\u0442\u0430\u0441\u044b: \u0411\u0435\u043b\u0433\u0438\u0441\u0438\u0437 ImageProxy \u043a\u0430\u0442\u0430\u0441\u044b","Increase indent":"\u0410\u0431\u0437\u0430\u0446\u0442\u044b \u043a\u04e9\u0431\u04e9\u0439\u0442\u04af\u04af","Inline":"\u0421\u044b\u0437\u044b\u043a \u0438\u0447\u0438\u043d\u0434\u0435","Insert":"\u041a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert Template":"\u04ae\u043b\u0433\u04af \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert accordion":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d \u043a\u0438\u0440\u0438\u0437\u0438\u043d\u0438\u0437","Insert column after":"\u0411\u043e\u0448 \u043c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u043e\u04a3 \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u0443","Insert column before":"\u0411\u043e\u0448 \u043c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u0441\u043e\u043b \u0436\u0430\u043a\u043a\u0430 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert date/time":"\u0414\u0430\u0442\u0430/\u0443\u0431\u0430\u043a\u044b\u0442 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert image":"\u0421\u04af\u0440\u04e9\u0442 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert link (if link plugin activated)":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435 \u043a\u044b\u0441\u0442\u0430\u0440\u0443\u0443 (\u044d\u0433\u0435\u0440\u0434\u0435 \u0448\u0438\u043b\u0442\u0435\u043c\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u0438\u0448\u0442\u0435\u0442\u0438\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u043e)","Insert row after":"\u041a\u0438\u0439\u0438\u043d\u043a\u0438 \u0441\u0430\u043f\u0442\u044b \u043a\u0438\u0440\u0433\u0438\u0437\u0438\u04a3\u0438\u0437","Insert row before":"\u041c\u0443\u0440\u0443\u043d\u043a\u0443 \u0441\u0430\u043f\u0442\u044b \u043a\u0438\u0440\u0433\u0438\u0437\u0438\u04a3\u0438\u0437","Insert table":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert template...":"\u04ae\u043b\u0433\u04af \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af...","Insert video":"\u0412\u0438\u0434\u0435\u043e\u043d\u0443 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Insert/Edit code sample":"\u041a\u043e\u0434 \u04af\u043b\u0433\u04af\u0441\u04af\u043d \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af/\u04e9\u0437\u0433\u04e9\u0440\u0442\u04af\u04af","Insert/edit image":"\u0421\u04af\u0440\u04e9\u0442\u0442\u04af \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af/\u0442\u04af\u0437\u04e9\u0442\u04af\u04af","Insert/edit link":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043d\u0438 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af/\u0442\u04af\u0437\u04e9\u0442\u04af\u04af","Insert/edit media":"\u041c\u0435\u0434\u0438\u044f\u043d\u044b \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af/\u0442\u04af\u0437\u04e9\u0442\u04af\u04af","Insert/edit video":"\u0412\u0438\u0434\u0435\u043e\u043d\u0443 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af/\u0442\u04af\u0437\u04e9\u0442\u04af\u04af","Inset":"","Invalid hex color code: {0}":"\u0416\u0430\u0440\u0430\u043a\u0441\u044b\u0437 hex \u0442\u04af\u0441 \u043a\u043e\u0434\u0443: {0}","Invalid input":"\u0416\u0430\u0440\u0430\u043a\u0441\u044b\u0437 \u043a\u0438\u0440\u0433\u0438\u0437\u04af\u04af","Italic":"\u0416\u0430\u043d\u0442\u044b\u043a","Justify":"\u041a\u0435\u04a3\u0438\u043d\u0435\u043d \u0442\u04af\u0437\u0434\u04e9\u04e9","Keyboard Navigation":"\u0411\u0430\u0441\u043a\u044b\u0447\u0442\u043e\u043f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f\u0441\u044b","Language":"\u0422\u0438\u043b","Learn more...":"\u041a\u0435\u043d\u0435\u043d\u0438\u0440\u044d\u044d\u043a...","Left":"\u0421\u043e\u043b","Left to right":"\u0421\u043e\u043b\u0434\u043e\u043d \u043e\u04a3\u0433\u043e","Light Blue":"\u0410\u0447\u044b\u043a \u043a\u04e9\u043a","Light Gray":"\u0410\u0447\u044b\u043a \u0431\u043e\u0437","Light Green":"\u0410\u0447\u044b\u043a \u0436\u0430\u0448\u044b\u043b","Light Purple":"\u0410\u0447\u044b\u043a \u043a\u044b\u0437\u0433\u044b\u043b\u0442 \u043a\u04e9\u043a","Light Red":"\u0410\u0447\u044b\u043a \u043a\u044b\u0437\u044b\u043b","Light Yellow":"\u0410\u0447\u044b\u043a \u0441\u0430\u0440\u044b","Line height":"\u0421\u044b\u0437\u044b\u043a\u0442\u044b\u043d \u0431\u0438\u0439\u0438\u043a\u0442\u0438\u0433\u0438","Link list":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435 \u0442\u0438\u0437\u043c\u0435\u0441\u0438","Link...":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435...","List Properties":"\u0422\u0438\u0437\u043c\u0435 \u04e9\u0437\u0433\u04e9\u0447\u04e9\u043b\u04af\u043a\u0442\u04e9\u0440\u04af","List properties...":"\u0422\u0438\u0437\u043c\u0435 \u04e9\u0437\u0433\u04e9\u0447\u04e9\u043b\u04af\u043a\u0442\u04e9\u0440\u04af...","Loading emojis...":"\u0411\u044b\u0439\u0442\u044b\u043a\u0447\u0430\u043b\u0430\u0440 \u0436\u04af\u043a\u0442\u04e9\u043b\u04af\u04af\u0434\u04e9...","Loading...":"\u0416\u04af\u043a\u0442\u04e9\u043b\u04af\u04af\u0434\u04e9...","Lower Alpha":"\u0422\u04e9\u043c\u04e9\u043d\u043a\u04af \u0410\u043b\u044c\u0444\u0430","Lower Greek":"\u0422\u04e9\u043c\u04e9\u043d\u043a\u04af \u0413\u0440\u0435\u043a","Lower Roman":"\u0422\u04e9\u043c\u04e9\u043d\u043a\u04af \u0420\u0438\u043c","Match case":"\u0414\u0430\u043b \u043a\u0435\u043b\u04af\u04af \u0443\u0447\u0443\u0440\u0443","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043b\u044b\u043a","Media poster (Image URL)":"\u041c\u0435\u0434\u0438\u0430 \u0436\u0430\u0439\u0433\u0430\u0448\u0442\u044b\u0440\u0443\u0443\u0447\u0443 (\u0421\u04af\u0440\u04e9\u0442 URL)","Media...":"\u041c\u0435\u0434\u0438\u0430...","Medium Blue":"\u041e\u0440\u0442\u043e \u043a\u04e9\u043a","Medium Gray":"\u041e\u0440\u0442\u043e \u0431\u043e\u0437","Medium Purple":"\u041e\u0440\u0442\u043e \u043a\u044b\u0437\u0433\u044b\u043b\u0442 \u043a\u04e9\u043a","Merge cells":"\u041a\u043b\u0435\u0442\u043a\u0430\u043b\u0430\u0440\u0434\u044b \u0431\u0438\u0440\u0438\u043a\u0442\u0438\u0440\u04af\u04af","Middle":"\u041e\u0440\u0442\u043e","Midnight Blue":"\u0421\u044b\u044f \u043a\u04e9\u043a","More...":"\u0414\u0430\u0433\u044b...","Name":"\u0410\u0442\u044b","Navy Blue":"\u041a\u04e9\u043a\u043c\u04e9\u043a","New document":"\u0416\u0430\u04a3\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","New window":"\u0416\u0430\u04a3\u044b \u0442\u0435\u0440\u0435\u0437\u0435","Next":"\u041a\u0438\u0439\u0438\u043d\u043a\u0438","No":"\u0416\u043e\u043a","No alignment":"\u0422\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9 \u0436\u043e\u043a","No color":"\u0422\u04af\u0441 \u0436\u043e\u043a","Nonbreaking space":"\u04ae\u0437\u04af\u043b\u0431\u04e9\u0433\u04e9\u043d \u0430\u0440\u0430\u043b\u044b\u043a","None":"\u0416\u043e\u043a","Numbered list":"\u041d\u043e\u043c\u0435\u0440\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u0438\u0437\u043c\u0435","OR":"\u0416\u0415","Objects":"\u041e\u0431\u044a\u0435\u043a\u0442\u0442\u0435\u0440","Ok":"\u041e\u043a","Open help dialog":"\u0416\u0430\u0440\u0434\u0430\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0443\u043d \u0430\u0447\u0443\u0443","Open link":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043d\u0438 \u0430\u0447\u0443\u0443","Open link in...":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043d\u0438 \u0430\u0447\u0443\u0443...","Open popup menu for split buttons":"\u0411\u04e9\u043b\u04af\u043d\u0433\u04e9\u043d \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440 \u04af\u0447\u04af\u043d \u043a\u0430\u043b\u043a\u044b\u043c\u0430 \u043c\u0435\u043d\u044e\u043d\u0443 \u0430\u0447\u044b\u04a3\u044b\u0437","Orange":"\u0410\u0447\u044b\u043a \u043a\u04af\u0440\u04e9\u04a3","Outset":"","Page break":"\u0411\u0430\u0440\u0430\u043a\u0442\u044b\u043d \u0431\u04af\u0442\u04af\u0448\u04af","Paragraph":"\u0410\u0431\u0437\u0430\u0446","Paste":"\u0416\u0430\u0431\u044b\u0448\u0442\u044b\u0440\u0443\u0443","Paste as text":"\u0422\u0435\u043a\u0441\u0442 \u043a\u0430\u0442\u0430\u0440\u044b \u043a\u043e\u044e","Paste column after":"\u041c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u043e\u04a3 \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u0443","Paste column before":"\u0411\u043e\u0448 \u043c\u0430\u043c\u044b\u0447\u0430\u043d\u044b \u0441\u043e\u043b \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u0443","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u041a\u043e\u044e\u0443 \u0430\u0437\u044b\u0440 \u0436\u04e9\u043d\u04e9\u043a\u04e9\u0439 \u0442\u0435\u043a\u0441\u0442 \u0440\u0435\u0436\u0438\u043c\u0438\u043d\u0434\u0435. \u0421\u0438\u0437 \u0431\u0443\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0434\u0438 \u04e9\u0447\u04af\u0440\u043c\u04e9\u0439\u04af\u043d\u0447\u04e9 \u043c\u0430\u0437\u043c\u0443\u043d\u0434\u0430\u0440 \u0436\u04e9\u043d\u04e9\u043a\u04e9\u0439 \u0442\u0435\u043a\u0441\u0442 \u043a\u0430\u0442\u0430\u0440\u044b \u043a\u043e\u044e\u043b\u0430\u0442.","Paste or type a link":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u044e\u04a3\u0443\u0437 \u0436\u0435 \u0442\u0435\u0440\u0438\u04a3\u0438\u0437","Paste row after":"\u0421\u0430\u043f\u0442\u044b \u043e\u04a3 \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u0443","Paste row before":"\u0421\u0430\u043f\u0442\u044b \u0441\u043e\u043b \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u0443","Paste your embed code below:":"\u041a\u044b\u0441\u0442\u0430\u0440\u0443\u0443 \u043a\u043e\u0434\u0443\u04a3\u0443\u0437\u0434\u0443 \u044b\u043b\u0434\u044b\u0439 \u0436\u0430\u043a\u043a\u0430 \u043a\u043e\u044e\u04a3\u0443\u0437:","People":"\u0410\u0434\u0430\u043c\u0434\u0430\u0440","Plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u0434\u0435\u0440","Plugins installed ({0}):":"\u041e\u0440\u043d\u043e\u0442\u0443\u043b\u0433\u0430\u043d \u043f\u043b\u0430\u0433\u0438\u043d\u0434\u0435\u0440 ({0}):","Powered by {0}":"{0} \u0442\u0430\u0440\u0430\u0431\u044b\u043d\u0430\u043d \u043a\u0443\u0431\u0430\u0442\u0442\u0430\u043d\u0434\u044b\u0440\u044b\u043b\u0433\u0430\u043d","Pre":"\u0427\u0435\u0439\u0438\u043d","Preferences":"\u0416\u0435\u043a\u0435 \u0442\u0430\u043d\u0434\u043e\u043e\u043b\u043e\u0440","Preformatted":"\u0410\u043b\u0434\u044b\u043d \u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0430\u043b\u0433\u0430\u043d","Premium plugins:":"\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0434\u0435\u0440:","Press the Up and Down arrow keys to resize the editor.":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0434\u0443\u043d \u04e9\u043b\u0447\u04e9\u043c\u04af\u043d \u04e9\u0437\u0433\u04e9\u0440\u0442\u04af\u04af \u04af\u0447\u04af\u043d \u04e9\u0439\u0434\u04e9 \u0436\u0430\u043d\u0430 \u044b\u043b\u0434\u044b\u0439 \u0436\u0435\u0431\u0435 \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.","Press the arrow keys to resize the editor.":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0434\u0443\u043d \u04e9\u043b\u0447\u04e9\u043c\u04af\u043d \u04e9\u0437\u0433\u04e9\u0440\u0442\u04af\u04af \u04af\u0447\u04af\u043d \u0436\u0435\u0431\u0435 \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.","Press {0} for help":"\u0416\u0430\u0440\u0434\u0430\u043c \u04af\u0447\u04af\u043d {0} \u0431\u0430\u0441\u044b\u04a3\u044b\u0437","Preview":"\u0410\u043b\u0434\u044b\u043d \u0430\u043b\u0430 \u043a\u04e9\u0440\u04af\u04af","Previous":"\u041c\u0443\u0440\u0443\u043d\u043a\u0443","Print":"\u0411\u0430\u0441\u044b\u043f \u0447\u044b\u0433\u0430\u0440\u0443\u0443","Print...":"\u0411\u0430\u0441\u044b\u043f \u0447\u044b\u0433\u0430\u0440\u0443\u0443...","Purple":"\u041a\u044b\u0437\u0433\u044b\u043b\u0442 \u043a\u04e9\u043a","Quotations":"\u0426\u0438\u0442\u0430\u0442\u0430\u043b\u0430\u0440","R":"R","Range 0 to 255":"0\u0434\u04e9\u043d 255\u043a\u0435 \u0447\u0435\u0439\u0438\u043d\u043a\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d","Red":"\u041a\u044b\u0437\u044b\u043b","Red component":"\u041a\u044b\u0437\u044b\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Redo":"\u0410\u043b\u0433\u0430","Remove":"\u0410\u043b\u044b\u043f \u0441\u0430\u043b\u0443\u0443","Remove color":"\u0422\u04af\u0441\u0442\u04af \u0430\u043b\u044b\u043f \u0441\u0430\u043b\u0443\u0443","Remove link":"\u0428\u0438\u043b\u0442\u0435\u043c\u0435\u043d\u0438 \u0430\u043b\u044b\u043f \u0441\u0430\u043b\u0443\u0443","Replace":"\u0410\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443\u0443","Replace all":"\u0411\u0430\u0430\u0440\u044b\u043d \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443\u0443","Replace with":"\u041c\u0435\u043d\u0435\u043d \u0430\u043b\u043c\u0430\u0448\u0442\u044b\u0440\u0443\u0443","Resize":"\u04e8\u043b\u0447\u04e9\u043c\u04af\u043d \u04e9\u0437\u0433\u04e9\u0440\u0442\u04af\u04af","Restore last draft":"\u0430\u043a\u044b\u0440\u043a\u044b \u0434\u043e\u043b\u0431\u043e\u043e\u0440\u0443\u043d \u043a\u0430\u043b\u044b\u0431\u044b\u043d\u0430 \u043a\u0435\u043b\u0442\u0438\u0440\u04af\u04af","Reveal or hide additional toolbar items":"\u041a\u0443\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0438\u043b\u043a\u0435\u0441\u0438\u043d\u0438\u043d \u043a\u043e\u0448\u0443\u043c\u0447\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0438\u043d \u0430\u0447\u044b\u043f \u0436\u0435 \u0436\u0430\u0448\u044b\u0440\u044b\u04a3\u044b\u0437","Rich Text Area":"\u0411\u0430\u0439 \u0422\u0435\u043a\u0441\u0442 \u0410\u0439\u043c\u0430\u0433\u044b","Rich Text Area. Press ALT-0 for help.":"\u0411\u0430\u0439 \u0422\u0435\u043a\u0441\u0442 \u0410\u0439\u043c\u0430\u0433\u044b. \u0416\u0430\u0440\u0434\u0430\u043c \u04af\u0447\u04af\u043d ALT-0 \u0431\u0430\u0441\u043a\u044b\u0447\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0411\u0430\u0439 \u0422\u0435\u043a\u0441\u0442 \u0410\u0439\u043c\u0430\u0433\u044b. \u041c\u0435\u043d\u044e \u04af\u0447\u04af\u043d ALT-F9 \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u041a\u0443\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0438\u043b\u043a\u0435\u0441\u0438 \u04af\u0447\u04af\u043d ALT-F10 \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u0416\u0430\u0440\u0434\u0430\u043c \u04af\u0447\u04af\u043d ALT-0 \u0431\u0430\u0441\u043a\u044b\u0447\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437","Ridge":"\u0420\u0438\u0434\u0436","Right":"\u041e\u04a3","Right to left":"\u041e\u04a3\u0434\u043e\u043d \u0441\u043e\u043b\u0433\u043e","Row":"\u0421\u0430\u043f","Row clipboard actions":"\u0421\u0430\u043f\u0442\u044b\u043d \u0430\u043b\u043c\u0430\u0448\u0443\u0443 \u0431\u0443\u0444\u0435\u0440\u0438\u043d\u0438\u043d \u0430\u0440\u0430\u043a\u0435\u0442\u0442\u0435\u0440\u0438","Row group":"\u0421\u0430\u043f \u0442\u043e\u0431\u0443","Row header":"\u0421\u0430\u043f\u0442\u044b\u043d \u0430\u0442\u0430\u043b\u044b\u0448\u044b","Row properties":"\u0421\u0430\u043f\u0442\u044b\u043d \u04e9\u0437\u0433\u04e9\u0447\u04e9\u043b\u04af\u043a\u0442\u04e9\u0440\u04af","Row type":"\u0421\u0430\u043f \u0442\u04af\u0440\u04af","Rows":"\u0421\u0430\u043f\u0442\u0430\u0440","Save":"\u0421\u0430\u043a\u0442\u043e\u043e","Save (if save plugin activated)":"\u0421\u0430\u043a\u0442\u043e\u043e (\u044d\u0433\u0435\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0434\u0438 \u0441\u0430\u043a\u0442\u043e\u043e \u0438\u0448\u0442\u0435\u0442\u0438\u043b\u0441\u0435)","Scope":"\u041a\u043e\u043b\u0434\u043e\u043d\u0443\u0443 \u0447\u04e9\u0439\u0440\u04e9\u0441\u04af","Search":"\u0418\u0437\u0434\u04e9\u04e9","Select all":"\u0411\u0430\u0430\u0440\u044b\u043d \u0442\u0430\u043d\u0434\u043e\u043e","Select...":"\u0422\u0430\u043d\u0434\u043e\u043e...","Selection":"\u0422\u0430\u043d\u0434\u043e\u043e","Shortcut":"\u041a\u044b\u0441\u043a\u0430\u0436\u043e\u043b","Show blocks":"\u0411\u043b\u043e\u043a\u0442\u043e\u0440\u0434\u0443 \u043a\u04e9\u0440\u0441\u04e9\u0442\u04af\u04af","Show caption":"\u041a\u043e\u0448\u0442\u043e\u043c\u043e \u0436\u0430\u0437\u0443\u0443\u043d\u0443 \u043a\u04e9\u0440\u0441\u04e9\u0442\u04af\u04af","Show invisible characters":"\u041a\u04e9\u0440\u04af\u043d\u0431\u04e9\u0433\u04e9\u043d \u0441\u0438\u043c\u0432\u043e\u043b\u0434\u043e\u0440\u0434\u0443 \u043a\u04e9\u0440\u0441\u04e9\u0442\u04af\u04af","Size":"\u04e8\u043b\u0447\u04e9\u043c\u04af","Solid":"\u041a\u0430\u0442\u0443\u0443","Source":"\u0411\u0443\u043b\u0430\u043a","Source code":"\u0411\u0430\u0448\u0442\u0430\u043f\u043a\u044b \u0431\u0443\u043b\u0430\u043a \u043a\u043e\u0434\u0443","Special Character":"\u04e8\u0437\u0433\u04e9\u0447\u04e9 \u0431\u0435\u043b\u0433\u0438","Special character...":"\u04e8\u0437\u0433\u04e9\u0447\u04e9 \u0431\u0435\u043b\u0433\u0438\u043b\u0435\u0440...","Split cell":"\u041a\u043b\u0435\u0442\u043a\u0430\u043b\u0430\u0440\u0434\u044b \u0431\u04e9\u043b\u04af\u04af","Square":"\u0427\u0430\u0440\u0447\u044b","Start list at number":"\u0422\u0438\u0437\u043c\u0435\u043d\u0438 \u043d\u043e\u043c\u0435\u0440\u0434\u0435\u043d \u0431\u0430\u0448\u0442\u0430\u04a3\u044b\u0437","Strikethrough":"\u0421\u044b\u0437\u044b\u043b\u0433\u0430\u043d","Style":"\u0421\u0442\u0438\u043b\u0438","Subscript":"\u0410\u0441\u0442\u044b\u043d\u043a\u044b","Superscript":"\u0414\u0430\u0440\u0430\u0436\u0430","Switch to or from fullscreen mode":"Switch to or from fullscreen mode","Symbols":"\u0421\u0438\u043c\u0432\u043e\u043b\u0434\u043e\u0440","System Font":"\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0448\u0440\u0438\u0444\u0442\u0438","Table":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430","Table caption":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430\u043d\u044b\u043d \u043a\u043e\u0448\u0442\u043e\u043c\u043e \u0430\u0442\u0430\u043b\u044b\u0448\u044b","Table properties":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430\u043d\u044b\u043d \u04e9\u0437\u0433\u04e9\u0447\u04e9\u043b\u04af\u043a\u0442\u04e9\u0440\u04af","Table styles":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0442\u0438\u043b\u0434\u0435\u0440\u0438","Template":"\u04ae\u043b\u0433\u04af","Templates":"\u04ae\u043b\u0433\u04af\u043b\u04e9\u0440","Text":"\u0422\u0435\u043a\u0441\u0442","Text color":"\u0422\u0435\u043a\u0441\u0442\u0442\u0438\u043d \u0442\u04af\u0441\u04af","Text color {0}":"\u0422\u0435\u043a\u0441\u0442\u0442\u0438\u043d \u0442\u04af\u0441\u04af {0}","Text to display":"\u041a\u04e9\u0440\u0441\u04e9\u0442\u04af\u043b\u04e9 \u0442\u0443\u0440\u0433\u0430\u043d \u0442\u0435\u043a\u0441\u0442","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0421\u0438\u0437 \u043a\u0438\u0440\u0433\u0438\u0437\u0433\u0435\u043d URL \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0434\u0443\u043a \u043f\u043e\u0447\u0442\u0430 \u0434\u0430\u0440\u0435\u0433\u0438 \u043e\u043a\u0448\u043e\u0439\u0442. \u041a\u0435\u0440\u0435\u043a\u0442\u04af\u04af mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0438\u043d \u043a\u043e\u0448\u043a\u0443\u04a3\u0443\u0437 \u043a\u0435\u043b\u0435\u0431\u0438?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0421\u0438\u0437 \u043a\u0438\u0440\u0433\u0438\u0437\u0433\u0435\u043d URL \u0442\u044b\u0448\u043a\u044b \u0448\u0438\u043b\u0442\u0435\u043c\u0435 \u043e\u043a\u0448\u043e\u0439\u0442. \u041a\u0435\u0440\u0435\u043a\u0442\u04af\u04af http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0438\u043d \u043a\u043e\u0448\u043a\u0443\u04a3\u0443\u0437 \u043a\u0435\u043b\u0435\u0431\u0438?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0421\u0438\u0437 \u043a\u0438\u0440\u0433\u0438\u0437\u0433\u0435\u043d URL \u0442\u044b\u0448\u043a\u044b \u0448\u0438\u043b\u0442\u0435\u043c\u0435 \u043e\u043a\u0448\u043e\u0439\u0442. \u041a\u0435\u0440\u0435\u043a\u0442\u04af\u04af https:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0438\u043d \u043a\u043e\u0448\u043a\u0443\u04a3\u0443\u0437 \u043a\u0435\u043b\u0435\u0431\u0438?","Title":"\u0410\u0442\u0430\u043b\u044b\u0448\u044b","To open the popup, press Shift+Enter":"\u041a\u0430\u043b\u043a\u044b\u043c\u0430 \u0442\u0435\u0440\u0435\u0437\u0435\u043d\u0438 \u0430\u0447\u0443\u0443 \u04af\u0447\u04af\u043d Shift+Enter \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437","Toggle accordion":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d\u0434\u0443 \u04e9\u0447\u04af\u0440\u04af\u04af/\u043a\u04af\u0439\u0433\u04af\u0437\u04af\u04af","Tools":"\u041a\u0443\u0440\u0430\u043b\u0434\u0430\u0440","Top":"\u0416\u043e\u0433\u043e\u0440\u043a\u0443","Travel and Places":"\u0421\u0430\u044f\u043a\u0430\u0442 \u0436\u0430\u043d\u0430 \u0436\u0435\u0440\u043b\u0435\u0440","Turquoise":"\u0411\u0438\u0440\u044e\u0437\u0430","Underline":"\u0410\u0441\u0442\u044b \u0441\u044b\u0437\u044b\u043b\u0433\u0430\u043d","Undo":"\u0410\u0440\u0442\u043a\u0430","Upload":"\u0416\u04af\u043a\u0442\u04e9\u04e9","Uploading image":"\u0421\u04af\u0440\u04e9\u0442 \u0436\u04af\u043a\u0442\u04e9\u043b\u04af\u04af\u0434\u04e9","Upper Alpha":"\u0416\u043e\u0433\u043e\u0440\u043a\u0443 \u0410\u043b\u044c\u0444\u0430","Upper Roman":"\u0416\u043e\u0433\u043e\u0440\u043a\u0443 \u0420\u0438\u043c","Url":"Url","User Defined":"\u041a\u043e\u043b\u0434\u043e\u043d\u0443\u0443\u0447\u0443 \u0430\u043d\u044b\u043a\u0442\u0430\u0433\u0430\u043d","Valid":"\u0416\u0430\u0440\u0430\u043a\u0442\u0443\u0443","Version":"\u041d\u0443\u0441\u043a\u0430\u0441\u044b","Vertical align":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0434\u0443\u0443 \u0442\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9","Vertical space":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0434\u044b\u043a \u043c\u0435\u0439\u043a\u0438\u043d\u0434\u0438\u043a","View":"\u041a\u04e9\u0440\u04af\u04af","Visual aids":"\u043a\u04e9\u0440\u0433\u04e9\u0437\u043c\u04e9 \u043a\u0443\u0440\u0430\u043b\u0434\u0430\u0440","Warn":"\u042d\u0441\u043a\u0435\u0440\u0442\u04af\u04af","White":"\u0410\u043a","Width":"\u0422\u0443\u0443\u0440\u0430\u0441\u044b","Word count":"\u0421\u04e9\u0437 \u0441\u0430\u043d\u043e\u043e","Words":"\u0421\u04e9\u0437\u0434\u04e9\u0440","Words: {0}":"\u0421\u04e9\u0437\u0434\u04e9\u0440: {0}","Yellow":"\u0421\u0430\u0440\u044b","Yes":"\u041e\u043e\u0431\u0430","You are using {0}":"\u0421\u0438\u0437 {0} \u043a\u043e\u043b\u0434\u043e\u043d\u0443\u043f \u0436\u0430\u0442\u0430\u0441\u044b\u0437","You have unsaved changes are you sure you want to navigate away?":"\u0421\u0430\u043a\u0442\u0430\u043b\u0430 \u044d\u043b\u0435\u043a \u04e9\u0437\u0433\u04e9\u0440\u04af\u04af\u043b\u04e9\u0440 \u0431\u0430\u0440. \u0411\u0430\u0440\u044b \u0431\u0438\u0440 \u04e9\u0442\u04af\u04af\u0431\u04af?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0438\u04a3\u0438\u0437 \u0430\u043b\u043c\u0430\u0448\u0443\u0443 \u0431\u0443\u0444\u0435\u0440\u0438\u043d\u0435 \u0442\u04af\u0437 \u043a\u0438\u0440\u04af\u04af\u043d\u04af \u043a\u043e\u043b\u0434\u043e\u0431\u043e\u0439\u0442. \u0410\u043d\u044b\u043d \u043e\u0440\u0434\u0443\u043d\u0430 Ctrl+X/C/V \u0431\u0430\u0441\u043a\u044b\u0447\u0442\u043e\u043f\u0442\u0443 \u043a\u043e\u043b\u0434\u043e\u043d\u0443\u04a3\u0443\u0437.","alignment":"\u0442\u0435\u0433\u0438\u0437\u0434\u04e9\u04e9","austral sign":"\u0430\u0443\u0441\u0442\u0440\u0430\u043b \u0431\u0435\u043b\u0433\u0438","cedi sign":"\u0441\u0435\u0434\u0438 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","colon sign":"\u043a\u043e\u0448 \u0447\u0435\u043a\u0438\u0442","cruzeiro sign":"\u043a\u0440\u0443\u0438\u0437 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","currency sign":"\u0432\u0430\u043b\u044e\u0442\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","dollar sign":"\u0434\u043e\u043b\u043b\u0430\u0440 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","dong sign":"\u0434\u043e\u043d \u0431\u0435\u043b\u0433\u0438\u0441\u0438","drachma sign":"\u0434\u0440\u0430\u0445\u043c\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","euro-currency sign":"\u0435\u0432\u0440\u043e-\u0432\u0430\u043b\u044e\u0442\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","example":"\u043c\u0438\u0441\u0430\u043b","formatting":"\u0444\u043e\u0440\u043c\u0430\u0442\u0442\u043e\u043e","french franc sign":"\u0444\u0440\u0430\u043d\u0446\u0443\u0437 \u0444\u0440\u0430\u043d\u043a \u0431\u0435\u043b\u0433\u0438\u0441\u0438","german penny symbol":"\u043d\u0435\u043c\u0438\u0441 \u043f\u0435\u043d\u043d\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0443","guarani sign":"\u0433\u0443\u0430\u0440\u0430\u043d\u0438 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","history":"\u0442\u0430\u0440\u044b\u0445","hryvnia sign":"\u0433\u0440\u0438\u0432\u0435\u043d \u0431\u0435\u043b\u0433\u0438\u0441\u0438","indentation":"\u0447\u0435\u0433\u0438\u043d\u04af\u04af","indian rupee sign":"\u0438\u043d\u0434\u0438\u044f \u0440\u0443\u043f\u0438\u044f\u0441\u044b \u0431\u0435\u043b\u0433\u0438\u0441\u0438","kip sign":"\u043a\u0438\u043f \u0431\u0435\u043b\u0433\u0438\u0441\u0438","lira sign":"\u043b\u0438\u0440\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","livre tournois sign":"\u043a\u0438\u0442\u0435\u043f \u0442\u0443\u0440\u043d\u0438\u0440\u043b\u0435\u0440 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","manat sign":"\u043c\u0430\u043d\u0430\u0442 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","mill sign":"\u043c\u0438\u043b\u043b \u0431\u0435\u043b\u0433\u0438\u0441\u0438","naira sign":"\u043d\u0430\u0439\u0440\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","new sheqel sign":"\u0436\u0430\u04a3\u044b \u0448\u0435\u043a\u0435\u043b \u0431\u0435\u043b\u0433\u0438\u0441\u0438","nordic mark sign":"nordic mark sign","peseta sign":"\u043f\u0435\u0441\u0435\u0442\u0430 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","peso sign":"\u043f\u0435\u0441\u043e \u0431\u0435\u043b\u0433\u0438\u0441\u0438","ruble sign":"\u0440\u0443\u0431\u043b\u044c \u0431\u0435\u043b\u0433\u0438\u0441\u0438","rupee sign":"\u0440\u0443\u043f\u0438\u0439 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","spesmilo sign":"spesmilo \u0431\u0435\u043b\u0433\u0438\u0441\u0438","styles":"\u0441\u0442\u0438\u043b\u0434\u0435\u0440","tenge sign":"\u0442\u0435\u04a3\u0433\u0435 \u0431\u0435\u043b\u0433\u0438\u0441\u0438","tugrik sign":"\u0442\u0443\u0433\u0440\u0438\u043a \u0431\u0435\u043b\u0433\u0438\u0441\u0438","turkish lira sign":"\u0442\u04af\u0440\u043a \u043b\u0438\u0440\u0430\u0441\u044b\u043d\u044b\u043d \u0431\u0435\u043b\u0433\u0438\u0441\u0438","won sign":"\u0432\u043e\u043d \u0431\u0435\u043b\u0433\u0438\u0441\u0438","yen character":"\u0439\u0435\u043d \u0431\u0435\u043b\u0433\u0438\u0441\u0438","yen/yuan character variant one":"\u0439\u0435\u043d/\u044e\u0430\u043d\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0443\u043d\u0443\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b","yuan character":"\u044e\u0430\u043d\u044c \u0431\u0435\u043b\u0433\u0438\u0441\u0438","yuan character, in hong kong and taiwan":"\u044e\u0430\u043d\u044c \u0431\u0435\u043b\u0433\u0438\u0441\u0438, \u0413\u043e\u043d\u043a\u043e\u043d\u0433\u0434\u043e \u0436\u0430\u043d\u0430 \u0422\u0430\u0439\u0432\u0430\u043d\u0434\u0430","{0} characters":"{0} \u0411\u0435\u043b\u0433\u0438\u043b\u0435\u0440","{0} columns, {1} rows":"{0} \u043c\u0430\u043c\u044b\u0447\u0430\u043b\u0430\u0440, {1} \u0441\u0430\u043f\u0442\u0430\u0440","{0} words":"{0} \u0421\u04e9\u0437\u0434\u04e9\u0440"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/lt.js b/staticfiles/tinymce/langs/lt.js new file mode 100644 index 0000000..19097cd --- /dev/null +++ b/staticfiles/tinymce/langs/lt.js @@ -0,0 +1 @@ +tinymce.addI18n("lt",{"#":"#","Accessibility":"Prieinamumas","Accordion":"I\u0161skleid\u017eiamas elementas","Accordion body...":"I\u0161skleid\u017eiamo elemento turinys...","Accordion summary...":"I\u0161skleid\u017eiamo elemento antra\u0161t\u0117...","Action":"Veiksmas","Activity":"Veikla","Address":"Adresas","Advanced":"I\u0161pl\u0117stas","Align":"Lygiavimas","Align center":"Centruoti","Align left":"Lygiuoti kair\u0117je","Align right":"Lygiuoti de\u0161in\u0117je","Alignment":"Lygiavimas","Alignment {0}":"Lygiavimas {0}","All":"Visi","Alternative description":"Alternatyvus apra\u0161ymas","Alternative source":"Alternatyvus \u0161altinis","Alternative source URL":"Alternatyvus \u0161altinio URL adresas","Anchor":"\u017dym\u0117","Anchor...":"Nuoroda...","Anchors":"\u017dym\u0117","Animals and Nature":"Gyv\u016bnai ir gamta","Arrows":"Rodykl\u0117s","B":"M","Background color":"Fono spalva","Background color {0}":"Fono spalva {0}","Black":"Juoda","Block":"Blokas","Block {0}":"Blokas {0}","Blockquote":"Citata","Blocks":"Blokai","Blue":"M\u0117lyna","Blue component":"M\u0117lynas komponentas","Body":"Turinys","Bold":"Pary\u0161kintas","Border":"R\u0117melis","Border color":"R\u0117melio spalva","Border style":"Kra\u0161tin\u0117s stilius","Border width":"Kra\u0161tin\u0117s plotis","Bottom":"Apa\u010dioje","Browse files":"Nar\u0161yti failus","Browse for an image":"Ie\u0161koti paveiksl\u0117lio","Browse links":"Nar\u0161yti nuorodas","Bullet list":"\u017denklinimo s\u0105ra\u0161as","Cancel":"Atsisakyti","Caption":"Antra\u0161t\u0117","Cell":"Langeliai","Cell padding":"Tarpas nuo langelio iki teksto","Cell properties":"Langelio savyb\u0117s","Cell spacing":"Tarpas tarp langeli\u0173","Cell styles":"Langelio stiliai","Cell type":"Langelio tipas","Center":"Centras","Characters":"Simboli\u0173","Characters (no spaces)":"Simboli\u0173 (be tarp\u0173)","Circle":"Apskritimas","Class":"Klas\u0117","Clear formatting":"Naikinti formatavim\u0105","Close":"U\u017edaryti","Code":"Kodas","Code sample...":"Kodo pavyzdys...","Code view":"Kodo per\u017ei\u016bra","Color Picker":"Spalvos parinkimas","Color swatch":"Spalv\u0173 pavyzd\u017eiai","Cols":"Stulpeliai","Column":"Stulpelis","Column clipboard actions":"Stulpelio main\u0173 srities veiksmai","Column group":"Stulpeli\u0173 grup\u0117","Column header":"Stulpelio antra\u0161t\u0117","Constrain proportions":"Taikyti proporcijas","Copy":"Kopijuoti","Copy column":"Kopijuoti stulpel\u012f","Copy row":"Kopijuoti eilut\u0119","Could not find the specified string.":"Nepavyko rasti nurodytos eilut\u0117s.","Could not load emojis":"Nepavyko \u012fkelti jaustuk\u0173","Count":"Skai\u010dius","Currency":"Valiuta","Current window":"Dabartiniame lange","Custom color":"Pasirinktina spalva","Custom...":"Pasirinktinas...","Cut":"I\u0161kirpti","Cut column":"I\u0161kirpti stulpel\u012f","Cut row":"I\u0161kirpti eilut\u0119","Dark Blue":"Tamsiai m\u0117lyna","Dark Gray":"Tamsiai pilka","Dark Green":"Tamsiai \u017ealia","Dark Orange":"Tamsiai oran\u017ein\u0117","Dark Purple":"Tamsiai violetin\u0117","Dark Red":"Tamsiai raudona","Dark Turquoise":"Tamsiai \u017ealsvai m\u0117lyna","Dark Yellow":"Tamsiai geltona","Dashed":"Br\u016bk\u0161ninis","Date/time":"Data / laikas","Decrease indent":"Ma\u017einti \u012ftrauk\u0105","Default":"Pagrindinis","Delete accordion":"I\u0161trinti i\u0161skleid\u017eiam\u0105 element\u0105","Delete column":"Naikinti stulpel\u012f","Delete row":"Naikinti eilut\u0119","Delete table":"\u0160alinti lentel\u0119","Dimensions":"Matmenys","Disc":"Diskas","Div":"Div","Document":"Dokumentas","Dotted":"Ta\u0161kinis","Double":"Dvigubas","Drop an image here":"Tempkite paveiksl\u0117l\u012f \u010dia","Dropped file type is not supported":"Numesto failo tipas nepalaikomas","Edit":"Redaguoti","Embed":"\u012eterpti","Emojis":"Jaustukai","Emojis...":"Jaustukai...","Error":"Klaida","Error: Form submit field collision.":"Klaida: formos lauk\u0173 nesuderinamumas.","Error: No form element found.":"Klaida: formos element\u0173 nerasta.","Extended Latin":"Lotyn\u0173 i\u0161pl\u0117stin\u0117","Failed to initialize plugin: {0}":"Priedo inicijuoti nepavyko: {0}","Failed to load plugin url: {0}":"Priedo adreso \u012fkelti nepavyko: {0}","Failed to load plugin: {0} from url {1}":"Priedo \u012fkelti nepavyko: {0} i\u0161 adreso {1}","Failed to upload image: {0}":"Paveiksl\u0117lio \u012fkelti nepavyko: {0}","File":"Failas","Find":"Ie\u0161koti","Find (if searchreplace plugin activated)":"Ie\u0161koti (jei searchreplace priedas aktyvuotas)","Find and Replace":"Surasti ir Pakeisti","Find and replace...":"Ie\u0161koti ir pakeisti...","Find in selection":"Ie\u0161koti pasirinkime","Find whole words only":"Ie\u0161koti tik vis\u0105 \u017eod\u012f","Flags":"V\u0117liavos","Focus to contextual toolbar":"Fokusuoti \u012f kontekstin\u012f \u012franki\u0173 juost\u0105","Focus to element path":"Fokusuoti \u012f elemento keli\u0105","Focus to menubar":"Fokusuoti \u012f meniu","Focus to toolbar":"Fokusuoti \u012f \u012franki\u0173 juost\u0105","Font":"\u0160riftas","Font size {0}":"\u0160rifto dydis {0}","Font sizes":"\u0160rift\u0173 dyd\u017eiai","Font {0}":"\u0160riftas {0}","Fonts":"\u0160riftai","Food and Drink":"Maistas ir g\u0117rimai","Footer":"Apa\u010dia","Format":"Formatas","Format {0}":"Formatas {0}","Formats":"Formatai","Fullscreen":"Visas ekranas","G":"\u017d","General":"Pagrindinis","Gray":"Pilka","Green":"\u017dalia","Green component":"\u017dalias komponentas","Groove":"Banguotas","Handy Shortcuts":"Patogios nuorodos","Header":"Antra\u0161t\u0117","Header cell":"Antra\u0161t\u0117s langelis","Heading 1":"Antra\u0161t\u0117 1","Heading 2":"Antra\u0161t\u0117 2","Heading 3":"Antra\u0161t\u0117 3","Heading 4":"Antra\u0161t\u0117 4","Heading 5":"Antra\u0161t\u0117 5","Heading 6":"Antra\u0161t\u0117 6","Headings":"Antra\u0161t\u0117s","Height":"Auk\u0161tis","Help":"Pagalba","Hex color code":"\u0160e\u0161ioliktainis spalvos kodas","Hidden":"Pasl\u0117ptas","Horizontal align":"Horizontalus lygiavimas","Horizontal line":"Horizontali linija","Horizontal space":"Horizontalus tarpas","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID tur\u0117t\u0173 prasid\u0117ti raide, po kurios gali b\u016bti raid\u0117s, skai\u010diai, br\u016bk\u0161niai, ta\u0161kai, dvita\u0161kiai ir pabraukimai.","Image is decorative":"Paveiksl\u0117lis yra papuo\u0161imas","Image list":"Paveiksl\u0117li\u0173 s\u0105ra\u0161as","Image title":"Paveiksl\u0117lio pavadinimas","Image...":"Paveiksl\u0117lis...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP klaida: nepavyko rasti paveiksl\u0117li\u0173 tarpin\u0117s programos","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP klaida: neteingas paveiksl\u0117li\u0173 tarpin\u0117s programos URL adresas","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP klaida: u\u017eklausa atmesta","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP klaida: ne\u017einoma ImageProxy klaida","Increase indent":"Didinti \u012ftrauk\u0105","Inline":"\u012eterptas","Insert":"\u012eterpti","Insert Template":"Prid\u0117ti \u0161ablon\u0105","Insert accordion":"Prid\u0117ti i\u0161skleid\u017eiam\u0105 element\u0105","Insert column after":"\u012eterpti stulpel\u012f po","Insert column before":"\u012eterpti stulpel\u012f prie\u0161","Insert date/time":"\u012eterpti dat\u0105/laik\u0105","Insert image":"\u012eterpti paveiksl\u0117l\u012f","Insert link (if link plugin activated)":"Prid\u0117ti nuorod\u0105 (jei link priedas aktyvuotas)","Insert row after":"\u012eterpti eilut\u0119 po","Insert row before":"\u012eterpti eilut\u0119 prie\u0161","Insert table":"\u012eterpti lentel\u0119","Insert template...":"Prid\u0117ti \u0161ablon\u0105...","Insert video":"\u012eterpti video","Insert/Edit code sample":"Prid\u0117ti / keisti kodo pavyzd\u012f","Insert/edit image":"\u012eterpti|Tvarkyti paveiksl\u0117l\u012f","Insert/edit link":"\u012eterpti/taisyti nuorod\u0105","Insert/edit media":"Prid\u0117ti / keisti medij\u0105","Insert/edit video":"\u012eterpti/tvarkyti video","Inset":"\u012e vid\u0173","Invalid hex color code: {0}":"Neteisingas spalvos \u0161e\u0161ioliktainis kodas: {0}","Invalid input":"Neteisinga \u012fvestis","Italic":"Kursyvinis","Justify":"I\u0161d\u0117styti per vis\u0105 plot\u012f","Keyboard Navigation":"Valdymas klaviat\u016bra","Language":"Kalba","Learn more...":"Su\u017einoti daugiau...","Left":"Kair\u0117","Left to right":"I\u0161 kair\u0117s \u012f de\u0161in\u0119","Light Blue":"\u0160viesiai m\u0117lyna","Light Gray":"\u0160viesiai pilka","Light Green":"\u0160viesiai \u017ealia","Light Purple":"\u0160viesiai violetin\u0117","Light Red":"\u0160viesiai raudona","Light Yellow":"\u0160viesiai geltona","Line height":"Eilut\u0117s auk\u0161tis","Link list":"Nuorod\u0173 s\u0105ra\u0161as","Link...":"Nuoroda...","List Properties":"S\u0105ra\u0161o Savyb\u0117s","List properties...":"S\u0105ra\u0161o savyb\u0117s...","Loading emojis...":"Kraunami jaustukai...","Loading...":"Kraunama...","Lower Alpha":"Ma\u017eosios raid\u0117s","Lower Greek":"Ma\u017eosios graik\u0173","Lower Roman":"Ma\u017eosios rom\u0117n\u0173","Match case":"Atitinkamus","Mathematical":"Matematinis","Media poster (Image URL)":"medijos skelbiklis (paveiksl\u0117lio URL adresas)","Media...":"Medija...","Medium Blue":"Vidutini\u0161kai m\u0117lyna","Medium Gray":"Vidutini\u0161kai pilka","Medium Purple":"Vidutini\u0161kai violetin\u0117","Merge cells":"Sujungti langelius","Middle":"Viduryje","Midnight Blue":"Vidurnak\u010dio m\u0117lyna","More...":"Daugiau...","Name":"Pavadinimas","Navy Blue":"Tamsiai m\u0117lyna","New document":"Naujas dokumentas","New window":"Naujas langas","Next":"Sekantis","No":"Ne","No alignment":"Be lygiavimo","No color":"Jokios spalvos","Nonbreaking space":"Nepertraukiamos vietos","None":"Nieko","Numbered list":"Skaitmeninis s\u0105ra\u0161as","OR":"ARBA","Objects":"Objektai","Ok":"Gerai","Open help dialog":"Atverti pagalbos lang\u0105","Open link":"Atidaryti nuorod\u0105","Open link in...":"Nuorod\u0105 atverti...","Open popup menu for split buttons":"Atverti i\u0161\u0161okant\u012f meniu padalijimo mygtukams","Orange":"Oran\u017ein\u0117","Outset":"\u012e i\u0161or\u0119","Page break":"Puslapio skirtukas","Paragraph":"Paragrafas","Paste":"\u012ed\u0117ti","Paste as text":"\u012eklijuoti kaip tekst\u0105","Paste column after":"\u012eklijuoti stulpel\u012f po","Paste column before":"\u012eklijuoti stulpel\u012f prie\u0161","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Dabar \u012fterpiama paprastojo teksto re\u017eimu. Kol \u0161i parinktis \u012fjungta, turinys bus \u012fterptas kaip paprastas tekstas.","Paste or type a link":"\u012eklijuokite arba \u012fra\u0161ykite nuorod\u0105","Paste row after":"\u012ed\u0117ti eilut\u0119 po","Paste row before":"\u012ed\u0117ti eilut\u0119 prie\u0161","Paste your embed code below:":"\u012eterpkite kod\u0105 \u017eemiau:","People":"\u017dmon\u0117s","Plugins":"Priedai","Plugins installed ({0}):":"\u012ediegti priedai ({0}):","Powered by {0}":"Sukurta {0}","Pre":"Pre","Preferences":"Nustatymai","Preformatted":"Suformuotas i\u0161 anksto","Premium plugins:":"Mokami priedai:","Press the Up and Down arrow keys to resize the editor.":"Paspaud\u0119 mygtukus Auk\u0161tyn ir \u017demyn pakeisite redaktoriaus dyd\u012f.","Press the arrow keys to resize the editor.":"Paspaud\u0119 rodykli\u0173 mygtukus pakeisite redaktoriaus dyd\u012f.","Press {0} for help":"Spustel\u0117j\u0119 {0} gausite pagalbos","Preview":"Per\u017ei\u016bra","Previous":"Ankstesnis","Print":"Spausdinti","Print...":"Spausdinti...","Purple":"Ro\u017ein\u0117","Quotations":"Citata","R":"R","Range 0 to 255":"Nuo 0 iki 255","Red":"Raudona","Red component":"Raudonas komponentas","Redo":"Redo","Remove":"Pa\u0161alinti","Remove color":"Pa\u0161alinti spalv\u0105","Remove link":"\u0160alinti nuorod\u0105","Replace":"Pakeisti","Replace all":"Pakeisti visk\u0105","Replace with":"Kuo pakeisti","Resize":"Keisti dyd\u012f","Restore last draft":"Atstatyti paskutin\u012f projekt\u0105","Reveal or hide additional toolbar items":"Rodyti ar sl\u0117pti papildomus \u012franki\u0173 juostos elementus","Rich Text Area":"Rai\u0161kiojo teksto vieta","Rich Text Area. Press ALT-0 for help.":"Rai\u0161kiojo teksto vieta. Spustel\u0117j\u0119 Alt-0 gausite pagalbos.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Suformatuoto teksto laukas. D\u0117l meniu spauskite ALT-F9. U\u017eduo\u010di\u0173 juostos \u012fjungimui spauskite ALT-F10. Pagalbai - spauskite ALT-0.","Ridge":"Lau\u017eytas","Right":"De\u0161in\u0117","Right to left":"I\u0161 de\u0161in\u0117s \u012f kair\u0119","Row":"Eilut\u0117s","Row clipboard actions":"Eilut\u0117s main\u0173 srities veiksmai","Row group":"Eilu\u010di\u0173 grup\u0117","Row header":"Eilut\u0117s antra\u0161t\u0117","Row properties":"Eilut\u0117s savyb\u0117s","Row type":"Eilu\u010di\u0173 tipas","Rows":"Eilut\u0117s","Save":"I\u0161saugoti","Save (if save plugin activated)":"I\u0161saugoti (jei save priedas aktyvuotas)","Scope":"Strukt\u016bra","Search":"Ie\u0161koti","Select all":"Pa\u017eym\u0117ti visk\u0105","Select...":"Pasirinkti...","Selection":"Pasirinkimas","Shortcut":"Nuoroda","Show blocks":"Rodyti blokus","Show caption":"Rodyti antra\u0161t\u0119","Show invisible characters":"Rodyti nematomus simbolius","Size":"Dydis","Solid":"I\u0161tisinis","Source":"Pirmin\u0117 nuoroda","Source code":"Pirminis \u0161altinis","Special Character":"Specialusis simbolis","Special character...":"Specialieji simboliai...","Split cell":"Skaidyti langelius","Square":"Kvadratas","Start list at number":"S\u0105ra\u0161\u0105 prad\u0117kite skai\u010diu","Strikethrough":"Perbrauktas","Style":"Stilius","Subscript":"Apatinis indeksas","Superscript":"Vir\u0161utinis indeksas","Switch to or from fullscreen mode":"Perjungti i\u0161/\u012f viso ekrano rodym\u0105","Symbols":"Simboliai","System Font":"Sisteminiai \u0161riftai","Table":"Lentel\u0117","Table caption":"Lentel\u0117s antra\u0161t\u0117","Table properties":"Lentel\u0117s savyb\u0117s","Table styles":"Lentel\u0117s stiliai","Template":"\u0160ablonas","Templates":"\u0160ablonai","Text":"Tekstas","Text color":"Teksto spalva","Text color {0}":"Teksto spalva {0}","Text to display":"Rodomas tekstas","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Atrodo, kad \u012fvesta nuoroda yra elektroninio pa\u0161to adresas. Ar norite prie\u0161 j\u012f \u012fvesti reikalaujam\u0105 \u201emailto:\u201c?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Atrodo, kad \u012fved\u0117te nuotolin\u0119 nuorod\u0105. Ar norite prie\u0161 j\u0105 \u012fvesti reikalaujam\u0105 \u201ehttp://\u201c?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Pana\u0161u, kad \u012fra\u0161\u0117te nuotolin\u0119 nuorod\u0105. Ar norite jos prad\u017eioije prid\u0117ti b\u016btin\u0105 \u201ehttps://\u201c?","Title":"Pavadinimas","To open the popup, press Shift+Enter":"Spustel\u0117j\u0119 Shift+Enter atversite i\u0161kylant\u012f lang\u0105","Toggle accordion":"Kaitalioti i\u0161skleid\u017eiam\u0105 element\u0105","Tools":"\u012erankiai","Top":"Vir\u0161uje","Travel and Places":"Kelion\u0117s ir vietos","Turquoise":"\u017dalsvai m\u0117lyna","Underline":"Pabrauktas","Undo":"Atstatyti","Upload":"\u012ekelti","Uploading image":"\u012ekelti paveiksliuk\u0105","Upper Alpha":"Did\u017eiosios raid\u0117s","Upper Roman":"Did\u017eiosios rom\u0117n\u0173","Url":"Nuoroda","User Defined":"Vartotojo apibr\u0117\u017eta","Valid":"Tinkamas","Version":"Versija","Vertical align":"Vertikalus lygiavimas","Vertical space":"Vertikalus tarpas","View":"Per\u017ei\u016bra","Visual aids":"Vaizdin\u0117s priemon\u0117s","Warn":"\u012esp\u0117ti","White":"Balta","Width":"Plotis","Word count":"\u017dod\u017ei\u0173 kiekis","Words":"\u017dod\u017ei\u0173","Words: {0}":"\u017dod\u017eiai: {0}","Yellow":"Geltona","Yes":"Taip","You are using {0}":"Naudojate {0}","You have unsaved changes are you sure you want to navigate away?":"Turite nei\u0161saugot\u0173 pakeitim\u0173! Ar tikrai norite i\u0161eiti?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Nar\u0161ykl\u0117s nustatymai neleid\u017eia redaktoriui tiesiogiai pasiekti laikinosios atminties. Pra\u0161ome naudoti klaviat\u016bros klavi\u0161us Ctrl+X/C/V.","alignment":"lygiavimas","austral sign":"australo \u017eenklas","cedi sign":"sed\u017eio \u017eenklas","colon sign":"dvita\u0161kio \u017eenklas","cruzeiro sign":"kruzeiro \u017eenklas","currency sign":"valiutos \u017eenklas","dollar sign":"dolerio \u017eenklas","dong sign":"dongo \u017eenklas","drachma sign":"drachmos \u017eenklas","euro-currency sign":"euro \u017eenklas","example":"pavyzdys","formatting":"formatavimas","french franc sign":"Pranc\u016bz\u0173 franko \u017eenklas","german penny symbol":"Vokietijos fenigo \u017eenklas","guarani sign":"gvaranio \u017eenklas","history":"praeitis","hryvnia sign":"grivinos \u017eenklas","indentation":"\u012ftrauka","indian rupee sign":"Indijos rupijos \u017eenklas","kip sign":"kipo \u017eenklas","lira sign":"lyros \u017eenklas","livre tournois sign":"toro svaro \u017eenklas","manat sign":"manato \u017eenklas","mill sign":"milo simbolis","naira sign":"nairos simbolis","new sheqel sign":"naujojo \u0161ekelio \u017eenklas","nordic mark sign":"\u0161iaur\u0117s \u0161ali\u0173 mark\u0117s \u017eenklas","peseta sign":"peseto \u017eenklas","peso sign":"peso \u017eenklas","ruble sign":"rublio \u017eenklas","rupee sign":"rupijos \u017eenklas","spesmilo sign":"spesmilo \u017eenklas","styles":"stiliai","tenge sign":"teng\u0117s \u017eenklas","tugrik sign":"tugriko \u017eenklas","turkish lira sign":"Turkijos lyros \u017eenklas","won sign":"vono \u017eenklas","yen character":"jienos simbolis","yen/yuan character variant one":"jienos/juanio vieningas \u017eenklas","yuan character":"juanio simbolis","yuan character, in hong kong and taiwan":"juanio \u017eenklas, naudojamas Hongkonge ir Taivane","{0} characters":"{0} simboliai","{0} columns, {1} rows":"stulpeli\u0173: {0}, eilu\u010di\u0173: {1}","{0} words":"{0} \u017eod\u017eiai"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/lv.js b/staticfiles/tinymce/langs/lv.js new file mode 100644 index 0000000..81fe1ca --- /dev/null +++ b/staticfiles/tinymce/langs/lv.js @@ -0,0 +1 @@ +tinymce.addI18n("lv",{"#":"#","Accessibility":"Piek\u013c\u016bstam\u012bba","Accordion":"Akordeons","Accordion body...":"Akordeona saturs...","Accordion summary...":"Akordeona kopsavilkums...","Action":"Darb\u012bba","Activity":"Aktivit\u0101tes","Address":"Adrese","Advanced":"Papildus","Align":"L\u012bdzin\u0101t","Align center":"Centr\u0113t","Align left":"Pa kreisi","Align right":"Pa labi","Alignment":"Izl\u012bdzin\u0101\u0161ana","Alignment {0}":"Izl\u012bdzin\u0101jums {0}","All":"Viss","Alternative description":"Alternat\u012bvais apraksts","Alternative source":"Alternat\u012bvs avots","Alternative source URL":"Alternatvais URL avots","Anchor":"Enkurs","Anchor...":"Enkurs...","Anchors":"Saites","Animals and Nature":"Dz\u012bvnieki un daba","Arrows":"Bultas","B":"Z","Background color":"Fona kr\u0101sa","Background color {0}":"Fona kr\u0101sa {0}","Black":"Melns","Block":"Bloks","Block {0}":"Bloks {0}","Blockquote":"Cit\u0101ts","Blocks":"Bloka elementi","Blue":"Zils","Blue component":"Zilais komonents","Body":"Saturs","Bold":"Treknraksts","Border":"Apmale","Border color":"Apmales kr\u0101sa","Border style":"Apmales stils","Border width":"Apmales biezums","Bottom":"Apak\u0161\u0101","Browse files":"P\u0101rl\u016bkot failus","Browse for an image":"Izv\u0113l\u0113ties att\u0113lu","Browse links":"P\u0101rl\u016bkot saites","Bullet list":"Nenumur\u0113ts saraksts","Cancel":"Atcelt","Caption":"Ar virsrakstu","Cell":"\u0160\u016bna","Cell padding":"Iek\u0161\u0113j\u0101 atstarpe","Cell properties":"\u0160\u016bnas parametri","Cell spacing":"\u0160\u016bnu atstarpe","Cell styles":"\u0160\u016bnas stils","Cell type":"\u0160\u016bnas veids","Center":"Centr\u0113t","Characters":"Simboli","Characters (no spaces)":"Simboli (bez atstarpem)","Circle":"Aplis","Class":"Klase","Clear formatting":"No\u0146emt format\u0113jumu","Close":"Aizv\u0113rt","Code":"Kods","Code sample...":"Koda paraugs...","Code view":"Koda skats","Color Picker":"Atlas\u012bt kr\u0101su","Color swatch":"Kr\u0101su paraugs","Cols":"Kolonnas","Column":"Sleja","Column clipboard actions":"Slejas starpliktuves darb\u012bba","Column group":"Sleju grupa","Column header":"Slejas galvene","Constrain proportions":"Saglab\u0101t proporciju","Copy":"Kop\u0113t","Copy column":"Kop\u0113t sleju","Copy row":"Kop\u0113t rindu","Could not find the specified string.":"Mekl\u0113tais teksts netika atrasts.","Could not load emojis":"Nevar\u0113ja iel\u0101d\u0113t emoz\u012bmes","Count":"Skaits","Currency":"Val\u016bta","Current window":"Taj\u0101 pa\u0161\u0101 log\u0101","Custom color":"Specifisk\u0101 kr\u0101sa","Custom...":"Izv\u0113l\u0113ties citu...","Cut":"Izgriezt","Cut column":"Izgriezt sleju","Cut row":"Izgriezt rindu","Dark Blue":"Tum\u0161i zils","Dark Gray":"Tum\u017ei Pel\u0113ks","Dark Green":"Tum\u0161i za\u013ca","Dark Orange":"Tum\u0161i Oran\u017es","Dark Purple":"Tum\u0161i violets","Dark Red":"Tum\u0161i Sarkans","Dark Turquoise":"Tum\u0161s tirk\u012bzs","Dark Yellow":"Tum\u0161i Dzeltens","Dashed":"P\u0101rtraukts","Date/time":"Datums/laiks","Decrease indent":"Samazin\u0101t atk\u0101pi","Default":"Noklus\u0113tais","Delete accordion":"Dz\u0113st akordeonu","Delete column":"Dz\u0113st sleju","Delete row":"Dz\u0113st rindu","Delete table":"Dz\u0113st tabulu","Dimensions":"Izm\u0113rs","Disc":"Disks","Div":"Div","Document":"Dokuments","Dotted":"Punkt\u0113ts","Double":"Dubults","Drop an image here":"Ievelciet att\u0113lu \u0161eit","Dropped file type is not supported":"Nomest\u0101 faila tips netiek atbalst\u012bts","Edit":"Labot","Embed":"Embed kods","Emojis":"Emoz\u012bme","Emojis...":"Emoz\u012bmes...","Error":"K\u013c\u016bda","Error: Form submit field collision.":"K\u013c\u016bda: Formas apstiprin\u0101\u0161anas lauka k\u013c\u016bda.","Error: No form element found.":"K\u013c\u016bda: Formas elements nav atrasts.","Extended Latin":"Papla\u0161in\u0101tie lat\u012b\u0146u","Failed to initialize plugin: {0}":"Neizdev\u0101s iel\u0101d\u0113t spraudni: {0}","Failed to load plugin url: {0}":"K\u0101du spraudni neizdev\u0101s iel\u0101d\u0113t. Avots: {0}","Failed to load plugin: {0} from url {1}":'Spraudni "{0}" neizdev\u0101s iel\u0101d\u0113t. Avots: {1}',"Failed to upload image: {0}":"Att\u0113la aug\u0161upiel\u0101de neizdev\u0101s: {0}","File":"Datne","Find":"Mekl\u0113t","Find (if searchreplace plugin activated)":'Atrast (Ja "searchreplace" spraudnis ir akt\u012bvs)',"Find and Replace":"Mekl\u0113t un Aizst\u0101t","Find and replace...":"Mekl\u0113t un aizvietot...","Find in selection":"Atrast izv\u0113l\u0113taj\u0101","Find whole words only":"Mekl\u0113t k\u0101 pilnu v\u0101rdu","Flags":"Karogi","Focus to contextual toolbar":"Fokuss uz papildizv\u0113lni","Focus to element path":"Fokuss uz elementa ce\u013cu","Focus to menubar":"Fokuss uz izv\u0113lni","Focus to toolbar":"Fokuss uz r\u012bkjoslu","Font":"Fonts","Font size {0}":"Fonta lielums {0}","Font sizes":"Fonta lielums","Font {0}":"Fonts {0}","Fonts":"Fonti","Food and Drink":"\u0112dieni un Dz\u0113rieni","Footer":"K\u0101jene","Format":"Format\u0113t","Format {0}":"Form\u0101ts {0}","Formats":"Format\u0113jumi","Fullscreen":"Pilnekr\u0101na re\u017e\u012bms","G":"G","General":"Pamata info","Gray":"Pel\u0113ks","Green":"Za\u013c\u0161","Green component":"Za\u013cais komonents","Groove":"Grope","Handy Shortcuts":"Paroc\u012bgi \u012bsce\u013ci","Header":"Galvene","Header cell":"Galvenes \u0161\u016bna","Heading 1":"Virsraksts 1","Heading 2":"Virsraksts 2","Heading 3":"Virsraksts 3","Heading 4":"Virsraksts 4","Heading 5":"Virsraksts 5","Heading 6":"Virsraksts 6","Headings":"Virsraksti","Height":"Augstums","Help":"Pal\u012bdz\u012bba","Hex color code":"Hex kr\u0101sas kods","Hidden":"Sl\u0113pts","Horizontal align":"Horizontala izl\u012bdzin\u0101\u0161ana","Horizontal line":"Horizont\u0101l\u0101 l\u012bnija","Horizontal space":"Horizont\u0101l\u0101 atstarpe","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID j\u0101s\u0101kas ar burtu, kam seko tikai burti, cipari, domuz\u012bmes, punkti, koli vai pasv\u012btras.","Image is decorative":"Att\u0113ls ir dekorat\u012bvs","Image list":"Att\u0113lu saraksts","Image title":"Att\u0113la virsraksts","Image...":"Att\u0113ls...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP k\u013c\u016bda: nevar\u0113ja atrast att\u0113la starpniekserveri","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP k\u013c\u016bda: nepareizs att\u0113la starpniekservera URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP error: Noraid\u012bts piepras\u012bjums","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP k\u013c\u016bda: nezin\u0101ma ImageProxy k\u013c\u016bda","Increase indent":"Palielin\u0101t atk\u0101pi","Inline":"Inline elementi","Insert":"Ievietot","Insert Template":"Ievietot \u0160ablonu","Insert accordion":"Ievietot akordeonu","Insert column after":"Jauna sleja pa labi","Insert column before":"Jauna sleja pa kreisi","Insert date/time":"Ievietot datumu/laiku","Insert image":"Ievietot att\u0113lu","Insert link (if link plugin activated)":"Ievietot saiti (Ja sai\u0161u spraudnis ir akt\u012bvs)","Insert row after":"Jauna rinda zem\u0101k","Insert row before":"Jauna rinda augst\u0101k","Insert table":"Ievietot tabulu","Insert template...":"Ievietot \u0161ablonu...","Insert video":"Ievietot video","Insert/Edit code sample":"Ievad\u012bt/Labot koda paraugu","Insert/edit image":"Ievietot/labot att\u0113lu","Insert/edit link":"Ievietot/labot saiti","Insert/edit media":"Ievietot/labot att\u0113lu","Insert/edit video":"Ievietot/redi\u0123\u0113t video","Inset":"Iek\u0161\u0113js","Invalid hex color code: {0}":"Neder\u012bgs kr\u0101sas hex kods {0}","Invalid input":"Neder\u012bga ievade","Italic":"Sl\u012bpraksts","Justify":"Izl\u012bdzin\u0101t","Keyboard Navigation":"Klaviat\u016bras Navig\u0101cija","Language":"Valoda","Learn more...":"Uzzin\u0101t vair\u0101k...","Left":"Pa kreisi","Left to right":"No kreis\u0101s uz labo","Light Blue":"Gai\u0161i Zils","Light Gray":"Gai\u0161i Pel\u0113ks","Light Green":"Gai\u0161i Za\u013c\u0161","Light Purple":"Gai\u0161i Violets","Light Red":"Gai\u0161i Sarkans","Light Yellow":"Gai\u0161i Dzeltens","Line height":"L\u012bnijas augstums","Link list":"Sai\u0161u saraksts","Link...":"Saite...","List Properties":"Saraksta \u012apa\u0161\u012bbas","List properties...":"Saraksta \u012bpa\u0161\u012bbas...","Loading emojis...":"Notiek emoz\u012bmju iel\u0101de...","Loading...":"Iel\u0101d\u0113...","Lower Alpha":"Lat\u012b\u0146u mazie burti","Lower Greek":"Grie\u0137u mazie burti","Lower Roman":"Romie\u0161u mazie burti","Match case":"At\u0161\u0137irt lielos un mazos burtus","Mathematical":"Matem\u0101tisks","Media poster (Image URL)":"Mediju afi\u0161a (Att\u0113la URL)","Media...":"Mediju...","Medium Blue":"Vid\u0113ji zils","Medium Gray":"Vid\u0113ji Pel\u0113ks","Medium Purple":"Vid\u0113ji violets","Merge cells":"Apvienot \u0161\u016bnas","Middle":"Pa vidu","Midnight Blue":"Puznakts Zils","More...":"Vair\u0101k...","Name":"Nosaukums","Navy Blue":"J\u016bras zils","New document":"Jauns dokuments","New window":"Jaun\u0101 \u0161\u0137irkl\u012b","Next":"N\u0101kamais","No":"N\u0113","No alignment":"Bez izl\u012bdzin\u0101\u0161anas","No color":"Nenor\u0101d\u012bt kr\u0101su","Nonbreaking space":"Nedal\u0101m\u0101 atstarpe","None":"\u2014","Numbered list":"Numur\u0113ts saraksts","OR":"VAI","Objects":"Objekti","Ok":"Ok","Open help dialog":"Atv\u0113rt pal\u012bdz\u012bbas dialogu","Open link":"Atv\u0113rt saiti","Open link in...":"Atv\u0113rt saiti...","Open popup menu for split buttons":"Atv\u0113rt uzleco\u0161o izv\u0113lni dal\u012btaj\u0101m pog\u0101m","Orange":"Oran\u017es","Outset":"\u0100r\u0113js","Page break":"P\u0101reja uz jauno lapu","Paragraph":"Rindkopa","Paste":"Iel\u012bm\u0113t","Paste as text":"Iel\u012bm\u0113t bez format\u0113juma","Paste column after":"Ievietot p\u0113c slejas","Paste column before":"Ievietot pirms slejas","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Iel\u012bm\u0113\u0161ana vienk\u0101r\u0161\u0101 teksta re\u017e\u012bm\u0101. Saturs tiks iel\u012bm\u0113ts bez format\u0113juma l\u012bdz \u0161\u012b opcija tiks atsl\u0113gta.","Paste or type a link":"Iekop\u0113jiet vai ierakstiet saiti","Paste row after":"Iel\u012bm\u0113t rindu zem\u0101k","Paste row before":"Iel\u012bm\u0113t rindu augst\u0101k","Paste your embed code below:":"Iekop\u0113jiet Embed kodu \u0161eit:","People":"Cilv\u0113ki","Plugins":"Spraud\u0146i","Plugins installed ({0}):":"Spraud\u0146i instal\u0113ti ({0}):","Powered by {0}":"Darb\u012bbu nodro\u0161ina {0}","Pre":"Pre","Preferences":"Iestat\u012bjumi","Preformatted":"Ieprieks format\u0113ts","Premium plugins:":"\u012apa\u0161ie spraud\u0146i:","Press the Up and Down arrow keys to resize the editor.":"Nospiediet bulti\u0146u uz aug\u0161u un uz leju, lai main\u012btu redaktora lielumu.","Press the arrow keys to resize the editor.":"Nospiediet bulti\u0146u, lai main\u012btu redaktora lielumu.","Press {0} for help":"Lai sa\u0146emtu pal\u012bdz\u012bbu, nospiediet {0}","Preview":"Priek\u0161skat\u012bt","Previous":"Iepriek\u0161\u0113jais","Print":"Druk\u0101t","Print...":"Druk\u0101t...","Purple":"Violets","Quotations":"Cit\u0101ti","R":"S","Range 0 to 255":"Diapazons 0 l\u012bdz 255","Red":"Sarkans","Red component":"Sarkanais komonents","Redo":"Atcelt darb\u012bbu","Remove":"No\u0146emt","Remove color":"No\u0146emt kr\u0101su","Remove link":"No\u0146emt saiti","Replace":"Aizvietot","Replace all":"Aizvietot visu","Replace with":"Aizvietot ar","Resize":"Main\u012bt izm\u0113ru","Restore last draft":"Atjaunot p\u0113d\u0113jo melnrakstu","Reveal or hide additional toolbar items":"Par\u0101d\u012bt vai pasl\u0113piet papildu r\u012bkjoslas vienumus","Rich Text Area":"Satura redaktors","Rich Text Area. Press ALT-0 for help.":"Satura redaktors. Piespiediet ALT-0, lai atv\u0113rtu pal\u012bdz\u012bbu.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Satura redaktors. Nospiediet ALT-F9 lai atv\u0113rtu izv\u0113lni. Nospiediet ALT-F10, lai atv\u0113rtu r\u012bkjoslu vai ALT-0 pal\u012bdz\u012bbai","Ridge":"Gr\u0113da","Right":"Pa labi","Right to left":"No lab\u0101s uz kreiso","Row":"Rinda","Row clipboard actions":"Rindas starpliktuves darb\u012bba","Row group":"Rindu grupa","Row header":"Galvenes rinda","Row properties":"Rindas parametri","Row type":"Rindas veids","Rows":"Rindas","Save":"Saglab\u0101t","Save (if save plugin activated)":"Saglab\u0101t (Ja saglab\u0101\u0161anas spraudnis ir akt\u012bvs)","Scope":"Attiecin\u0101t uz","Search":"Mekl\u0113t","Select all":"Izv\u0113l\u0113ties visu","Select...":"Izv\u0113lies...","Selection":"Atlase","Shortcut":"Sa\u012bsne","Show blocks":"R\u0101d\u012bt blokus","Show caption":"R\u0101d\u012bt parakstu","Show invisible characters":"R\u0101d\u012bt neredzam\u0101s rakstz\u012bmes","Size":"Izm\u0113rs","Solid":"Mas\u012bvs","Source":"Avots","Source code":"Pirmkods","Special Character":"Specialais simbols","Special character...":"Specialais simbols...","Split cell":"Sadal\u012bt \u0161\u016bnas","Square":"Kvadr\u0101ts","Start list at number":"S\u0101kt sarakstu ar skaitli","Strikethrough":"P\u0101rsv\u012btrot","Style":"Stils","Subscript":"Apak\u0161raksts","Superscript":"Aug\u0161raksts","Switch to or from fullscreen mode":"P\u0101rsl\u0113gties uz/no pilnekr\u0101na re\u017e\u012bmu","Symbols":"Simboli","System Font":"Sist\u0113mas fonts","Table":"Tabula","Table caption":"Tabulas paraksts","Table properties":"Tabulas parametri","Table styles":"Tabulas stils","Template":"Veidne","Templates":"Veidnes","Text":"Teksts","Text color":"Teksta kr\u0101sa","Text color {0}":"Teksta kr\u0101sa {0}","Text to display":"Nosaukums","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":'J\u016bs ievad\u012bj\u0101t e-pasta adresi. Lai t\u0101 korekti darbotos, ir nepiecie\u0161ams to papildin\u0101t ar "mailto:" priek\u0161\u0101. Vai v\u0113laties to izdar\u012bt?',"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":'J\u016bs ievad\u012bj\u0101t \u0101r\u0113jo saiti. Lai t\u0101 korekti darbotos, ir nepiecie\u0161ams to papildin\u0101t ar "http://" priek\u0161\u0101. Vai v\u0113laties to izdar\u012bt?',"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Ievietot\u0101 URL saite ir no \u0101r\u0113ja avota. Vai v\u0113laties pievienot nepiecie\u0161amo https://?","Title":"Nosaukums","To open the popup, press Shift+Enter":"Lai atv\u0113rtu uzleco\u0161o logu, nospied Shift+Enter","Toggle accordion":"P\u0101rsl\u0113gt akordeonu","Tools":"R\u012bki","Top":"Aug\u0161\u0101","Travel and Places":"Ce\u013co\u0161ana un Vietas","Turquoise":"Tirk\u012bzs","Underline":"Pasv\u012btrot","Undo":"Atsaukt","Upload":"Aug\u0161upiel\u0101d\u0113t","Uploading image":"Aug\u0161upielade att\u0113lu","Upper Alpha":"Lat\u012b\u0146u lielie burti","Upper Roman":"Romie\u0161u lielie burti","Url":"Adrese","User Defined":"Lietot\u0101ja defin\u0113ts","Valid":"Der\u012bgs(-i)","Version":"Versija","Vertical align":"Vertik\u0101la izl\u012bdzin\u0101\u0161ana","Vertical space":"Vertik\u0101l\u0101 atstarpe","View":"Skat\u012bt","Visual aids":"Vizu\u0101l\u0101 pal\u012bdz\u012bba","Warn":"Br\u012bdin\u0101jums","White":"Balts","Width":"Platums","Word count":"V\u0101rdu skaits","Words":"V\u0101rdi","Words: {0}":"V\u0101rdi: {0}","Yellow":"Dzeltens","Yes":"J\u0101","You are using {0}":"J\u016bs lietojiet {0}","You have unsaved changes are you sure you want to navigate away?":"Saturs ir labots un nav saglab\u0101ts. Vai tie\u0161\u0101m v\u0113laties atst\u0101t \u0161o lapu?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"J\u016bsu p\u0101rl\u016bkprogramma neatbalsta piek\u013cuvi starpliktuvei. L\u016bdzu, lietojiet Ctrl+X/C/V klaviat\u016bras sa\u012bsnes.","alignment":"izl\u012bdzin\u0101\u0161ana","austral sign":"","cedi sign":"","colon sign":"kolona z\u012bme","cruzeiro sign":"kruzeiro z\u012bme","currency sign":"val\u016btas z\u012bme","dollar sign":"dol\u0101ra z\u012bme","dong sign":"","drachma sign":"drahmas z\u012bme","euro-currency sign":"eiro val\u016btas z\u012bme","example":"piem\u0113rs","formatting":"format\u0113jums","french franc sign":"fran\u010du franka z\u012bme","german penny symbol":"","guarani sign":"","history":"v\u0113sture","hryvnia sign":"grivna z\u012bme","indentation":"atk\u0101pes","indian rupee sign":"","kip sign":"","lira sign":"liras z\u012bme","livre tournois sign":"","manat sign":"","mill sign":"","naira sign":"","new sheqel sign":"","nordic mark sign":"","peseta sign":"","peso sign":"peso z\u012bme","ruble sign":"rub\u013ca z\u012bme","rupee sign":"r\u016bpija z\u012bme","spesmilo sign":"","styles":"stili","tenge sign":"","tugrik sign":"","turkish lira sign":"turku liras z\u012bme","won sign":"","yen character":"jenas z\u012bme","yen/yuan character variant one":"jua\u0146u z\u012bmes pirmais variants","yuan character":"jua\u0146as z\u012bme","yuan character, in hong kong and taiwan":"jua\u0146as z\u012bme Hongkong\u0101 un Taiv\u0101n\u0101","{0} characters":"{0} simboli","{0} columns, {1} rows":"{0} kolonnas, {1} rindas","{0} words":"{0} v\u0101rdi"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/nb_NO.js b/staticfiles/tinymce/langs/nb_NO.js new file mode 100644 index 0000000..26b3418 --- /dev/null +++ b/staticfiles/tinymce/langs/nb_NO.js @@ -0,0 +1 @@ +tinymce.addI18n("nb_NO",{"#":"#","Accessibility":"Tilgjengelighet","Accordion":"Trekkspillmeny","Accordion body...":"Br\xf8dtekst i trekkspillmeny...","Accordion summary...":"Sammendrag av trekkspillmeny...","Action":"Handling","Activity":"Aktivitet","Address":"Adresse","Advanced":"Avansert","Align":"Juster","Align center":"Midtstill","Align left":"Venstrejuster","Align right":"H\xf8yrejuster","Alignment":"Justering","Alignment {0}":"Justering {0}","All":"Alle","Alternative description":"Alternativ beskrivelse","Alternative source":"Alternativ kilde","Alternative source URL":"Alternativ kilde-URL","Anchor":"Anker","Anchor...":"Lenke...","Anchors":"Forankringspunkter","Animals and Nature":"Dyr og natur","Arrows":"Piler","B":"B","Background color":"Bakgrunnsfarge","Background color {0}":"Bakgrunnsfarge {0}","Black":"Svart","Block":"Blokk","Block {0}":"Blokk {0}","Blockquote":"Blockquote","Blocks":"Blokker","Blue":"Bl\xe5","Blue component":"Bl\xe5 komponent","Body":"Br\xf8dtekst","Bold":"Fet","Border":"Ramme","Border color":"Rammefarge","Border style":"Rammestil","Border width":"Rammebredde","Bottom":"Bunn","Browse files":"Bla gjennom filer","Browse for an image":"S\xf8k etter bilde","Browse links":"Bla gjennom lenker","Bullet list":"Punktliste","Cancel":"Avbryt","Caption":"Tittel","Cell":"Celle","Cell padding":"Cellemarg","Cell properties":"Celleegenskaper","Cell spacing":"Celleavstand","Cell styles":"Cellestiler","Cell type":"Celletype","Center":"Senter","Characters":"Tegn","Characters (no spaces)":"Tegn (uten mellomrom)","Circle":"Sirkel","Class":"Klasse","Clear formatting":"Fjern formateringer","Close":"Lukk","Code":"Kode","Code sample...":"Kodeeksempel...","Code view":"Kodevisning","Color Picker":"Fargevelger","Color swatch":"Fargepalett","Cols":"Kolonner","Column":"Kolonne","Column clipboard actions":"Kolonne-utklippstavlehandlinger","Column group":"Kolonnegruppe","Column header":"Kolonneoverskrift","Constrain proportions":"Begrens proporsjoner","Copy":"Kopier","Copy column":"Kopier kolonne","Copy row":"Kopier rad","Could not find the specified string.":"Kunne ikke finne den spesifiserte teksten","Could not load emojis":"Kunne ikke laste inn emojier","Count":"Opptelling","Currency":"Valuta","Current window":"N\xe5v\xe6rende vindu","Custom color":"Tilpasset farge","Custom...":"Tilpasset...","Cut":"Klipp ut","Cut column":"Kutt kolonne","Cut row":"Klipp ut rad","Dark Blue":"M\xf8rk bl\xe5","Dark Gray":"M\xf8rk gr\xe5","Dark Green":"M\xf8rkegr\xf8nn","Dark Orange":"M\xf8rk oransje","Dark Purple":"M\xf8rk lilla","Dark Red":"M\xf8rker\xf8d","Dark Turquoise":"M\xf8rk turkis","Dark Yellow":"M\xf8rk gul","Dashed":"Stiplet dash","Date/time":"Dato/tid","Decrease indent":"Reduser innrykk","Default":"Standard","Delete accordion":"Slett trekkspillmeny","Delete column":"Slett kolonne","Delete row":"Slett rad","Delete table":"Slett tabell","Dimensions":"St\xf8rrelser","Disc":"Disk","Div":"Div","Document":"Dokument","Dotted":"Stiplet dot","Double":"Dobbel","Drop an image here":"Slipp et bilde her","Dropped file type is not supported":"Filtype st\xf8ttes ikke","Edit":"Rediger","Embed":"Inkluder","Emojis":"Emojier","Emojis...":"Emojier...","Error":"Feil","Error: Form submit field collision.":"Feil: Skjemafelt-innsendingskollisjon.","Error: No form element found.":"Feil: Intet skjemaelement funnet.","Extended Latin":"Utvidet latin","Failed to initialize plugin: {0}":"Kunne ikke initialisere tillegg: {0}","Failed to load plugin url: {0}":"Kunne ikke laste tillegg url: {0}","Failed to load plugin: {0} from url {1}":"Kunne ikke laste tillegg: {0} from url {1}","Failed to upload image: {0}":"Opplasting av bilde feilet: {0}","File":"Fil","Find":"S\xf8k etter","Find (if searchreplace plugin activated)":"Finn (dersom tillegg for s\xf8k og erstatt er aktivert)","Find and Replace":"Finn og erstatt","Find and replace...":"Finn og erstatt...","Find in selection":"Finn i utvalg","Find whole words only":"Finn kun hele ord","Flags":"Flagg","Focus to contextual toolbar":"Fokus p\xe5 kontekstuell verkt\xf8ylinje","Focus to element path":"Fokus p\xe5 elementsti","Focus to menubar":"Fokus p\xe5 menylinje","Focus to toolbar":"Fokus p\xe5 verkt\xf8ylinje","Font":"Skrift","Font size {0}":"Skriftst\xf8rrelse {0}","Font sizes":"Fontst\xf8rrelser","Font {0}":"Skrifttype {0}","Fonts":"Skriftsnitt","Food and Drink":"Mat og drikke","Footer":"Bunntekst","Format":"Format","Format {0}":"Format {0}","Formats":"Stiler","Fullscreen":"Fullskjerm","G":"G","General":"Generelt","Gray":"Gr\xe5","Green":"Gr\xf8nn","Green component":"Gr\xf8nn komponent","Groove":"Rillekant","Handy Shortcuts":"Nyttige snarveier","Header":"Overskrift","Header cell":"Overskriftscelle","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6","Headings":"Overskrifter","Height":"H\xf8yde","Help":"Hjelp","Hex color code":"Hex fargekode","Hidden":"Skjult","Horizontal align":"Horisontal justering","Horizontal line":"Horisontal linje","Horizontal space":"Horisontal avstand","ID":"Id","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID skal starte med en bokstav, kun etterfulgt av bokstaver, tall, bindestreker, prikker, kolon eller understreker.","Image is decorative":"Bilde er dekorasjon","Image list":"Bildeliste","Image title":"Bildetittel","Image...":"Bilde...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP-feil: Fant ikke Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP-feil: Feil Image Proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP-feil: Avvist foresp\xf8rsel","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP-feil: Ukjent ImageProxy-feil","Increase indent":"\xd8k innrykk","Inline":"Innkapslet","Insert":"Sett inn","Insert Template":"Sett inn mal","Insert accordion":"Sett inn trekkspillmeny","Insert column after":"Sett inn kolonne etter","Insert column before":"Sett inn kolonne f\xf8r","Insert date/time":"Sett inn dato/tid","Insert image":"Sett inn bilde","Insert link (if link plugin activated)":"Sett inn lenke (dersom lenketillegg er aktivert)","Insert row after":"Sett inn rad etter","Insert row before":"Sett inn rad f\xf8r","Insert table":"Sett inn tabell","Insert template...":"Sett inn mal..","Insert video":"Sett inn video","Insert/Edit code sample":"Sett inn / endre kodeeksempel","Insert/edit image":"Sett inn / rediger bilde","Insert/edit link":"Sett inn / rediger lenke","Insert/edit media":"Sett inn / endre media","Insert/edit video":"Sett inn / rediger video","Inset":"Innfelt","Invalid hex color code: {0}":"Ugyldig heksadesimal fargekode: {0}","Invalid input":"Ugyldig inndata","Italic":"Kursiv","Justify":"Blokkjuster","Keyboard Navigation":"Tastaturnavigasjon","Language":"Spr\xe5k","Learn more...":"Les mer ...","Left":"Venstre","Left to right":"Venstre til h\xf8yre","Light Blue":"Lys bl\xe5","Light Gray":"Lys gr\xe5","Light Green":"Lys gr\xf8nn","Light Purple":"Lys lilla","Light Red":"Lys r\xf8d","Light Yellow":"Lys gul","Line height":"Linjeh\xf8yde","Link list":"Liste over lenker","Link...":"Lenke...","List Properties":"Listeegenskaper","List properties...":"Listeegenskaper...","Loading emojis...":"Laster emojier...","Loading...":"Laster...","Lower Alpha":"Sm\xe5 bokstaver","Lower Greek":"Greske minuskler","Lower Roman":"Sm\xe5 romertall","Match case":"Versalsensitiv","Mathematical":"Matematisk","Media poster (Image URL)":"Mediaposter (bilde-URL)","Media...":"Media..","Medium Blue":"Mellombl\xe5","Medium Gray":"Medium gr\xe5","Medium Purple":"Medium lilla","Merge cells":"Sl\xe5 sammen celler","Middle":"Sentrert","Midnight Blue":"Midnattbl\xe5","More...":"Mer...","Name":"Navn","Navy Blue":"Marinebl\xe5","New document":"Nytt dokument","New window":"Nytt vindu","Next":"Neste","No":"Nei","No alignment":"Ingen justering","No color":"Ingen farge","Nonbreaking space":"Hardt mellomrom","None":"Ingen","Numbered list":"Nummerliste","OR":"OR","Objects":"Objekter","Ok":"Ok","Open help dialog":"\xc5pne hjelp-dialog","Open link":"\xc5pne lenke","Open link in...":"\xc5pne lenke i..","Open popup menu for split buttons":"\xc5pne sprettoppmeny for splitt-knapper","Orange":"Oransje","Outset":"Utfelt","Page break":"Sideskifte","Paragraph":"Avsnitt","Paste":"Lim inn","Paste as text":"Lim inn som tekst","Paste column after":"Lim inn kolonne etter","Paste column before":"Lim inn kolonne f\xf8r","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Lim inn er n\xe5 i ren tekst-modus. Kopiert innhold vil bli limt inn som ren tekst inntil du sl\xe5r av dette valget.","Paste or type a link":"Lim inn eller skriv en lenke","Paste row after":"Lim inn rad etter","Paste row before":"Lim inn rad f\xf8r","Paste your embed code below:":"Lim inn inkluderingskoden nedenfor:","People":"Mennesker","Plugins":"Programtillegg","Plugins installed ({0}):":"Installerte tillegg ({0}):","Powered by {0}":"Drevet av {0}","Pre":"Pre","Preferences":"Innstillinger","Preformatted":"Forh\xe5ndsformatert","Premium plugins:":"Premiumtillegg:","Press the Up and Down arrow keys to resize the editor.":"Trykk p\xe5 opp- og nedtastene for \xe5 endre st\xf8rrelsen til redigeringsvinduet.","Press the arrow keys to resize the editor.":"Trykk p\xe5 piltastene for \xe5 endre st\xf8rrelsen til redigeringsvinduet.","Press {0} for help":"Trykk p\xe5 {0} for \xe5 f\xe5 hjelp","Preview":"Forh\xe5ndsvis","Previous":"Forrige","Print":"Utskrift","Print...":"Skriv ut...","Purple":"Lilla","Quotations":"Sitater","R":"R","Range 0 to 255":"Spenn 0 til 255","Red":"R\xf8d","Red component":"R\xf8d komponent","Redo":"Gj\xf8r om","Remove":"Fjern","Remove color":"Fjern farge","Remove link":"Fjern lenke","Replace":"Erstatt","Replace all":"Erstatt alle","Replace with":"Erstatt med","Resize":"Skaler","Restore last draft":"Gjenopprett siste utkast","Reveal or hide additional toolbar items":"Vis eller skjul ekstra elementer p\xe5 verkt\xf8ylinjen","Rich Text Area":"Rik tekst-omr\xe5de","Rich Text Area. Press ALT-0 for help.":"Rik-tekstomr\xe5de. Trykk ALT-0 for hjelp.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Tekstredigering. Tast ALT-F9 for meny. Tast ALT-F10 for verkt\xf8ylinje. Tast ALT-0 for hjelp.","Ridge":"Ridge","Right":"H\xf8yre","Right to left":"H\xf8yre til venstre","Row":"Rad","Row clipboard actions":"Rad-utklippstavlehandlinger","Row group":"Radgruppe","Row header":"Radoverskrift","Row properties":"Radegenskaper","Row type":"Radtype","Rows":"Rader","Save":"Lagre","Save (if save plugin activated)":"Lagre (dersom lagretillegg er aktivert)","Scope":"Omfang","Search":"S\xf8k","Select all":"Marker alt","Select...":"Velg...","Selection":"Utvalg","Shortcut":"Snarvei","Show blocks":"Vis blokker","Show caption":"Vis tittel","Show invisible characters":"Vis skjulte tegn","Size":"St\xf8rrelse","Solid":"Solid","Source":"Kilde","Source code":"Kildekode","Special Character":"Spesialtegn","Special character...":"Spesialtegn...","Split cell":"Splitt celle","Square":"Firkant","Start list at number":"Start liste p\xe5 nummer","Strikethrough":"Gjennomstreking","Style":"Stil","Subscript":"Senket skrift","Superscript":"Hevet skrift","Switch to or from fullscreen mode":"Bytt til eller fra fullskjermmodus","Symbols":"Symboler","System Font":"Systemfont","Table":"Tabell","Table caption":"Tabelloverskrift","Table properties":"Tabellegenskaper","Table styles":"Tabellstiler","Template":"Mal","Templates":"Maler","Text":"Tekst","Text color":"Tekstfarge","Text color {0}":"Tekstfarge {0}","Text to display":"Tekst som skal vises","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Oppgitt URL ser ut til \xe5 v\xe6re en e-postadresse. \xd8nsker du \xe5 sette inn p\xe5krevet mailto: prefiks foran e-postadressen?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL du skrev inn ser ut som en ekstern adresse. Vil du legge til det obligatoriske prefikset http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Nettadressen du fylte inn ser ut til \xe5 v\xe6re en ekstern. \xd8nsker du \xe5 legge til p\xe5krevd 'https://'-prefiks?","Title":"Tittel","To open the popup, press Shift+Enter":"For \xe5 \xe5pne popup, trykk Shift+Enter","Toggle accordion":"Vis/skjul trekkspillmeny","Tools":"Verkt\xf8y","Top":"Topp","Travel and Places":"Reise og steder","Turquoise":"Turkis","Underline":"Understreking","Undo":"Angre","Upload":"Last opp","Uploading image":"Laster opp bilde","Upper Alpha":"Store bokstaver","Upper Roman":"Store romertall","Url":"Url","User Defined":"Brukerdefinert","Valid":"Gyldig","Version":"Versjon","Vertical align":"Vertikal justering","Vertical space":"Vertikal avstand","View":"Vis","Visual aids":"Visuelle hjelpemidler","Warn":"Advarsel","White":"Hvit","Width":"Bredde","Word count":"Ordtelling","Words":"Ord","Words: {0}":"Ord: {0}","Yellow":"Gul","Yes":"Ja","You are using {0}":"Du bruker {0}","You have unsaved changes are you sure you want to navigate away?":"Du har ikke arkivert endringene. Vil du fortsette uten \xe5 arkivere?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Nettleseren din st\xf8tter ikke direkte tilgang til utklippsboken. Bruk istedet tastatursnarveiene Ctrl+X/C/V.","alignment":"justering","austral sign":"austral-symbol","cedi sign":"credi-symbol","colon sign":"kolon-symbol","cruzeiro sign":"cruzeiro-symbol","currency sign":"valutasymbol","dollar sign":"dollartegn","dong sign":"dong-symbol","drachma sign":"drachma-symbol","euro-currency sign":"Euro-valutasymbol","example":"eksempel","formatting":"formatering","french franc sign":"franske franc-symbol","german penny symbol":"tysk penny-symbol","guarani sign":"quarani-symbol","history":"historikk","hryvnia sign":"hryvina-symbol","indentation":"innrykk","indian rupee sign":"indisk rupee-symbol","kip sign":"kip-symbol","lira sign":"lire-symbol","livre tournois sign":"livre tournois-symbol","manat sign":"manat-symbol","mill sign":"mill-symbol","naira sign":"naira-symbol","new sheqel sign":"ny sheqel-symbol","nordic mark sign":"nordisk mark-symbol","peseta sign":"peseta-symbol","peso sign":"peso-symbol","ruble sign":"ruble-symbol","rupee sign":"rupee-symbol","spesmilo sign":"spesmilo-symbol","styles":"stiler","tenge sign":"tenge-symbol","tugrik sign":"tugrik-symbol","turkish lira sign":"tyrkisk lire-symbol","won sign":"won-symbol","yen character":"yen-symbol","yen/yuan character variant one":"yen/yuan-symbol variant en","yuan character":"yuan-symbol","yuan character, in hong kong and taiwan":"yuan-symbol, i Hongkong og Taiwan","{0} characters":"{0} tegn","{0} columns, {1} rows":"{0} s\xf8yler, {1} rader","{0} words":"{0} ord"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ne.js b/staticfiles/tinymce/langs/ne.js new file mode 100644 index 0000000..7a6db63 --- /dev/null +++ b/staticfiles/tinymce/langs/ne.js @@ -0,0 +1 @@ +tinymce.addI18n("ne",{"#":"","Accessibility":"\u0909\u092a\u0932\u092c\u094d\u0927\u0924\u093e","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0915\u093e\u0930\u094d\u092f","Activity":"\u0917\u0924\u093f\u0935\u093f\u0927\u093f","Address":"\u0920\u0947\u0917\u093e\u0928\u093e","Advanced":"\u0909\u0928\u094d\u0928\u0924","Align":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Align center":"\u0915\u0947\u0928\u094d\u0926\u094d\u0930 \u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Align left":"\u092c\u093e\u092f\u093e\u0901 \u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Align right":"\u0926\u093e\u092f\u093e\u0901 \u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Alignment":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927\u0924\u093e","Alignment {0}":"","All":"\u0938\u092c\u0948","Alternative description":"\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u0935\u093f\u0935\u0930\u0923","Alternative source":"\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u0938\u094d\u0930\u094b\u0924","Alternative source URL":"\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u0938\u094d\u0930\u094b\u0924 URL","Anchor":"","Anchor...":"\u090f\u0919\u094d\u0915\u0930","Anchors":"\u090f\u0919\u094d\u0915\u0930\u0939\u0930\u0942","Animals and Nature":"\u091c\u0928\u093e\u0935\u0930 \u0930 \u092a\u094d\u0930\u0915\u0943\u0924\u093f","Arrows":"\u0935\u093e\u0923\u0939\u0930\u0942","B":"","Background color":"\u092a\u0943\u0937\u094d\u0920\u092d\u0942\u092e\u093f\u0915\u094b \u0930\u0919","Background color {0}":"","Black":"\u0915\u093e\u0932\u094b","Block":"\u092c\u094d\u0932\u0915 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Block {0}":"","Blockquote":"\u092c\u094d\u0932\u0915\u0915\u094b\u091f","Blocks":"\u092c\u094d\u0932\u0915\u0939\u0930\u0942","Blue":"\u0928\u0940\u0932\u094b","Blue component":"","Body":"\u092e\u0941\u0916\u094d\u092f \u092d\u093e\u0917","Bold":"\u092c\u093e\u0915\u094d\u0932\u094b","Border":"\u0938\u0940\u092e\u093e\u0928\u093e","Border color":"\u0938\u0940\u092e\u093e\u0928\u093e\u0915\u094b \u0930\u0919","Border style":"\u0938\u0940\u092e\u093e\u0928\u093e \u0936\u0948\u0932\u0940","Border width":"\u0938\u0940\u092e\u093e\u0928\u093e\u0915\u094b \u091a\u094c\u0921\u093e\u0907","Bottom":"\u0924\u0932","Browse files":"","Browse for an image":"\u091b\u0935\u093f\u0915\u093e \u0932\u093e\u0917\u093f \u092c\u094d\u0930\u093e\u0909\u091c \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Browse links":"","Bullet list":"\u092c\u0941\u0932\u0947\u091f \u0938\u0942\u091a\u0940","Cancel":"\u0930\u0926\u094d\u0926 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Caption":"\u0915\u094d\u092f\u093e\u092a\u094d\u0938\u0928","Cell":"\u0915\u0915\u094d\u0937","Cell padding":"\u0915\u0915\u094d\u0937 \u092a\u094d\u092f\u093e\u0921\u093f\u0919","Cell properties":"\u0915\u0915\u094d\u0937 \u0917\u0941\u0923\u0939\u0930\u0942","Cell spacing":"\u0915\u0915\u094d\u0937 \u0938\u094d\u092a\u0947\u0938\u093f\u0919","Cell styles":"","Cell type":"\u0915\u0915\u094d\u0937 \u092a\u094d\u0930\u0915\u093e\u0930","Center":"\u0915\u0947\u0928\u094d\u0926\u094d\u0930","Characters":"\u0935\u0930\u094d\u0923\u0939\u0930\u0942","Characters (no spaces)":"\u0935\u0930\u094d\u0923\u0939\u0930\u0942 (\u0938\u094d\u092a\u0947\u0938 \u092c\u093e\u0939\u0947\u0915)","Circle":"\u0935\u0943\u0924\u094d\u0924","Class":"\u0935\u0930\u094d\u0917","Clear formatting":"\u0938\u094d\u0935\u0930\u0942\u092a\u0923 \u0916\u093e\u0932\u0940 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Close":"\u092c\u0928\u094d\u0926 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Code":"\u0915\u094b\u0921","Code sample...":"\u0915\u094b\u0921 \u0928\u092e\u0941\u0928\u093e...","Code view":"\u0915\u094b\u0921 \u0926\u0943\u0936\u094d\u092f","Color Picker":"\u0930\u0919 \u091a\u092f\u0928\u0915\u0930\u094d\u0924\u093e","Color swatch":"\u0930\u0919 \u0938\u094d\u0935\u093f\u091a","Cols":"\u0938\u094d\u0924\u092e\u094d\u092d\u0939\u0930\u0942","Column":"\u0938\u094d\u0924\u092e\u094d\u092d","Column clipboard actions":"","Column group":"\u0938\u094d\u0924\u092e\u094d\u092d \u0938\u092e\u0942\u0939","Column header":"","Constrain proportions":"\u0917\u0941\u0923\u0939\u0930\u0942 \u0938\u0940\u092e\u093f\u0924 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Copy":"\u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Copy column":"","Copy row":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u0915\u094b \u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Could not find the specified string.":"\u0928\u093f\u0930\u094d\u0926\u093f\u0937\u094d\u091f \u0938\u094d\u091f\u094d\u0930\u093f\u0919 \u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928 \u0938\u0915\u093f\u090f\u0928\u0964","Could not load emojis":"","Count":"\u0917\u0923\u0928\u093e","Currency":"\u092e\u0941\u0926\u094d\u0930\u093e","Current window":"\u0939\u093e\u0932\u0915\u094b \u0938\u0928\u094d\u091d\u094d\u092f\u093e\u0932","Custom color":"\u0905\u0928\u0941\u0915\u0942\u0932\u0928 \u0930\u0919","Custom...":"\u0905\u0928\u0941\u0915\u0942\u0932\u0928...","Cut":"\u0915\u093e\u091f\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Cut column":"","Cut row":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f \u0915\u093e\u091f\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Dark Blue":"\u0917\u093e\u0922\u093e \u0928\u0940\u0932\u094b","Dark Gray":"\u0917\u093e\u0922\u093e \u0916\u0948\u0930\u094b","Dark Green":"\u0917\u093e\u0922\u093e \u0939\u0930\u093f\u092f\u094b","Dark Orange":"\u0917\u093e\u0922\u093e \u0938\u0941\u0928\u094d\u0924\u0932\u093e","Dark Purple":"\u0917\u093e\u0922\u093e \u092c\u0948\u091c\u0928\u0940","Dark Red":"\u0917\u093e\u0922\u093e \u0930\u093e\u0924\u094b","Dark Turquoise":"\u0917\u093e\u0922\u093e \u091f\u0930\u094d\u0915\u094d\u0935\u093f\u091c","Dark Yellow":"\u0917\u093e\u0922\u093e \u092a\u0939\u0947\u0901\u0932\u094b","Dashed":"","Date/time":"\u092e\u093f\u0924\u093f/\u0938\u092e\u092f","Decrease indent":"\u0907\u0928\u094d\u0921\u0947\u0928\u094d\u091f \u0918\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Default":"\u092a\u0942\u0930\u094d\u0935\u0928\u093f\u0930\u094d\u0927\u093e\u0930\u093f\u0924","Delete accordion":"","Delete column":"\u0938\u094d\u0924\u092e\u094d\u092d \u092e\u0947\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Delete row":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f \u092e\u0947\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Delete table":"\u0924\u093e\u0932\u093f\u0915\u093e \u092e\u0947\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Dimensions":"\u0906\u092f\u093e\u092e\u0939\u0930\u0942","Disc":"\u0921\u093f\u0938\u094d\u0915","Div":"","Document":"\u0915\u093e\u0917\u091c\u093e\u0924","Dotted":"","Double":"","Drop an image here":"\u092f\u0939\u093e\u0901 \u091b\u0935\u093f \u091b\u094b\u0921\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Dropped file type is not supported":"","Edit":"\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Embed":"\u0907\u092e\u094d\u092c\u0947\u0921 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Emojis":"","Emojis...":"","Error":"\u0924\u094d\u0930\u0941\u091f\u093f","Error: Form submit field collision.":"\u0924\u094d\u0930\u0941\u091f\u093f: \u092a\u0947\u0936 \u0917\u0930\u094d\u0928\u0947 \u092b\u093e\u0901\u091f \u091f\u0915\u0930\u093e\u0935\u092c\u093e\u091f\u0964","Error: No form element found.":"\u0924\u094d\u0930\u0941\u091f\u093f: \u0915\u0941\u0928\u0948 \u092b\u093e\u0930\u093e\u092e \u0924\u0924\u094d\u0924\u094d\u0935 \u092b\u0947\u0932\u093e \u092a\u0930\u0947\u0928\u0964","Extended Latin":"\u0935\u093f\u0938\u094d\u0924\u0943\u0924 \u0932\u094d\u092f\u093e\u091f\u093f\u0928","Failed to initialize plugin: {0}":"\u092a\u094d\u0932\u0917\u0907\u0928: {0} \u0938\u0941\u0930\u0941\u0935\u093e\u0924 \u0917\u0930\u094d\u0928 \u0905\u0938\u092b\u0932 \u092d\u092f\u094b","Failed to load plugin url: {0}":"\u092a\u094d\u0932\u0917\u0907\u0928 url: {0} \u0932\u094b\u0921 \u0917\u0930\u094d\u0928 \u0905\u0938\u092b\u0932 \u092d\u092f\u094b","Failed to load plugin: {0} from url {1}":"url {1} \u092c\u093e\u091f \u092a\u094d\u0932\u0917\u0907\u0928: {0} \u0932\u094b\u0921 \u0917\u0930\u094d\u0928 \u0905\u0938\u092b\u0932 \u092d\u092f\u094b","Failed to upload image: {0}":"\u091b\u0935\u093f: {0} \u0905\u092a\u0932\u094b\u0921 \u0917\u0930\u094d\u0928 \u0905\u0938\u092b\u0932 \u092d\u092f\u094b","File":"\u092b\u093e\u0907\u0932","Find":"\u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Find (if searchreplace plugin activated)":"\u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d (\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d \u092c\u0926\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d \u092a\u094d\u0932\u0917\u0907\u0928 \u0938\u0915\u094d\u0930\u093f\u092f \u0917\u0930\u093f\u090f\u0915\u094b \u092d\u090f\u092e\u093e)","Find and Replace":"\u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d \u0930 \u092a\u094d\u0930\u0924\u093f\u0938\u094d\u0925\u093e\u092a\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Find and replace...":"\u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d \u0930 \u092c\u0926\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d...","Find in selection":"\u091a\u092f\u0928\u092e\u093e \u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Find whole words only":"\u092a\u0942\u0930\u093e \u0936\u092c\u094d\u0926 \u092e\u093e\u0924\u094d\u0930 \u092b\u0947\u0932\u093e \u092a\u093e\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Flags":"\u091d\u0928\u094d\u0921\u093e\u0939\u0930\u0942","Focus to contextual toolbar":"\u0938\u093e\u0928\u094d\u0926\u0930\u094d\u092d\u093f\u0915 \u0909\u092a\u0915\u0930\u0923\u092a\u091f\u094d\u091f\u0940\u092e\u093e \u092b\u094b\u0915\u0938 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Focus to element path":"\u0924\u0924\u094d\u0924\u094d\u0935\u0915\u094b \u092a\u093e\u0925\u092e\u093e \u092b\u094b\u0915\u0938 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Focus to menubar":"\u092e\u0947\u0928\u0941\u092a\u091f\u094d\u091f\u0940\u092e\u093e \u092b\u094b\u0915\u0938 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Focus to toolbar":"\u0909\u092a\u0915\u0930\u0923\u092a\u091f\u094d\u091f\u0940\u092e\u093e \u092b\u094b\u0915\u0938 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Font":"\u092b\u0928\u094d\u091f","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"\u092b\u0928\u094d\u091f\u0939\u0930\u0942","Food and Drink":"\u0916\u093e\u0928\u093e \u0930 \u092a\u0947\u092f","Footer":"\u092b\u0941\u091f\u0930","Format":"\u0922\u093e\u0901\u091a\u093e","Format {0}":"","Formats":"\u0922\u093e\u0901\u091a\u093e\u0939\u0930\u0942","Fullscreen":"\u092a\u0942\u0930\u094d\u0923\u0938\u094d\u0915\u094d\u0930\u093f\u0928","G":"","General":"\u0938\u093e\u0927\u093e\u0930\u0923","Gray":"\u0916\u0948\u0930\u094b","Green":"\u0939\u0930\u093f\u092f\u094b","Green component":"","Groove":"","Handy Shortcuts":"\u0909\u092a\u092f\u094b\u0917\u0940 \u0938\u0930\u094d\u091f\u0915\u091f\u0939\u0930\u0942","Header":"\u0939\u0947\u0921\u0930","Header cell":"\u0939\u0947\u0921\u0930 \u0915\u0915\u094d\u0937","Heading 1":"\u0936\u0940\u0930\u094d\u0937\u0915 1","Heading 2":"\u0936\u0940\u0930\u094d\u0937\u0915 2","Heading 3":"\u0936\u0940\u0930\u094d\u0937\u0915 3","Heading 4":"\u0936\u0940\u0930\u094d\u0937\u0915 4","Heading 5":"\u0936\u0940\u0930\u094d\u0937\u0915 5","Heading 6":"\u0936\u0940\u0930\u094d\u0937\u0915 6","Headings":"\u0936\u0940\u0930\u094d\u0937\u0915\u0939\u0930\u0942","Height":"\u0909\u091a\u093e\u0907","Help":"\u092e\u0926\u094d\u0926\u0924","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"\u0924\u0947\u0930\u094d\u0938\u094b \u0930\u0947\u0916\u093e","Horizontal space":"\u0924\u0947\u0930\u094d\u0938\u094b \u0938\u094d\u0925\u093e\u0928","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"\u091b\u0935\u093f \u0938\u091c\u093e\u0935\u091f\u0940 \u091b","Image list":"\u091b\u0935\u093f\u0915\u094b \u0938\u0942\u091a\u0940","Image title":"\u091b\u0935\u093f\u0915\u094b \u0936\u0940\u0930\u094d\u0937\u0915","Image...":"\u091b\u0935\u093f...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0907\u0928\u094d\u0921\u0947\u0928\u094d\u091f \u092c\u0922\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Inline":"\u0907\u0928\u0932\u093e\u0907\u0928","Insert":"\u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert Template":"","Insert accordion":"","Insert column after":"\u092a\u091b\u093e\u0921\u093f \u0938\u094d\u0924\u092e\u094d\u092d \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert column before":"\u0905\u0917\u093e\u0921\u093f \u0938\u094d\u0924\u092e\u094d\u092d \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert date/time":"\u092e\u093f\u0924\u093f/\u0938\u092e\u092f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert image":"\u091b\u0935\u093f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert link (if link plugin activated)":"\u0932\u093f\u0919\u094d\u0915 \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d (\u0932\u093f\u0919\u094d\u0915 \u092a\u094d\u0932\u0917\u0907\u0928 \u0938\u0915\u094d\u0930\u093f\u092f \u0917\u0930\u093f\u090f\u0915\u094b \u092d\u090f\u092e\u093e)","Insert row after":"\u092a\u091b\u093e\u0921\u093f \u092a\u0919\u094d\u0915\u094d\u0924\u093f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert row before":"\u0905\u0917\u093e\u0921\u093f \u092a\u0919\u094d\u0915\u094d\u0924\u093f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert table":"\u0924\u093e\u0932\u093f\u0915\u093e \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert template...":"\u091f\u0947\u092e\u094d\u092a\u094d\u0932\u0947\u091f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert video":"\u092d\u093f\u0921\u093f\u092f\u094b \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Insert/Edit code sample":"\u0915\u094b\u0921 \u0928\u092e\u0941\u0928\u093e \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Insert/edit image":"\u091b\u0935\u093f \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Insert/edit link":"\u0932\u093f\u0919\u094d\u0915 \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Insert/edit media":"\u092e\u093f\u0921\u093f\u092f\u093e \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Insert/edit video":"\u092d\u093f\u0921\u093f\u092f\u094b \u0918\u0941\u0938\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d/\u0938\u092e\u094d\u092a\u093e\u0926\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u0924\u0947\u0930\u094d\u0938\u094b","Justify":"\u0938\u092e\u0930\u0947\u0916\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Keyboard Navigation":"\u0915\u0941\u091e\u094d\u091c\u0940\u092a\u093e\u091f\u0940 \u0928\u0947\u092d\u093f\u0917\u0947\u0938\u0928","Language":"\u092d\u093e\u0937\u093e","Learn more...":"\u0925\u092a \u091c\u093e\u0928\u094d\u0928\u0941\u0939\u094b\u0938\u094d...","Left":"\u092c\u093e\u0901\u092f\u093e","Left to right":"\u092c\u093e\u0901\u092f\u093e\u092c\u093e\u091f \u0926\u093e\u092f\u093e\u0901","Light Blue":"\u0939\u0932\u094d\u0915\u093e \u0928\u0940\u0932\u094b","Light Gray":"\u0939\u0932\u094d\u0915\u093e \u0916\u0948\u0930\u094b","Light Green":"\u0939\u0932\u094d\u0915\u093e \u0939\u0930\u093f\u092f\u094b","Light Purple":"\u0939\u0932\u094d\u0915\u093e \u092c\u0948\u091c\u0928\u0940","Light Red":"\u0939\u0932\u094d\u0915\u093e \u0930\u093e\u0924\u094b","Light Yellow":"\u0939\u0932\u094d\u0915\u093e \u092a\u0939\u0947\u0901\u0932\u094b","Line height":"\u0932\u093e\u0907\u0928\u0915\u094b \u0909\u091a\u093e\u0907","Link list":"\u0932\u093f\u0919\u094d\u0915\u0915\u094b \u0938\u0942\u091a\u0940","Link...":"\u0932\u093f\u0919\u094d\u0915...","List Properties":"\u0938\u0942\u091a\u0940 \u0917\u0941\u0923\u0939\u0930\u0942","List properties...":"\u0938\u0942\u091a\u0940 \u0917\u0941\u0923\u0939\u0930\u0942...","Loading emojis...":"","Loading...":"","Lower Alpha":"\u0924\u0932\u094d\u0932\u094b \u0905\u0932\u094d\u092b\u093e","Lower Greek":"\u0924\u0932\u094d\u0932\u094b \u0917\u094d\u0930\u093f\u0915","Lower Roman":"\u0924\u0932\u094d\u0932\u094b \u0930\u094b\u092e\u0928","Match case":"\u092e\u094d\u092f\u093e\u091a \u0915\u0947\u0938","Mathematical":"\u0917\u0923\u093f\u0924\u0940\u092f","Media poster (Image URL)":"\u092e\u093f\u0921\u093f\u092f\u093e \u092a\u094b\u0938\u094d\u091f\u0930 (\u091b\u0935\u093f URL)","Media...":"\u092e\u093f\u0921\u093f\u092f\u093e...","Medium Blue":"\u092e\u0927\u094d\u092f\u092e \u0928\u0940\u0932\u094b","Medium Gray":"\u092e\u0927\u094d\u092f\u092e \u0916\u0948\u0930\u094b","Medium Purple":"\u092e\u0927\u094d\u092f\u092e \u092c\u0948\u091c\u0928\u0940","Merge cells":"\u0915\u0915\u094d\u0937\u0939\u0930\u0942 \u092e\u0930\u094d\u091c \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Middle":"\u092c\u0940\u091a\u092e\u093e","Midnight Blue":"\u092e\u0927\u094d\u092f\u0930\u093e\u0924 \u0928\u0940\u0932\u094b","More...":"\u0925\u092a...","Name":"\u0928\u093e\u092e","Navy Blue":"\u0917\u093e\u0922\u093e \u0928\u0940\u0932\u094b","New document":"\u0928\u092f\u093e\u0901 \u0915\u093e\u0917\u091c\u093e\u0924","New window":"\u0928\u092f\u093e\u0901 \u0938\u0928\u094d\u091d\u094d\u092f\u093e\u0932","Next":"\u0905\u0930\u094d\u0915\u094b","No":"\u0939\u094b\u0907\u0928","No alignment":"","No color":"\u0915\u0941\u0928\u0948 \u0930\u0919 \u091b\u0948\u0928","Nonbreaking space":"\u0928\u091f\u0941\u091f\u094d\u0928\u0947 \u0916\u093e\u0932\u0940 \u0920\u093e\u0909\u0901","None":"\u0915\u0941\u0928\u0948 \u092a\u0928\u093f \u0939\u094b\u0907\u0928","Numbered list":"\u0915\u094d\u0930\u092e\u093e\u0919\u0915\u093f\u0924 \u0938\u0942\u091a\u0940","OR":"\u0935\u093e","Objects":"\u0935\u0938\u094d\u0924\u0941\u0939\u0930\u0942","Ok":"\u0920\u0940\u0915 \u091b","Open help dialog":"\u092e\u0926\u094d\u0926\u0924 \u0938\u092e\u094d\u0935\u093e\u0926 \u0916\u094b\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Open link":"\u0932\u093f\u0919\u094d\u0915 \u0916\u094b\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Open link in...":"\u092f\u0924\u093f \u0938\u092e\u092f\u092e\u093e \u0932\u093f\u0919\u094d\u0915 \u0916\u094b\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d...","Open popup menu for split buttons":"\u0935\u093f\u092d\u093e\u091c\u0928 \u092c\u091f\u0928\u0939\u0930\u0942\u0915\u093e \u0932\u093e\u0917\u093f \u092a\u092a\u0905\u092a \u092e\u0947\u0928\u0941 \u0916\u094b\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Orange":"\u0938\u0941\u0928\u094d\u0924\u0932\u093e \u0930\u0919","Outset":"","Page break":"\u092a\u0943\u0937\u094d\u0920 \u092c\u094d\u0930\u0947\u0915","Paragraph":"\u0905\u0928\u0941\u091a\u094d\u091b\u0947\u0926","Paste":"\u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Paste as text":"\u092a\u093e\u0920\u0915\u094b \u0930\u0942\u092a\u092e\u093e \u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u091f\u093e\u0901\u0938\u094d\u0928\u0947 \u0905\u0939\u093f\u0932\u0947 \u0938\u093e\u0926\u093e \u092e\u093e\u0920 \u092e\u094b\u0921\u092e\u093e \u091b\u0964 \u0924\u092a\u093e\u0908\u0901\u0932\u0947 \u092f\u094b \u0935\u093f\u0915\u0932\u094d\u092a \u091f\u0917\u0932 \u0905\u092b \u0928\u0917\u0930\u0947\u0938\u092e\u094d\u092e \u0938\u093e\u092e\u0917\u094d\u0930\u0940\u0939\u0930\u0942 \u0905\u0939\u093f\u0932\u0947 \u0938\u093e\u0926\u093e \u092a\u093e\u0920\u0915\u094b \u0930\u0942\u092a\u092e\u093e \u091f\u093e\u0901\u0938\u093f\u0928\u0947 \u091b\u0928\u094d\u0964","Paste or type a link":"\u0932\u093f\u0919\u094d\u0915 \u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d \u0935\u093e \u091f\u093e\u0907\u092a \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Paste row after":"\u092a\u091b\u093e\u0921\u093f \u092a\u0919\u094d\u0915\u094d\u0924\u093f \u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Paste row before":"\u0905\u0917\u093e\u0921\u093f \u092a\u0919\u094d\u0915\u094d\u0924\u093f \u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Paste your embed code below:":"\u0924\u0932 \u0906\u092b\u094d\u0928\u094b \u0907\u092e\u094d\u092c\u0947\u0921 \u0915\u094b\u0921 \u091f\u093e\u0901\u0938\u094d\u0928\u0941\u0939\u094b\u0938\u094d:","People":"\u092e\u093e\u0928\u093f\u0938\u0939\u0930\u0942","Plugins":"\u092a\u094d\u0932\u0917\u0907\u0928\u0939\u0930\u0942","Plugins installed ({0}):":"\u092a\u094d\u0932\u0917\u0907\u0928\u0939\u0930\u0942 \u0938\u094d\u0925\u093e\u092a\u0928\u093e \u0917\u0930\u093f\u090f ({0}):","Powered by {0}":"{0} \u0926\u094d\u0935\u093e\u0930\u093e \u092a\u094d\u0930\u093e\u092f\u094b\u091c\u093f\u0924","Pre":"\u092a\u0942\u0930\u094d\u0935","Preferences":"\u092a\u094d\u0930\u093e\u0925\u092e\u093f\u0915\u0924\u093e\u0939\u0930\u0942","Preformatted":"\u092a\u0942\u0930\u094d\u0935 \u0922\u093e\u0901\u091a\u093e \u0917\u0930\u093f\u0915\u094b","Premium plugins:":"\u092a\u094d\u0930\u093f\u092e\u093f\u092f\u092e \u092a\u094d\u0932\u0917\u0907\u0928\u0939\u0930\u0942:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u092a\u0942\u0930\u094d\u0935\u093e\u0935\u0932\u094b\u0915\u0928","Previous":"\u0905\u0918\u093f\u0932\u094d\u0932\u094b","Print":"","Print...":"\u092a\u094d\u0930\u093f\u0928\u094d\u091f \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d...","Purple":"\u092c\u0948\u091c\u0928\u0940","Quotations":"\u0909\u0926\u094d\u0927\u0930\u0923\u0939\u0930\u0942","R":"","Range 0 to 255":"","Red":"\u0930\u093e\u0924\u094b","Red component":"","Redo":"\u092b\u0947\u0930\u093f \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Remove":"","Remove color":"\u0930\u0919 \u0939\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Remove link":"\u0932\u093f\u0919\u094d\u0915 \u0939\u091f\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Replace":"\u092c\u0926\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Replace all":"\u0938\u092c\u0948 \u092c\u0926\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Replace with":"\u092f\u094b\u0938\u0901\u0917 \u092c\u0926\u0932\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Resize":"\u0930\u093f\u0938\u093e\u0907\u091c \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Restore last draft":"\u0905\u0928\u094d\u0924\u093f\u092e \u092e\u0938\u094d\u092f\u094c\u0926\u093e \u092a\u0942\u0930\u094d\u0935\u093e\u0935\u0938\u094d\u0925\u093e\u092e\u093e \u092b\u0930\u094d\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u092a\u094d\u0930\u0936\u0938\u094d\u0924 \u092a\u093e\u0920 \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0964 \u092e\u0926\u094d\u0926\u0924\u0915\u093e \u0932\u093e\u0917\u093f ALT-0 \u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938\u094d\u0964","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u092a\u094d\u0930\u0936\u0938\u094d\u0924 \u092a\u093e\u0920 \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0964 \u092e\u0947\u0928\u0941\u0915\u093e \u0932\u093e\u0917\u093f ALT-F9 \u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938\u094d\u0964 \u0909\u092a\u0915\u0930\u0923\u092a\u091f\u094d\u091f\u0940\u0915\u093e \u0932\u093e\u0917\u093f ALT-F10 \u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938\u094d\u0964 \u092e\u0926\u094d\u0926\u0924\u0915\u093e \u0932\u093e\u0917\u093f ALT-0 \u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Ridge":"","Right":"\u0926\u093e\u092f\u093e\u0901","Right to left":"\u0926\u093e\u092f\u093e\u0901\u092c\u093e\u091f \u092c\u093e\u092f\u093e\u0901","Row":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f","Row clipboard actions":"","Row group":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f \u0938\u092e\u0942\u0939","Row header":"","Row properties":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u0915\u093e \u0917\u0941\u0923\u0939\u0930\u0942","Row type":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u0915\u094b \u092a\u094d\u0930\u0915\u093e\u0930","Rows":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u0939\u0930\u0942","Save":"\u092c\u091a\u0924 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Save (if save plugin activated)":"\u092c\u091a\u0924 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d (\u092c\u091a\u0924 \u092a\u094d\u0932\u0917\u0907\u0928 \u0938\u0915\u094d\u0930\u093f\u092f \u0917\u0930\u093f\u090f\u0915\u094b \u092d\u090f\u092e\u093e)","Scope":"\u0938\u094d\u0915\u094b\u092a","Search":"\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Select all":"\u0938\u092c\u0948 \u091a\u092f\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Select...":"\u091a\u092f\u0928 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d...","Selection":"\u091a\u092f\u0928","Shortcut":"\u0938\u0930\u094d\u091f\u0915\u091f","Show blocks":"\u092c\u094d\u0932\u0915\u0939\u0930\u0942 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Show caption":"\u0915\u094d\u092f\u093e\u092a\u094d\u0938\u0928 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Show invisible characters":"\u0905\u0926\u0943\u0937\u094d\u091f \u0935\u0930\u094d\u0923\u0939\u0930\u0942 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Size":"\u0938\u093e\u0907\u091c","Solid":"","Source":"\u0938\u094d\u0930\u094b\u0924","Source code":"\u0938\u094d\u0930\u094b\u0924 \u0915\u094b\u0921","Special Character":"","Special character...":"\u0935\u093f\u0936\u0947\u0937 \u0935\u0930\u094d\u0923...","Split cell":"\u0915\u0915\u094d\u0937 \u0905\u0932\u0917 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Square":"\u0935\u0930\u094d\u0917","Start list at number":"\u0928\u092e\u094d\u092c\u0930\u092e\u093e \u0938\u0942\u091a\u0940 \u0938\u0941\u0930\u0941 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Strikethrough":"\u0938\u094d\u091f\u094d\u0930\u093e\u0907\u0915\u0925\u094d\u0930\u0941","Style":"\u0936\u0948\u0932\u0940","Subscript":"\u0938\u092c\u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f","Superscript":"\u0938\u0941\u092a\u0930\u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f","Switch to or from fullscreen mode":"\u092a\u0942\u0930\u094d\u0923\u0938\u094d\u0915\u094d\u0930\u093f\u0928 \u092e\u094b\u0921\u092c\u093e\u091f \u0935\u093e \u0924\u094d\u092f\u0938\u092e\u093e \u0938\u094d\u0935\u093f\u091a \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Symbols":"\u0938\u0919\u094d\u0915\u0947\u0924\u0939\u0930\u0942","System Font":"\u092a\u094d\u0930\u0923\u093e\u0932\u0940 \u092b\u0928\u094d\u091f","Table":"\u0924\u093e\u0932\u093f\u0915\u093e","Table caption":"","Table properties":"\u0924\u093e\u0932\u093f\u0915\u093e\u0915\u093e \u0917\u0941\u0923\u0939\u0930\u0942","Table styles":"","Template":"\u091f\u0947\u092e\u094d\u092a\u094d\u0932\u0947\u091f","Templates":"\u091f\u0947\u092e\u094d\u092a\u094d\u0932\u0947\u091f\u0939\u0930\u0942","Text":"\u092a\u093e\u0920","Text color":"\u092a\u093e\u0920\u0915\u094b \u0930\u0919","Text color {0}":"","Text to display":"\u092a\u094d\u0930\u0926\u0930\u094d\u0936\u0928 \u0917\u0930\u094d\u0928\u0947 \u092a\u093e\u0920","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0924\u092a\u093e\u0908\u0901\u0932\u0947 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f \u0917\u0930\u094d\u0928\u0941\u092d\u090f\u0915\u094b URL \u0907\u092e\u0947\u0932 \u0920\u0947\u0917\u093e\u0928\u093e \u091c\u0938\u094d\u0924\u094b \u0926\u0947\u0916\u093f\u0928\u094d\u091b\u0964 \u0924\u092a\u093e\u0908\u0901 \u0906\u0935\u0936\u094d\u092f\u0915 mailto: \u0909\u092a\u0938\u0930\u094d\u0917 \u0925\u092a\u094d\u0928 \u091a\u093e\u0939\u0928\u0941\u0939\u0941\u0928\u094d\u091b?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0924\u092a\u093e\u0908\u0901\u0932\u0947 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f \u0917\u0930\u094d\u0928\u0941\u092d\u090f\u0915\u094b URL \u092c\u093e\u0939\u094d\u092f \u0932\u093f\u0919\u094d\u0915 \u091c\u0938\u094d\u0924\u094b \u0926\u0947\u0916\u093f\u0928\u094d\u091b\u0964 \u0924\u092a\u093e\u0908\u0901 \u0906\u0935\u0936\u094d\u092f\u0915 http:// \u0909\u092a\u0938\u0930\u094d\u0917 \u0925\u092a\u094d\u0928 \u091a\u093e\u0939\u0928\u0941\u0939\u0941\u0928\u094d\u091b?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0924\u092a\u093e\u0908\u0901\u0932\u0947 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f \u0917\u0930\u094d\u0928\u0941\u092d\u090f\u0915\u094b URL \u092c\u093e\u0939\u094d\u092f \u0932\u093f\u0919\u094d\u0915 \u091c\u0938\u094d\u0924\u094b \u0926\u0947\u0916\u093f\u0928\u094d\u091b\u0964 \u0915\u0947 \u0924\u092a\u093e\u0908\u0901 \u0906\u0935\u0936\u094d\u092f\u0915 https:// \u0909\u092a\u0938\u0930\u094d\u0917 \u0925\u092a\u094d\u0928 \u091a\u093e\u0939\u0928\u0941\u0939\u0941\u0928\u094d\u091b?","Title":"\u0936\u0940\u0930\u094d\u0937\u0915","To open the popup, press Shift+Enter":"\u092a\u092a\u0905\u092a \u0916\u094b\u0932\u094d\u0928, Shift+Enter \u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Toggle accordion":"","Tools":"\u0909\u092a\u0915\u0930\u0923\u0939\u0930\u0942","Top":"\u092e\u093e\u0925\u093f","Travel and Places":"\u092f\u093e\u0924\u094d\u0930\u093e \u0930 \u0938\u094d\u0925\u093e\u0928\u0939\u0930\u0942","Turquoise":"\u091f\u0930\u094d\u0915\u094d\u0935\u093f\u0938","Underline":"\u0930\u0947\u0916\u093e\u0919\u094d\u0915\u0928","Undo":"\u092a\u0942\u0930\u094d\u0935\u0938\u094d\u0925\u093f\u0924\u093f\u092e\u093e \u092b\u0930\u094d\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d","Upload":"\u0905\u092a\u0932\u094b\u0921 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Uploading image":"","Upper Alpha":"\u092e\u093e\u0925\u093f\u0932\u094d\u0932\u094b \u0905\u0932\u094d\u092b\u093e","Upper Roman":"\u092e\u093e\u0925\u093f\u0932\u094d\u0932\u094b \u0930\u094b\u092e\u0928","Url":"","User Defined":"\u092a\u094d\u0930\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924","Valid":"\u092e\u093e\u0928\u094d\u092f","Version":"\u0938\u0902\u0938\u094d\u0915\u0930\u0923","Vertical align":"","Vertical space":"\u0920\u093e\u0921\u094b \u0938\u094d\u0925\u093e\u0928","View":"\u0939\u0947\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d","Visual aids":"\u092d\u093f\u091c\u0941\u0905\u0932 \u0938\u0939\u093e\u092f\u0924\u093e","Warn":"\u091a\u0947\u0924\u093e\u0935\u0928\u0940","White":"\u0938\u0947\u0924\u094b","Width":"\u091a\u094c\u0921\u093e\u0907","Word count":"\u0936\u092c\u094d\u0926 \u0917\u0923\u0928\u093e","Words":"\u0936\u092c\u094d\u0926\u0939\u0930\u0942","Words: {0}":"\u0936\u092c\u094d\u0926\u0939\u0930\u0942: {0}","Yellow":"\u092a\u0939\u0947\u0901\u0932\u094b","Yes":"\u0939\u094b","You are using {0}":"\u0924\u092a\u093e\u0908\u0901 {0} \u092a\u094d\u0930\u092f\u094b\u0917 \u0917\u0930\u094d\u0926\u0948 \u0939\u0941\u0928\u0941\u0939\u0941\u0928\u094d\u091b","You have unsaved changes are you sure you want to navigate away?":"\u0924\u092a\u093e\u0908\u0901\u0938\u0901\u0917 \u092c\u091a\u0924 \u0928\u0917\u0930\u093f\u090f\u0915\u093e \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0942 \u091b\u0928\u094d, \u0924\u092a\u093e\u0908\u0901 \u0905\u0928\u094d\u0924 \u0928\u0947\u092d\u093f\u0917\u0947\u091f \u0917\u0930\u094d\u0928 \u0938\u0941\u0928\u093f\u0936\u094d\u091a\u093f\u0924 \u0939\u0941\u0928\u0941\u0939\u0941\u0928\u094d\u091b?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0924\u092a\u093e\u0908\u0901\u0915\u094b \u092c\u094d\u0930\u093e\u0909\u091c\u0930\u0932\u0947 \u0915\u094d\u0932\u093f\u092a\u092c\u094b\u0930\u094d\u0921\u092e\u093e \u092a\u094d\u0930\u0924\u094d\u092f\u0915\u094d\u0937 \u092a\u0939\u0941\u0901\u091a \u0938\u092e\u0930\u094d\u0925\u0928 \u0917\u0930\u094d\u0926\u0948\u0928\u0964 \u0915\u0943\u092a\u092f\u093e \u092f\u0938\u0915\u094b \u0938\u091f\u094d\u091f\u093e\u092e\u093e Ctrl+X/C/V \u0915\u0941\u091e\u094d\u091c\u0940\u092a\u093e\u091f\u0940 \u0938\u0930\u094d\u091f\u0915\u091f\u0939\u0930\u0942 \u092a\u094d\u0930\u092f\u094b\u0917 \u0917\u0930\u094d\u0928\u0941\u0939\u094b\u0938\u094d\u0964","alignment":"\u092a\u0919\u094d\u0915\u094d\u0924\u093f\u092c\u0926\u094d\u0927\u0924\u093e","austral sign":"\u0905\u0938\u094d\u091f\u094d\u0930\u0932 \u091a\u093f\u0928\u094d\u0939","cedi sign":"\u0938\u0947\u0921\u0940 \u091a\u093f\u0928\u094d\u0939","colon sign":"\u0915\u094b\u0932\u0928 \u091a\u093f\u0928\u094d\u0939","cruzeiro sign":"\u0915\u094d\u0930\u0941\u091c\u0947\u0930\u094b \u091a\u093f\u0928\u094d\u0939","currency sign":"\u092e\u0941\u0926\u094d\u0930\u093e \u091a\u093f\u0928\u094d\u0939","dollar sign":"\u0921\u0932\u0930 \u091a\u093f\u0928\u094d\u0939","dong sign":"\u0926\u094b\u0919 \u091a\u093f\u0928\u094d\u0939","drachma sign":"\u0921\u094d\u0930\u093e\u0915\u094d\u092e\u093e \u091a\u093f\u0928\u094d\u0939","euro-currency sign":"\u092f\u0941\u0930\u094b-\u092e\u0941\u0926\u094d\u0930\u093e \u091a\u093f\u0928\u094d\u0939","example":"\u0909\u0926\u093e\u0939\u0930\u0923","formatting":"\u0938\u094d\u0935\u0930\u0942\u092a\u0923","french franc sign":"\u092b\u094d\u0930\u0947\u0928\u094d\u091a \u092b\u094d\u0930\u094d\u092f\u093e\u0919\u094d\u0915 \u091a\u093f\u0928\u094d\u0939","german penny symbol":"\u091c\u0930\u094d\u092e\u0928 \u092a\u0947\u0928\u094d\u0928\u0940 \u091a\u093f\u0928\u094d\u0939","guarani sign":"\u0917\u0941\u0906\u0930\u093e\u0928\u0940 \u091a\u093f\u0928\u094d\u0939","history":"\u0907\u0924\u093f\u0939\u093e\u0938","hryvnia sign":"\u0939\u094d\u0930\u093f\u092d\u094d\u0928\u093f\u092f\u093e \u091a\u093f\u0928\u094d\u0939","indentation":"\u0907\u0928\u094d\u0921\u0947\u0928\u094d\u091f\u0947\u0938\u0928","indian rupee sign":"\u092d\u093e\u0930\u0924\u0940\u092f \u0930\u0941\u092a\u0948\u092f\u093e\u0901 \u091a\u093f\u0928\u094d\u0939","kip sign":"\u0915\u093f\u092a \u091a\u093f\u0928\u094d\u0939","lira sign":"\u0932\u093f\u0930\u093e \u091a\u093f\u0928\u094d\u0939","livre tournois sign":"\u0932\u093f\u092d\u094d\u0930\u0947 \u091f\u0941\u0930\u094d\u0928\u094b\u0907\u0938 \u091a\u093f\u0928\u094d\u0939","manat sign":"\u092e\u093e\u0928\u091f \u091a\u093f\u0928\u094d\u0939","mill sign":"\u092e\u093f\u0932 \u091a\u093f\u0928\u094d\u0939","naira sign":"\u0928\u093e\u092f\u0930\u093e \u091a\u093f\u0928\u094d\u0939","new sheqel sign":"\u0928\u092f\u093e\u0901 \u0938\u0947\u0915\u0947\u0932 \u091a\u093f\u0928\u094d\u0939","nordic mark sign":"\u0928\u0930\u094d\u0921\u093f\u0915 \u092e\u093e\u0930\u094d\u0915 \u091a\u093f\u0928\u094d\u0939","peseta sign":"\u092a\u0947\u0938\u0947\u091f\u093e \u091a\u093f\u0928\u094d\u0939","peso sign":"\u092a\u0947\u0938\u094b \u091a\u093f\u0928\u094d\u0939","ruble sign":"\u0930\u0941\u092c\u0932 \u091a\u093f\u0928\u094d\u0939","rupee sign":"\u0930\u0941\u092a\u0948\u092f\u093e\u0901 \u091a\u093f\u0928\u094d\u0939","spesmilo sign":"\u0938\u094d\u092a\u0947\u0938\u092e\u093f\u0932\u094b \u091a\u093f\u0928\u094d\u0939","styles":"\u0936\u0948\u0932\u0940\u0939\u0930\u0942","tenge sign":"\u091f\u0947\u0919\u094d\u0917\u0947 \u091a\u093f\u0928\u094d\u0939","tugrik sign":"\u091f\u0941\u0917\u094d\u0930\u093f\u0915 \u091a\u093f\u0928\u094d\u0939","turkish lira sign":"\u091f\u0930\u094d\u0915\u093f\u0938 \u0932\u093f\u0930\u093e \u091a\u093f\u0928\u094d\u0939","won sign":"\u0935\u094b\u0928 \u091a\u093f\u0928\u094d\u0939","yen character":"\u092f\u0947\u0928 \u0935\u0930\u094d\u0923","yen/yuan character variant one":"\u092f\u0947\u0928/\u092f\u0941\u0906\u0928 \u0935\u0930\u094d\u0923\u0915\u094b \u092a\u094d\u0930\u0915\u093e\u0930 \u090f\u0915","yuan character":"\u092f\u0941\u0906\u0928 \u0935\u0930\u094d\u0923","yuan character, in hong kong and taiwan":"\u092f\u0941\u0906\u0928 \u0935\u0930\u094d\u0923, \u0939\u0919\u0915\u0919 \u0930 \u0924\u093e\u0907\u0935\u093e\u0928\u092e\u093e","{0} characters":"{0} \u0935\u0930\u094d\u0923\u0939\u0930\u0942","{0} columns, {1} rows":"","{0} words":"{0} \u0936\u092c\u094d\u0926\u0939\u0930\u0942"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/nl.js b/staticfiles/tinymce/langs/nl.js new file mode 100644 index 0000000..76d16b0 --- /dev/null +++ b/staticfiles/tinymce/langs/nl.js @@ -0,0 +1 @@ +tinymce.addI18n("nl",{"#":"#","Accessibility":"Toegankelijkheid","Accordion":"Accordeon","Accordion body...":"Accordeon body...","Accordion summary...":"Accordeon samenvatting...","Action":"Actie","Activity":"Activiteit","Address":"Adres","Advanced":"Geavanceerd","Align":"Uitlijnen","Align center":"Centreren","Align left":"Links uitlijnen","Align right":"Rechts uitlijnen","Alignment":"Uitlijning","Alignment {0}":"Uitlijning {0}","All":"Alle","Alternative description":"Alternatieve beschrijving","Alternative source":"Alternatieve bron","Alternative source URL":"Alternatief bron-URL","Anchor":"Anker","Anchor...":"Anker...","Anchors":"Ankers","Animals and Nature":"Dieren en natuur","Arrows":"Pijlen","B":"B","Background color":"Achtergrondkleur","Background color {0}":"Achtergrondkleur {0}","Black":"Zwart","Block":"Blok","Block {0}":"Blok {0}","Blockquote":"Quote","Blocks":"Blokken","Blue":"Blauw","Blue component":"Blauw component","Body":"Body","Bold":"Vetgedrukt","Border":"Rand","Border color":"Randkleur","Border style":"Randstijl","Border width":"Randbreedte","Bottom":"Onder","Browse files":"Browse bestanden","Browse for an image":"Afbeelding zoeken","Browse links":"Browse links","Bullet list":"Lijst met opsommingstekens","Cancel":"Annuleren","Caption":"Onderschrift","Cell":"Cel","Cell padding":"Celopvulling","Cell properties":"Celeigenschappen","Cell spacing":"Celafstand","Cell styles":"Cel stijlen","Cell type":"Celtype","Center":"Centreren","Characters":"Tekens","Characters (no spaces)":"Tekens (geen spaties)","Circle":"Cirkel","Class":"Klasse","Clear formatting":"Opmaak wissen","Close":"Sluiten","Code":"Broncode","Code sample...":"Codevoorbeeld...","Code view":"Code bekijken","Color Picker":"Kleurenkiezer","Color swatch":"Kleurenwaaier","Cols":"Kolommen","Column":"Kolom","Column clipboard actions":"Kolom klembord acties","Column group":"Kolomgroep","Column header":"Kolom kop","Constrain proportions":"Verhoudingen behouden","Copy":"Kopi\xebren","Copy column":"Kopieer kolom","Copy row":"Rij kopi\xebren","Could not find the specified string.":"Kan opgegeven reeks niet vinden","Could not load emojis":"Kan de emoji's niet laden","Count":"Telling","Currency":"Valuta","Current window":"Huidige venster","Custom color":"Aangepaste kleur","Custom...":"Aangepast...","Cut":"Knippen","Cut column":"Knip kolom","Cut row":"Rij knippen","Dark Blue":"Donkerblauw","Dark Gray":"Donkergrijs","Dark Green":"Donkergroen","Dark Orange":"Donkeroranje","Dark Purple":"Donkerpaars","Dark Red":"Donkerrood","Dark Turquoise":"Donkerturquoise","Dark Yellow":"Donkergeel","Dashed":"Onderbroken","Date/time":"Datum/tijd","Decrease indent":"Inspringing verkleinen","Default":"Standaard","Delete accordion":"Verwijder Accordeon","Delete column":"Kolom verwijderen","Delete row":"Rij verwijderen ","Delete table":"Tabel verwijderen","Dimensions":"Afmetingen","Disc":"Schijf","Div":"Div","Document":"Dokument","Dotted":"Gestippeld","Double":"Dubbel","Drop an image here":"Hier een afbeelding neerzetten","Dropped file type is not supported":"Gesleepte bestandstype wordt niet ondersteund","Edit":"Bewerken","Embed":"Insluiten","Emojis":"Emoji's","Emojis...":"Emoji's...","Error":"Fout","Error: Form submit field collision.":"Fout: Veldconflict bij versturen formulier.","Error: No form element found.":"Fout: Geen formulierelement gevonden.","Extended Latin":"Latijn uitgebreid ","Failed to initialize plugin: {0}":"Niet gelukt om plug-in te initialiseren: {0}","Failed to load plugin url: {0}":"Niet gelukt om URL plug-in te laden: {0}","Failed to load plugin: {0} from url {1}":"Niet gelukt om plug-in te laden: {0} vanaf URL {1}","Failed to upload image: {0}":"Niet gelukt om afbeelding te uploaden: {0}","File":"Bestand","Find":"Zoeken","Find (if searchreplace plugin activated)":"Zoeken (als plug-in voor zoeken/vervangen geactiveerd is)","Find and Replace":"Zoek en vervang","Find and replace...":"Zoeken en vervangen...","Find in selection":"Zoek in selectie","Find whole words only":"Alleen hele woorden zoeken","Flags":"Vlaggen","Focus to contextual toolbar":"Focus op contextuele werkbalk instellen ","Focus to element path":"Focus op elementenpad instellen ","Focus to menubar":"Focus op menubalk instellen ","Focus to toolbar":"Focus op werkbalk instellen ","Font":"Lettertype","Font size {0}":"Grootte lettertype {0}","Font sizes":"Tekengroottes","Font {0}":"Lettertype {0}","Fonts":"Lettertypes","Food and Drink":"Eten en drinken","Footer":"Voettekst","Format":"Opmaak","Format {0}":"Formaat {0}","Formats":"Opmaken","Fullscreen":"Volledig scherm","G":"G","General":"Algemeen","Gray":"Grijs","Green":"Groen","Green component":"Groen component","Groove":"Groef","Handy Shortcuts":"Handige snelkoppelingen","Header":"Koptekst ","Header cell":"Koptekstcel","Heading 1":"Kop 1","Heading 2":"Kop 2","Heading 3":"Kop 3","Heading 4":"Kop 4","Heading 5":"Kop 5","Heading 6":"Kop 6","Headings":"Koppen","Height":"Hoogte","Help":"Help","Hex color code":"Hex kleurcode","Hidden":"Verborgen","Horizontal align":"Horizontaal uitlijnen","Horizontal line":"Horizontale lijn","Horizontal space":"Horizontale ruimte","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID moet beginnen met een letter en daarna enkel gevolgd door letters, getallen, streepjes, punten, komma's of underscores.","Image is decorative":"Afbeelding is decoratief","Image list":"Afbeeldingslijst","Image title":"Afbeeldingstitel","Image...":"Afbeelding...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP fout: Kan geen Image Proxy vinden","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP fout: Incorrecte Image proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP fout: Aanvraag afgewezen","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP fout: Onbekende ImageProxy fout","Increase indent":"Inspringing vergroten","Inline":"Inline","Insert":"Invoegen","Insert Template":"Sjabloon invoegen","Insert accordion":"Accordeon toevoegen","Insert column after":"Kolom invoegen na","Insert column before":"Kolom invoegen voor ","Insert date/time":"Datum/tijd invoegen","Insert image":"Afbeelding invoegen","Insert link (if link plugin activated)":"Link invoegen (als plug-in voor link geactiveerd is)","Insert row after":"Rij onder invoegen ","Insert row before":"Rij boven invoegen","Insert table":"Tabel invoegen","Insert template...":"Sjabloon invoegen...","Insert video":"Video invoegen","Insert/Edit code sample":"Codevoorbeeld invoegen/bewerken","Insert/edit image":"Afbeelding invoegen/bewerken","Insert/edit link":"Link invoegen/bewerken","Insert/edit media":"Media invoegen/bewerken","Insert/edit video":"Video invoegen/bewerken","Inset":"Inzet","Invalid hex color code: {0}":"Onjuiste hex kleurcode: {0}","Invalid input":"Ongeldige invoer","Italic":"Cursief","Justify":"Uitvullen","Keyboard Navigation":"Toetsenbord navigatie","Language":"Taal","Learn more...":"Leer meer...","Left":"Links","Left to right":"Van links naar rechts","Light Blue":"Lichtblauw","Light Gray":"Lichtgrijs","Light Green":"Lichtgroen","Light Purple":"Lichtpaars","Light Red":"Lichtrood","Light Yellow":"Lichtgeel","Line height":"Lijnhoogte","Link list":"Lijst met links","Link...":"Link...","List Properties":"Lijsteigenschappen","List properties...":"Lijsteigenschappen...","Loading emojis...":"Emoji's laden...","Loading...":"Laden...","Lower Alpha":"Kleine letters","Lower Greek":"Kleine Griekse letters","Lower Roman":"Kleine Romeinse cijfers","Match case":"Identieke hoofdletters/kleine letters","Mathematical":"Wiskundig","Media poster (Image URL)":"Mediaposter (afbeeldings-url)","Media...":"Media...","Medium Blue":"Middelblauw","Medium Gray":"Middelgrijs","Medium Purple":"Middelpaars","Merge cells":"Cellen samenvoegen","Middle":"Centreren","Midnight Blue":"Middernachtblauw","More...":"Meer...","Name":"Naam","Navy Blue":"Marineblauw","New document":"Nieuw document","New window":"Nieuw venster","Next":"Volgende","No":"Nee","No alignment":"Geen uitlijning","No color":"Geen kleur","Nonbreaking space":"Vaste spatie","None":"Geen","Numbered list":"Genummerde lijst","OR":"OF","Objects":"Objecten","Ok":"Ok","Open help dialog":"Help-scherm openen","Open link":"Open koppeling","Open link in...":"Link openen in...","Open popup menu for split buttons":"Open het pop-up menu voor gesplitste knoppen","Orange":"Oranje","Outset":"Begin","Page break":"Pagina-einde","Paragraph":"Alinea","Paste":"Plakken","Paste as text":"Plakken als tekst","Paste column after":"Plak kolom na","Paste column before":"Plak kolom voor","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Plakken gebeurt nu zonder opmaak. De tekst zal dus zonder opmaak worden geplakt tenzij je deze optie uit zet.","Paste or type a link":"Een link plakken of typen","Paste row after":"Rij plakken onder","Paste row before":"Rij plakken boven","Paste your embed code below:":"Plak de invoegcode hieronder:","People":"Personen","Plugins":"Plug-ins","Plugins installed ({0}):":"Plug-ins ge\xefnstalleerd ({0}):","Powered by {0}":"Mogelijk gemaakt met {0}","Pre":"Pre","Preferences":"Voorkeuren","Preformatted":"Vooraf opgemaakt","Premium plugins:":"Premium plug-ins:","Press the Up and Down arrow keys to resize the editor.":"Druk op pijl-omhoog en pijl-omlaag om het formaat van de editor te wijzigen.","Press the arrow keys to resize the editor.":"Druk op de pijltoetsen om het formaat van de editor te wijzigen.","Press {0} for help":"Druk op {0} voor hulp","Preview":"Voorbeeld","Previous":"Vorige","Print":"Afdrukken","Print...":"Afdrukken... ","Purple":"Paars","Quotations":"Citaten","R":"R","Range 0 to 255":"Bereik 0 tot 255","Red":"Rood","Red component":"Rood component","Redo":"Opnieuw uitvoeren","Remove":"Verwijderen","Remove color":"Kleur verwijderen","Remove link":"Link verwijderen","Replace":"Vervangen","Replace all":"Alle vervangen","Replace with":"Vervangen door","Resize":"Formaat wijzigen","Restore last draft":"Laatste concept herstellen","Reveal or hide additional toolbar items":"Extra werkbalkitems tonen of verbergen","Rich Text Area":"Rijk Tekst Gebied","Rich Text Area. Press ALT-0 for help.":" Gebied met opgemaakte tekst. Druk op ALT-0 voor hulp.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Gebied met opgemaakte tekst. Druk op ALT-F9 voor menu. Druk op ALT-F10 voor werkbalk. Druk op ALT-0 voor help.","Ridge":"Ribbel","Right":"Rechts","Right to left":"Van rechts naar links","Row":"Rij","Row clipboard actions":"Rij klembord acties","Row group":"Rijgroep","Row header":"Rij kop","Row properties":"Rijeigenschappen","Row type":"Rijtype","Rows":"Rijen","Save":"Opslaan","Save (if save plugin activated)":"Opslaan (als plug-in voor opslaan geactiveerd is)","Scope":"Bereik","Search":"Zoeken","Select all":"Alles selecteren","Select...":"Selecteer...","Selection":"Selectie","Shortcut":"Snelkoppeling","Show blocks":"Blokken weergeven","Show caption":"Bijschrift weergeven","Show invisible characters":"Onzichtbare tekens weergeven","Size":"Formaat","Solid":"Massief","Source":"Bron","Source code":"Broncode","Special Character":"Speciale tekens","Special character...":"Speciaal teken...","Split cell":"Cel splitsen","Square":"Vierkant","Start list at number":"Begin lijst met nummer","Strikethrough":"Doorhalen","Style":"Stijl","Subscript":"Subscript","Superscript":"Superscript","Switch to or from fullscreen mode":"Overschakelen naar of vanuit de volledig scherm-modus","Symbols":"Symbolen","System Font":"Systeemlettertype","Table":"Tabel","Table caption":"Tabel bijschrift","Table properties":"Tabeleigenschappen","Table styles":"Tabel stijlen","Template":"Sjabloon","Templates":"Sjablonen","Text":"Tekst","Text color":"Tekstkleur","Text color {0}":"Tekstkleur {0}","Text to display":"Weer te geven tekst","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"De ingevoerde URL lijkt op een e-mailadres. Wil je er het vereiste voorvoegsel mailto: aan toevoegen?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"De ingevoerde URL verwijst naar een extern adres. Wil je er het vereiste voorvoegsel http:// aan toevoegen?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"De ingevoerde URL verwijst naar een extern adres. Wilt u er het vereiste voorvoegsel https:// aan toevoegen?","Title":"Titel","To open the popup, press Shift+Enter":"Druk op Shift+Enter om de pop-up te openen","Toggle accordion":"Accordeon aan / uit zetten","Tools":"Extra","Top":"Boven","Travel and Places":"Reizen en plaatsen","Turquoise":"Turkoois","Underline":"Onderstrepen","Undo":"Ongedaan maken","Upload":"Uploaden","Uploading image":"Afbeelding uploaden","Upper Alpha":"Hoofdletters","Upper Roman":"Grote Romeinse cijfers","Url":"Url","User Defined":"Door gebruiker gedefinieerd ","Valid":"Geldig","Version":"Versie","Vertical align":"Verticaal uitlijnen","Vertical space":"Verticale ruimte","View":"Weergeven","Visual aids":"Visuele hulpmiddelen","Warn":"Waarschuwen","White":"Wit","Width":"Breedte","Word count":"Aantal woorden","Words":"Woorden","Words: {0}":"Woorden: {0}","Yellow":"Geel","Yes":"Ja","You are using {0}":"Je gebruikt {0}","You have unsaved changes are you sure you want to navigate away?":"Je hebt niet alles opgeslagen, weet je zeker dat je de pagina wilt verlaten?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Jouw browser ondersteunt geen rechtstreekse toegang tot het klembord. Gebruik in plaats daarvan de sneltoetsen Ctrl+X/C/V.","alignment":"uitlijning","austral sign":"austral-teken","cedi sign":"cedi-teken","colon sign":"colon-teken","cruzeiro sign":"cruzeiro-teken","currency sign":"valutateken","dollar sign":"dollarteken","dong sign":"dong-teken","drachma sign":"drachme-teken","euro-currency sign":"euroteken","example":"voorbeeld","formatting":"opmaak","french franc sign":"franse franc-teken","german penny symbol":"duitse pfennig-teken","guarani sign":"guarani-teken","history":"geschiedenis","hryvnia sign":"hryvnia-teken","indentation":"inspringing","indian rupee sign":"indiaase roepie-teken","kip sign":"kip-teken","lira sign":"lire-teken","livre tournois sign":"livre tournois-teken","manat sign":"manat-teken","mill sign":"mill-teken","naira sign":"naira-teken","new sheqel sign":"nieuwe sheqel-teken","nordic mark sign":"noorse mark-teken","peseta sign":"peseta-teken","peso sign":"peso-teken","ruble sign":"roebel-teken","rupee sign":"roepie-teken","spesmilo sign":"spesmilo-teken","styles":"stijlen","tenge sign":"tenge-teken","tugrik sign":"tugrik-teken","turkish lira sign":"turkse lire-teken","won sign":"won-teken","yen character":"yen-teken","yen/yuan character variant one":"yen/yuan variant 1-teken","yuan character":"yuan-teken","yuan character, in hong kong and taiwan":"yuan-teken (Hong Kong en Taiwan)","{0} characters":"{0} karakters","{0} columns, {1} rows":"{0} kolommen, {1} rijen","{0} words":"{0} woorden"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/nl_BE.js b/staticfiles/tinymce/langs/nl_BE.js new file mode 100644 index 0000000..84ec3bc --- /dev/null +++ b/staticfiles/tinymce/langs/nl_BE.js @@ -0,0 +1 @@ +tinymce.addI18n("nl_BE",{"#":"#","Accessibility":"Toegankelijkheid","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Actie","Activity":"Activiteit","Address":"Adres","Advanced":"Geavanceerd","Align":"Aligneer","Align center":"Centreren","Align left":"Links uitlijnen","Align right":"Rechts uitlijnen","Alignment":"Uitlijning","Alignment {0}":"","All":"Alle","Alternative description":"Alternatieve beschrijving","Alternative source":"Alternatieve bron","Alternative source URL":"Alternatieve bron URL","Anchor":"Anker","Anchor...":"Anker...","Anchors":"Ankers","Animals and Nature":"Dieren en natuur","Arrows":"Pijlen","B":"B","Background color":"Achtergrondkleur","Background color {0}":"","Black":"Zwart","Block":"Vierkant","Block {0}":"","Blockquote":"Citaat","Blocks":"Blokken","Blue":"Blauw","Blue component":"Blauw component","Body":"Hoofdtekst","Bold":"Vet","Border":"Rand","Border color":"Randkleur","Border style":"Randstijl","Border width":"Randbreedte","Bottom":"Onder","Browse files":"","Browse for an image":"Een afbeelding zoeken","Browse links":"","Bullet list":"Ongeordende lijst","Cancel":"Annuleren","Caption":"Bijschrift","Cell":"Cel","Cell padding":"Celopvulling","Cell properties":"Celeigenschappen","Cell spacing":"Celafstand","Cell styles":"Cel stijlen","Cell type":"Celtype","Center":"Midden","Characters":"Karakters","Characters (no spaces)":"Karakters (zonder spaties)","Circle":"Cirkel","Class":"Class","Clear formatting":"Opmaak verwijderen","Close":"Sluiten","Code":"Broncode","Code sample...":"Codevoorbeeld...","Code view":"Codeweergave","Color Picker":"Kleurenkiezer","Color swatch":"Kleurenstaal","Cols":"Kolommen","Column":"Kolom","Column clipboard actions":"Rij klembord acties","Column group":"Kolomgroep","Column header":"Kolom kop","Constrain proportions":"Verhoudingen begrenzen","Copy":"Kopi\xebren","Copy column":"Kopieer kolom","Copy row":"Rij kopi\xebren","Could not find the specified string.":"Kon de gespecificeerde string niet vinden.","Could not load emojis":"Kan de emoji's niet laden","Count":"Tellen","Currency":"Valuta","Current window":"Huidig venster","Custom color":"Aangepaste kleur","Custom...":"Aangepast...","Cut":"Knippen","Cut column":"Knip kolom","Cut row":"Rij knippen","Dark Blue":"Donker Blauw","Dark Gray":"Donker Grijs","Dark Green":"Donker groen","Dark Orange":"Donker Oranje","Dark Purple":"Donker Paars","Dark Red":"Donker Rood","Dark Turquoise":"Donker turkoois","Dark Yellow":"Donker Geel","Dashed":"Onderbroken","Date/time":"Datum/tijd","Decrease indent":"Inspringing verkleinen","Default":"Standaard","Delete accordion":"","Delete column":"Kolom verwijderen","Delete row":"Rij verwijderen","Delete table":"Tabel verwijderen","Dimensions":"Afmetingen","Disc":"Schijf","Div":"Div","Document":"Document","Dotted":"Gestippeld","Double":"Dubbel","Drop an image here":"Plaats hier een afbeelding","Dropped file type is not supported":"Gesleepte bestandstype wordt niet ondersteund","Edit":"Bewerken","Embed":"Insluiten","Emojis":"Emoji's","Emojis...":"Emoji's...","Error":"Fout","Error: Form submit field collision.":"Fout: Veldconflict bij versturen formulier.","Error: No form element found.":"Fout: Geen formulierelement gevonden.","Extended Latin":"Latijn uitgebreid","Failed to initialize plugin: {0}":"Plug-in initialiseren niet gelukt: {0}","Failed to load plugin url: {0}":"Plug-in URL laden niet gelukt: {0}","Failed to load plugin: {0} from url {1}":"Plug-in laden niet gelukt: {0} vanaf url {1}","Failed to upload image: {0}":"Afbeelding uploaden niet gelukt: {0}","File":"Bestand","Find":"Zoeken","Find (if searchreplace plugin activated)":"Zoeken (als zoeken/vervangen plug-in geactiveerd is)","Find and Replace":"Zoeken en Vervangen","Find and replace...":"Zoeken en vervangen...","Find in selection":"Zoeken in selectie","Find whole words only":"Enkel volledige woorden","Flags":"Vlaggen","Focus to contextual toolbar":"Focus naar contextuele werkbalk","Focus to element path":"Focus naar elementenpad","Focus to menubar":"Focus naar menubalk","Focus to toolbar":"Focus naar werkbalk","Font":"Lettertype","Font size {0}":"","Font sizes":"Lettergroottes","Font {0}":"","Fonts":"Lettertypen","Food and Drink":"Voedsel en drank","Footer":"Voettekst","Format":"Formaat","Format {0}":"","Formats":"Formaten","Fullscreen":"Schermvullend","G":"G","General":"Algemeen","Gray":"Grijs","Green":"Groen","Green component":"Groen component","Groove":"Groef","Handy Shortcuts":"Handige snelkoppelingen","Header":"Koptekst","Header cell":"Koptekstcel","Heading 1":"Hoofding 1","Heading 2":"Hoofding 2","Heading 3":"Hoofding 3","Heading 4":"Hoofding 4","Heading 5":"Hoofding 5","Heading 6":"Hoofding 6","Headings":"Hoofdingen","Height":"Hoogte","Help":"Help","Hex color code":"Hex kleurcode","Hidden":"Verborgen","Horizontal align":"Horizontaal uitlijnen","Horizontal line":"Horizontale lijn","Horizontal space":"Horizontale ruimte","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID moet beginnen met een letter en daarna enkel gevolgd door letters, getallen, streepjes, punten, komma's of underscores.","Image is decorative":"Afbeelding is decoratief","Image list":"Afbeeldingenlijst","Image title":"Afbeeldingstitel","Image...":"Afbeelding...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP fout: Kan geen Image Proxy vinden","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP fout: Incorrecte Image proxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP fout: Aanvraag afgewezen","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP fout: Onbekende ImageProxy fout","Increase indent":"Inspringing vergroten","Inline":"In tekstregel","Insert":"Invoegen","Insert Template":"Sjabloon invoegen","Insert accordion":"","Insert column after":"Kolom invoegen na","Insert column before":"Kolom invoegen voor","Insert date/time":"Datum/tijd invoegen","Insert image":"Afbeelding invoegen","Insert link (if link plugin activated)":"Link invoegen (als link plug-in geactiveerd is)","Insert row after":"Rij onder invoegen","Insert row before":"Rij boven invoegen","Insert table":"Tabel invoegen","Insert template...":"Sjabloon invoegen...","Insert video":"Video invoegen","Insert/Edit code sample":"Codevoorbeeld invoegen/bewerken","Insert/edit image":"Afbeelding invoegen/bewerken","Insert/edit link":"Link invoegen/bewerken","Insert/edit media":"Media invoegen/bewerken","Insert/edit video":"Video invoegen/bewerken","Inset":"Inzet","Invalid hex color code: {0}":"Onjuiste hex kleurcode: {0}","Invalid input":"Ongeldige invoer","Italic":"Cursief","Justify":"Distribueren","Keyboard Navigation":"Toetsenbord navigatie","Language":"Taal","Learn more...":"Leer meer...","Left":"Links","Left to right":"Links naar rechts","Light Blue":"Licht Blauw","Light Gray":"Lichtgrijs","Light Green":"Licht Groen","Light Purple":"Licht Paars","Light Red":"Licht Rood","Light Yellow":"Licht Geel","Line height":"Regelhoogte","Link list":"Link lijst","Link...":"Link...","List Properties":"Lijst Eigenschappen","List properties...":"Lijst eigenschappen...","Loading emojis...":"Emoji's laden...","Loading...":"Laden...","Lower Alpha":"Kleine letters","Lower Greek":"Klein Grieks schrift","Lower Roman":"Klein Latijns schrift","Match case":"Hoofdlettergevoelig","Mathematical":"Wiskundig","Media poster (Image URL)":"Mediaposter (Afbeelding URL)","Media...":"Media...","Medium Blue":"Middelblauw","Medium Gray":"Middel Grijs","Medium Purple":"Middelpaars","Merge cells":"Cellen samenvoegen","Middle":"Midden","Midnight Blue":"Middernachtblauw","More...":"Meer...","Name":"Naam","Navy Blue":"Marineblauw","New document":"Nieuw document","New window":"Nieuw venster","Next":"Volgende","No":"Nee","No alignment":"Geen uitlijning","No color":"Geen kleur","Nonbreaking space":"Vaste spatie","None":"Geen","Numbered list":"Geordende lijst","OR":"OF","Objects":"Voorwerpen","Ok":"OK","Open help dialog":"Helpdialoog openen","Open link":"Link openen","Open link in...":"Link openen in...","Open popup menu for split buttons":"Open pop-up menu voor gesplitste knoppen","Orange":"Oranje","Outset":"Uitzet","Page break":"Pagina-einde","Paragraph":"Paragraaf","Paste":"Plakken","Paste as text":"Plakken als tekst","Paste column after":"Plak kolom na","Paste column before":"Plak kolom voor","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Plakken is nu in gewone tekst modus. Elementen zullen nu als gewone tekst geplakt worden tot u deze optie uit schakelt.","Paste or type a link":"Link plakken of typen","Paste row after":"Rij onder plakken","Paste row before":"Rij boven plakken","Paste your embed code below:":"Plak de in te sluiten code hieronder:","People":"Mensen","Plugins":"Plug-ins","Plugins installed ({0}):":"Ge\xefnstalleerde plugins ({0}):","Powered by {0}":"Aangedreven door {0}","Pre":"Pre","Preferences":"Voorkeuren","Preformatted":"Gepreformateerd","Premium plugins:":"Premium plug-ins:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Voorbeeld","Previous":"Vorige","Print":"Afdrukken","Print...":"Afdrukken...","Purple":"Paars","Quotations":"Citaten","R":"R","Range 0 to 255":"Bereik 0 tot 255","Red":"Rood","Red component":"Rood component","Redo":"Opnieuw doen","Remove":"Verwijderen","Remove color":"Kleur verwijderen","Remove link":"Link verwijderen","Replace":"Vervangen","Replace all":"Alles vervangen","Replace with":"Vervangen door","Resize":"Herschalen","Restore last draft":"Laatste concept herstellen","Reveal or hide additional toolbar items":"","Rich Text Area":"Rich-text Gebied","Rich Text Area. Press ALT-0 for help.":"Rich Text Area. Druk op Alt-0 voor help.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rich Text Area. Druk op Alt-F9 voor menu. Druk op Alt-F10 voor gereedschapsbalk. Druk op Alt-0 voor help","Ridge":"Ribbel","Right":"Rechts","Right to left":"Rechts naar links","Row":"Rij","Row clipboard actions":"Rij klembord acties","Row group":"Rijgroep","Row header":"Rij kop","Row properties":"Rijeigenschappen","Row type":"Rijtype","Rows":"Rijen","Save":"Opslaan","Save (if save plugin activated)":"Opslaan (als opslaan plug-in geactiveerd is)","Scope":"Bereik","Search":"Zoeken","Select all":"Alles selecteren","Select...":"Selecteren...","Selection":"Selectie","Shortcut":"Snelkoppeling","Show blocks":"Blokken tonen","Show caption":"Bijschrift tonen","Show invisible characters":"Onzichtbare tekens tonen","Size":"Grootte","Solid":"Ononderbroken","Source":"Bron","Source code":"Broncode","Special Character":"Speciale tekens","Special character...":"Speciaal karakter...","Split cell":"Cel splitsen","Square":"Vierkant","Start list at number":"Begin lijst bij nummer","Strikethrough":"Doorstreept","Style":"Stijl","Subscript":"Subscript","Superscript":"Superscript","Switch to or from fullscreen mode":"Schakelen naar of vanuit volledige schermmodus","Symbols":"Symbolen","System Font":"Systeemlettertype","Table":"Tabel","Table caption":"Tabel onderschrift","Table properties":"Tabeleigenschappen","Table styles":"Tabel stijlen","Template":"Sjabloon","Templates":"Sjablonen","Text":"Tekst","Text color":"Tekstkleur","Text color {0}":"","Text to display":"Weer te geven tekst","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"De ingevoerde URL lijkt op een e-mailadres. Wilt u er het vereiste voorvoegsel mailto: aan toevoegen?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"De ingevoerde URL lijkt op een externe link. Wilt u er het vereiste voorvoegsel http:// aan toevoegen?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"De ingevoerde URL lijkt op een externe link. Wilt u er het vereiste voorvoegsel https:// aan toevoegen?","Title":"Titel","To open the popup, press Shift+Enter":"Druk op Shift+Enter om de pop-up te openen","Toggle accordion":"","Tools":"Gereedschappen","Top":"Boven","Travel and Places":"Reizen en plaatsen","Turquoise":"Turkoois","Underline":"Onderlijnd","Undo":"Ongedaan maken","Upload":"Uploaden","Uploading image":"Afbeelding uploaden","Upper Alpha":"Hoofdletters","Upper Roman":"Hoofdletters Latijns","Url":"Url","User Defined":"Gebruiker Gedefinieerd","Valid":"Geldig","Version":"Versie","Vertical align":"Verticaal uitlijnen","Vertical space":"Verticale ruimte","View":"Tonen","Visual aids":"Visuele hulpmiddelen","Warn":"Waarschuwen","White":"Wit","Width":"Breedte","Word count":"Aantal woorden","Words":"Woorden","Words: {0}":"Woorden: {0}","Yellow":"Geel","Yes":"Ja","You are using {0}":"U gebruikt {0}","You have unsaved changes are you sure you want to navigate away?":"U heeft niet opgeslagen wijzigingen bent u zeker dat u de pagina wilt verlaten?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Uw browser ondersteunt geen directe toegang tot het klembord. Gelieve de CTRL+X/C/V toetsen te gebruiken.","alignment":"uitlijning","austral sign":"austral teken","cedi sign":"cedi teken","colon sign":"colon teken","cruzeiro sign":"cruzeiro teken","currency sign":"valuta teken","dollar sign":"dollar teken","dong sign":"dong teken","drachma sign":"drachme teken","euro-currency sign":"euro valuta teken","example":"voorbeeld","formatting":"opmaak","french franc sign":"franse frank teken","german penny symbol":"duitse pfennig teken","guarani sign":"guarani teken","history":"geschiedenis","hryvnia sign":"hryvnia teken","indentation":"inspringing","indian rupee sign":"indische roepie teken","kip sign":"kip teken","lira sign":"lire teken","livre tournois sign":"tours pond teken","manat sign":"manat teken","mill sign":"mill teken","naira sign":"naira teken","new sheqel sign":"nieuwe shekel teken","nordic mark sign":"noordse mark teken","peseta sign":"peseta teken","peso sign":"peso teken","ruble sign":"roebel teken","rupee sign":"roepie teken","spesmilo sign":"spesmilo teken","styles":"stijlen","tenge sign":"tenge teken","tugrik sign":"tugrik teken","turkish lira sign":"turkse lira teken","won sign":"won teken","yen character":"yen karakter","yen/yuan character variant one":"yen/yuan karakter variant een","yuan character":"yuan karakter","yuan character, in hong kong and taiwan":"yuan karakter, in hong kong en taiwan","{0} characters":"{0} karakters","{0} columns, {1} rows":"","{0} words":"{0} woorden"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/oc.js b/staticfiles/tinymce/langs/oc.js new file mode 100644 index 0000000..eab5cc7 --- /dev/null +++ b/staticfiles/tinymce/langs/oc.js @@ -0,0 +1 @@ +tinymce.addI18n("oc",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Accion","Activity":"Activitat","Address":"Adre\xe7as","Advanced":"Avan\xe7at","Align":"Alinhament","Align center":"Alinhar al centre","Align left":"Alinhar a esqu\xe8rra","Align right":"Alinhar a drecha","Alignment":"Alinhament","Alignment {0}":"","All":"Tot","Alternative description":"","Alternative source":"Font alternativa","Alternative source URL":"URL font alternativa","Anchor":"Ancora","Anchor...":"Ancora...","Anchors":"Anc\xf2ras","Animals and Nature":"Animals e Natura","Arrows":"Fl\xe8chas","B":"","Background color":"Color de r\xe8ireplan","Background color {0}":"","Black":"Negre","Block":"Bl\xf2c","Block {0}":"","Blockquote":"Citacion","Blocks":"Bl\xf2ts","Blue":"Blau","Blue component":"","Body":"C\xf2s","Bold":"Gras","Border":"Bordadura","Border color":"Color de la bordadura","Border style":"Estil bordadura","Border width":"Largor bordadura","Bottom":"Bas","Browse files":"","Browse for an image":"Cercar un imatge","Browse links":"","Bullet list":"Piuses","Cancel":"Anullar","Caption":"T\xedtol","Cell":"Cellula","Cell padding":"Espa\xe7ament int\xe8rne cellula","Cell properties":"Proprietats de la cellula","Cell spacing":"Espa\xe7ament intercellullas","Cell styles":"","Cell type":"Tipe de cellula","Center":"Centre","Characters":"Caract\xe8rs","Characters (no spaces)":"Caract\xe8rs (sens espaci)","Circle":"Cercle","Class":"Clase","Clear formatting":"Escafar la mesa en forma","Close":"Tampar","Code":"C\xf2de","Code sample...":"Exemple de c\xf2di...","Code view":"","Color Picker":"Trapador de color","Color swatch":"Cambiament de color","Cols":"Colomnas","Column":"Colomna","Column clipboard actions":"","Column group":"Grop de colomnas","Column header":"","Constrain proportions":"Conservar las proporcions","Copy":"Copiar","Copy column":"","Copy row":"Copiar la linha","Could not find the specified string.":"Impossible de trobar la cadena especificada.","Could not load emojis":"","Count":"Comptador","Currency":"Moneda","Current window":"Fen\xe8stra actuala","Custom color":"Color personalizada","Custom...":"Personalizar...","Cut":"Talhar","Cut column":"","Cut row":"Talhar la linha","Dark Blue":"Blau escur","Dark Gray":"Gris escur","Dark Green":"Verd escur","Dark Orange":"Irange escur","Dark Purple":"Violet escur","Dark Red":"Roge escur","Dark Turquoise":"Turquesa escur","Dark Yellow":"Jaune escur","Dashed":"","Date/time":"Data/ora","Decrease indent":"Demesir l'alin\xe8a","Default":"Per defaut","Delete accordion":"","Delete column":"Suprimir la colomna","Delete row":"Suprimir la linha","Delete table":"Suprimir lo tabl\xe8u","Dimensions":"","Disc":"Disco","Div":"Div","Document":"","Dotted":"","Double":"","Drop an image here":"Depausatz un imatge aqu\xed","Dropped file type is not supported":"","Edit":"Editar","Embed":"Integrat","Emojis":"","Emojis...":"","Error":"","Error: Form submit field collision.":"","Error: No form element found.":"Error\u202f: cap d\u2019element formulari pas trobat.","Extended Latin":"","Failed to initialize plugin: {0}":"","Failed to load plugin url: {0}":"","Failed to load plugin: {0} from url {1}":"","Failed to upload image: {0}":"Frac\xe0s mandad\xeds imatge : {0}","File":"Fichi\xe8r","Find":"Recercar","Find (if searchreplace plugin activated)":"Cercar (se l\u2019extension Searchreplace es activada)","Find and Replace":"","Find and replace...":"Trobar e rempla\xe7ar...","Find in selection":"","Find whole words only":"Cercar mot enti\xe8r sonque","Flags":"Drap\xe8us","Focus to contextual toolbar":"","Focus to element path":"","Focus to menubar":"Se centrar en la barra del menu","Focus to toolbar":"Se centrar en la barra d'esturments","Font":"Polissa","Font size {0}":"","Font sizes":"Tamans de fu\xf2c","Font {0}":"","Fonts":"Polissas","Food and Drink":"Beure e manjar","Footer":"P\xe8 de pagina","Format":"","Format {0}":"","Formats":"Formats","Fullscreen":"Ecran complet","G":"V","General":"","Gray":"Gris","Green":"Verd","Green component":"","Groove":"","Handy Shortcuts":"Acorchis utils","Header":"Ent\xe8sta","Header cell":"Cellula d'ent\xe8sta","Heading 1":"T\xedtol 1","Heading 2":"T\xedtol 2","Heading 3":"T\xedtol 3","Heading 4":"T\xedtol 4","Heading 5":"T\xedtol 5","Heading 6":"T\xedtol 6","Headings":"T\xedtols","Height":"Nautor","Help":"Ajuda","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Linha orizontala","Horizontal space":"Espa\xe7ament orizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID auri\xe1 de comen\xe7ar per una letra, seguit sonque per de letras, de nombres, de barras, de ponchs, dos ponchs o de barras bassas.","Image is decorative":"","Image list":"Lista d\u2019imatges","Image title":"T\xedtol imatge","Image...":"Imatge...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Aumentar l'alin\xe8a","Inline":"En linha","Insert":"Inserir","Insert Template":"","Insert accordion":"","Insert column after":"Inserir una colomna apr\xe8p","Insert column before":"Inserir una colomna abans","Insert date/time":"Inserir data/ora","Insert image":"Inserir un imatge","Insert link (if link plugin activated)":"Inserir un ligam (se l\u2019extension Ligam es activada)","Insert row after":"Inserir una linha apr\xe8p","Insert row before":"Inserir una linha abans","Insert table":"Inserir un tabl\xe8u","Insert template...":"Inserir un mod\xe8l...","Insert video":"Inserir una vid\xe8o","Insert/Edit code sample":"Inserir/Modificar exemple de c\xf2di","Insert/edit image":"Inserir/modificar un imatge","Insert/edit link":"Inserir/modificar un ligam","Insert/edit media":"Inserir/modificar un m\xe8dia","Insert/edit video":"Inserir/modificar una vid\xe8o","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Italica","Justify":"Justificar","Keyboard Navigation":"Acorchis clavi\xe8r","Language":"Lenga","Learn more...":"Ne saber mai...","Left":"Esqu\xe8rra","Left to right":"D'esqu\xe8rra cap a drecha","Light Blue":"Blau clar","Light Gray":"Gris clar","Light Green":"Verd clar","Light Purple":"Violet clar","Light Red":"Roge clar","Light Yellow":"Jaune clar","Line height":"","Link list":"Lista de ligams","Link...":"Ligam...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Alfa minuscula","Lower Greek":"Gr\xe8c minuscula","Lower Roman":"Roman minuscula","Match case":"Respectar la cassa","Mathematical":"","Media poster (Image URL)":"","Media...":"M\xe8dia...","Medium Blue":"Blau mejan","Medium Gray":"Gris mejan","Medium Purple":"Violet mejan","Merge cells":"Fusionar las cellulas","Middle":"Mitan","Midnight Blue":"Blau nu\xe8ch","More...":"Mai...","Name":"Nom","Navy Blue":"Blau marin","New document":"Document nov\xe8l","New window":"Fen\xe8stra nov\xe8la","Next":"Seg","No":"Non","No alignment":"Pas d'alinhament","No color":"Pas de color","Nonbreaking space":"Espaci insecable","None":"Pas cap","Numbered list":"Lista numerotada","OR":"O","Objects":"Obj\xe8ctes","Ok":"D'ac\xf2rdi","Open help dialog":"","Open link":"","Open link in...":"Dobrir lo ligam dins...","Open popup menu for split buttons":"","Orange":"Irange","Outset":"","Page break":"Pagina copada","Paragraph":"Paragraf","Paste":"Pegar","Paste as text":"Pegar coma de t\xe8xte","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":'Lo quichapapi\xe8rs es ara en m\xf2de "t\xe8xte plen". Los contenguts ser\xe0n pegats sens ret\xe9ner los formatatges fins al moment que desactivaretz aquesta opcion.',"Paste or type a link":"Pegatz o picatz un ligam","Paste row after":"Pegar la linha apr\xe8p","Paste row before":"Pegar la linha abans","Paste your embed code below:":"Pegatz v\xf2tre c\xf2di d'integracion \xe7aij\xf3s :","People":"Gents","Plugins":"Extensions","Plugins installed ({0}):":"Extensions installadas ({0})\u202f:","Powered by {0}":"Propulsat per {0}","Pre":"Pre","Preferences":"Prefer\xe9ncias","Preformatted":"Preformatat","Premium plugins:":"Extensions Premium\u202f:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Previsualizar","Previous":"Precedent","Print":"","Print...":"Imprimir...","Purple":"Violet","Quotations":"Citacions","R":"","Range 0 to 255":"","Red":"Roge","Red component":"","Redo":"Refar","Remove":"Eliminar","Remove color":"Tirar la color","Remove link":"Suprimir lo ligam","Replace":"Rempla\xe7ar","Replace all":"Rempla\xe7ar tot","Replace with":"Rempla\xe7ar per","Resize":"Redimensionar","Restore last draft":"Restablir lo darri\xe8r borrolhon","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Z\xf2na T\xe8xte Ric. Quichar sus ALT-F9 pel men\xfa. Quichar sus ALT-F10 per la barra d'aisinas. Quichar sus ALT-0 per d'ajuda.","Ridge":"","Right":"Drecha","Right to left":"De drecha cap a esqu\xe8rra","Row":"Linha","Row clipboard actions":"","Row group":"Grop de linhas","Row header":"","Row properties":"Proprietats de la linha","Row type":"Tipe de linha","Rows":"Linhas","Save":"Enregistrar","Save (if save plugin activated)":"Enregistrar (se l\u2019exension Enregistrar es activada)","Scope":"Espandida","Search":"Cercar","Select all":"Seleccionar tot","Select...":"Seleccionar...","Selection":"Seleccion","Shortcut":"Acorchi","Show blocks":"Afichar los bl\xf2ts","Show caption":"Mostrar legenda","Show invisible characters":"Far veire los caract\xe8rs invisibles","Size":"Talha","Solid":"","Source":"Font","Source code":"C\xf2de font","Special Character":"Caract\xe8r especial","Special character...":"Caract\xe8r especial...","Split cell":"Devesir la cellula","Square":"Carrat","Start list at number":"","Strikethrough":"Ralhat","Style":"Estil","Subscript":"Indici","Superscript":"Exponent","Switch to or from fullscreen mode":"","Symbols":"Simb\xf2ls","System Font":"Polissa sist\xe8ma","Table":"Tabl\xe8u","Table caption":"","Table properties":"Proprietats del tabl\xe8u","Table styles":"","Template":"Mod\xe8l","Templates":"Mod\xe8ls","Text":"T\xe8xte","Text color":"Color del t\xe8xte","Text color {0}":"","Text to display":"T\xe8xte d'afichar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Sembla que l'URL qu'av\xe8tz entrada es una adre\xe7a e-mail. Vol\xe8tz apondre lo prefix mailto: necessari ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Sembla que l'URL qu'av\xe8tz entrada es un ligam ext\xe8rne. Vol\xe8tz apondre lo prefix http:// necessari ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"T\xedtol","To open the popup, press Shift+Enter":"Per dobrir dins una fen\xe8stra sorgissenta, quichatz Maj+Entrada","Toggle accordion":"","Tools":"Aisinas","Top":"Naut","Travel and Places":"Viatge e L\xf2cs","Turquoise":"Turquesa","Underline":"Solinhat","Undo":"Desfar","Upload":"Enviar","Uploading image":"Pujant imatge","Upper Alpha":"Alfa majuscula","Upper Roman":"Roman majuscula","Url":"","User Defined":"","Valid":"","Version":"","Vertical align":"","Vertical space":"Espa\xe7ament vertical","View":"Veire","Visual aids":"Ajudas visualas","Warn":"Av\xeds","White":"Blanc","Width":"Largor","Word count":"Comptador mot","Words":"Mots","Words: {0}":"Mots : {0}","Yellow":"Jaune","Yes":"\xd2c","You are using {0}":"Utilizatz {0}","You have unsaved changes are you sure you want to navigate away?":"Av\xe8tz de modificacions pas enregistradas, s\xe8tz segur que vol\xe8tz quitar la pagina ?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"V\xf2stre navigador sup\xf2rta pas la c\xf2pia dir\xe8cta. Merc\xe9 d'utilizar las t\xf2cas Ctrl+X/C/V.","alignment":"alinhament","austral sign":"signe austral","cedi sign":"signe cedi","colon sign":"signe colon","cruzeiro sign":"signe cruzeiro","currency sign":"Signe devisa","dollar sign":"signe d\xf2lar","dong sign":"signe dong","drachma sign":"signe drachma","euro-currency sign":"signe devisa europenca ","example":"exemple","formatting":"","french franc sign":"signe franc","german penny symbol":"signe devisa germana","guarani sign":"signe guarani","history":"istoric","hryvnia sign":"signe hryvnia","indentation":"indentacion","indian rupee sign":"signe roble india","kip sign":"signe kip","lira sign":"signe lira","livre tournois sign":"signe livre tournois","manat sign":"signe manat","mill sign":"signe mill","naira sign":"signe naira","new sheqel sign":"signe sheqel","nordic mark sign":"signe marc nordic","peseta sign":"signe peseta","peso sign":"signe peso","ruble sign":"signe roble","rupee sign":"signe roble","spesmilo sign":"signe spesmilo","styles":"estils","tenge sign":"signe tenge","tugrik sign":"signe tugrik","turkish lira sign":"signe lira de Turquia","won sign":"signe won","yen character":"signe yen","yen/yuan character variant one":"","yuan character":"signe yuan","yuan character, in hong kong and taiwan":"","{0} characters":"{0} caract\xe8rs","{0} columns, {1} rows":"","{0} words":"{0} mots"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/pl.js b/staticfiles/tinymce/langs/pl.js new file mode 100644 index 0000000..2ba840c --- /dev/null +++ b/staticfiles/tinymce/langs/pl.js @@ -0,0 +1 @@ +tinymce.addI18n("pl",{"#":"#","Accessibility":"Dost\u0119pno\u015b\u0107","Accordion":"Element Accordion","Accordion body...":"Tre\u015b\u0107 elementu Accordion...","Accordion summary...":"Podsumowanie elementu Accordion...","Action":"Czynno\u015b\u0107","Activity":"Aktywno\u015b\u0107","Address":"Adres","Advanced":"Zaawansowane","Align":"Wyr\xf3wnaj","Align center":"Wyr\xf3wnaj do \u015brodka","Align left":"Wyr\xf3wnaj do lewej","Align right":"Wyr\xf3wnaj do prawej","Alignment":"Wyr\xf3wnanie","Alignment {0}":"Wyr\xf3wnanie {0}","All":"Wszystkie","Alternative description":"Alternatywny opis","Alternative source":"Alternatywne \u017ar\xf3d\u0142o","Alternative source URL":"Alternatywny URL \u017ar\xf3d\u0142a","Anchor":"Kotwica","Anchor...":"Kotwica...","Anchors":"Zakotwiczenia","Animals and Nature":"Zwierz\u0119ta i natura","Arrows":"Strza\u0142ki","B":"B","Background color":"Kolor t\u0142a","Background color {0}":"Kolor t\u0142a {0}","Black":"Czarny","Block":"Zablokuj","Block {0}":"Blok {0}","Blockquote":"Blok cytatu","Blocks":"Bloki","Blue":"Niebieski","Blue component":"Niebieski","Body":"Tre\u015b\u0107","Bold":"Pogrubienie","Border":"Obramowanie","Border color":"Kolor obramowania","Border style":"Styl ramki","Border width":"Grubo\u015b\u0107 ramki","Bottom":"D\xf3\u0142","Browse files":"Przeszukaj pliki","Browse for an image":"Przegl\u0105daj za zdj\u0119ciem","Browse links":"Przeszukaj odno\u015bniki","Bullet list":"Lista wypunktowana","Cancel":"Anuluj","Caption":"Tytu\u0142","Cell":"Kom\xf3rka","Cell padding":"Dope\u0142nienie kom\xf3rki","Cell properties":"W\u0142a\u015bciwo\u015bci kom\xf3rki","Cell spacing":"Odst\u0119py kom\xf3rek","Cell styles":"Style kom\xf3rek","Cell type":"Typ kom\xf3rki","Center":"\u015arodek","Characters":"Znaki","Characters (no spaces)":"Znaki (bez spacji)","Circle":"Ko\u0142o","Class":"Klasa","Clear formatting":"Wyczy\u015b\u0107 formatowanie","Close":"Zamknij","Code":"Kod","Code sample...":"Przyk\u0142ad kodu...","Code view":"Widok kodu","Color Picker":"Selektor kolor\xf3w","Color swatch":"Pr\xf3bka koloru","Cols":"Kol.","Column":"Kolumna","Column clipboard actions":"Akcje schowka dla kolumny","Column group":"Grupa kolumn","Column header":"Nag\u0142\xf3wek kolumny","Constrain proportions":"Utrzymuj proporcje","Copy":"Kopiuj","Copy column":"Kopiuj kolumn\u0119","Copy row":"Kopiuj wiersz","Could not find the specified string.":"Nie znaleziono okre\u015blonego tekstu.","Could not load emojis":"B\u0142\u0105d wczytywania emotikon\xf3w","Count":"Liczba","Currency":"Waluta","Current window":"Bie\u017c\u0105ce okno","Custom color":"Kolor niestandardowy","Custom...":"Niestandardowy...","Cut":"Wytnij","Cut column":"Wytnij kolumn\u0119","Cut row":"Wytnij wiersz","Dark Blue":"Ciemnoniebieski","Dark Gray":"Ciemnoszary","Dark Green":"Ciemnozielony","Dark Orange":"Ciemnopomara\u0144czowy","Dark Purple":"Ciemnopurpurowy","Dark Red":"Ciemnoczerwony","Dark Turquoise":"Ciemnoturkusowy","Dark Yellow":"Ciemno\u017c\xf3\u0142ty","Dashed":"Kreskowane","Date/time":"Data/godzina","Decrease indent":"Zmniejsz wci\u0119cie","Default":"Domy\u015blnie","Delete accordion":"Usu\u0144 element Accordion","Delete column":"Usu\u0144 kolumn\u0119","Delete row":"Usu\u0144 wiersz","Delete table":"Usu\u0144 tabel\u0119","Dimensions":"Wymiary","Disc":"Dysk","Div":"Div","Document":"Dokument","Dotted":"Kropkowane","Double":"Podw\xf3jne","Drop an image here":"Upu\u015b\u0107 obraz tutaj","Dropped file type is not supported":"Dodany typ pliku nie jest obs\u0142ugiwany","Edit":"Edytuj","Embed":"Osad\u017a","Emojis":"Emotikony","Emojis...":"Emotikony...","Error":"B\u0142\u0105d","Error: Form submit field collision.":"B\u0142\u0105d: kolizja pola przesy\u0142ania formularza.","Error: No form element found.":"B\u0142\u0105d: nie znaleziono elementu formularza.","Extended Latin":"Rozszerzony \u0142aci\u0144ski","Failed to initialize plugin: {0}":"Nie mo\u017cna zainicjowa\u0107 dodatku: {0}","Failed to load plugin url: {0}":"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 adresu url dodatku: {0}","Failed to load plugin: {0} from url {1}":"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 dodatku: {0} spod adresu url {1}","Failed to upload image: {0}":"Nie uda\u0142o si\u0119 przes\u0142a\u0107 obrazu: {0}","File":"Plik","Find":"Znajd\u017a","Find (if searchreplace plugin activated)":"Znajd\u017a (je\u015bli w\u0142\u0105czono dodatek wyszukuj\u0105cy)","Find and Replace":"Znajd\u017a i Zamie\u0144","Find and replace...":"Znajd\u017a i zamie\u0144...","Find in selection":"Znajd\u017a w zaznaczeniu","Find whole words only":"Znajd\u017a tylko ca\u0142e wyrazy","Flags":"Flagi","Focus to contextual toolbar":"Aktywuj pasek narz\u0119dzi menu kontekstowego","Focus to element path":"Aktywuj \u015bcie\u017ck\u0119 elementu","Focus to menubar":"Aktywuj pasek menu","Focus to toolbar":"Aktywuj pasek narz\u0119dzi","Font":"Czcionka","Font size {0}":"Rozmiar czcionki {0}","Font sizes":"Rozmiary czcionek","Font {0}":"Czcionka {0}","Fonts":"Fonty","Food and Drink":"Jedzenie i picie","Footer":"Stopka","Format":"Format","Format {0}":"Format {0}","Formats":"Formaty","Fullscreen":"Pe\u0142ny ekran","G":"G","General":"Og\xf3lne","Gray":"Szary","Green":"Zielony","Green component":"Zielony","Groove":"Rowkowane","Handy Shortcuts":"Przydatne skr\xf3ty","Header":"Nag\u0142\xf3wek","Header cell":"Kom\xf3rka nag\u0142\xf3wka","Heading 1":"Nag\u0142\xf3wek 1","Heading 2":"Nag\u0142\xf3wek 2","Heading 3":"Nag\u0142\xf3wek 3","Heading 4":"Nag\u0142\xf3wek 4","Heading 5":"Nag\u0142\xf3wek 5","Heading 6":"Nag\u0142\xf3wek 6","Headings":"Nag\u0142\xf3wki","Height":"Wysoko\u015b\u0107","Help":"Pomoc","Hex color code":"Szesnastkowy kod koloru","Hidden":"Ukryte","Horizontal align":"Wyr\xf3wnanie w poziomie","Horizontal line":"Pozioma linia","Horizontal space":"Odst\u0119p w poziomie","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID powinien zaczyna\u0107 si\u0119 liter\u0105 i sk\u0142ada\u0107 si\u0119 tylko z liter, cyfr, my\u015blnik\xf3w, kropek, przecink\xf3w oraz znak\xf3w podkre\u015blenia.","Image is decorative":"Obraz jest dekoracyjny","Image list":"Lista obraz\xf3w","Image title":"Tytu\u0142 obrazu","Image...":"Obraz...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP b\u0142\u0105d: Nie znaleziono Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP b\u0142\u0105d: Nieprawid\u0142owy adres URL Image Proxy","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP b\u0142\u0105d: Odrzucono \u017c\u0105danie","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP b\u0142\u0105d: Nieznany b\u0142\u0105d ImageProxy","Increase indent":"Zwi\u0119ksz wci\u0119cie","Inline":"W tek\u015bcie","Insert":"Wstaw","Insert Template":"Wstaw szablon","Insert accordion":"Wstaw element Accordion","Insert column after":"Wstaw kolumn\u0119 po","Insert column before":"Wstaw kolumn\u0119 przed","Insert date/time":"Wstaw dat\u0119/godzin\u0119","Insert image":"Wstaw obraz","Insert link (if link plugin activated)":"Wstaw \u0142\u0105cze (je\u015bli w\u0142\u0105czono dodatek linkuj\u0105cy)","Insert row after":"Wstaw wiersz po","Insert row before":"Wstaw wiersz przed","Insert table":"Wstaw tabel\u0119","Insert template...":"Wstaw szablon...","Insert video":"Wstaw wideo","Insert/Edit code sample":"Dodaj/Edytuj przyk\u0142adowy kod","Insert/edit image":"Wstaw/edytuj obraz","Insert/edit link":"Wstaw/edytuj \u0142\u0105cze","Insert/edit media":"Wstaw/edytuj multimedia","Insert/edit video":"Wstaw/edytuj wideo","Inset":"Wstawione","Invalid hex color code: {0}":"Nieprawid\u0142owy kod szesnastkowy koloru: {0}","Invalid input":"Nieprawid\u0142owa warto\u015b\u0107","Italic":"Kursywa","Justify":"Wyjustuj","Keyboard Navigation":"Nawigacja za pomoc\u0105 klawiatury","Language":"J\u0119zyk","Learn more...":"Dowiedz si\u0119 wi\u0119cej...","Left":"Lewo","Left to right":"Od lewej do prawej","Light Blue":"Jasnoniebieski","Light Gray":"Jasnoszary","Light Green":"Jasnozielony","Light Purple":"Jasnopurpurowy","Light Red":"Jasnoczerwony","Light Yellow":"Jasno\u017c\xf3\u0142ty","Line height":"Wysoko\u015b\u0107 Linii","Link list":"Lista \u0142\u0105czy","Link...":"\u0141\u0105cze...","List Properties":"Ustawienia Listy","List properties...":"Ustawienia listy...","Loading emojis...":"Wczytywanie emotikon\xf3w...","Loading...":"Wczytywanie...","Lower Alpha":"Ma\u0142e alfanumeryczne","Lower Greek":"Ma\u0142e greckie","Lower Roman":"Ma\u0142e rzymskie","Match case":"Uwzgl\u0119dniaj wielko\u015b\u0107 liter","Mathematical":"Matematyczne","Media poster (Image URL)":"Plakat (URL obrazu)","Media...":"Multimedia...","Medium Blue":"\u015arednioniebieski","Medium Gray":"\u015arednioszary","Medium Purple":"\u015aredniopurpurowy","Merge cells":"Scal kom\xf3rki","Middle":"\u015arodek","Midnight Blue":"Nocny b\u0142\u0119kit","More...":"Wi\u0119cej...","Name":"Nazwa","Navy Blue":"Ciemnoniebieski","New document":"Nowy dokument","New window":"Nowe okno","Next":"Nast\u0119pny","No":"Nie","No alignment":"Bez wyr\xf3wnania","No color":"Bez koloru","Nonbreaking space":"Nie\u0142amliwa spacja","None":"Brak","Numbered list":"Lista numerowana","OR":"LUB","Objects":"Obiekty","Ok":"Ok","Open help dialog":"Otw\xf3rz okno dialogowe pomocy","Open link":"Otw\xf3rz \u0142\u0105cze","Open link in...":"Otw\xf3rz \u0142\u0105cze w...","Open popup menu for split buttons":"Otw\xf3rz menu podr\u0119czne dla przycisk\xf3w","Orange":"Pomara\u0144czowy","Outset":"Zewn\u0119trzne","Page break":"Podzia\u0142 strony","Paragraph":"Akapit","Paste":"Wklej","Paste as text":"Wklej jako tekst","Paste column after":"Wklej kolumn\u0119 po","Paste column before":"Wklej kolumn\u0119 przed","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Wklejanie jest w trybie tekstowym. Dop\xf3ki nie wy\u0142\u0105czysz tej opcji, zawarto\u015b\u0107 b\u0119dzie wklejana jako zwyk\u0142y tekst.","Paste or type a link":"Wklej lub wpisz \u0142\u0105cze","Paste row after":"Wklej wiersz po","Paste row before":"Wklej wiersz przed","Paste your embed code below:":"Wklej poni\u017cej kod do osadzenia:","People":"Ludzie","Plugins":"Dodatki","Plugins installed ({0}):":"Zainstalowane dodatki ({0}):","Powered by {0}":"Stworzone dzi\u0119ki {0}","Pre":"Pre","Preferences":"Ustawienia","Preformatted":"Wst\u0119pne formatowanie","Premium plugins:":"Dodatki Premium:","Press the Up and Down arrow keys to resize the editor.":"Naci\u015bnij klawisze strza\u0142ek w g\xf3r\u0119 i w d\xf3\u0142, aby zmieni\u0107 rozmiar edytora.","Press the arrow keys to resize the editor.":"Naci\u015bnij klawisze strza\u0142ek, aby zmieni\u0107 rozmiar edytora.","Press {0} for help":"Naci\u015bnij {0}, aby uzyska\u0107 pomoc","Preview":"Podgl\u0105d","Previous":"Poprzedni","Print":"Drukuj","Print...":"Drukuj...","Purple":"Purpurowy","Quotations":"Cudzys\u0142owy","R":"R","Range 0 to 255":"Od 0 do 255","Red":"Czerwony","Red component":"Czerwony","Redo":"Powt\xf3rz","Remove":"Usu\u0144","Remove color":"Usu\u0144 kolor","Remove link":"Usu\u0144 \u0142\u0105cze","Replace":"Zast\u0105p","Replace all":"Zast\u0105p wszystkie","Replace with":"Zast\u0105p ci\u0105giem:","Resize":"Zmie\u0144 rozmiar","Restore last draft":"Przywr\xf3\u0107 ostatni szkic","Reveal or hide additional toolbar items":"Odkryj lub ukryj dodatkowe elementy na pasku narz\u0119dzi","Rich Text Area":"Przestrze\u0144 tekstu sformatowanego","Rich Text Area. Press ALT-0 for help.":"Obszar tekstu sformatowanego. Naci\u015bnij ALT-0, aby uzyska\u0107 pomoc.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Obszar Edycji. ALT-F9: menu. ALT-F10: pasek narz\u0119dzi. ALT-0: pomoc","Ridge":"Grzbietowe","Right":"Prawo","Right to left":"Od prawej do lewej","Row":"Wiersz","Row clipboard actions":"Akcje schowka dla wiersza","Row group":"Grupa wierszy","Row header":"Nag\u0142\xf3wek wiersza","Row properties":"W\u0142a\u015bciwo\u015bci wiersza","Row type":"Typ wiersza","Rows":"Wier.","Save":"Zapisz","Save (if save plugin activated)":"Zapisz (je\u015bli w\u0142\u0105czono dodatek zapisuj\u0105cy)","Scope":"Zasi\u0119g","Search":"Wyszukaj","Select all":"Zaznacz wszystko","Select...":"Wybierz...","Selection":"Zaznaczenie","Shortcut":"Skr\xf3t","Show blocks":"Poka\u017c bloki","Show caption":"Poka\u017c podpis","Show invisible characters":"Poka\u017c niewidoczne znaki","Size":"Rozmiar","Solid":"Pe\u0142ne","Source":"\u0179r\xf3d\u0142o","Source code":"Kod \u017ar\xf3d\u0142owy","Special Character":"Znak Specjalny","Special character...":"Znak specjalny...","Split cell":"Podziel kom\xf3rk\u0119","Square":"Kwadrat","Start list at number":"Rozpocznij numeracj\u0119 od","Strikethrough":"Przekre\u015blenie","Style":"Styl","Subscript":"Indeks dolny","Superscript":"Indeks g\xf3rny","Switch to or from fullscreen mode":"W\u0142\u0105cz lub wy\u0142\u0105cz tryb pe\u0142noekranowy","Symbols":"Symbole","System Font":"Font systemowy","Table":"Tabela","Table caption":"Tytu\u0142 tabeli","Table properties":"W\u0142a\u015bciwo\u015bci tabeli","Table styles":"Style tabel","Template":"Szablon","Templates":"Szablony","Text":"Tekst","Text color":"Kolor tekstu","Text color {0}":"Kolor tekstu {0}","Text to display":"Tekst do wy\u015bwietlenia","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Wprowadzony URL wygl\u0105da na adres e-mail. Czy chcesz doda\u0107 wymagany prefiks mailto: ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Wprowadzony URL wygl\u0105da na \u0142\u0105cze zewn\u0119trzne. Czy chcesz doda\u0107 http:// jako prefiks?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Wprowadzony URL wygl\u0105da na \u0142\u0105cze zewn\u0119trzne. Czy chcesz doda\u0107 wymagany prefiks https://?","Title":"Tytu\u0142","To open the popup, press Shift+Enter":"Aby otworzy\u0107 okienko, naci\u015bnij Shift+Enter","Toggle accordion":"Prze\u0142\u0105cz element Accordion","Tools":"Narz\u0119dzia","Top":"G\xf3ra","Travel and Places":"Podr\xf3\u017ce i miejsca","Turquoise":"Turkusowy","Underline":"Podkre\u015blenie","Undo":"Cofnij","Upload":"Prze\u015blij","Uploading image":"Przesy\u0142anie obrazu","Upper Alpha":"Wielkie alfanumeryczne","Upper Roman":"Wielkie rzymskie","Url":"URL","User Defined":"W\u0142asny","Valid":"Prawid\u0142owe","Version":"Wersja","Vertical align":"Wyr\xf3wnanie w pionie","Vertical space":"Odst\u0119p w pionie","View":"Widok","Visual aids":"Pomoce wizualne","Warn":"Ostrze\u017cenie","White":"Bia\u0142y","Width":"Szeroko\u015b\u0107","Word count":"Liczba s\u0142\xf3w","Words":"S\u0142owa","Words: {0}":"S\u0142\xf3w: {0}","Yellow":"\u017b\xf3\u0142ty","Yes":"Tak","You are using {0}":"U\u017cywasz {0}","You have unsaved changes are you sure you want to navigate away?":"Masz niezapisane zmiany. Czy na pewno chcesz opu\u015bci\u0107 stron\u0119?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Twoja przegl\u0105darka nie obs\u0142uguje bezpo\u015bredniego dost\u0119pu do schowka. U\u017cyj zamiast tego kombinacji klawiszy Ctrl+X/C/V.","alignment":"wyr\xf3wnanie","austral sign":"znak australa","cedi sign":"znak cedi","colon sign":"znak colon","cruzeiro sign":"znak cruzeiro","currency sign":"znak waluty","dollar sign":"znak dolara","dong sign":"znak donga","drachma sign":"znak drachmy","euro-currency sign":"znak euro","example":"przyk\u0142ad","formatting":"formatowanie","french franc sign":"znak franka francuskiego","german penny symbol":"znak feniga","guarani sign":"znak guarani","history":"historia","hryvnia sign":"znak hrywny","indentation":"wci\u0119cie","indian rupee sign":"znak rupii indyjskiej","kip sign":"znak kipa","lira sign":"znak liry","livre tournois sign":"znak livre tournois","manat sign":"znak manata","mill sign":"znak mill","naira sign":"znak nairy","new sheqel sign":"znak nowego szekla","nordic mark sign":"znak nordic mark","peseta sign":"znak pesety","peso sign":"znak peso","ruble sign":"znak rubla","rupee sign":"znak rupii","spesmilo sign":"znak spesmilo","styles":"style","tenge sign":"znak tenge","tugrik sign":"znak tugrika","turkish lira sign":"znak liry tureckiej","won sign":"znak wona","yen character":"znak jena","yen/yuan character variant one":"jen/juan, wariant pierwszy","yuan character":"znak juana","yuan character, in hong kong and taiwan":"znak juana w Hongkongu i na Tajwanie","{0} characters":"{0} znak\xf3w","{0} columns, {1} rows":"{0} kolumn, {1} rz\u0119d\xf3w","{0} words":"{0} s\u0142."}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/pt_BR.js b/staticfiles/tinymce/langs/pt_BR.js new file mode 100644 index 0000000..012a5f9 --- /dev/null +++ b/staticfiles/tinymce/langs/pt_BR.js @@ -0,0 +1 @@ +tinymce.addI18n("pt_BR",{"#":"#","Accessibility":"Acessibilidade","Accordion":"Acorde\xe3o","Accordion body...":"Corpo do acorde\xe3o...","Accordion summary...":"Resumo do acorde\xe3o...","Action":"A\xe7\xe3o","Activity":"Atividade","Address":"Endere\xe7o","Advanced":"Avan\xe7ado","Align":"Alinhamento","Align center":"Centralizar","Align left":"Alinhar \xe0 esquerda","Align right":"Alinhar \xe0 direita","Alignment":"Alinhamento","Alignment {0}":"Alinhamento {0}","All":"Tudo","Alternative description":"Descri\xe7\xe3o alternativa","Alternative source":"Endere\xe7o alternativo","Alternative source URL":"Endere\xe7o URL alternativo","Anchor":"\xc2ncora","Anchor...":"\xc2ncora...","Anchors":"\xc2ncoras","Animals and Nature":"Animais e Natureza","Arrows":"Setas","B":"B","Background color":"Cor do fundo","Background color {0}":"Cor de fundo {0}","Black":"Preto","Block":"Par\xe1grafo","Block {0}":"Bloco {0}","Blockquote":"Bloco de cita\xe7\xe3o","Blocks":"Par\xe1grafo","Blue":"Azul","Blue component":"Componente azul","Body":"Corpo","Bold":"Negrito","Border":"Borda","Border color":"Cor da borda","Border style":"Estilo da borda","Border width":"Espessura da borda","Bottom":"Inferior","Browse files":"Procurar arquivos","Browse for an image":"Procurar uma imagem","Browse links":"Procurar links","Bullet list":"Lista com marcadores","Cancel":"Cancelar","Caption":"Legenda","Cell":"C\xe9lula","Cell padding":"Espa\xe7amento interno da c\xe9lula","Cell properties":"Propriedades da c\xe9lula","Cell spacing":"Espa\xe7amento da c\xe9lula","Cell styles":"Estilos da c\xe9lula","Cell type":"Tipo de c\xe9lula","Center":"Centro","Characters":"Caracteres","Characters (no spaces)":"Caracteres (sem espa\xe7os)","Circle":"C\xedrculo","Class":"Classe","Clear formatting":"Limpar formata\xe7\xe3o","Close":"Fechar","Code":"Monoespa\xe7ada","Code sample...":"C\xf3digo...","Code view":"Ver c\xf3digo","Color Picker":"Seletor de cores","Color swatch":"Amostra de cor","Cols":"Colunas","Column":"Coluna","Column clipboard actions":"A\xe7\xf5es da \xe1rea de transfer\xeancia de colunas","Column group":"Grupo de colunas","Column header":"Cabe\xe7alho da coluna","Constrain proportions":"Restringir propor\xe7\xf5es","Copy":"Copiar","Copy column":"Copiar coluna","Copy row":"Copiar linha","Could not find the specified string.":"N\xe3o foi poss\xedvel encontrar o termo especificado.","Could not load emojis":"N\xe3o foi poss\xedvel carregar os emojis","Count":"Contar","Currency":"Moeda","Current window":"Janela atual","Custom color":"Cor personalizada","Custom...":"Personalizado...","Cut":"Recortar","Cut column":"Recortar coluna","Cut row":"Recortar linha","Dark Blue":"Azul escuro","Dark Gray":"Cinza escuro","Dark Green":"Verde escuro","Dark Orange":"Laranja escuro","Dark Purple":"Roxo escuro","Dark Red":"Vermelho escuro","Dark Turquoise":"Turquesa escuro","Dark Yellow":"Amarelo escuro","Dashed":"Tracejada","Date/time":"Data/hora","Decrease indent":"Diminuir recuo","Default":"Padr\xe3o","Delete accordion":"Excluir acorde\xe3o","Delete column":"Excluir coluna","Delete row":"Excluir linha","Delete table":"Excluir tabela","Dimensions":"Dimens\xf5es","Disc":"Disco","Div":"Se\xe7\xe3o (div)","Document":"Documento","Dotted":"Pontilhada","Double":"Dupla","Drop an image here":"Arraste uma imagem para c\xe1","Dropped file type is not supported":"O tipo do arquivo arrastado n\xe3o \xe9 compat\xedvel","Edit":"Editar","Embed":"Incorporar","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Erro","Error: Form submit field collision.":"Erro: colis\xe3o de bot\xe3o de envio do formul\xe1rio.","Error: No form element found.":"Erro: elemento de formul\xe1rio n\xe3o encontrado.","Extended Latin":"Latino estendido","Failed to initialize plugin: {0}":"Falha ao iniciar plugin: {0}","Failed to load plugin url: {0}":"Falha ao carregar URL do plugin: {0}","Failed to load plugin: {0} from url {1}":"Falha ao carregar plugin: {0} da URL {1}","Failed to upload image: {0}":"Falha ao carregar imagem: {0}","File":"Arquivo","Find":"Localizar","Find (if searchreplace plugin activated)":"Localizar (se o plugin de localizar e substituir estiver ativado)","Find and Replace":"Localizar e substituir","Find and replace...":"Localizar e substituir...","Find in selection":"Localizar na sele\xe7\xe3o","Find whole words only":"Encontrar somente palavras inteiras","Flags":"Bandeiras","Focus to contextual toolbar":"Focalizar barra de ferramentas contextual","Focus to element path":"Focalizar caminho do elemento","Focus to menubar":"Focalizar barra de menus","Focus to toolbar":"Focalizar barra de ferramentas","Font":"Fonte","Font size {0}":"Tamanho da fonte {0}","Font sizes":"Tamanho da fonte","Font {0}":"Fonte","Fonts":"Fonte","Food and Drink":"Comida e Bebida","Footer":"Rodap\xe9","Format":"Formatar","Format {0}":"Formato {0}","Formats":"Formata\xe7\xe3o","Fullscreen":"Tela cheia","G":"G","General":"Geral","Gray":"Cinza","Green":"Verde","Green component":"Componente verde","Groove":"Chanfrada","Handy Shortcuts":"Atalhos \xfateis","Header":"Cabe\xe7alho","Header cell":"C\xe9lula de cabe\xe7alho","Heading 1":"T\xedtulo 1","Heading 2":"T\xedtulo 2","Heading 3":"T\xedtulo 3","Heading 4":"T\xedtulo 4","Heading 5":"T\xedtulo 5","Heading 6":"T\xedtulo 6","Headings":"T\xedtulos","Height":"Altura","Help":"Ajuda","Hex color code":"C\xf3digo hexadecimal de cor","Hidden":"Oculta","Horizontal align":"Alinhamento horizontal","Horizontal line":"Linha horizontal","Horizontal space":"Espa\xe7o horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"O ID deve come\xe7ar com uma letra, seguida apenas por letras, n\xfameros, tra\xe7os, v\xedrgulas ou sublinhas.","Image is decorative":"A imagem \xe9 decorativa","Image list":"Lista de imagens","Image title":"T\xedtulo da imagem","Image...":"Imagem...","ImageProxy HTTP error: Could not find Image Proxy":"Erro de HTTP ImageProxy: n\xe3o foi poss\xedvel encontrar o proxy de imagem","ImageProxy HTTP error: Incorrect Image Proxy URL":"Erro de HTTP ImageProxy: URL de proxy de imagem incorreto","ImageProxy HTTP error: Rejected request":"Erro HTTP ImageProxy: solicita\xe7\xe3o rejeitada","ImageProxy HTTP error: Unknown ImageProxy error":"Erro de HTTP ImageProxy: erro ImageProxy desconhecido","Increase indent":"Aumentar recuo","Inline":"Fonte","Insert":"Inserir","Insert Template":"Inserir modelo","Insert accordion":"Inserir acorde\xe3o","Insert column after":"Inserir coluna depois","Insert column before":"Inserir coluna antes","Insert date/time":"Inserir data/hora","Insert image":"Inserir imagem","Insert link (if link plugin activated)":"Inserir link (se o plugin de link estiver ativado)","Insert row after":"Inserir linha depois","Insert row before":"Inserir linha antes","Insert table":"Inserir tabela","Insert template...":"Inserir modelo...","Insert video":"Inserir v\xeddeo","Insert/Edit code sample":"Inserir/editar c\xf3digo","Insert/edit image":"Inserir/editar imagem","Insert/edit link":"Inserir/editar link","Insert/edit media":"Inserir/editar m\xeddia","Insert/edit video":"Inserir/editar v\xeddeo","Inset":"Baixo relevo","Invalid hex color code: {0}":"C\xf3digo hexadecimal de cor inv\xe1lido: {0}","Invalid input":"Entrada inv\xe1lida","Italic":"It\xe1lico","Justify":"Justificar","Keyboard Navigation":"Navega\xe7\xe3o pelo teclado","Language":"Idioma","Learn more...":"Saber mais...","Left":"\xc0 esquerda","Left to right":"Esquerda para direita","Light Blue":"Azul claro","Light Gray":"Cinza claro","Light Green":"Verde claro","Light Purple":"Roxo claro","Light Red":"Vermelho claro","Light Yellow":"Amarelo claro","Line height":"Altura da linha","Link list":"Lista de links","Link...":"Link...","List Properties":"Listar propriedades","List properties...":"Listar propriedades...","Loading emojis...":"Carregando emojis...","Loading...":"Carregando...","Lower Alpha":"Letra Min\xfasc.","Lower Greek":"Grego Min\xfasc.","Lower Roman":"Romano Min\xfasc.","Match case":"Diferenciar mai\xfascula/min\xfascula","Mathematical":"Matem\xe1tico","Media poster (Image URL)":"Post de m\xeddia (URL da Imagem)","Media...":"M\xeddia...","Medium Blue":"Azul m\xe9dio","Medium Gray":"Cinza m\xe9dio","Medium Purple":"Roxo m\xe9dio","Merge cells":"Agrupar c\xe9lulas","Middle":"Meio","Midnight Blue":"Azul meia-noite","More...":"Mais...","Name":"Nome","Navy Blue":"Azul marinho","New document":"Novo documento","New window":"Nova janela","Next":"Pr\xf3xima","No":"N\xe3o","No alignment":"Sem alinhamento","No color":"Nenhuma cor","Nonbreaking space":"Espa\xe7o inquebr\xe1vel","None":"Nenhum(a)","Numbered list":"Lista numerada","OR":"OU","Objects":"Objetos","Ok":"OK","Open help dialog":"Abrir di\xe1logo de ajuda","Open link":"Abrir link","Open link in...":"Abrir link em...","Open popup menu for split buttons":"Abrir menu popup para bot\xf5es com divis\xe3o","Orange":"Laranja","Outset":"Alto relevo","Page break":"Quebra de p\xe1gina","Paragraph":"Simples","Paste":"Colar","Paste as text":"Colar como texto","Paste column after":"Colar coluna depois","Paste column before":"Colar coluna antes","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"O comando Colar est\xe1 no modo de texto simples. O conte\xfado ser\xe1 colado como texto simples, at\xe9 voc\xea desligar essa op\xe7\xe3o.","Paste or type a link":"Cole ou digite um link","Paste row after":"Colar linha depois","Paste row before":"Colar linha antes","Paste your embed code below:":"Insira o c\xf3digo de incorpora\xe7\xe3o abaixo:","People":"Pessoas","Plugins":"Plugins","Plugins installed ({0}):":"Plugins instalados ({0}):","Powered by {0}":"Distribu\xeddo por {0}","Pre":"Pr\xe9-formatado (pre)","Preferences":"Prefer\xeancias","Preformatted":"Pr\xe9-formatado","Premium plugins:":"Plugins premium:","Press the Up and Down arrow keys to resize the editor.":"Use as teclas de seta acima e abaixo para redimensionar o editor.","Press the arrow keys to resize the editor.":"Pressione as teclas de seta para redimensionar o editor.","Press {0} for help":"Pressione {0} para ajuda","Preview":"Pr\xe9-visualizar","Previous":"Anterior","Print":"Imprimir","Print...":"Imprimir...","Purple":"Roxo","Quotations":"Cita\xe7\xf5es","R":"R","Range 0 to 255":"Faixa entre 0 e 255","Red":"Vermelho","Red component":"Componente vermelho","Redo":"Redo","Remove":"Remover","Remove color":"Remover cor","Remove link":"Remover link","Replace":"Substituir","Replace all":"Substituir tudo","Replace with":"Substituir por","Resize":"Redimensionar","Restore last draft":"Restaurar \xfaltimo rascunho","Reveal or hide additional toolbar items":"Exibir ou ocultar itens adicionais da barra de ferramentas","Rich Text Area":"\xc1rea de texto rico","Rich Text Area. Press ALT-0 for help.":"\xc1rea de texto rico. Pressione Alt+0 para ajuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc1rea de texto rico. Pressione Alt+F9 para exibir o menu, Alt+F10 para exibir a barra de ferramentas ou Alt+0 para exibir a ajuda.","Ridge":"Ressaltada","Right":"\xc0 direita","Right to left":"Direita para esquerda","Row":"Linha","Row clipboard actions":"A\xe7\xf5es da \xe1rea de transfer\xeancia de linhas","Row group":"Grupo de linhas","Row header":"Cabe\xe7alho da linha","Row properties":"Propriedades da linha","Row type":"Tipo de linha","Rows":"Linhas","Save":"Salvar","Save (if save plugin activated)":"Salvar (se o plugin de salvar estiver ativado)","Scope":"Escopo","Search":"Pesquisar","Select all":"Selecionar tudo","Select...":"Selecionar...","Selection":"Sele\xe7\xe3o","Shortcut":"Atalho","Show blocks":"Mostrar blocos","Show caption":"Exibir legenda","Show invisible characters":"Exibir caracteres invis\xedveis","Size":"Tamanho","Solid":"S\xf3lida","Source":"Endere\xe7o","Source code":"C\xf3digo-fonte","Special Character":"Caractere especial","Special character...":"Caractere especial...","Split cell":"Dividir c\xe9lula","Square":"Quadrado","Start list at number":"Iniciar a lista no n\xfamero","Strikethrough":"Tachado","Style":"Estilo","Subscript":"Subscrito","Superscript":"Sobrescrito","Switch to or from fullscreen mode":"Abrir ou fechar modo de tela cheia","Symbols":"S\xedmbolos","System Font":"Fonte do sistema","Table":"Tabela","Table caption":"Legenda da tabela","Table properties":"Propriedades da tabela","Table styles":"Estilos de tabela","Template":"Modelo","Templates":"Modelos","Text":"Texto","Text color":"Cor do texto","Text color {0}":"Cor do texto {0}","Text to display":"Texto a ser exibido","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"A URL que voc\xea informou parece ser um endere\xe7o de e-mail. Deseja adicionar o prefixo obrigat\xf3rio mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"A URL que voc\xea informou parece ser um link externo. Deseja incluir o prefixo http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"A URL informada parece ser um link externo. Deseja adicionar o prefixo obrigat\xf3rio https://?","Title":"T\xedtulo","To open the popup, press Shift+Enter":"Para abrir o di\xe1logo, pressione Shit+Enter","Toggle accordion":"Alternar acorde\xe3o","Tools":"Ferramentas","Top":"Superior","Travel and Places":"Viagem e Lugares","Turquoise":"Turquesa","Underline":"Sublinhado","Undo":"Desfazer","Upload":"Carregar","Uploading image":"Carregando imagem","Upper Alpha":"Letra Mai\xfasc.","Upper Roman":"Romano Mai\xfasc.","Url":"URL","User Defined":"Definido pelo Usu\xe1rio","Valid":"V\xe1lido","Version":"Vers\xe3o","Vertical align":"Alinhamento vertical","Vertical space":"Espa\xe7o vertical","View":"Visualizar","Visual aids":"Ajuda visual","Warn":"Alerta","White":"Branco","Width":"Largura","Word count":"Contador de palavras","Words":"Palavras","Words: {0}":"Palavras: {0}","Yellow":"Amarelo","Yes":"Sim","You are using {0}":"Voc\xea est\xe1 usando {0}","You have unsaved changes are you sure you want to navigate away?":"Voc\xea tem altera\xe7\xf5es n\xe3o salvas. Voc\xea tem certeza de que deseja sair?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"O seu navegador n\xe3o suporta acesso direto \xe0 \xe1rea de transfer\xeancia. Por favor use os atalhos do teclado Ctrl+X/C/V como alternativa.","alignment":"alinhamento","austral sign":"s\xedmbolo do austral","cedi sign":"s\xedmbolo do cedi","colon sign":"s\xedmbolo do colon","cruzeiro sign":"s\xedmbolo do cruzeiro","currency sign":"s\xedmbolo de moeda","dollar sign":"s\xedmbolo do d\xf3lar","dong sign":"s\xedmbolo do dong","drachma sign":"s\xedmbolo do drachma","euro-currency sign":"s\xedmbolo do euro","example":"exemplo","formatting":"formata\xe7\xe3o","french franc sign":"s\xedmbolo do franco franc\xeas","german penny symbol":"s\xedmbolo de centavo alem\xe3o","guarani sign":"s\xedmbolo do guarani","history":"hist\xf3rico","hryvnia sign":"s\xedmbolo do hryvnia","indentation":"indenta\xe7\xe3o","indian rupee sign":"s\xedmbolo de r\xfapia indiana","kip sign":"s\xedmbolo do kip","lira sign":"s\xedmbolo da lira","livre tournois sign":"s\xedmbolo do livre tournois","manat sign":"s\xedmbolo do manat","mill sign":"s\xedmbolo do mill","naira sign":"s\xedmbolo da naira","new sheqel sign":"s\xedmbolo do novo sheqel","nordic mark sign":"s\xedmbolo do marco n\xf3rdico","peseta sign":"s\xedmbolo da peseta","peso sign":"s\xedmbolo do peso","ruble sign":"s\xedmbolo do rublo","rupee sign":"s\xedmbolo da r\xfapia","spesmilo sign":"s\xedmbolo do spesmilo","styles":"estilos","tenge sign":"s\xedmbolo do tenge","tugrik sign":"s\xedmbolo do tugrik","turkish lira sign":"s\xedmbolo de lira turca","won sign":"s\xedmbolo do won","yen character":"caractere do yen","yen/yuan character variant one":"varia\xe7\xe3o do caractere de yen/yuan","yuan character":"caractere do yuan","yuan character, in hong kong and taiwan":"caractere do yuan, em Hong Kong e Taiwan","{0} characters":"{0} caracteres","{0} columns, {1} rows":"{0} colunas, {1} linhas","{0} words":"{0} palavras"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/pt_PT.js b/staticfiles/tinymce/langs/pt_PT.js new file mode 100644 index 0000000..3721d8a --- /dev/null +++ b/staticfiles/tinymce/langs/pt_PT.js @@ -0,0 +1 @@ +tinymce.addI18n("pt_PT",{"#":"#","Accessibility":"Acessibilidade","Accordion":"Acorde\xe3o","Accordion body...":"Corpo do acorde\xe3o...","Accordion summary...":"Resumo do acorde\xe3o...","Action":"A\xe7\xe3o","Activity":"Atividades","Address":"Endere\xe7o","Advanced":"Avan\xe7ado","Align":"Alinhar","Align center":"Alinhar ao centro","Align left":"Alinhar \xe0 esquerda","Align right":"Alinhar \xe0 direita","Alignment":"Alinhamento","Alignment {0}":"Alinhamento {0}","All":"Tudo","Alternative description":"Descri\xe7\xe3o alternativa","Alternative source":"Origem alternativa","Alternative source URL":"URL da origem alternativa","Anchor":"\xc2ncora","Anchor...":"\xc2ncora...","Anchors":"\xc2ncoras","Animals and Nature":"Animais e natureza","Arrows":"Setas","B":"B","Background color":"Cor de fundo","Background color {0}":"Cor do fundo {0}","Black":"Preto","Block":"Bloco","Block {0}":"Bloco {0}","Blockquote":"Cita\xe7\xe3o em bloco","Blocks":"Blocos","Blue":"Azul","Blue component":"Componente azul(Blue)","Body":"Corpo","Bold":"Negrito","Border":"Contorno","Border color":"Cor do contorno","Border style":"Estilo do contorno","Border width":"Largura do contorno","Bottom":"Inferior","Browse files":"Navegar em ficheiros","Browse for an image":"Navegar por uma imagem","Browse links":"Navegar hiperliga\xe7\xf5es","Bullet list":"Lista com marcas","Cancel":"Cancelar","Caption":"Legenda","Cell":"C\xe9lula","Cell padding":"Preenchimento da c\xe9lula","Cell properties":"Propriedades da c\xe9lula","Cell spacing":"Espa\xe7amento entre c\xe9lulas","Cell styles":"Estilo de c\xe9lulas","Cell type":"Tipo de c\xe9lula","Center":"Centro","Characters":"Caracteres","Characters (no spaces)":"Caracteres (sem espa\xe7os)","Circle":"C\xedrculo","Class":"Classe","Clear formatting":"Limpar formata\xe7\xe3o","Close":"Fechar","Code":"C\xf3digo","Code sample...":"Amostra de c\xf3digo...","Code view":"Vista do c\xf3digo-fonte","Color Picker":"Seletor de cores","Color swatch":"Cole\xe7\xe3o de cores","Cols":"Colunas","Column":"Coluna","Column clipboard actions":"A\xe7\xf5es da coluna da \xe1rea de transfer\xeancia","Column group":"Grupo de colunas","Column header":"Cabe\xe7alho de coluna","Constrain proportions":"Manter propor\xe7\xf5es","Copy":"Copiar","Copy column":"Copiar coluna","Copy row":"Copiar linha","Could not find the specified string.":"N\xe3o foi poss\xedvel localizar a cadeia de caracteres especificada.","Could not load emojis":"N\xe3o conseguiu carregar os emojis","Count":"Contagem","Currency":"Moeda","Current window":"Janela atual","Custom color":"Cor personalizada","Custom...":"Personalizado...","Cut":"Cortar","Cut column":"Cortar coluna","Cut row":"Cortar linha","Dark Blue":"Azul escuro","Dark Gray":"Cinzento escuro","Dark Green":"Verde escuro","Dark Orange":"Laranja escuro","Dark Purple":"P\xfarpura escuro","Dark Red":"Vermelho escuro","Dark Turquoise":"Turquesa escuro","Dark Yellow":"Amarelo escuro","Dashed":"Tracejada","Date/time":"Data/hora","Decrease indent":"Diminuir avan\xe7o","Default":"Predefini\xe7\xe3o","Delete accordion":"Eliminar acorde\xe3o","Delete column":"Eliminar coluna","Delete row":"Eliminar linha","Delete table":"Eliminar tabela","Dimensions":"Dimens\xf5es","Disc":"Disco","Div":"Div","Document":"Documento","Dotted":"Ponteada","Double":"Duplo","Drop an image here":"Largar aqui uma imagem","Dropped file type is not supported":"O tipo de ficheiro largado n\xe3o \xe9 suportado","Edit":"Editar","Embed":"Incorporar","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Erro","Error: Form submit field collision.":"Erro: conflito no campo de submiss\xe3o de formul\xe1rio.","Error: No form element found.":"Erro: nenhum elemento de formul\xe1rio encontrado.","Extended Latin":"Latino estendido","Failed to initialize plugin: {0}":"Falha ao inicializar o plugin: {0}","Failed to load plugin url: {0}":"Falha ao carregar o URL do plugin: {0}","Failed to load plugin: {0} from url {1}":"Falha ao carregar o plugin: {0} do URL {1}","Failed to upload image: {0}":"Falha ao carregar a imagem: {0}","File":"Ficheiro","Find":"Localizar","Find (if searchreplace plugin activated)":"Pesquisar (se o plugin localizar e substituir estiver ativado)","Find and Replace":"Pesquisar e substituir","Find and replace...":"Localizar e substituir...","Find in selection":"Pesquisar na sele\xe7\xe3o","Find whole words only":"Localizar apenas palavras inteiras","Flags":"Bandeiras","Focus to contextual toolbar":"Foco na barra de ferramentas contextual","Focus to element path":"Foco no caminho do elemento","Focus to menubar":"Foco na barra de menu","Focus to toolbar":"Foco na barra de ferramentas","Font":"Tipo de letra","Font size {0}":"Tamanho da letra {0}","Font sizes":"Tamanhos de letra","Font {0}":"Tipo de letra {0}","Fonts":"Tipos de letra","Food and Drink":"Comida e bebida","Footer":"Rodap\xe9","Format":"Formatar","Format {0}":"Formato {0}","Formats":"Formatos","Fullscreen":"Ecr\xe3 inteiro","G":"G","General":"Geral","Gray":"Cinzento","Green":"Verde","Green component":"Componente verde(Green)","Groove":"Entalhado","Handy Shortcuts":"Atalhos \xfateis","Header":"Cabe\xe7alho","Header cell":"C\xe9lula de cabe\xe7alho","Heading 1":"T\xedtulo 1","Heading 2":"T\xedtulo 2","Heading 3":"T\xedtulo 3","Heading 4":"T\xedtulo 4","Heading 5":"T\xedtulo 5","Heading 6":"T\xedtulo 6","Headings":"T\xedtulos","Height":"Altura","Help":"Ajuda","Hex color code":"C\xf3digo de cor hexad\xe9cimal","Hidden":"Escondido","Horizontal align":"Alinhamento horizontal","Horizontal line":"Linha horizontal","Horizontal space":"Espa\xe7o horizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"O ID deve come\xe7ar com uma letra, seguido apenas por letras, n\xfameros, tra\xe7os, pontos, dois pontos ou sobtra\xe7os.","Image is decorative":"Imagem \xe9 decorativa","Image list":"Lista de imagens","Image title":"T\xedtulo da imagem","Image...":"Imagem...","ImageProxy HTTP error: Could not find Image Proxy":"Erro de ImageProxy HTTP: Proxy de Imagem n\xe3o encontrado","ImageProxy HTTP error: Incorrect Image Proxy URL":"Erro de ImageProxy HTTP: URL do Proxy de Imagem incorreto","ImageProxy HTTP error: Rejected request":"Erro de ImageProxy HTTP: Pedido regeitado","ImageProxy HTTP error: Unknown ImageProxy error":"Erro de ImageProxy HTTP: Erro de Proxy de Imagem desconhecido","Increase indent":"Aumentar avan\xe7o","Inline":"Na linha","Insert":"Inserir","Insert Template":"Inserir modelo","Insert accordion":"Inserir acorde\xe3o","Insert column after":"Inserir coluna depois","Insert column before":"Inserir coluna antes","Insert date/time":"Inserir data/hora","Insert image":"Inserir imagem","Insert link (if link plugin activated)":"Inserir hiperliga\xe7\xe3o (se o plugin de liga\xe7\xf5es estiver ativado)","Insert row after":"Inserir linha depois","Insert row before":"Inserir linha antes","Insert table":"Inserir tabela","Insert template...":"Inserir modelo...","Insert video":"Inserir v\xeddeo","Insert/Edit code sample":"Inserir/editar amostra de c\xf3digo","Insert/edit image":"Inserir/editar imagem","Insert/edit link":"Inserir/editar liga\xe7\xe3o","Insert/edit media":"Inserir/editar media","Insert/edit video":"Inserir/editar v\xeddeo","Inset":"Inserido","Invalid hex color code: {0}":"C\xf3digo de cor hexad\xe9cimal inv\xe1lido: {0}","Invalid input":"Entrada inv\xe1lida","Italic":"It\xe1lico","Justify":"Justificar","Keyboard Navigation":"Navega\xe7\xe3o com teclado","Language":"Idioma","Learn more...":"Saiba mais...","Left":"Esquerda","Left to right":"Da esquerda para a direita","Light Blue":"Azul claro","Light Gray":"Cinzento claro","Light Green":"Verde claro","Light Purple":"P\xfarpura claro","Light Red":"Vermelho claro","Light Yellow":"Amarelo claro","Line height":"Altura da linha","Link list":"Lista de liga\xe7\xf5es","Link...":"Liga\xe7\xe3o...","List Properties":"Propriedades da lista","List properties...":"Propriedades da lista\u2026","Loading emojis...":"A carregar emojis...","Loading...":"A carregar...","Lower Alpha":"Latino em min\xfasculas","Lower Greek":"Grego em min\xfasculas","Lower Roman":"Romano em min\xfasculas","Match case":"Diferenciar mai\xfasculas/min\xfasculas","Mathematical":"Matem\xe1tico","Media poster (Image URL)":"Publicador de media (URL da imagem)","Media...":"Media...","Medium Blue":"Azul interm\xe9dio","Medium Gray":"Cinzento m\xe9dio","Medium Purple":"P\xfarpura interm\xe9dio","Merge cells":"Fundir c\xe9lulas","Middle":"Meio","Midnight Blue":"Azul muito escuro","More...":"Mais...","Name":"Nome","Navy Blue":"Azul-atl\xe2ntico","New document":"Novo documento","New window":"Nova janela","Next":"Seguinte","No":"N\xe3o","No alignment":"Sem alinhamento","No color":"Sem cor","Nonbreaking space":"Espa\xe7o n\xe3o separ\xe1vel","None":"Nenhum","Numbered list":"Lista numerada","OR":"OU","Objects":"Objetos","Ok":"Ok","Open help dialog":"Abrir caixa de di\xe1logo Ajuda","Open link":"Abrir liga\xe7\xe3o","Open link in...":"Abrir liga\xe7\xe3o em...","Open popup menu for split buttons":"Abrir o menu popup para bot\xf5es divididos","Orange":"Laranja","Outset":"Extra\xeddo","Page break":"Quebra de p\xe1gina","Paragraph":"Par\xe1grafo","Paste":"Colar","Paste as text":"Colar como texto","Paste column after":"Colar coluna depois","Paste column before":"Colar coluna antes","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"O comando colar est\xe1 em modo de texto simples. O conte\xfado ser\xe1 colado como texto simples at\xe9 desativar esta op\xe7\xe3o.","Paste or type a link":"Copiar ou escrever uma hiperliga\xe7\xe3o","Paste row after":"Colar linha depois","Paste row before":"Colar linha antes","Paste your embed code below:":"Insira, abaixo, o seu c\xf3digo de incorpora\xe7\xe3o:","People":"Pessoas","Plugins":"Plugins","Plugins installed ({0}):":"Plugins instalados ({0}):","Powered by {0}":"Com tecnologia {0}","Pre":"Pre","Preferences":"Prefer\xeancias","Preformatted":"Pr\xe9-formatado","Premium plugins:":"Plugins comerciais:","Press the Up and Down arrow keys to resize the editor.":"Prima as teclas de seta (Para cima e Para baixo) para redimensionar o editor.","Press the arrow keys to resize the editor.":"Prima as teclas de seta para redimensionar o editor.","Press {0} for help":"Prima {0} para obter ajuda","Preview":"Pr\xe9-visualizar","Previous":"Anterior","Print":"Imprimir","Print...":"Imprimir...","Purple":"P\xfarpura","Quotations":"Aspas","R":"R","Range 0 to 255":"Intervalo de 0 a 255","Red":"Vermelho","Red component":"Componente vermelho(Red)","Redo":"Refazer","Remove":"Remover","Remove color":"Remover cor","Remove link":"Remover liga\xe7\xe3o","Replace":"Substituir","Replace all":"Substituir tudo","Replace with":"Substituir por","Resize":"Redimensionar","Restore last draft":"Restaurar o \xfaltimo rascunho","Reveal or hide additional toolbar items":"Mostrar ou esconder itens adicionais da barra de ferramentas","Rich Text Area":"\xc1rea de Rich Text","Rich Text Area. Press ALT-0 for help.":"\xc1rea de texto formatado. Prima ALT-0 para exibir a ajuda.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\xc1rea de texto formatado. Prima ALT-F9 para exibir o menu. Prima ALT-F10 para exibir a barra de ferramentas. Prima ALT-0 para exibir a ajuda","Ridge":"Crista","Right":"Direita","Right to left":"Da direita para a esquerda","Row":"Linha","Row clipboard actions":"A\xe7\xf5es da linha da \xe1rea de transfer\xeancia","Row group":"Grupo de linhas","Row header":"Cabe\xe7alho de linha","Row properties":"Propriedades da linha","Row type":"Tipo de linha","Rows":"Linhas","Save":"Guardar","Save (if save plugin activated)":"Guardar (se o plugin de guardar estiver ativado)","Scope":"\xc2mbito","Search":"Pesquisar","Select all":"Selecionar tudo","Select...":"Selecionar...","Selection":"Sele\xe7\xe3o","Shortcut":"Atalho","Show blocks":"Mostrar blocos","Show caption":"Mostrar legenda","Show invisible characters":"Mostrar carateres invis\xedveis","Size":"Tamanho","Solid":"S\xf3lida","Source":"Origem","Source code":"C\xf3digo fonte","Special Character":"Car\xe1cter especial","Special character...":"Car\xe1cter especial...","Split cell":"Dividir c\xe9lula","Square":"Quadrado","Start list at number":"Come\xe7ar a lista pelo n\xfamero","Strikethrough":"Rasurado","Style":"Estilo","Subscript":"Inferior \xe0 linha","Superscript":"Superior \xe0 linha","Switch to or from fullscreen mode":"Entrar ou sair do modo de ecr\xe3 inteiro","Symbols":"S\xedmbolos","System Font":"Tipo de letra do sistema","Table":"Tabela","Table caption":"Legenda da tabela","Table properties":"Propriedades da tabela","Table styles":"Estilos de tabelas ","Template":"Modelo","Templates":"Modelos","Text":"Texto","Text color":"Cor do texto","Text color {0}":"Cor do texto {0}","Text to display":"Texto a mostrar","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"O URL que indicou parece ser um endere\xe7o de email. Quer adicionar o prefixo mailto: tal como necess\xe1rio?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"O URL que indicou parece ser uma liga\xe7\xe3o externa. Deseja adicionar o prefixo http:// necess\xe1rio?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"O URL que introduziu parece ser uma liga\xe7\xe3o externa. Deseja adicionar-lhe o prefixo https:// ?","Title":"T\xedtulo","To open the popup, press Shift+Enter":"Para abrir o pop-up, prima Shift+Enter","Toggle accordion":"Ativar/desativar acorde\xe3o","Tools":"Ferramentas","Top":"Superior","Travel and Places":"Viagens e lugares","Turquoise":"Turquesa","Underline":"Sublinhado","Undo":"Desfazer","Upload":"Carregar","Uploading image":"A carregar imagem","Upper Alpha":"Latino em mai\xfasculas","Upper Roman":"Romano em mai\xfasculas","Url":"URL","User Defined":"Definido pelo utilizador","Valid":"V\xe1lido","Version":"Vers\xe3o","Vertical align":"Alinhamento vertical","Vertical space":"Espa\xe7o vertical","View":"Ver","Visual aids":"Ajuda visual","Warn":"Aviso","White":"Branco","Width":"Largura","Word count":"Contagem de palavras","Words":"Palavras","Words: {0}":"Palavras: {0}","Yellow":"Amarelo","Yes":"Sim","You are using {0}":"Est\xe1 a usar {0}","You have unsaved changes are you sure you want to navigate away?":"Existem altera\xe7\xf5es que ainda n\xe3o foram guardadas. Tem a certeza que pretende sair?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"O seu navegador n\xe3o suporta acesso direto \xe0 \xe1rea de transfer\xeancia. Por favor, use os atalhos Ctrl+X/C/V do seu teclado.","alignment":"alinhamento","austral sign":"Austral - s\xedmbolo de moeda","cedi sign":"Cedi - s\xedmbolo de moeda","colon sign":"sinal de dois pontos","cruzeiro sign":"Cruzeiro - s\xedmbolo de moeda","currency sign":"s\xedmbolo de moeda","dollar sign":"D\xf3lar - s\xedmbolo de moeda","dong sign":"Dong - s\xedmbolo de moeda","drachma sign":"Dracma - s\xedmbolo de moeda","euro-currency sign":"Euro - s\xedmbolo de moeda","example":"exemplo","formatting":"formata\xe7\xe3o","french franc sign":"Franco franc\xeas - s\xedmbolo de moeda","german penny symbol":"Penny alem\xe3o - s\xedmbolo de moeda","guarani sign":"Guarani - s\xedmbolo de moeda","history":"hist\xf3rico","hryvnia sign":"Gr\xedvnia - s\xedmbolo de moeda","indentation":"indenta\xe7\xe3o","indian rupee sign":"Rupia indiana - s\xedmbolo de moeda","kip sign":"Kip - s\xedmbolo de moeda","lira sign":"Lira - s\xedmbolo de moeda","livre tournois sign":"Libra de Tours - s\xedmbolo de moeda","manat sign":"Manat - s\xedmbolo de moeda","mill sign":"sinal de por mil","naira sign":"Naira - s\xedmbolo de moeda","new sheqel sign":"Shekel - s\xedmbolo de moeda","nordic mark sign":"Markka n\xf3rdica - s\xedmbolo de moeda","peseta sign":"Peseta - s\xedmbolo de moeda","peso sign":"Peso - s\xedmbolo de moeda","ruble sign":"Rublo - s\xedmbolo de moeda","rupee sign":"R\xfapia - s\xedmbolo de moeda","spesmilo sign":"Spesmilo - s\xedmbolo de moeda","styles":"estilos","tenge sign":"Tengue - s\xedmbolo de moeda","tugrik sign":"Tugrik - s\xedmbolo de moeda","turkish lira sign":"Lira turca - s\xedmbolo de moeda","won sign":"Won - s\xedmbolo de moeda","yen character":"Iene - s\xedmbolo de moeda","yen/yuan character variant one":"Iene/Iuane - variante do s\xedmbolo de moeda","yuan character":"Iuane - s\xedmbolo de moeda","yuan character, in hong kong and taiwan":"Iuane, em Hong Kong e Rep\xfablica da China - s\xedmbolo de moeda","{0} characters":"{0} caracteres","{0} columns, {1} rows":"{0} colunas, {1} linhas","{0} words":"{0} palavras"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ro.js b/staticfiles/tinymce/langs/ro.js new file mode 100644 index 0000000..3470b0f --- /dev/null +++ b/staticfiles/tinymce/langs/ro.js @@ -0,0 +1 @@ +tinymce.addI18n("ro",{"#":"","Accessibility":"Accesibilitate","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Ac\u0163iune","Activity":"Activit\u0103\u021bi","Address":"Adres\u0103","Advanced":"Complex","Align":"Aliniere","Align center":"Aliniere centru","Align left":"Aliniere st\xe2nga","Align right":"Aliniere dreapta","Alignment":"Aliniere","Alignment {0}":"","All":"Tot","Alternative description":"Descriere alternativ\u0103","Alternative source":"Surs\u0103 alternativ\u0103","Alternative source URL":"URL surs\u0103 alternativ\u0103","Anchor":"Ancor\u0103","Anchor...":"Ancor\u0103\u2026","Anchors":"Ancore","Animals and Nature":"Animale \u0219i natur\u0103","Arrows":"S\u0103ge\u021bi","B":"","Background color":"Culoare fundal","Background color {0}":"","Black":"Negru","Block":"Sec\u021biune","Block {0}":"","Blockquote":"Bloc de citate","Blocks":"Blocuri","Blue":"Albastru","Blue component":"","Body":"Corp","Bold":"Aldin","Border":"Chenar","Border color":"Culoare chenar","Border style":"Stil chenar","Border width":"Grosime chenar","Bottom":"Jos","Browse files":"","Browse for an image":"C\u0103uta\u021bi o imagine","Browse links":"","Bullet list":"List\u0103 marcatori","Cancel":"Revocare","Caption":"Titlu","Cell":"Celul\u0103","Cell padding":"Spa\u021biere \xeen celul\u0103","Cell properties":"Propriet\u0103\u021bi celul\u0103","Cell spacing":"Spa\u021biere celul\u0103","Cell styles":"","Cell type":"Tip celul\u0103","Center":"Centru","Characters":"Caractere","Characters (no spaces)":"Caractere (f\u0103r\u0103 spa\u021bii)","Circle":"Cerc","Class":"Clas\u0103","Clear formatting":"\xcendep\u0103rtare formatare","Close":"\xcenchidere","Code":"Cod","Code sample...":"Mostr\u0103 cod\u2026","Code view":"Vizualizare cod","Color Picker":"Selector culori","Color swatch":"Mostr\u0103 de culori","Cols":"Coloane","Column":"Coloan\u0103","Column clipboard actions":"","Column group":"Grup coloane","Column header":"","Constrain proportions":"Restric\u021bionare propor\u021bii","Copy":"Copiere","Copy column":"Copia\u021bi coloana","Copy row":"Copiere r\xe2nd","Could not find the specified string.":"Nu s-a g\u0103sit \u0219irul indicat.","Could not load emojis":"","Count":"Num\u0103r\u0103toare","Currency":"Moned\u0103","Current window":"Fereastra curent\u0103","Custom color":"Culoare personalizat\u0103","Custom...":"Particularizare...","Cut":"Decupare","Cut column":"T\u0103ia\u021bi coloana","Cut row":"Decupare r\xe2nd","Dark Blue":"Negru \xeenchis","Dark Gray":"Gri \xeenchis","Dark Green":"Verde \xeenchis","Dark Orange":"Portocaliu \xeenchis","Dark Purple":"Violet \xeenchis","Dark Red":"Ro\u0219u \xeenchis","Dark Turquoise":"Turcoaz \xeenchis","Dark Yellow":"Galben \xeenchis","Dashed":"","Date/time":"Dat\u0103/or\u0103","Decrease indent":"Mic\u0219orare indent","Default":"Implicit","Delete accordion":"","Delete column":"Eliminare coloan\u0103","Delete row":"Eliminare r\xe2nd","Delete table":"Eliminare tabel","Dimensions":"Dimensiuni","Disc":"Punct","Div":"Div","Document":"","Dotted":"","Double":"","Drop an image here":"Glisa\u021bi o imagine aici","Dropped file type is not supported":"","Edit":"Editare","Embed":"\xcencorporare","Emojis":"","Emojis...":"","Error":"Eroare","Error: Form submit field collision.":"Eroare: Coliziune c\xe2mpuri la trimiterea formularului.","Error: No form element found.":"Eroare: Niciun element de formular g\u0103sit.","Extended Latin":"Simboluri alfabet latin extins","Failed to initialize plugin: {0}":"Nu s-a putut ini\u021bializa modulul: {0}","Failed to load plugin url: {0}":"Nu s-a putut \xeenc\u0103rca URL-ul modulului: {0}","Failed to load plugin: {0} from url {1}":"Nu s-a putut \xeenc\u0103rca modulul: {0} de la URL-ul {1}","Failed to upload image: {0}":"Nu s-a putut \xeenc\u0103rca imaginea: {0}","File":"Fi\u0219ier","Find":"G\u0103sire","Find (if searchreplace plugin activated)":"C\u0103utare (dac\u0103 modulul de c\u0103utare \u0219i \xeenlocuire este activat)","Find and Replace":"G\u0103si\u021bi \u0219i \xeenlocui\u021bi","Find and replace...":"C\u0103utare \u0219i \xeenlocuire\u2026","Find in selection":"G\u0103si\u021bi \xeen selec\u021bie","Find whole words only":"G\u0103se\u0219te doar cuvintele \xeentregi","Flags":"Steaguri","Focus to contextual toolbar":"Centrare pe bara de unelte contextual\u0103","Focus to element path":"Centrare pe calea elementului","Focus to menubar":"Centrare pe bara de meniuri","Focus to toolbar":"Centrare pe bara de unelte","Font":"","Font size {0}":"","Font sizes":"Dimensiuni de font","Font {0}":"","Fonts":"Fonturi","Food and Drink":"M\xe2ncare \u0219i b\u0103uturi","Footer":"","Format":"","Format {0}":"","Formats":"Formate","Fullscreen":"Ecran complet","G":"","General":"General","Gray":"Gri","Green":"Verde","Green component":"","Groove":"","Handy Shortcuts":"Comenzi rapide accesibile","Header":"","Header cell":"Celul\u0103 de antet","Heading 1":"Titlu 1","Heading 2":"Titlu 2","Heading 3":"Titlu 3","Heading 4":"Titlu 4","Heading 5":"Titlu 5","Heading 6":"Titlu 6","Headings":"Rubrici","Height":"\xcen\u0103l\u021bime","Help":"Ajutor","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Linie orizontal\u0103","Horizontal space":"Spa\u0163iu orizontal","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID-ul trebuie s\u0103 \xeenceap\u0103 cu o liter\u0103, urmat\u0103 doar de litere, cifre, liniu\u021be, puncte, dou\u0103 puncte sau litere de subliniere.","Image is decorative":"Imaginea este decorativ\u0103","Image list":"List\u0103 de imagini","Image title":"Titlu imagine","Image...":"Imagine\u2026","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"M\u0103rire indent","Inline":"\xcen linie","Insert":"Inserare","Insert Template":"","Insert accordion":"","Insert column after":"Inserare coloan\u0103 dup\u0103","Insert column before":"Inserare coloan\u0103 \xeenainte","Insert date/time":"Inserare dat\u0103/or\u0103","Insert image":"Inserare imagine","Insert link (if link plugin activated)":"Inserare link (dac\u0103 modulul de link-uri este activat)","Insert row after":"Inserare r\xe2nd dup\u0103","Insert row before":"Inserare r\xe2nd \xeenainte","Insert table":"Inserare tabel","Insert template...":"Inserare \u0219ablon\u2026","Insert video":"Inserare video","Insert/Edit code sample":"Inserare/Editare mostr\u0103 cod","Insert/edit image":"Inserare/editare imagini","Insert/edit link":"Inserare/editare link","Insert/edit media":"Inserare/editare media","Insert/edit video":"Inserare/editare video","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"Cursiv","Justify":"Aliniere st\xe2nga-dreapta","Keyboard Navigation":"Navigare de la tastatur\u0103","Language":"Limb\u0103","Learn more...":"Afla\u021bi mai multe\u2026","Left":"St\xe2nga","Left to right":"St\xe2nga la dreapta","Light Blue":"Albastru deschis","Light Gray":"Gri deschis","Light Green":"Verde deschis","Light Purple":"Violet deschis","Light Red":"Ro\u015fu deschis","Light Yellow":"Galben deschis","Line height":"\xcen\u0103l\u021bimea liniei","Link list":"List\u0103 linkuri","Link...":"Link\u2026","List Properties":"Propriet\u0103\u021bi list\u0103","List properties...":"Propriet\u0103\u021bi list\u0103...","Loading emojis...":"","Loading...":"","Lower Alpha":"Litere mici","Lower Greek":"Grecesc mic","Lower Roman":"Cifre romane mici","Match case":"Potrivire litere mari \u0219i mici","Mathematical":"Simboluri matematice","Media poster (Image URL)":"Poster media (URL imagine)","Media...":"Media\u2026","Medium Blue":"Albastru mediu","Medium Gray":"Gri mediu","Medium Purple":"Mov mediu","Merge cells":"\xcembinare celule","Middle":"Mijloc","Midnight Blue":"Albastru \xeenchis","More...":"Mai multe...","Name":"Nume","Navy Blue":"Albastru marin","New document":"Document nou","New window":"Fereastr\u0103 nou\u0103","Next":"Urm\u0103torul","No":"Nu","No alignment":"F\u0103r\u0103 aliniere","No color":"F\u0103r\u0103 culoare","Nonbreaking space":"Spa\u021biu f\u0103r\u0103 \xeentreruperi","None":"Nu se utilizeaz\u0103 (acest c\xe2mp)","Numbered list":"List\u0103 numerotat\u0103","OR":"SAU","Objects":"Obiecte","Ok":"Ok","Open help dialog":"Deschide dialogul de ajutor","Open link":"Deschide leg\u0103tur\u0103","Open link in...":"Deschide link \xeen\u2026","Open popup menu for split buttons":"Deschide\u021bi meniul pop-up pentru butoanele divizate","Orange":"Portocaliu","Outset":"","Page break":"\xcentrerupere de pagin\u0103","Paragraph":"Paragraf","Paste":"Lipire","Paste as text":"Lipire ca text","Paste column after":"Inserare coloan\u0103 dup\u0103","Paste column before":"Inserare coloan\u0103 \xeenainte","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Lipirea este \xeen mod text simplu. Con\u021binutul va fi lipit ca text simplu p\xe2n\u0103 dezactiva\u021bi aceast\u0103 op\u021biune.","Paste or type a link":"Lipi\u021bi sau scrie\u021bi un link","Paste row after":"Lipire r\xe2nd dup\u0103","Paste row before":"Lipire r\xe2nd \xeenainte","Paste your embed code below:":"Lipi\u021bi codul de \xeencorporare mai jos:","People":"Persoane","Plugins":"Inserturi","Plugins installed ({0}):":"Module instalate ({0}):","Powered by {0}":"Sus\u021binut de {0}","Pre":"Pre","Preferences":"Preferin\u021be","Preformatted":"Preformatat","Premium plugins:":"Module premium:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Previzualizare","Previous":"Anterior","Print":"Imprimare","Print...":"Tip\u0103rire\u2026","Purple":"Mov","Quotations":"Ghilimele","R":"","Range 0 to 255":"","Red":"Ro\u0219u","Red component":"","Redo":"Refacere","Remove":"\u0218terge","Remove color":"Eliminare culoare","Remove link":"Eliminare link","Replace":"\xcenlocuire","Replace all":"\xcenlocuire peste tot","Replace with":"\xcenlocuire cu","Resize":"Redimensionare","Restore last draft":"Restabili\u021bi ultima ciorn\u0103","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-0 pentru ajutor.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-F9 pentru a accesa meniul. Ap\u0103sa\u021bi ALT-F10 pentru a accesa bara de unelte. Ap\u0103sa\u021bi ALT-0 pentru ajutor","Ridge":"","Right":"Dreapta","Right to left":"Dreapta la st\xe2nga","Row":"R\xe2nd","Row clipboard actions":"Ac\u021biuni clipboard pe r\xe2nd","Row group":"Grupare r\xe2nduri","Row header":"","Row properties":"Propriet\u0103\u021bi r\xe2nd","Row type":"Tip r\xe2nd","Rows":"R\xe2nduri","Save":"Salvare","Save (if save plugin activated)":"Salvare (dac\u0103 modulul de salvare este activat)","Scope":"Domeniu","Search":"C\u0103utare","Select all":"Selecteaz\u0103 tot","Select...":"Selectare...","Selection":"Selec\u021bie","Shortcut":"Comand\u0103 rapid\u0103","Show blocks":"Arat\u0103 rubricile","Show caption":"Afi\u0219are captur\u0103","Show invisible characters":"Arat\u0103 caracterele invizibile","Size":"Dimensiuni","Solid":"","Source":"Surs\u0103","Source code":"Cod surs\u0103","Special Character":"Caracter special","Special character...":"Caracter special\u2026","Split cell":"Scindare celul\u0103","Square":"P\u0103trat","Start list at number":"\xcencepe\u021bi lista la num\u0103rul","Strikethrough":"T\u0103iere","Style":"Stil","Subscript":"Indice","Superscript":"Exponent","Switch to or from fullscreen mode":"Comutare pe sau de la modul ecran complet","Symbols":"Simboluri","System Font":"Font Sistem","Table":"Tabel","Table caption":"","Table properties":"Propriet\u0103\u021bi tabel","Table styles":"","Template":"\u0218ablon","Templates":"\u0218abloane","Text":"","Text color":"Culoare text","Text color {0}":"","Text to display":"Text de afi\u0219at","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL-ul introdus pare a fi o adres\u0103 de e-mail. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul mailto: necesar?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL-ul introdus pare a fi un link extern. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul http:// necesar?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Adresa URL pe care a\u021bi introdus-o pare a fi un leg\u0103tur\u0103 extern\u0103. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul https:// necesar?","Title":"Titlu","To open the popup, press Shift+Enter":"Pentru a deschide fereastra popup, ap\u0103sa\u021bi Shift+Enter","Toggle accordion":"","Tools":"Unelte","Top":"Sus","Travel and Places":"C\u0103l\u0103torii \u0219i loca\u021bii","Turquoise":"Turcoaz","Underline":"Subliniere","Undo":"Anulare","Upload":"\xcenc\u0103rcare","Uploading image":"","Upper Alpha":"Litere mari","Upper Roman":"Cifre romane mari","Url":"Url","User Defined":"Definite de utilizator","Valid":"","Version":"Versiune","Vertical align":"","Vertical space":"Spa\u0163iu vertical","View":"Vizualizare","Visual aids":"Ajutoare vizuale","Warn":"Aten\u021bionare","White":"Alb","Width":"L\u0103\u021bime","Word count":"Num\u0103r\u0103toare cuvinte","Words":"Cuvinte","Words: {0}":"Cuvinte: {0}","Yellow":"Galben","Yes":"Da","You are using {0}":"Folosi\u021bi {0}","You have unsaved changes are you sure you want to navigate away?":"Ave\u021bi modific\u0103ri nesalvate. Sigur dori\u021bi s\u0103 naviga\u021bi \xeen alt\u0103 parte?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Browser-ul dumneavoastr\u0103 nu are acces direct la clipboard. V\u0103 rug\u0103m s\u0103 folosi\u021bi \xeen schimb scurt\u0103turile de tastatur\u0103 Ctrl+X/C/V.","alignment":"aliniere","austral sign":"simbol austral","cedi sign":"simbol cedi","colon sign":"dou\u0103 puncte","cruzeiro sign":"simbol cruzeiro","currency sign":"simbol moned\u0103","dollar sign":"simbol dolar","dong sign":"simbol dong","drachma sign":"simbol drahm\u0103","euro-currency sign":"simbol euro","example":"exemplu","formatting":"formatare","french franc sign":"simbol franc francez","german penny symbol":"simbol peni german","guarani sign":"simbol guarani","history":"istoric","hryvnia sign":"simbol grivn\u0103","indentation":"indentare","indian rupee sign":"simbol rupie indian\u0103","kip sign":"simbol kip","lira sign":"simbol lir\u0103","livre tournois sign":"simbol livr\u0103 tournois","manat sign":"simbol manat","mill sign":"simbol mill","naira sign":"simbol naira","new sheqel sign":"simbol shekel nou","nordic mark sign":"simbol marc\u0103 nordic\u0103","peseta sign":"simbol peset\u0103","peso sign":"simbol peso","ruble sign":"simbol rubl\u0103","rupee sign":"simbol rupie","spesmilo sign":"simbol spesmilo","styles":"stiluri","tenge sign":"simbol tenge","tugrik sign":"simbol tugrik","turkish lira sign":"simbol lir\u0103 turceasc\u0103","won sign":"simbol won","yen character":"simbol yen","yen/yuan character variant one":"simbol yen/yuan prima variant\u0103","yuan character":"simbol yuan","yuan character, in hong kong and taiwan":"simbol yuan \xeen Hong Kong \u0219i Taiwan","{0} characters":"{0} caractere","{0} columns, {1} rows":"","{0} words":"{0} cuvinte"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ru.js b/staticfiles/tinymce/langs/ru.js new file mode 100644 index 0000000..496de8b --- /dev/null +++ b/staticfiles/tinymce/langs/ru.js @@ -0,0 +1 @@ +tinymce.addI18n("ru",{"#":"#","Accessibility":"\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438","Accordion":"\u0410\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d","Accordion body...":"","Accordion summary...":"","Action":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435","Activity":"\u0414\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c","Address":"\u0410\u0434\u0440\u0435\u0441","Advanced":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435","Align":"\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c","Align center":"\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","Align left":"\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","Align right":"\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","Alignment":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","Alignment {0}":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 {0}","All":"\u0412\u0441\u0435","Alternative description":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","Alternative source":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a","Alternative source URL":"URL \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430","Anchor":"\u042f\u043a\u043e\u0440\u044c","Anchor...":"\u042f\u043a\u043e\u0440\u044c...","Anchors":"\u042f\u043a\u043e\u0440\u044f","Animals and Nature":"\u0416\u0438\u0432\u043e\u0442\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430","Arrows":"\u0421\u0442\u0440\u0435\u043b\u043a\u0438","B":"B","Background color":"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430","Background color {0}":"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 {0}","Black":"\u0427\u0435\u0440\u043d\u044b\u0439","Block":"\u0411\u043b\u043e\u043a","Block {0}":"\u0411\u043b\u043e\u043a {0}","Blockquote":"\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","Blocks":"\u0411\u043b\u043e\u043a\u0438","Blue":"\u0421\u0438\u043d\u0438\u0439","Blue component":"\u0421\u0438\u043d\u044f\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430","Body":"\u0422\u0435\u043b\u043e","Bold":"\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442","Border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","Border color":"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","Border style":"\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u043c\u043a\u0438","Border width":"\u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u043c\u043a\u0438","Bottom":"\u041f\u043e \u043d\u0438\u0437\u0443","Browse files":"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0444\u0430\u0439\u043b\u043e\u0432","Browse for an image":"\u0412\u044b\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","Browse links":"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0441\u044b\u043b\u043e\u043a","Bullet list":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","Cancel":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c","Caption":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","Cell":"\u042f\u0447\u0435\u0439\u043a\u0430","Cell padding":"\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f \u044f\u0447\u0435\u0439\u043a\u0438","Cell properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","Cell spacing":"\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f \u044f\u0447\u0435\u0439\u043a\u0438","Cell styles":"\u0421\u0442\u0438\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0438","Cell type":"\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438","Center":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","Characters":"\u0421\u0438\u043c\u0432\u043e\u043b\u044b","Characters (no spaces)":"\u0421\u0438\u043c\u0432\u043e\u043b\u044b (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432)","Circle":"\u041a\u0440\u0443\u0436\u043e\u043a","Class":"\u041a\u043b\u0430\u0441\u0441","Clear formatting":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","Code":"\u041a\u043e\u0434","Code sample...":"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430...","Code view":"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043e\u0434\u0430","Color Picker":"\u041f\u0438\u043f\u0435\u0442\u043a\u0430 \u0446\u0432\u0435\u0442\u0430","Color swatch":"\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u0446\u0432\u0435\u0442\u0430","Cols":"\u0421\u0442\u043e\u043b\u0431\u0446\u044b","Column":"\u0421\u0442\u043e\u043b\u0431\u0435\u0446","Column clipboard actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430","Column group":"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432","Column header":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430","Constrain proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438","Copy":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","Copy column":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","Copy row":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","Could not find the specified string.":"\u0417\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430/","Could not load emojis":"\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0438","Count":"\u041f\u043e\u0434\u0441\u0447\u0435\u0442","Currency":"\u0412\u0430\u043b\u044e\u0442\u0430","Current window":"\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u043d\u043e","Custom color":"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442","Custom...":"\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439...","Cut":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c","Cut column":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","Cut row":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","Dark Blue":"\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","Dark Gray":"\u0422\u0435\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439","Dark Green":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","Dark Orange":"\u0422\u0435\u043c\u043d\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439","Dark Purple":"\u0422\u0435\u043c\u043d\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439","Dark Red":"\u0422\u0435\u043c\u043d\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439","Dark Turquoise":"\u0422\u0435\u043c\u043d\u043e-\u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","Dark Yellow":"\u0422\u0435\u043c\u043d\u043e-\u0436\u0435\u043b\u0442\u044b\u0439","Dashed":"\u0427\u0435\u0440\u0442\u043e\u0447\u043a\u0430\u043c\u0438","Date/time":"\u0414\u0430\u0442\u0430/\u0432\u0440\u0435\u043c\u044f","Decrease indent":"\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","Default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","Delete accordion":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d","Delete column":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","Delete row":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","Delete table":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","Dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440\u044b","Disc":"\u0422\u043e\u0447\u043a\u0430","Div":"Div","Document":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442","Dotted":"\u0422\u043e\u0447\u043a\u0430\u043c\u0438","Double":"\u0414\u0432\u043e\u0439\u043d\u043e\u0439","Drop an image here":"\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u044e\u0434\u0430","Dropped file type is not supported":"\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f","Edit":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c","Embed":"\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434","Emojis":"\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438","Emojis...":"\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438...","Error":"\u041e\u0448\u0438\u0431\u043a\u0430","Error: Form submit field collision.":"\u041e\u0448\u0438\u0431\u043a\u0430: \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043f\u043e\u043b\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u043e\u0440\u043c\u044b.","Error: No form element found.":"\u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u044b.","Extended Latin":"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043b\u0430\u0442\u044b\u043d\u044c","Failed to initialize plugin: {0}":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}","Failed to load plugin url: {0}":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 URL \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}","Failed to load plugin: {0} from url {1}":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0} \u0438\u0437 URL {1}","Failed to upload image: {0}":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u041d\u0430\u0439\u0442\u0438","Find (if searchreplace plugin activated)":"\u041d\u0430\u0439\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d searchreplace \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)","Find and Replace":"\u041d\u0430\u0439\u0442\u0438 \u0438 \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c","Find and replace...":"\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c...","Find in selection":"\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c","Find whole words only":"\u041d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","Flags":"\u0424\u043b\u0430\u0433\u0438","Focus to contextual toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","Focus to element path":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u0443\u0442\u0438","Focus to menubar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u0435\u043d\u044e","Focus to toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","Font":"\u0428\u0440\u0438\u0444\u0442","Font size {0}":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 {0}","Font sizes":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","Font {0}":"\u0428\u0440\u0438\u0444\u0442 {0}","Fonts":"\u0428\u0440\u0438\u0444\u0442\u044b","Food and Drink":"\u0415\u0434\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438","Footer":"\u041d\u0438\u0436\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b","Format":"\u0424\u043e\u0440\u043c\u0430\u0442","Format {0}":"\u0424\u043e\u0440\u043c\u0430\u0442 {0}","Formats":"\u0424\u043e\u0440\u043c\u0430\u0442\u044b","Fullscreen":"\u041f\u043e\u043b\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d","G":"G","General":"\u041e\u0431\u0449\u0438\u0435","Gray":"\u0421\u0435\u0440\u044b\u0439","Green":"\u0417\u0435\u043b\u0435\u043d\u044b\u0439","Green component":"\u0417\u0435\u043b\u0435\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430","Groove":"\u041f\u0430\u0437","Handy Shortcuts":"\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438","Header":"\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b","Header cell":"\u042f\u0447\u0435\u0439\u043a\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b\u0430","Heading 1":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1","Heading 2":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2","Heading 3":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3","Heading 4":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4","Heading 5":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5","Heading 6":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6","Headings":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438","Height":"\u0412\u044b\u0441\u043e\u0442\u0430","Help":"\u0421\u043f\u0440\u0430\u0432\u043a\u0430","Hex color code":"HEX-\u043a\u043e\u0434 \u0446\u0432\u0435\u0442\u0430","Hidden":"\u0421\u043a\u0440\u044b\u0442\u044b\u0439","Horizontal align":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","Horizontal line":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f","Horizontal space":"\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, \u0447\u0435\u0440\u0442\u043e\u0447\u043a\u0443, \u0442\u043e\u0447\u043a\u0443, \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0438\u043b\u0438 \u0437\u043d\u0430\u043a \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.","Image is decorative":"\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Image list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439","Image title":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","Image...":"\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...","ImageProxy HTTP error: Could not find Image Proxy":"\u041e\u0448\u0438\u0431\u043a\u0430 HTTP ImageProxy: \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u041e\u0448\u0438\u0431\u043a\u0430 HTTP ImageProxy: \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 URL-\u0430\u0434\u0440\u0435\u0441 Image Proxy","ImageProxy HTTP error: Rejected request":"\u041e\u0448\u0438\u0431\u043a\u0430 HTTP ImageProxy: \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d","ImageProxy HTTP error: Unknown ImageProxy error":"\u041e\u0448\u0438\u0431\u043a\u0430 HTTP ImageProxy: \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 ImageProxy","Increase indent":"\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","Inline":"\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439","Insert":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c","Insert Template":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d","Insert accordion":"","Insert column after":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430","Insert column before":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430","Insert date/time":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043c\u044f","Insert image":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Insert link (if link plugin activated)":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d link \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)","Insert row after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","Insert row before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","Insert table":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","Insert template...":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d...","Insert video":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e","Insert/Edit code sample":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430","Insert/edit image":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c/\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","Insert/edit link":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","Insert/edit media":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430","Insert/edit video":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e","Inset":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430","Invalid hex color code: {0}":"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 HEX-\u043a\u043e\u0434 \u0446\u0432\u0435\u0442\u0430: {0}","Invalid input":"\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435","Italic":"\u041a\u0443\u0440\u0441\u0438\u0432","Justify":"\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435","Keyboard Navigation":"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b","Language":"\u042f\u0437\u044b\u043a","Learn more...":"\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435...","Left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","Left to right":"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","Light Blue":"\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0438\u043d\u0438\u0439","Light Gray":"\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0435\u0440\u044b\u0439","Light Green":"\u0421\u0432\u0435\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","Light Purple":"\u0421\u0432\u0435\u0442\u043b\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439","Light Red":"\u0421\u0432\u0435\u0442\u043b\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439","Light Yellow":"\u0421\u0432\u0435\u0442\u043b\u043e-\u0436\u0435\u043b\u0442\u044b\u0439","Line height":"\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438","Link list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a","Link...":"\u0421\u0441\u044b\u043b\u043a\u0430...","List Properties":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432","List properties...":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432...","Loading emojis...":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432...","Loading...":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...","Lower Alpha":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435","Lower Greek":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435","Lower Roman":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435","Match case":"\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435","Media poster (Image URL)":"\u041f\u043e\u0441\u0442\u0435\u0440 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 (URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)","Media...":"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430...","Medium Blue":"\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0438\u043d\u0438\u0439","Medium Gray":"\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u044b\u0439","Medium Purple":"\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439","Merge cells":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","Middle":"\u041f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435","Midnight Blue":"\u0427\u0435\u0440\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","More...":"\u0411\u043e\u043b\u044c\u0448\u0435...","Name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435/\u0418\u043c\u044f","Navy Blue":"\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","New document":"\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","New window":"\u041d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e","Next":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c","No":"\u041d\u0435\u0442","No alignment":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e","No color":"\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430","Nonbreaking space":"\u041d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b","None":"\u041d\u0435\u0442","Numbered list":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","OR":"\u0418\u041b\u0418","Objects":"\u041e\u0431\u044a\u0435\u043a\u0442\u044b","Ok":"OK","Open help dialog":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443","Open link":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435","Open link in...":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432...","Open popup menu for split buttons":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a","Orange":"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439","Outset":"\u0412\u044b\u0440\u0435\u0437\u043a\u0430","Page break":"\u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b","Paragraph":"\u0410\u0431\u0437\u0430\u0446","Paste":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c","Paste as text":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442","Paste column after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430","Paste column before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0446\u0438\u044e.","Paste or type a link":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443","Paste row after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","Paste row before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","Paste your embed code below:":"\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435:","People":"\u041b\u044e\u0434\u0438","Plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u044b","Plugins installed ({0}):":"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b ({0}):","Powered by {0}":"\u041f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c {0}","Pre":"Pre","Preferences":"\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f","Preformatted":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439","Premium plugins:":"\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b:","Press the Up and Down arrow keys to resize the editor.":"\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043d\u0438\u0437.","Press the arrow keys to resize the editor.":"\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438.","Press {0} for help":"\u041d\u0430\u0436\u043c\u0438\u0442\u0435 {0}, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443","Preview":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","Previous":"\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439","Print":"\u041f\u0435\u0447\u0430\u0442\u044c","Print...":"\u041d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c...","Purple":"\u0420\u043e\u0437\u043e\u0432\u044b\u0439","Quotations":"\u0426\u0438\u0442\u0430\u0442\u044b","R":"R","Range 0 to 255":"\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0 \u0434\u043e 255","Red":"\u041a\u0440\u0430\u0441\u043d\u044b\u0439","Red component":"\u041a\u0440\u0430\u0441\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430","Redo":"Redo","Remove":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c","Remove color":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442","Remove link":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","Replace":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c","Replace all":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435","Replace with":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430","Resize":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440","Restore last draft":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a","Reveal or hide additional toolbar items":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043b\u0438 \u0441\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","Rich Text Area":"\u041f\u043e\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430","Rich Text Area. Press ALT-0 for help.":"\u041f\u043e\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u041f\u043e\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F9, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u0435\u043d\u044e, ALT-F10, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, ALT-0, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443.","Ridge":"\u0428\u0438\u043f","Right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","Right to left":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","Row":"\u0421\u0442\u0440\u043e\u043a\u0430","Row clipboard actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438","Row group":"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a","Row header":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438","Row properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","Row type":"\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438","Rows":"\u0421\u0442\u0440\u043e\u043a\u0438","Save":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","Save (if save plugin activated)":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d save \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)","Scope":"\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f","Search":"\u041f\u043e\u0438\u0441\u043a","Select all":"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435","Select...":"\u0412\u044b\u0431\u0440\u0430\u0442\u044c...","Selection":"\u0412\u044b\u0431\u043e\u0440","Shortcut":"\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430","Show blocks":"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438","Show caption":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c","Show invisible characters":"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b","Size":"\u0420\u0430\u0437\u043c\u0435\u0440","Solid":"\u0421\u043f\u043b\u043e\u0448\u043d\u043e\u0439","Source":"\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442","Source code":"\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434","Special Character":"\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","Special character...":"\u0421\u043f\u0435\u0446. \u0441\u0438\u043c\u0432\u043e\u043b\u044b...","Split cell":"\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443","Square":"\u041a\u0432\u0430\u0434\u0440\u0430\u0442","Start list at number":"\u041d\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e \u0441","Strikethrough":"\u0417\u0430\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435","Style":"\u0421\u0442\u0438\u043b\u044c","Subscript":"\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","Superscript":"\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","Switch to or from fullscreen mode":"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c","Symbols":"\u0421\u0438\u043c\u0432\u043e\u043b\u044b","System Font":"\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442","Table":"\u0422\u0430\u0431\u043b\u0438\u0446\u0430","Table caption":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Table properties":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Table styles":"\u0421\u0442\u0438\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Template":"\u0428\u0430\u0431\u043b\u043e\u043d","Templates":"\u0428\u0430\u0431\u043b\u043e\u043d\u044b","Text":"\u0422\u0435\u043a\u0441\u0442","Text color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","Text color {0}":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 {0}","Text to display":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \xabmailto:\xbb?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \xabhttp://\xbb?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 URL-\u0430\u0434\u0440\u0435\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0425\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 https: //?","Title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","To open the popup, press Shift+Enter":"\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Shift+Enter","Toggle accordion":"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u0435\u043e\u043d","Tools":"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b","Top":"\u041f\u043e \u0432\u0435\u0440\u0445\u0443","Travel and Places":"\u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430","Turquoise":"\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","Underline":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435","Undo":"Undo","Upload":"\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c","Uploading image":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438","Upper Alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435","Upper Roman":"\u041f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435","Url":"URL-\u0430\u0434\u0440\u0435\u0441","User Defined":"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c","Valid":"\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439","Version":"\u0412\u0435\u0440\u0441\u0438\u044f","Vertical align":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","Vertical space":"\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438","View":"\u0412\u0438\u0434","Visual aids":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438","Warn":"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435","White":"\u0411\u0435\u043b\u044b\u0439","Width":"\u0428\u0438\u0440\u0438\u043d\u0430","Word count":"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432","Words":"\u0421\u043b\u043e\u0432\u0430","Words: {0}":"\u0421\u043b\u043e\u0432: {0}","Yellow":"\u0416\u0435\u043b\u0442\u044b\u0439","Yes":"\u0414\u0430","You are using {0}":"\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u0431\u043c\u0435\u043d\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448: Ctrl+X/C/V.","alignment":"\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","austral sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u0430","cedi sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u0435\u0434\u0438","colon sign":"\u0414\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435","cruzeiro sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e","currency sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u0430\u043b\u044e\u0442\u044b","dollar sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043b\u043b\u0430\u0440\u0430","dong sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043d\u0433\u0430","drachma sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0440\u0430\u0445\u043c\u044b","euro-currency sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0435\u0432\u0440\u043e","example":"\u043f\u0440\u0438\u043c\u0435\u0440","formatting":"\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","french franc sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0430","german penny symbol":"\u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0444\u0435\u043d\u043d\u0438\u0433\u0430","guarani sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0443\u0430\u0440\u0430\u043d\u0438","history":"\u0438\u0441\u0442\u043e\u0440\u0438\u044f","hryvnia sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0440\u0438\u0432\u043d\u0438","indentation":"\u043e\u0442\u0441\u0442\u0443\u043f","indian rupee sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0443\u043f\u0438\u0438","kip sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0438\u043f\u044b","lira sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0440\u044b","livre tournois sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0432\u0440\u044b","manat sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u043d\u0430\u0442\u0430","mill sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0435\u0441\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0446\u0435\u043d\u0442\u0430","naira sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0439\u0440\u044b","new sheqel sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0448\u0435\u043a\u0435\u043b\u044f","nordic mark sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u0440\u043a\u0438","peseta sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u0435\u0442\u044b","peso sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u043e","ruble sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u0431\u043b\u044f","rupee sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u043f\u0438\u0438","spesmilo sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e","styles":"\u0441\u0442\u0438\u043b\u0438","tenge sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0435\u043d\u044c\u0433\u0435","tugrik sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0433\u0440\u0438\u043a\u0430","turkish lira sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0439 \u043b\u0438\u0440\u044b","won sign":"\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u043e\u043d\u044b","yen character":"\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b","yen/yuan character variant one":"\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b/\u044e\u0430\u043d\u044f, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 1","yuan character":"\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f","yuan character, in hong kong and taiwan":"\u0421\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f, \u0413\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d\u044c","{0} characters":"{0} \u0441\u0438\u043c\u0432\u043e\u043b.","{0} columns, {1} rows":"{0} \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, {1} \u0441\u0442\u0440\u043e\u043a","{0} words":"{0} \u0441\u043b\u043e\u0432"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/sk.js b/staticfiles/tinymce/langs/sk.js new file mode 100644 index 0000000..0496d45 --- /dev/null +++ b/staticfiles/tinymce/langs/sk.js @@ -0,0 +1 @@ +tinymce.addI18n("sk",{"#":"#","Accessibility":"Dostupnos\u0165","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\xdakon","Activity":"Aktivity","Address":"Adresa","Advanced":"Pokro\u010dil\xe9","Align":"Zarovna\u0165","Align center":"Zarovna\u0165 na stred","Align left":"Zarovna\u0165 v\u013eavo","Align right":"Zarovna\u0165 vpravo","Alignment":"Zarovnanie","Alignment {0}":"Zarovnanie {0}","All":"V\u0161etko","Alternative description":"Alternat\xedvny popis","Alternative source":"Alternat\xedvny zdroj","Alternative source URL":"Alternat\xedvny zdroj URL","Anchor":"Kotva","Anchor...":"Kotva...","Anchors":"Kotvy","Animals and Nature":"Zvierat\xe1 a pr\xedroda","Arrows":"\u0160\xedpky","B":"M","Background color":"Farba pozadia","Background color {0}":"Farba pozadia {0}","Black":"\u010cierna","Block":"Blok","Block {0}":"Blok {0}","Blockquote":"Cit\xe1cia","Blocks":"Bloky","Blue":"Modr\xe1","Blue component":"Modr\xe1 zlo\u017eka","Body":"Telo","Bold":"Tu\u010dn\xe9","Border":"Or\xe1movanie","Border color":"Farba or\xe1movania","Border style":"\u0160t\xfdl okraja","Border width":"\u0160\xedrka okraja","Bottom":"Spodok","Browse files":"Preh\u013ead\xe1va\u0165 s\xfabory","Browse for an image":"N\xe1js\u0165 obr\xe1zok","Browse links":"Preh\u013ead\xe1va\u0165 odkazy","Bullet list":"Zoznam s odr\xe1\u017ekami","Cancel":"Zru\u0161i\u0165","Caption":"Popisok","Cell":"Bunka","Cell padding":"Odsadenie v bunk\xe1ch","Cell properties":"Vlastnosti bunky","Cell spacing":"Rozstup buniek","Cell styles":"\u0160t\xfdly bunky","Cell type":"Typ bunky","Center":"Stred","Characters":"Znaky","Characters (no spaces)":"Znaky (bez medzier)","Circle":"Kruhov\xfd","Class":"Trieda","Clear formatting":"Vymaza\u0165 form\xe1tovanie","Close":"Zatvori\u0165","Code":"K\xf3d","Code sample...":"Vzorka k\xf3du...","Code view":"Zobrazenie k\xf3du","Color Picker":"V\xfdber farieb","Color swatch":"Vzorky farieb","Cols":"St\u013apce","Column":"St\u013apec","Column clipboard actions":"Clipboard akcie nad st\u013apcom","Column group":"Skupina st\u013apcov","Column header":"Hlavi\u010dka st\u013apca","Constrain proportions":"Obmedzenie proporci\xed","Copy":"Kop\xedrova\u0165","Copy column":"Kop\xedrova\u0165 st\u013apec","Copy row":"Kop\xedrova\u0165 riadok","Could not find the specified string.":"Zadan\xfd re\u0165azec sa nena\u0161iel.","Could not load emojis":"Nebolo mo\u017en\xe9 nahra\u0165 emotikony","Count":"Po\u010det","Currency":"Mena","Current window":"Aktu\xe1lne okno","Custom color":"Vlastn\xe1 farba","Custom...":"Vlastn\xe9...","Cut":"Vystrihn\xfa\u0165","Cut column":"Vystrihn\xfa\u0165 st\u013apec","Cut row":"Vystrihn\xfa\u0165 riadok","Dark Blue":"Tmavomodr\xe1","Dark Gray":"Tmavosiv\xe1","Dark Green":"Tmavozelen\xe1","Dark Orange":"Tmavooran\u017eov\xe1","Dark Purple":"Tmavofialov\xe1","Dark Red":"Tmavo\u010derven\xe1","Dark Turquoise":"Tmavotyrkysov\xe1","Dark Yellow":"Tmavo\u017elt\xe1","Dashed":"\u010ciarkovan\xe9","Date/time":"D\xe1tum/\u010das","Decrease indent":"Zmen\u0161i\u0165 odsadenie","Default":"V\xfdchodzie","Delete accordion":"","Delete column":"Vymaza\u0165 st\u013apec","Delete row":"Zmaza\u0165 riadok","Delete table":"Zmaza\u0165 tabu\u013eku","Dimensions":"Rozmery","Disc":"Ov\xe1lny","Div":"Div","Document":"Dokument","Dotted":"Bodkovan\xe9","Double":"Dvojit\xe9","Drop an image here":"Pretiahnite obr\xe1zok sem","Dropped file type is not supported":"Vkladan\xfd typ s\xfabora nie je podporovan\xfd","Edit":"Upravi\u0165","Embed":"Vlo\u017ei\u0165","Emojis":"Emotikony","Emojis...":"Emotikony...","Error":"Chyba","Error: Form submit field collision.":"Chyba: konflikt po\u013ea odosielania formul\xe1ra.","Error: No form element found.":"Chyba: nena\u0161iel sa prvok formul\xe1ra.","Extended Latin":"Roz\u0161\xedren\xe1 latinka","Failed to initialize plugin: {0}":"Nepodarilo sa inicializova\u0165 plugin: {0}","Failed to load plugin url: {0}":"Nepodarilo sa nahra\u0165 plugin url: {0}","Failed to load plugin: {0} from url {1}":"Plugin: {0} sa nepodarilo nahra\u0165 z url {1}","Failed to upload image: {0}":"Obr\xe1zok sa nepodarilo nahra\u0165: {0}","File":"S\xfabor","Find":"H\u013eada\u0165","Find (if searchreplace plugin activated)":"N\xe1js\u0165 (ak je aktivovan\xfd plugin vyh\u013ead\xe1vania)","Find and Replace":"N\xe1js\u0165 a nahradi\u0165","Find and replace...":"N\xe1js\u0165 a nahradi\u0165...","Find in selection":"N\xe1js\u0165 vo v\xfdbere","Find whole words only":"H\u013eada\u0165 len cel\xe9 slov\xe1","Flags":"Vlajky","Focus to contextual toolbar":"Zameranie na kontextov\xfd panel s n\xe1strojmi","Focus to element path":"Zameranie na cestu prvku","Focus to menubar":"Zameranie na panel s ponukami","Focus to toolbar":"Zameranie na panel s n\xe1strojmi","Font":"P\xedsmo","Font size {0}":"Ve\u013ekos\u0165 p\xedsma {0}","Font sizes":"Ve\u013ekosti p\xedsma","Font {0}":"Font {0}","Fonts":"Typy p\xedsma","Food and Drink":"Jedlo a n\xe1poje","Footer":"P\xe4ta","Format":"Form\xe1t","Format {0}":"Form\xe1t {0}","Formats":"Form\xe1ty","Fullscreen":"Na cel\xfa obrazovku","G":"Z","General":"Z\xe1kladn\xe9","Gray":"Siv\xe1","Green":"Zelen\xe1","Green component":"Zelen\xe1 zlo\u017eka","Groove":"Vtla\u010den\xfd okraj","Handy Shortcuts":"U\u017eito\u010dn\xe9 odkazy","Header":"Hlavi\u010dka","Header cell":"Bunka z\xe1hlavia","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6","Headings":"Nadpisy","Height":"V\xfd\u0161ka","Help":"Pomocn\xedk","Hex color code":"Hexa k\xf3d farby","Hidden":"Skryt\xe9","Horizontal align":"Horizont\xe1lne zarovnanie","Horizontal line":"Horizont\xe1lna \u010diara","Horizontal space":"Horizont\xe1lny priestor","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID by sa malo za\u010d\xedna\u0165 p\xedsmenom, po ktorom nasleduj\xfa iba p\xedsmen\xe1, \u010d\xedsla, poml\u010dky, bodky, dvojbodky alebo pod\u010diarkovn\xedky.","Image is decorative":"Obr\xe1zok je dekorat\xedvny","Image list":"Zoznam obr\xe1zkov","Image title":"N\xe1zov obr\xe1zka","Image...":"Obr\xe1zok...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP chyba: Nebolo n\xe1jden\xe9 Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP chyba: Chybn\xe1 Image Proxy URL adresa","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP chyba: Odmietnut\xe1 po\u017eiadavka","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP chyba: Nezn\xe1ma ImageProxy chyba","Increase indent":"Zv\xe4\u010d\u0161i\u0165 odsadenie","Inline":"Vlo\u017een\xe9 \u0161t\xfdly","Insert":"Vlo\u017ei\u0165","Insert Template":"Vlo\u017ei\u0165 \u0161abl\xf3nu","Insert accordion":"","Insert column after":"Vlo\u017ei\u0165 st\u013apec za","Insert column before":"Vlo\u017ei\u0165 st\u013apec pred","Insert date/time":"Vlo\u017ei\u0165 d\xe1tum/\u010das","Insert image":"Vlo\u017ei\u0165 obr\xe1zok","Insert link (if link plugin activated)":"Vlo\u017ei\u0165 odkaz (ak je aktivovan\xfd plugin odkazu)","Insert row after":"Vlo\u017ei\u0165 riadok za","Insert row before":"Vlo\u017ei\u0165 riadok pred","Insert table":"Vlo\u017ei\u0165 tabu\u013eku","Insert template...":"Vlo\u017ei\u0165 \u0161abl\xf3nu...","Insert video":"Vlo\u017ei\u0165 video","Insert/Edit code sample":"Vlo\u017ei\u0165/upravi\u0165 vzorku k\xf3du","Insert/edit image":"Vlo\u017ei\u0165/upravi\u0165 obr\xe1zok","Insert/edit link":"Vlo\u017ei\u0165/upravi\u0165 odkaz","Insert/edit media":"Vlo\u017ei\u0165/upravi\u0165 m\xe9di\xe1","Insert/edit video":"Vlo\u017ei\u0165/upravi\u0165 video","Inset":"Vtla\u010den\xe9","Invalid hex color code: {0}":"Nespr\xe1vny hex k\xf3d farby: {0}","Invalid input":"Chybn\xfd vstup","Italic":"Kurz\xedva","Justify":"Zarovna\u0165","Keyboard Navigation":"Navig\xe1cia pomocou kl\xe1vesnice","Language":"Jazyk","Learn more...":"Zisti viac...","Left":"V\u013eavo","Left to right":"Z\u013eava doprava","Light Blue":"Svetlomodr\xe1","Light Gray":"Svetlosiv\xe1","Light Green":"Svetlozelen\xe1","Light Purple":"Svetlofialov\xe1","Light Red":"Svetlo\u010derven\xe1","Light Yellow":"Svetlo\u017elt\xe1","Line height":"V\xfd\u0161ka riadku","Link list":"Zoznam odkazov","Link...":"Odkaz...","List Properties":"Vlastnosti Zoznamu","List properties...":"Vlastnosti Zoznamu...","Loading emojis...":"Nahr\xe1vam emotikony...","Loading...":"Nahr\xe1vam...","Lower Alpha":"Mal\xe9 p\xedsmen\xe1","Lower Greek":"Mal\xe9 gr\xe9cke p\xedsmen\xe1","Lower Roman":"Mal\xe9 r\xedmske \u010d\xedslice","Match case":"Rozli\u0161ova\u0165 ve\u013ek\xe9/mal\xe9 p\xedsmen\xe1","Mathematical":"Matematick\xe9","Media poster (Image URL)":"Obr\xe1zok m\xe9dia (URL obr\xe1zka)","Media...":"M\xe9di\xe1...","Medium Blue":"Stredn\xe1 modr\xe1","Medium Gray":"Stredn\xe1 siv\xe1","Medium Purple":"Stredn\xe1 fialov\xe1","Merge cells":"Zl\xfa\u010di\u0165 bunky","Middle":"Stred","Midnight Blue":"Polno\u010dn\xe1 modr\xe1","More...":"Viac...","Name":"N\xe1zov","Navy Blue":"N\xe1morn\xedcka modr\xe1","New document":"Nov\xfd dokument","New window":"Nov\xe9 okno","Next":"Nasleduj\xface","No":"Nie","No alignment":"Bez zarovnania","No color":"Bez farby","Nonbreaking space":"Pevn\xe1 medzera","None":"\u017diadne","Numbered list":"\u010c\xedslovan\xfd zoznam","OR":"ALEBO","Objects":"Objekty","Ok":"Ok","Open help dialog":"Otvori\u0165 okno n\xe1povedy","Open link":"Otvori\u0165 linku","Open link in...":"Otvori\u0165 odkaz v...","Open popup menu for split buttons":"Otvorte vyskakovacie menu pre rozdelen\xe9 tla\u010didl\xe1","Orange":"Oran\u017eov\xe1","Outset":"Vyst\xfapen\xe9","Page break":"Zalomenie str\xe1nky","Paragraph":"Odstavec","Paste":"Prilepi\u0165","Paste as text":"Vlo\u017ei\u0165 ako text","Paste column after":"Vlo\u017ei\u0165 st\u013apec za","Paste column before":"Vlo\u017ei\u0165 st\u013apec pred","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Vkladanie je v m\xf3de neform\xe1tovan\xe9ho textu. Vkladan\xfd obsah bude vlo\u017een\xfd ako neform\xe1tovan\xfd, a\u017e pok\xfdm t\xfato mo\u017enos\u0165 nevypnete.","Paste or type a link":"Prilepte alebo nap\xed\u0161te odkaz","Paste row after":"Prilepi\u0165 riadok za","Paste row before":"Prilepi\u0165 riadok pred","Paste your embed code below:":"Vlo\u017ete k\xf3d pre vlo\u017eenie ni\u017e\u0161ie:","People":"\u013dudia","Plugins":"Pluginy","Plugins installed ({0}):":"Nain\u0161talovan\xe9 pluginy ({0}):","Powered by {0}":"Pou\u017e\xedva {0}","Pre":"Pre","Preferences":"Preferencie","Preformatted":"Predform\xe1tovan\xe9","Premium plugins:":"Pr\xe9miov\xe9 pluginy:","Press the Up and Down arrow keys to resize the editor.":"Ve\u013ekos\u0165 editora zmen\xedte stla\u010den\xedm kl\xe1vesov so \u0161\xedpkami Nahor a\xa0Nadol.","Press the arrow keys to resize the editor.":"Ve\u013ekos\u0165 editora zmen\xedte stla\u010den\xedm kl\xe1ves so \u0161\xedpkami.","Press {0} for help":"Ak potrebujete pomoc, stla\u010dte {0}","Preview":"Uk\xe1\u017eka","Previous":"Predch\xe1dzaj\xface","Print":"Tla\u010d","Print...":"Tla\u010d...","Purple":"Fialov\xe1","Quotations":"Kvot\xe1cie","R":"\u010c","Range 0 to 255":"Rozsah 0 a\u017e 255","Red":"\u010cerven\xe1","Red component":"\u010cerven\xe1 zlo\u017eka","Redo":"Znova","Remove":"Odstr\xe1ni\u0165","Remove color":"Odstr\xe1ni\u0165 farbu","Remove link":"Odstr\xe1ni\u0165 odkaz","Replace":"Nahradi\u0165","Replace all":"Nahradi\u0165 v\u0161etko","Replace with":"Nahradi\u0165 \u010d\xedm","Resize":"Zmeni\u0165 ve\u013ekos\u0165","Restore last draft":"Obnovi\u0165 posledn\xfd koncept","Reveal or hide additional toolbar items":"Odhali\u0165 alebo skry\u0165 \u010fal\u0161ie polo\u017eky panela s\xa0n\xe1strojmi","Rich Text Area":"Oblas\u0165 pre text vo form\xe1te RTF","Rich Text Area. Press ALT-0 for help.":"Oblas\u0165 pre text vo form\xe1te RTF. Stla\u010dte ALT-0 pre n\xe1povedu.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Oblas\u0165 pre text vo form\xe1te RTF. Stla\u010dte ALT-F9 pre zobrazenie menu. Stla\u010dte ALT-F10 pre zobrazenie panela n\xe1strojov. Stla\u010dte ALT-0 pre n\xe1povedu.","Ridge":"Vyst\xfapen\xfd okraj","Right":"Vpravo","Right to left":"Sprava do\u013eava","Row":"Riadok","Row clipboard actions":"Clipboard akcie nad riadkom","Row group":"Skupina riadkov","Row header":"Hlavi\u010dka riadku","Row properties":"Vlastnosti riadku","Row type":"Typ riadku","Rows":"Riadky","Save":"Ulo\u017ei\u0165","Save (if save plugin activated)":"Ulo\u017ei\u0165 (ak je aktivovan\xfd plugin ulo\u017eenia)","Scope":"Oblas\u0165","Search":"Vyh\u013eada\u0165","Select all":"Ozna\u010di\u0165 v\u0161etko","Select...":"Vyberte...","Selection":"V\xfdber","Shortcut":"Odkaz","Show blocks":"Zobrazi\u0165 bloky","Show caption":"Zobrazi\u0165 popis","Show invisible characters":"Zobrazi\u0165 skryt\xe9 znaky","Size":"Ve\u013ekos\u0165","Solid":"Pln\xe1 \u010diara","Source":"Zdroj","Source code":"Zdrojov\xfd k\xf3d","Special Character":"\u0160peci\xe1lny znak","Special character...":"\u0160peci\xe1lny znak...","Split cell":"Rozdeli\u0165 bunku","Square":"\u0160tvorcov\xfd","Start list at number":"Za\u010da\u0165 zoznam \u010d\xedslom","Strikethrough":"Pre\u010diarknut\xe9","Style":"\u0160t\xfdl","Subscript":"Doln\xfd index","Superscript":"Horn\xfd index","Switch to or from fullscreen mode":"Prepn\xfa\u0165 do alebo z re\u017eimu plnej obrazovky","Symbols":"Symboly","System Font":"Syst\xe9mov\xe9 p\xedsmo","Table":"Tabu\u013eka","Table caption":"Nadpis tabu\u013eky","Table properties":"Vlastnosti tabu\u013eky","Table styles":"\u0160t\xfdly tabu\u013eky","Template":"\u0160abl\xf3na","Templates":"\u0160abl\xf3ny","Text":"Text","Text color":"Farba textu","Text color {0}":"Farba textu {0}","Text to display":"Text na zobrazenie","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL adresa, ktor\xfa ste zadali je pravdepodobne emailov\xe1 adresa. \u017del\xe1te si prida\u0165 po\u017eadovan\xfa predponu mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL adresa, ktor\xfa ste zadali je pravdepodobne extern\xfd odkaz. Chcete prida\u0165 po\u017eadovan\xfa predponu http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL, ktor\xfa ste zadali vyzer\xe1 ako extern\xfd odkaz. Prajete si pridat po\u017eadovan\xfa predponu https://?","Title":"Nadpis","To open the popup, press Shift+Enter":"Na otvorenie kontextovej ponuky stla\u010dte Shift+Enter","Toggle accordion":"","Tools":"N\xe1stroje","Top":"Vrch","Travel and Places":"Cestovanie a miesta","Turquoise":"Tyrkysov\xe1","Underline":"Pod\u010diarknut\xe9","Undo":"Sp\xe4\u0165","Upload":"Nahra\u0165","Uploading image":"Nahr\xe1vam obr\xe1zok","Upper Alpha":"Ve\u013ek\xe9 p\xedsmen\xe1","Upper Roman":"Ve\u013ek\xe9 r\xedmske \u010d\xedslice","Url":"Url adresa","User Defined":"Definovan\xe9 pou\u017e\xedvate\u013eom","Valid":"Platn\xe9","Version":"Verzia","Vertical align":"Vertik\xe1lne zarovnanie","Vertical space":"Vertik\xe1lny priestor","View":"Zobrazi\u0165","Visual aids":"Vizu\xe1lne pom\xf4cky","Warn":"Upozornenie","White":"Biela","Width":"\u0160\xedrka","Word count":"Po\u010det slov","Words":"Slov\xe1","Words: {0}":"Slov\xe1: {0}","Yellow":"\u017dlt\xe1","Yes":"\xc1no","You are using {0}":"Pou\u017e\xedvate {0}","You have unsaved changes are you sure you want to navigate away?":"M\xe1te neulo\u017een\xe9 zmeny, naozaj chcete opusti\u0165 str\xe1nku?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"V\xe1\u0161 prehliada\u010d nepodporuje priamy pr\xedstup do schr\xe1nky. Pou\u017eite kl\xe1vesov\xe9 skratky Ctrl+X/C/V.","alignment":"zarovnanie","austral sign":"znak pre austral","cedi sign":"znak pre cedi","colon sign":"znak dvojbodky","cruzeiro sign":"znak pre cruzeiro","currency sign":"znak meny","dollar sign":"znak pre dol\xe1r","dong sign":"znak pre dong","drachma sign":"znak pre drachmu","euro-currency sign":"znak eura","example":"pr\xedklad","formatting":"form\xe1tovanie","french franc sign":"znak pre franc\xfazsky frank","german penny symbol":"znak pre nemeck\xfd pfennig","guarani sign":"znak pre guarani","history":"hist\xf3ria","hryvnia sign":"znak pre hrivnu","indentation":"odsadenie","indian rupee sign":"znak pre indick\xfa rupiu","kip sign":"znak pre kip","lira sign":"znak pre l\xedru","livre tournois sign":"znak pre livre tournois","manat sign":"znak pre manat","mill sign":"znak pre mill","naira sign":"znak pre nairu","new sheqel sign":"znak pre nov\xfd \u0161ekel","nordic mark sign":"znak pre nordick\xfa marku","peseta sign":"znak pre pesetu","peso sign":"znak pre peso","ruble sign":"znak pre rube\u013e","rupee sign":"znak pre rupiu","spesmilo sign":"znak pre spesmilo","styles":"\u0161t\xfdly","tenge sign":"znak pre tenge","tugrik sign":"znak pre tugrik","turkish lira sign":"znak pre tureck\xfa l\xedru","won sign":"znak pre won","yen character":"znak pre jen","yen/yuan character variant one":"znak pre jen/j\xfcan variant jedna","yuan character":"znak pre j\xfcan","yuan character, in hong kong and taiwan":"znak pre j\xfcan, v Hongkongu a Taiwane","{0} characters":"Znaky: {0}","{0} columns, {1} rows":"{0} st\u013apcov, {1} riadkov","{0} words":"{0} slov\xe1/slov"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/sl_SI.js b/staticfiles/tinymce/langs/sl_SI.js new file mode 100644 index 0000000..8c4232b --- /dev/null +++ b/staticfiles/tinymce/langs/sl_SI.js @@ -0,0 +1 @@ +tinymce.addI18n("sl_SI",{"#":"#","Accessibility":"Dostopnost","Accordion":"Harmonika","Accordion body...":"Telo harmonike...","Accordion summary...":"Povzetek harmonike...","Action":"Dejanje","Activity":"Dejavnost","Address":"Naslov","Advanced":"Napredno","Align":"Poravnava","Align center":"Sredinska poravnava","Align left":"Leva poravnava","Align right":"Desna poravnava","Alignment":"Poravnava","Alignment {0}":"Poravnava {0}","All":"Vse","Alternative description":"Nadomestni opis","Alternative source":"Nadomestni vir","Alternative source URL":"Nadomestni vir URL","Anchor":"Sidro","Anchor...":"Sidro ...","Anchors":"Sidra","Animals and Nature":"\u017divali in narava","Arrows":"Pu\u0161\u010dice","B":"B","Background color":"Barva ozadja","Background color {0}":"Barva ozadja {0}","Black":"\u010crna","Block":"Blok","Block {0}":"Blok {0}","Blockquote":"Blok citat","Blocks":"Bloki","Blue":"Modra","Blue component":"Modra komponenta","Body":"Vsebina","Bold":"Krepko","Border":"Meja","Border color":"Barva obrobe","Border style":"Slog obrobe","Border width":"\u0160irina obrobe","Bottom":"Dno","Browse files":"Brskanje po datotekah","Browse for an image":"Prebrskaj za sliko","Browse links":"Brskajte po povezavah","Bullet list":"Ozna\u010den seznam","Cancel":"Prekli\u010di","Caption":"Naslov","Cell":"Celica","Cell padding":"Polnilo med celicami","Cell properties":"Lastnosti celice","Cell spacing":"Razmik med celicami","Cell styles":"Slogi celice","Cell type":"Tip celice","Center":"Sredinska","Characters":"Znaki","Characters (no spaces)":"Znaki (brez presledkov)","Circle":"Krog","Class":"Razred","Clear formatting":"Odstrani oblikovanje","Close":"Zapri","Code":"Koda","Code sample...":"Vzor\u010dna koda ...","Code view":"Prikaz kode","Color Picker":"Izbirnik barve","Color swatch":"Vzorec barv","Cols":"Stolpci","Column":"Stolpec","Column clipboard actions":"Dejanja odlo\u017ei\u0161\u010da v stolpcu","Column group":"Grupiranje stolpcev","Column header":"Glava stolpca","Constrain proportions":"Obdr\u017ei razmerje","Copy":"Kopiraj","Copy column":"Kopiraj stolpec","Copy row":"Kopiraj vrstico","Could not find the specified string.":"Iskanje ni vrnilo rezultatov.","Could not load emojis":"Emod\u017eijev ni bilo mogo\u010de nalo\u017eiti","Count":"\u0160tevilo","Currency":"Valuta","Current window":"Trenutno okno","Custom color":"Barva po meri","Custom...":"Po meri ...","Cut":"Izre\u017ei","Cut column":"Izre\u017eite stolpec","Cut row":"Izre\u017ei vrstico","Dark Blue":"Temno modra","Dark Gray":"Temno siva","Dark Green":"Temno zelena","Dark Orange":"Temno oran\u017ena","Dark Purple":"Temno vijoli\u010dna","Dark Red":"Temno rde\u010da","Dark Turquoise":"Temno turkizna","Dark Yellow":"Temno rumena","Dashed":"\u010crtkano","Date/time":"Datum/\u010das","Decrease indent":"Zmanj\u0161aj zamik","Default":"Privzeto","Delete accordion":"Izbri\u0161i harmoniko","Delete column":"Izbri\u0161i stolpec","Delete row":"Izbri\u0161i vrstico","Delete table":"Izbri\u0161i tabelo","Dimensions":"Dimenzije","Disc":"Disk","Div":"Div","Document":"Dokument","Dotted":"Pikasto","Double":"Dvojno","Drop an image here":"Spusti sliko sem","Dropped file type is not supported":"Vrsta odlo\u017eene datoteke ni podprta","Edit":"Uredi","Embed":"Vdelaj","Emojis":"Emod\u017eiji","Emojis...":"Emod\u017eiji ...","Error":"Napaka","Error: Form submit field collision.":"Napaka: navzkri\u017eje polja za oddajo obrazca","Error: No form element found.":"Napaka: elementa oblike ni mogo\u010de najti","Extended Latin":"Raz\u0161irjena latinica","Failed to initialize plugin: {0}":"Napaka inicializacije vti\u010dnika: {0}","Failed to load plugin url: {0}":"Napaka nalaganja url: {0}","Failed to load plugin: {0} from url {1}":"Napaka nalaganja vti\u010dnika: {0} z url {1}","Failed to upload image: {0}":"Napaka nalaganja slike: {0}","File":"Datoteka","Find":"Najdi","Find (if searchreplace plugin activated)":"I\u0161\u010di (\u010de je aktiviran vti\u010dnik za iskanje/zamenjavo)","Find and Replace":"Najdi in zamenjaj","Find and replace...":"Najdi in zamenjaj ...","Find in selection":"I\u0161\u010di v izboru","Find whole words only":"I\u0161\u010di samo cele besede","Flags":"Zastave","Focus to contextual toolbar":"Poudarek na kontekstualni orodni vrstici","Focus to element path":"Poudarek na poti elementa","Focus to menubar":"Poudarek na menijski vrstici","Focus to toolbar":"Poudarek na orodni vrstici","Font":"Pisava","Font size {0}":"Velikost pisave {0}","Font sizes":"Velikost pisave","Font {0}":"Pisava {0}","Fonts":"Pisave","Food and Drink":"Hrana in pija\u010da","Footer":"Noga","Format":"Oblika","Format {0}":"Oblika {0}","Formats":"Oblika","Fullscreen":"\u010cez cel zaslon","G":"G","General":"Splo\u0161no","Gray":"Siva","Green":"Zelena","Green component":"Zelena komponenta","Groove":"Utor","Handy Shortcuts":"Uporabne bli\u017enjice","Header":"Glava","Header cell":"Celica glave","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6","Headings":"Naslovi","Height":"Vi\u0161ina","Help":"Pomo\u010d","Hex color code":"Hex barvna koda","Hidden":"Skrito","Horizontal align":"Vodoravna poravnava","Horizontal line":"Vodoravna \u010drta","Horizontal space":"Vodoravni prostor","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID se mora za\u010deti s \u010drko, ki ji sledijo samo \u010drke, \u0161tevilke, pomi\u0161ljaji, pike, dvopi\u010dje ali pod\u010drtaji.","Image is decorative":"Slika je okrasna","Image list":"Seznam slik","Image title":"Naslov slike","Image...":"Slika ...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP napaka: ImageProxy ni mogo\u010de najti","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP napaka: Napa\u010den ImageProxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP napaka: Zavrnjena zahteva","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP napaka: Neznana ImageProxy napaka","Increase indent":"Pove\u010daj zamik","Inline":"Med besedilom","Insert":"Vstavi","Insert Template":"Vstavi predlogo","Insert accordion":"Vstavi harmoniko","Insert column after":"Vstavi stolpec za","Insert column before":"Vstavi stolpec pred","Insert date/time":"Vstavi datum/\u010das","Insert image":"Vnesi sliko","Insert link (if link plugin activated)":"Vstavi povezavo (\u010de je aktiviran vti\u010dnik za povezavo)","Insert row after":"Vstavi vrstico za","Insert row before":"Vstavi vrstico pred","Insert table":"Vstavi tabelo","Insert template...":"Vstavi predlogo ...","Insert video":"Vstavi video","Insert/Edit code sample":"Vstavi/Uredi vzor\u010dno kodo","Insert/edit image":"Vstavi/uredi sliko","Insert/edit link":"Vstavi/uredi povezavo","Insert/edit media":"Vstavi/uredi medij","Insert/edit video":"Vstavi/uredi video","Inset":"Globinsko vtisnjeno","Invalid hex color code: {0}":"Neveljavna hex barvna koda: {0}","Invalid input":"Neveljaven vnos","Italic":"Po\u0161evno","Justify":"Obojestranska poravnava","Keyboard Navigation":"Krmarjenje s tipkovnico","Language":"Jezik","Learn more...":"Ve\u010d ...","Left":"Leva","Left to right":"Od leve proti desni","Light Blue":"Svetlo modra","Light Gray":"Svetlo siva","Light Green":"Svetlo zelena","Light Purple":"Svetlo vijoli\u010dna","Light Red":"Svetlo rde\u010da","Light Yellow":"Svetlo rumena","Line height":"Vi\u0161ina vrstice","Link list":"Seznam povezav","Link...":"Povezava ...","List Properties":"Lastnosti seznama","List properties...":"Lastnosti seznama...","Loading emojis...":"Nalaganje emod\u017eijev ...","Loading...":"Nalaganje...","Lower Alpha":"Mala alfa","Lower Greek":"Male gr\u0161ke \u010drke","Lower Roman":"Male rimske \u0161tevilke","Match case":"Ujemanje malih in velikih \u010drk","Mathematical":"Matemati\u010dno","Media poster (Image URL)":"Medijski poster (URL slike)","Media...":"Mediji ...","Medium Blue":"Srednje modra","Medium Gray":"Srednje siva","Medium Purple":"Srednje \u0161krlatna","Merge cells":"Zdru\u017ei celice","Middle":"Sredina","Midnight Blue":"Polno\u010dno modra","More...":"Ve\u010d ...","Name":"Naziv","Navy Blue":"Mornarsko modra","New document":"Nov dokument","New window":"Novo okno","Next":"Naslednja","No":"Ne","No alignment":"Brez poravnave","No color":"Brezbarvno","Nonbreaking space":"Nedeljivi presledek","None":"Brez","Numbered list":"O\u0161tevil\u010den seznam","OR":"ALI","Objects":"Predmeti","Ok":"V redu","Open help dialog":"Odpri pogovorno okno za pomo\u010d","Open link":"Odpri povezavo","Open link in...":"Odpri povezavo v ...","Open popup menu for split buttons":"Odpri pojavni meni za razdeljene gumbe","Orange":"Oran\u017ena","Outset":"Reliefno","Page break":"Prelom strani","Paragraph":"Odstavek","Paste":"Prilepi","Paste as text":"Vnesi kot besedilo","Paste column after":"Vstavi stolpec za","Paste column before":"Vstavi stolpec pred","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Odlagali\u0161\u010de je sedaj v tekstovnem na\u010dinu. Vsebina bo preslikana kot besedilo, dokler te mo\u017enosti ne izklju\u010dite.","Paste or type a link":"Prilepite ali vnesite povezavo","Paste row after":"Prilepi vrstico za","Paste row before":"Prilepi vrstico pred","Paste your embed code below:":"Spodaj prilepite kodo za vdelavo:","People":"Ljudje","Plugins":"Vti\u010dniki","Plugins installed ({0}):":"Name\u0161\u010deni vti\u010dniki ({0}):","Powered by {0}":"Uporablja tehnologijo {0}","Pre":"Pre","Preferences":"Preference","Preformatted":"Predformatirano","Premium plugins:":"Premium vti\u010dniki:","Press the Up and Down arrow keys to resize the editor.":"Pritisnite pu\u0161\u010di\u010dni tipki gor in dol, da spremenite velikost urejevalnika.","Press the arrow keys to resize the editor.":"Pritisnite pu\u0161\u010di\u010dne tipke, da spremenite velikost urejevalnika.","Press {0} for help":"Pritisnite {0} za pomo\u010d","Preview":"Predogled","Previous":"Prej\u0161nja","Print":"Tiskaj","Print...":"Natisni ...","Purple":"\u0160krlatna","Quotations":"Citati","R":"R","Range 0 to 255":"Razpon od 0 to 255","Red":"Rde\u010da","Red component":"Rde\u010da komponenta","Redo":"Ponovno uveljavi","Remove":"Odstrani","Remove color":"Odstrani barvo","Remove link":"Odstrani povezavo","Replace":"Zamenjaj","Replace all":"Zamenjaj vse","Replace with":"Zamenjaj z","Resize":"Spremeni velikost","Restore last draft":"Obnovi zadnji osnutek","Reveal or hide additional toolbar items":"Poka\u017eite ali skrijte dodatne elemente orodne vrstice","Rich Text Area":"Rich Text Area","Rich Text Area. Press ALT-0 for help.":"Bogato besedilo. Pritisnite ALT-0 za pomo\u010d.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Bogato besedilo. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za orodno vrstico. Pritisnite ALT-0 za pomo\u010d","Ridge":"Greben","Right":"Desna","Right to left":"Od desne proti levi","Row":"Vrstica","Row clipboard actions":"Dejanja odlo\u017ei\u0161\u010da v vrstici","Row group":"Grupiranje vrstic","Row header":"Glava vrstice","Row properties":"Lastnosti vrstice","Row type":"Tip vrstice","Rows":"Vrstice","Save":"Shrani","Save (if save plugin activated)":"Shrani (\u010de je aktiviran vti\u010dnik za shranjevanje)","Scope":"Obseg","Search":"Iskanje","Select all":"Izberi vse","Select...":"Izberi ...","Selection":"Izbor","Shortcut":"Bli\u017enjica","Show blocks":"Prika\u017ei bloke","Show caption":"Poka\u017ei napis","Show invisible characters":"Prika\u017ei skrite znake","Size":"Velikost","Solid":"Polno","Source":"Pot","Source code":"Izvorna koda","Special Character":"Poseben znak","Special character...":"Poseben znak ...","Split cell":"Razdeli celico","Square":"Kvadrat","Start list at number":"Za\u010dni seznam s \u0161tevilko","Strikethrough":"Pre\u010drtano","Style":"Slog","Subscript":"Podpisano","Superscript":"Nadpisano","Switch to or from fullscreen mode":"Preklopi v ali iz celozaslonskega na\u010dina","Symbols":"Simboli","System Font":"Sistemska pisava","Table":"Tabela","Table caption":"Naslov tabele","Table properties":"Lastnosti tabele","Table styles":"Slogi tabele","Template":"Predloga","Templates":"Predloge","Text":"Besedilo","Text color":"Barva besedila","Text color {0}":"Barva besedila {0}","Text to display":"Besedilo za prikaz","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":'Vneseni URL predstavlja e-po\u0161tni naslov. Ali \u017eelite dodati potrebno predpono "mailto:"?',"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":'Vneseni URL predstavlja zunanjo povezavo. Ali \u017eelite dodati predpono "http://"?',"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Vneseni URL naslov predstavlja zunanjo povezavo. Ali mu \u017eelite dodati predpono https:// ?","Title":"Naslov","To open the popup, press Shift+Enter":"Za odpiranje pojavnega okna pritisnite Shift + Enter.","Toggle accordion":"Preklopi harmoniko","Tools":"Orodja","Top":"Vrh","Travel and Places":"Potovanja in kraji","Turquoise":"Turkizna","Underline":"Pod\u010drtano","Undo":"Razveljavi","Upload":"Nalo\u017ei","Uploading image":"Nalaganje slike","Upper Alpha":"Velika alfa","Upper Roman":"Velike rimske \u0161tevilke","Url":"Povezava","User Defined":"Uporabnik dolo\u010den","Valid":"Veljavno","Version":"Razli\u010dica","Vertical align":"Navpi\u010dna poravnava","Vertical space":"Navpi\u010dni prostor","View":"Pogled","Visual aids":"Vizualni pripomo\u010dki","Warn":"Opozorilo","White":"Bela","Width":"\u0160irina","Word count":"\u0160tevilo besed","Words":"Besede","Words: {0}":"Besed: {0}","Yellow":"Rumena","Yes":"Da","You are using {0}":"Uporabljate {0}","You have unsaved changes are you sure you want to navigate away?":"Imate neshranjene spremembe. Ste prepri\u010dati, da \u017eelite zapustiti stran?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Varnostne nastavitve brskalnika ne dopu\u0161\u010dajo direktnega dostopa do odlo\u017ei\u0161\u010da. Uporabite kombinacijo tipk Ctrl + X/C/V na tipkovnici.","alignment":"poravnava","austral sign":"znak za austral","cedi sign":"znak za cedi","colon sign":"znak za dvopi\u010dje","cruzeiro sign":"znak za cruzeiro","currency sign":"znak za valuto","dollar sign":"znak za dolar","dong sign":"znak za dong","drachma sign":"znak za drahmo","euro-currency sign":"znak za evro","example":"primer","formatting":"oblikovanje","french franc sign":"znak za francoski frank","german penny symbol":"znak za nem\u0161ki peni","guarani sign":"znak za guarani","history":"zgodovina","hryvnia sign":"znak za hrivnijo","indentation":"zamik","indian rupee sign":"znak za indijsko rupijo","kip sign":"znak za kip","lira sign":"znak za liro","livre tournois sign":"znak za livre tournois","manat sign":"znak za manat","mill sign":"znak za mill","naira sign":"znak za nairo","new sheqel sign":"znak za novi \u0161ekl","nordic mark sign":"znak za nordijsko marko","peseta sign":"znak za peseto","peso sign":"znak za peso","ruble sign":"znak za rubelj","rupee sign":"znak za rupijo","spesmilo sign":"znak za spesmilo","styles":"slogi","tenge sign":"znak za tenge","tugrik sign":"znak za tugrik","turkish lira sign":"znak za tur\u0161ko liro","won sign":"znak za won","yen character":"znak za jen","yen/yuan character variant one":"znak za jen/yuan, prva razli\u010dica","yuan character":"znak za yuan","yuan character, in hong kong and taiwan":"znak za yuan, v Hongkongu in na Tajvanu","{0} characters":"{0} znakov","{0} columns, {1} rows":"{0} stolpcev, {1} vrstic","{0} words":"{0} besed"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/sq.js b/staticfiles/tinymce/langs/sq.js new file mode 100644 index 0000000..a5ce34b --- /dev/null +++ b/staticfiles/tinymce/langs/sq.js @@ -0,0 +1 @@ +tinymce.addI18n("sq",{"#":"#","Accessibility":"P\xebrdorim nga persona me aft\xebsi t\xeb kufizuara","Accordion":"Fizarmonik\xeb","Accordion body...":"Trupi i fizarmonik\xebs...","Accordion summary...":"P\xebrmbledhja e fizarmonik\xebs...","Action":"Veprim","Activity":"Veprimtari","Address":"Adres\xeb","Advanced":"T\xeb m\xebtejshme","Align":"Vendose","Align center":"V\xebre n\xeb qend\xebr","Align left":"V\xebre majtas","Align right":"V\xebre djathtas","Alignment":"Drejtim","Alignment {0}":"Rreshtim {0}","All":"Krejt","Alternative description":"P\xebrshkrim alternativ","Alternative source":"Burim alternativ","Alternative source URL":"URL burimi alternativ","Anchor":"Spiranc\xeb","Anchor...":"Spiranc\xeb\u2026","Anchors":"Spiranca","Animals and Nature":"Kafsh\xeb & Natyr\xeb","Arrows":"Shigjeta","B":"B","Background color":"Ngjyr\xeb sfondi","Background color {0}":"Sfond me ngjyr\xeb t\xeb {0}","Black":"E zez\xeb","Block":"Bllokoje","Block {0}":"Bllok {0}","Blockquote":"Citat","Blocks":"Blloqe","Blue":"E kalt\xebr","Blue component":"Ngjyra e kuqe","Body":"L\xebnd\xeb","Bold":"T\xeb trasha","Border":"An\xeb","Border color":"Ngjyr\xeb ane","Border style":"Stil an\xebsh","Border width":"Gjer\xebsi an\xebsh","Bottom":"N\xeb fund","Browse files":"Shfletoni dosjet","Browse for an image":"Shfletoni p\xebr nj\xeb figur\xeb","Browse links":"Shfletoni linqet","Bullet list":"List\xeb me toptha","Cancel":"Anuloje","Caption":"Legjend\xeb","Cell":"Kutiz\xeb","Cell padding":"Mbushje kutize","Cell properties":"Veti kutize","Cell spacing":"Hap\xebsir\xeb kutize","Cell styles":"Pamja e qelizave","Cell type":"Lloj kutize","Center":"N\xeb qend\xebr","Characters":"Shenja","Characters (no spaces)":"Shenja (pa hap\xebsira)","Circle":"Rreth","Class":"Klas\xeb","Clear formatting":"Spastroju formatimin","Close":"Mbylle","Code":"Kod","Code sample...":"Shembull kodi\u2026","Code view":"Parje kodi","Color Picker":"Zgjedh\xebs Ngjyrash","Color swatch":"Palet\xeb ngjyrash","Cols":"Shtylla","Column":"Shtyll\xeb","Column clipboard actions":"Veprimet e clipboard-it n\xeb kolona","Column group":"Grup shtyllash","Column header":"Kreu i kolon\xebs","Constrain proportions":"Mbaji detyrimisht p\xebrpjestimet","Copy":"Kopjoje","Copy column":"Kopjo kolon\xebn","Copy row":"Kopjoje rreshtin","Could not find the specified string.":"S\u2019u gjet dot vargu i dh\xebn\xeb.","Could not load emojis":"Emoji-t nuk mund t\xeb ngarkoheshin","Count":"Num\xebr","Currency":"Monedh\xeb","Current window":"Dritaren e tanishme","Custom color":"Ngjyr\xeb vetjake","Custom...":"Vetjake\u2026","Cut":"Prije","Cut column":"Shkoq kolon\xebn","Cut row":"Prije rreshtin","Dark Blue":"Blu e Err\xebt","Dark Gray":"Gri e Err\xebt","Dark Green":"E gjelb\xebr e Err\xebt","Dark Orange":"Portokalli e Err\xebt","Dark Purple":"E purpurt e Err\xebt","Dark Red":"E kuqe e Err\xebt","Dark Turquoise":"E bruzt\xeb e Err\xebt","Dark Yellow":"E verdh\xeb e Err\xebt","Dashed":"Me viza","Date/time":"Dat\xeb/koh\xeb","Decrease indent":"Zvog\xeblo kryeradh\xebn","Default":"Parazgjedhje","Delete accordion":"Hiqe fizarmonik\xebn","Delete column":"Fshi shtyll\xeb","Delete row":"Fshije rreshtin","Delete table":"Fshi tabel\xebn","Dimensions":"P\xebrmasa","Disc":"Disk","Div":"Div","Document":"Dokument","Dotted":"Me pika","Double":"E dyfishuar","Drop an image here":"Lini k\xebtu nj\xeb figur\xeb","Dropped file type is not supported":"Lloji i dosjes s\xeb l\xebshuar nuk \xebsht\xeb i p\xebrkrahur","Edit":"P\xebrpunoni","Embed":"Trup\xebzojeni","Emojis":"Emoji-t","Emojis...":"Emoji-t...","Error":"Gabim","Error: Form submit field collision.":"Gabim: P\xebrplasje fushash parashtrimi formulari.","Error: No form element found.":"Gabim: S\u2019u gjet element forme.","Extended Latin":"Latinishte e Zgjeruar","Failed to initialize plugin: {0}":"S\u2019u arrit t\xeb gatitej shtojca: {0}","Failed to load plugin url: {0}":"S\u2019u arrit t\xeb ngarkohej URL shtojce: {0}","Failed to load plugin: {0} from url {1}":"S\u2019u arrit t\xeb ngarkohej shtojca: {0} prej url-je {1}","Failed to upload image: {0}":"S\u2019u arrit t\xeb ngarkohej figur\xeb: {0}","File":"Kartel\xeb","Find":"Gjej","Find (if searchreplace plugin activated)":"Gjeni (n\xebse \xebsht\xeb aktivizuar shtojca p\xebr k\xebrkim dhe z\xebvend\xebsim)","Find and Replace":"Gjej dhe Z\xebvend\xebso","Find and replace...":"Gjeni dhe z\xebvend\xebsoni\u2026","Find in selection":"Gjeni n\xeb p\xebrzgjedhje","Find whole words only":"Gjej vet\xebm fjal\xeb t\xeb plota","Flags":"Flamuj","Focus to contextual toolbar":"Fokusi te panel kontekstual","Focus to element path":"Fokusi te shteg elementi","Focus to menubar":"Fokusi te shtyll\xeb menuje","Focus to toolbar":"Fokusi te panel","Font":"Shkronja","Font size {0}":"Madh\xebsi fonti {0}","Font sizes":"Madh\xebsit\xeb e fontit","Font {0}":"Font {0}","Fonts":"Shkronja","Food and Drink":"Ushqim dhe Pije","Footer":"Fundfaqe","Format":"Format","Format {0}":"Format {0}","Formats":"Formate","Fullscreen":"Mbulo ekranin","G":"G","General":"T\xeb p\xebrgjithshme","Gray":"Gri","Green":"E gjelb\xebr","Green component":"Ngjyra e gjelb\xebr","Groove":"Brazd\xeb","Handy Shortcuts":"Shkurtore t\xeb Volitshme","Header":"Kryefaqe","Header cell":"Kutiz\xeb kryeje","Heading 1":"Krye 1","Heading 2":"Krye 2","Heading 3":"Krye 3","Heading 4":"Krye 4","Heading 5":"Krye 5","Heading 6":"Krye 6","Headings":"Krye","Height":"Lart\xebsi","Help":"Ndihm\xeb","Hex color code":"Kodi heksadecimal i ngjyr\xebs","Hidden":"Fshehur","Horizontal align":"Rreshto horizontalisht","Horizontal line":"Vij\xeb horizontale","Horizontal space":"Hapsir\xeb horizontale","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID-ja duhet t\xeb filloj me nj\xeb shkronj\xeb, pastaj t\xeb vazhdoj\xeb vet\xebm me shkronja, numra, viza, pika, dy pika ose n\xebnviza.","Image is decorative":"Figura \xebsht\xeb p\xebr zbukurim","Image list":"List\xeb figurash","Image title":"Titull figure","Image...":"Figur\xeb\u2026","ImageProxy HTTP error: Could not find Image Proxy":"Gabim n\xeb ImageProxy HTTP: P\xebrfaq\xebsuesi nuk mund t\xeb gjindej","ImageProxy HTTP error: Incorrect Image Proxy URL":"Gabim n\xeb ImageProxy HTTP: URL-i i Image Proxy \xebsht\xeb gabim","ImageProxy HTTP error: Rejected request":"Gabim n\xeb ImageProxy HTTP: K\xebrkesa u refuzua","ImageProxy HTTP error: Unknown ImageProxy error":"Gabim n\xeb ImageProxy HTTP: Gabim i panjohur n\xeb ImageProxy","Increase indent":"Rritja shmangien e kryeradh\xebs","Inline":"Renditur","Insert":"Futni","Insert Template":"P\xebrdor shabllonin","Insert accordion":"Fut nj\xeb fizarmonik\xeb","Insert column after":"Futni shtyll\xeb pas","Insert column before":"Futni shtyll\xeb para","Insert date/time":"Futni dat\xeb/koh\xeb","Insert image":"Futni figur\xeb","Insert link (if link plugin activated)":"Futni lidhje (n\xebse \xebsht\xeb aktivizuar shtojca e lidhjeve)","Insert row after":"Futni rresht pas","Insert row before":"Futni rresht para","Insert table":"Futni tabel\xeb","Insert template...":"Futni gjedhe\u2026","Insert video":"Futni video","Insert/Edit code sample":"Futni/P\xebrpunoni shembull kodi","Insert/edit image":"Futni/p\xebrpunoni figur\xeb","Insert/edit link":"Futni/p\xebrpunoni lidhje","Insert/edit media":"Futni/p\xebrpunoni media","Insert/edit video":"Futni/p\xebrpunoni video","Inset":"Shtypur","Invalid hex color code: {0}":"Kodi heksadecimal i ngjyr\xebs i pavlefsh\xebm: {0}","Invalid input":"T\xeb dh\xebnat e pavlefshme","Italic":"T\xeb pjerrta","Justify":"P\xebrligje","Keyboard Navigation":"L\xebvizje me Tastier\xeb","Language":"Gjuh\xeb","Learn more...":"M\xebsoni m\xeb tep\xebr\u2026","Left":"Majtas","Left to right":"Nga e majta n\xeb t\xeb djatht\xeb","Light Blue":"Blu e \xc7el\xebt","Light Gray":"Gri e \xc7el\xebt","Light Green":"E gjelb\xebr e \xc7el\xebt","Light Purple":"E purpur e \xc7el\xebt","Light Red":"E kuqe e \xc7el\xebt","Light Yellow":"E verdh\xeb e \xc7el\xebt","Line height":"Lart\xebsi rreshti","Link list":"List\xeb lidhjesh","Link...":"Lidhni\u2026","List Properties":"Veti Liste","List properties...":"Veti liste\u2026","Loading emojis...":"Emoji-t po ngarkohen...","Loading...":"Duke u ngarkuar...","Lower Alpha":"Alfa t\xeb Vogla","Lower Greek":"Greke t\xeb Vogla","Lower Roman":"Romake t\xeb Vogla","Match case":"Si\xe7 \xebsht\xeb shkruar","Mathematical":"Matematikore","Media poster (Image URL)":"Postues mediash (URL Figure)","Media...":"Media\u2026","Medium Blue":"Blu e Mesme","Medium Gray":"Gri e Mesme","Medium Purple":"E purpurt e Mesme","Merge cells":"P\xebrzieji kutizat","Middle":"N\xeb mes","Midnight Blue":"Blu Mesnate","More...":"M\xeb tep\xebr\u2026","Name":"Em\xebr","Navy Blue":"Blu e err\xebt","New document":"Dokument i ri","New window":"Dritare e re","Next":"Pasuesi","No":"Jo","No alignment":"Pa rreshtim","No color":"Pa ngjyr\xeb","Nonbreaking space":"Hap\xebsir\xeb e pandashme","None":"Asnj\xeb","Numbered list":"List\xeb e num\xebruar","OR":"OSE","Objects":"Objekte","Ok":"Ok","Open help dialog":"Hapni dialogun e ndihm\xebs","Open link":"Hape lidhjen","Open link in...":"Hape lidhje n\xeb:\u2026","Open popup menu for split buttons":"Hapni menu fllusk\xeb p\xebr butona ndarjeje","Orange":"Portokalli","Outset":"Gung\xebt","Page break":"Nd\xebrprerje faqeje","Paragraph":"Paragraf","Paste":"Ngjite","Paste as text":"Ngjite si tekst","Paste column after":"Ngjite kolon\xebn pas","Paste column before":"Ngjite kolon\xebn p\xebrpara","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Ngjitjet tani b\xebhen n\xebn m\xebnyr\xebn \u201cthjesht tekst\u201d. L\xebnda tani do t\xeb ngjitet si tekst i thjesht\xeb, derisa ta \xe7aktivizoni k\xebt\xeb mund\xebsi.","Paste or type a link":"Hidhni ose shtypni nj\xeb lidhje","Paste row after":"Ngjite rreshtin pas","Paste row before":"Ngjite rreshtin p\xebrpara","Paste your embed code below:":"Ngjiteni kodin tuaj t\xeb trup\xebzimit m\xeb posht\xeb:","People":"Persona","Plugins":"Shtojca","Plugins installed ({0}):":"Shtojca t\xeb instaluara ({0}):","Powered by {0}":"Bazuar n\xeb {0}","Pre":"Pre","Preferences":"Parap\xeblqime","Preformatted":"E paraformatuar","Premium plugins:":"Shtojca me pages\xeb:","Press the Up and Down arrow keys to resize the editor.":"Shtyp tastet me shigjeta Lart dhe Posht\xeb p\xebr ta ndryshuar madh\xebsin\xeb e programit.","Press the arrow keys to resize the editor.":"Shtyp tastet me shigjeta p\xebr ta ndryshuar madh\xebsin\xeb e programit.","Press {0} for help":"Shtyp {0} p\xebr ndihm\xeb","Preview":"Paraparje","Previous":"I m\xebparsh\xebmi","Print":"Shtyp","Print...":"Shtypeni\u2026","Purple":"E purpurt","Quotations":"Citime","R":"R","Range 0 to 255":"Gama nga 0 deri n\xeb 255","Red":"E kuqe","Red component":"Ngjyra e kuqe","Redo":"Rib\xebje","Remove":"Heq","Remove color":"Hiqe ngjyr\xebn","Remove link":"Hiqe lidhjen","Replace":"Z\xebvend\xebsoje","Replace all":"Z\xebvend\xebsoji krejt","Replace with":"Z\xebvend\xebsoje me","Resize":"Rip\xebrmasoje","Restore last draft":"Rikthe skic\xebn e fundit","Reveal or hide additional toolbar items":"Shfaq apo fshih artikuj shtes\xeb n\xeb shiritin e veglave","Rich Text Area":"Zon\xeb me tekst t\xeb pasuruar","Rich Text Area. Press ALT-0 for help.":"Fush\xeb Teksti t\xeb Pasur. P\xebr ndihm\xeb, shtypni ALT-0.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Fush\xeb Teksti t\xeb Pasur. p\xebr menu, shtypni tastet ALT-F9. P\xebr panel, shtypnis tastet ALT-F10r. P\xebr ndihm\xeb, shtypni ALT-0","Ridge":"Kurriz","Right":"Djathtas","Right to left":"Nga e djathta n\xeb t\xeb majt\xeb","Row":"Rresht","Row clipboard actions":"Veprimet e clipboard-it n\xeb rreshta","Row group":"Grup rreshtash","Row header":"Kreu i rreshtit","Row properties":"Veti rreshti","Row type":"Lloj rreshti","Rows":"Rreshta","Save":"Ruaje","Save (if save plugin activated)":"Ruaje (n\xebse \xebsht\xeb aktivizuar shtojca e ruajtjeve)","Scope":"Fokus","Search":"K\xebrko","Select all":"P\xebrzgjidhe krejt","Select...":"P\xebrzgjidhni\u2026","Selection":"P\xebrzgjedhje","Shortcut":"Shkurtore","Show blocks":"Shfaqi blloqet","Show caption":"Shfaq titull","Show invisible characters":"Shfaqi shenjat e padukshme","Size":"Madh\xebsi","Solid":"E pa nd\xebrprer\xeb","Source":"Burim","Source code":"Kodi burim","Special Character":"Shkronj\xeb Speciale","Special character...":"Shenj\xeb speciale\u2026","Split cell":"Ndaje kutiz\xebn","Square":"Katror","Start list at number":"Fillo list\xebn me numrin","Strikethrough":"Hequrvije","Style":"Stil","Subscript":"Posht\xebshkrim","Superscript":"Sip\xebrshkrim","Switch to or from fullscreen mode":"Kaloni n\xeb ose dilni nga m\xebnyra \u201cSa t\xebr\xeb ekrani\u201c","Symbols":"Simbole","System Font":"Shkronja Sistemi","Table":"Tabel\xeb","Table caption":"Shpjegimi i tabel\xebs","Table properties":"Veti tabele","Table styles":"Pamja e tabel\xebs","Template":"Gjedhe","Templates":"Gjedhe","Text":"Tekst","Text color":"Ngjyr\xeb teksti","Text color {0}":"Tekst me ngjyr\xeb t\xeb {0}","Text to display":"Tekst p\xebr t\u2019u shfaqur","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL-ja q\xeb dhat\xeb duket se \xebsht\xeb adres\xeb email. Doni t\xeb shtohet parashtesa e domosdoshme mailto: ?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL-ja q\xeb dhat\xeb duket se \xebsht\xeb lidhje e jashtme. Doni ti shtohet parashtesa e domosdoshme https:// ?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL-ja q\xeb dhat\xeb duket t\xeb jet\xeb nj\xeb lidhje e jashtme. Doni ti shtohet parashtesa e domosdoshme https:// ?","Title":"Titull","To open the popup, press Shift+Enter":"Q\xeb t\xeb hapet flluska, shtypni tastet Shift+Enter","Toggle accordion":"L\xebviz fizarmonik\xebn","Tools":"Mjete","Top":"N\xeb krye","Travel and Places":"Udh\xebtim dhe Vende","Turquoise":"E bruzt\xeb","Underline":"N\xebnvij\xeb","Undo":"Zhb\xebje","Upload":"Ngarkoje","Uploading image":"Duke ngarkuar foton","Upper Alpha":"Alfa t\xeb M\xebdha","Upper Roman":"Romake t\xeb\xa0M\xebdha","Url":"Url","User Defined":"P\xebrcaktuar Nga P\xebrdoruesi","Valid":"E vlefshme","Version":"Versioni","Vertical align":"Rreshto vertikalisht","Vertical space":"Hapsir\xeb vertikale","View":"Shihni","Visual aids":"Ndihm\xebs pamor\xeb","Warn":"Sinjalizoje","White":"E bardh\xeb","Width":"Gjer\xebsi","Word count":"Num\xebr fjal\xebsh","Words":"Fjal\xeb","Words: {0}":"Fjal\xeb: {0}","Yellow":"E verdh\xeb","Yes":"Po","You are using {0}":"Po p\xebrdorni {0}","You have unsaved changes are you sure you want to navigate away?":"Keni ndryshime t\xeb paruajtura, jeni i sigurt se doni t\xeb ikni prej k\xebtej?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Shfletuesi juaj nuk e lejon qasjen e drejtp\xebrdrejt\xeb n\xeb clipboard. Ju lutemi, p\xebrdorni shkurtoret Ctrl+X/C/V p\xebr ndryshe.","alignment":"drejtim","austral sign":"shenj\xeb australi","cedi sign":"shenj\xeb cedi","colon sign":"shenj\xeb dy pika","cruzeiro sign":"shenj\xeb kruzeiroje","currency sign":"simbol monedhe","dollar sign":"simbol dollari","dong sign":"shenj\xeb dongu","drachma sign":"shenj\xeb drahme","euro-currency sign":"simbol euroje","example":"shembull","formatting":"formatim","french franc sign":"shenj\xeb frangu fr\xebng","german penny symbol":"shenj\xeb peni gjerman","guarani sign":"shenj\xeb guaranie","history":"historik","hryvnia sign":"shenj\xeb hrivniaje","indentation":"shmangie kryeradhe","indian rupee sign":"shenj\xeb rupie indiane","kip sign":"shenj\xeb kipi","lira sign":"shenj\xeb sterline","livre tournois sign":"shenj\xeb lire Turi","manat sign":"shenj\xeb manati","mill sign":"shenj\xeb mili","naira sign":"shenj\xeb nairaje","new sheqel sign":"shenj\xeb shekeli t\xeb ri","nordic mark sign":"shenj\xeb marke nordike","peseta sign":"shenj\xeb pesete","peso sign":"shenj\xeb peso","ruble sign":"shenj\xeb ruble","rupee sign":"shenj\xeb rupie","spesmilo sign":"shenj\xeb spesmiloje","styles":"stile","tenge sign":"shenj\xeb tenge","tugrik sign":"shenj\xeb tugriku","turkish lira sign":"shenj\xeb lire turke","won sign":"shenj\xeb uoni","yen character":"shenj\xeb jeni","yen/yuan character variant one":"shenja jen/juan n\xeb variantin nj\xeb","yuan character":"shenj\xeb juani","yuan character, in hong kong and taiwan":"shenja e juanit, n\xeb Hong Kong dhe Tajvan","{0} characters":"{0} shenja","{0} columns, {1} rows":"{0} kolona, {1} rreshta","{0} words":"{0} fjal\xeb"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/sr.js b/staticfiles/tinymce/langs/sr.js new file mode 100644 index 0000000..8bc2d57 --- /dev/null +++ b/staticfiles/tinymce/langs/sr.js @@ -0,0 +1 @@ +tinymce.addI18n("sr",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Akcija","Activity":"","Address":"Adresa","Advanced":"Napredno","Align":"Poravnaj","Align center":"Poravnano centar","Align left":"Poravnano levo","Align right":"Poravnano desno","Alignment":"Svrstavanje","Alignment {0}":"","All":"","Alternative description":"","Alternative source":"Alternativni izvor","Alternative source URL":"Alternativni izvorni URL","Anchor":"","Anchor...":"Sidro","Anchors":"sidro","Animals and Nature":"","Arrows":"","B":"","Background color":"Boja pozadine","Background color {0}":"","Black":"","Block":"Blok","Block {0}":"","Blockquote":"Navodnici","Blocks":"Blokovi","Blue":"","Blue component":"","Body":"Telo","Bold":"Podebljan","Border":"Okvir","Border color":"Boja ivice","Border style":"Stil okvira","Border width":"\u0160irina okvira","Bottom":"Podno\u017eje","Browse files":"","Browse for an image":"Prona\u0111i sliku","Browse links":"","Bullet list":"Lista nabrajanja","Cancel":"Opozovi","Caption":"Natpis","Cell":"\u0106elija","Cell padding":"Razmak \u0107elije","Cell properties":"Postavke \u0107elije","Cell spacing":"Prostor \u0107elije","Cell styles":"","Cell type":"Tip \u0107elije","Center":"Centar","Characters":"","Characters (no spaces)":"","Circle":"Krug","Class":"Klasa","Clear formatting":"Brisanje formatiranja","Close":"Zatvori","Code":"Kod","Code sample...":"Primer koda","Code view":"","Color Picker":"Odabir boje","Color swatch":"","Cols":"Kolone","Column":"Kolona","Column clipboard actions":"","Column group":"Grupa kolone","Column header":"","Constrain proportions":"Ograni\u010dene proporcije","Copy":"Kopiraj","Copy column":"","Copy row":"Kopiraj red","Could not find the specified string.":"Nije mogu\u0107e prona\u0107i navedeni niz.","Could not load emojis":"","Count":"Ra\u010dunati","Currency":"","Current window":"Istom prozoru","Custom color":"Posebna boja","Custom...":"Posebno...","Cut":"Iseci","Cut column":"","Cut row":"Iseci red","Dark Blue":"","Dark Gray":"","Dark Green":"","Dark Orange":"","Dark Purple":"","Dark Red":"","Dark Turquoise":"","Dark Yellow":"","Dashed":"","Date/time":"Datum/vreme","Decrease indent":"Smanji uvla\u010denje","Default":"Podrazumevano","Delete accordion":"","Delete column":"Obri\u0161i kolonu","Delete row":"Obri\u0161i red","Delete table":"Obri\u0161i tabelu","Dimensions":"Dimenzije","Disc":"Disk","Div":"","Document":"Dokument","Dotted":"","Double":"","Drop an image here":"Prevuci sliku ovde","Dropped file type is not supported":"","Edit":"Ure\u0111ivanje","Embed":"Ugra\u0111eno","Emojis":"","Emojis...":"","Error":"Gre\u0161ka","Error: Form submit field collision.":"","Error: No form element found.":"","Extended Latin":"","Failed to initialize plugin: {0}":"","Failed to load plugin url: {0}":"","Failed to load plugin: {0} from url {1}":"","Failed to upload image: {0}":"","File":"Datoteka","Find":"Na\u0111i","Find (if searchreplace plugin activated)":"Prona\u0111i (ako je dodatak pretrage i zamene aktiviran)","Find and Replace":"","Find and replace...":"Prona\u0111i i zameni...","Find in selection":"","Find whole words only":"Prona\u0111i samo cele re\u010di","Flags":"","Focus to contextual toolbar":"Fokus na kontekstualnu traku alata","Focus to element path":"Fokus na putanju elementa","Focus to menubar":"Fokus na meni","Focus to toolbar":"Fokus na traku sa alatima","Font":"","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"Pisma","Food and Drink":"","Footer":"Podno\u017eje","Format":"","Format {0}":"","Formats":"Formatiraj","Fullscreen":"Pun ekran","G":"","General":"Op\u0161te","Gray":"","Green":"","Green component":"","Groove":"","Handy Shortcuts":"Prakti\u010dne pre\u010dice","Header":"Zaglavlje","Header cell":"Visina \u0107elije","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6","Headings":"Naslovi","Height":"Visina","Help":"Pomo\u0107","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"Horizontalna linija","Horizontal space":"Horizontalni razmak","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"Lista slika","Image title":"Naslov slike","Image...":"Slika...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"Pove\u0107aj uvla\u010denje","Inline":"U liniji","Insert":"Umetni","Insert Template":"","Insert accordion":"","Insert column after":"Ubaci kolonu posle","Insert column before":"Ubaci kolonu pre","Insert date/time":"Ubaci datum/vreme","Insert image":"Ubaci sliku","Insert link (if link plugin activated)":"Dodaj link (ukoliko je link dodatak aktiviran)","Insert row after":"Ubaci red posle","Insert row before":"Ubaci red pre","Insert table":"ubaci tabelu","Insert template...":"Umetni \u0161emu...","Insert video":"Ubaci video","Insert/Edit code sample":"Dodaj/Izmeni primer koda","Insert/edit image":"Ubaci/Promeni sliku","Insert/edit link":"Ubaci/promeni vezu","Insert/edit media":"Ubaci/izmeni mediju","Insert/edit video":"Ubaci/promeni video","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"isko\u0161en","Justify":"Poravnanje","Keyboard Navigation":"","Language":"Jezik","Learn more...":"Saznaj vi\u0161e","Left":"Levo","Left to right":"Sa leve na desnu","Light Blue":"","Light Gray":"","Light Green":"","Light Purple":"","Light Red":"","Light Yellow":"","Line height":"","Link list":"Lista veza","Link...":"Veza...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"Donja Alpha","Lower Greek":"Ni\u017ei gr\u010dki","Lower Roman":"Donji Roman","Match case":"Predmet za upore\u0111ivanje","Mathematical":"","Media poster (Image URL)":"Poster medije (slika URL)","Media...":"Medija...","Medium Blue":"","Medium Gray":"","Medium Purple":"","Merge cells":"Spoji \u0107elije","Middle":"Sredina","Midnight Blue":"","More...":"","Name":"Ime","Navy Blue":"","New document":"Novi dokument","New window":"Novi prozor","Next":"Slede\u0107i","No":"","No alignment":"","No color":"Bez boje","Nonbreaking space":"bez ramaka","None":"Ni\u0161ta","Numbered list":"Numerisana lista","OR":"ili","Objects":"","Ok":"Ok","Open help dialog":"","Open link":"","Open link in...":"Otvori vezu u...","Open popup menu for split buttons":"","Orange":"","Outset":"","Page break":"Lomljenje stranice","Paragraph":"Paragraf","Paste":"Nalepi","Paste as text":"Nalepi kao tekst","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Nalepiti je sada u obi\u010dnom text modu.Sadr\u017eaj \u0107e biti nalepljen kao obi\u010dan tekst dok ne ugasite ovu opciju.","Paste or type a link":"Nalepi ili ukucaj link","Paste row after":"Nalepi red posle","Paste row before":"Nalepi red pre","Paste your embed code below:":"Nalepite ugra\u0111eni kod ispod:","People":"","Plugins":"Dadaci","Plugins installed ({0}):":"Dodataka instalirano ({0}):","Powered by {0}":"Pokre\u0107e ga {0}","Pre":"","Preferences":"","Preformatted":"Formatirano","Premium plugins:":"Premium dodaci","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Pregled","Previous":"Predhodno","Print":"","Print...":"\u0160tampa...","Purple":"","Quotations":"","R":"","Range 0 to 255":"","Red":"","Red component":"","Redo":"Napred","Remove":"","Remove color":"Ukloni boju","Remove link":"Ukloni link","Replace":"Zameni","Replace all":"Zameni sve","Replace with":"Zameni sa","Resize":"Promeni veli\u010dinu","Restore last draft":"Vrati poslednji nacrt","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"Podru\u010dje oboga\u0107enog teksta. Pritisnite ALT-0 za pomo\u0107.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Oboga\u0107en tekst. Pritisni te ALT-F9 za meni.Pritisnite ALT-F10 za traku sa alatkama.Pritisnite ALT-0 za pomo\u0107","Ridge":"","Right":"Desno","Right to left":"Sa desne na levu","Row":"Red","Row clipboard actions":"","Row group":"Grupa reda","Row header":"","Row properties":"Postavke reda","Row type":"Tip reda","Rows":"Redovi","Save":"Sa\u010duvati","Save (if save plugin activated)":"Sa\u010duvaj (ukoliko je sa\u010duvaj dodatak aktiviran)","Scope":"Obim","Search":"","Select all":"Obele\u017ei sve","Select...":"","Selection":"Odabiranje","Shortcut":"Pre\u010dica","Show blocks":"Prikaz blokova","Show caption":"Prika\u017ei naslov","Show invisible characters":"Prika\u017ei nevidljive karaktere","Size":"","Solid":"","Source":"Izvor","Source code":"Izvorni kod","Special Character":"","Special character...":"Specijalan karakter","Split cell":"Razdvoji \u0107elije","Square":"Kvadrat","Start list at number":"","Strikethrough":"Precrtan","Style":"Stil","Subscript":"Potpisan","Superscript":"Natpis","Switch to or from fullscreen mode":"","Symbols":"","System Font":"Sistemski font","Table":"Tabela","Table caption":"","Table properties":"Postavke tabele","Table styles":"","Template":"\u0160ablon","Templates":"\u0160abloni","Text":"","Text color":"Boja tekst","Text color {0}":"","Text to display":"Tekst za prikaz","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Izgleda da je URL koji ste uneli email adresa. Da li \u017eelite da dodate zahtevani mailto: prefiks?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Izgleda da je URL koji ste uneli spolja\u0161nja veza. Da li \u017eelite da dodate zahtevani http:// prefiks?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"Naslov","To open the popup, press Shift+Enter":"Da otvorite popup, pritisnite Shift+Enter","Toggle accordion":"","Tools":"Alatke","Top":"Vrh","Travel and Places":"","Turquoise":"","Underline":"Podvu\u010den","Undo":"Nazad","Upload":"Po\u0161alji","Uploading image":"","Upper Alpha":"Gornji Alpha","Upper Roman":"Gornji Roman","Url":"","User Defined":"","Valid":"Ispravno","Version":"","Vertical align":"","Vertical space":"Vertikalni razmak","View":"Prikaz","Visual aids":"Vizuelna pomagala","Warn":"Upozorenje","White":"","Width":"\u0160irina","Word count":"Broja\u010d re\u010di","Words":"Re\u010di","Words: {0}":"Re\u010di:{0}","Yellow":"","Yes":"","You are using {0}":"Koristite {0}","You have unsaved changes are you sure you want to navigate away?":"Imate nesa\u010duvane promene dali ste sigurni da \u017eelite da iza\u0111ete?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Va\u0161 pretra\u017eiva\u010d nepodr\u017eava direktan pristup prenosu.Koristite Ctrl+X/C/V pre\u010dice na tastaturi","alignment":"","austral sign":"","cedi sign":"","colon sign":"","cruzeiro sign":"","currency sign":"","dollar sign":"","dong sign":"","drachma sign":"","euro-currency sign":"","example":"","formatting":"","french franc sign":"","german penny symbol":"","guarani sign":"","history":"","hryvnia sign":"","indentation":"","indian rupee sign":"","kip sign":"","lira sign":"","livre tournois sign":"","manat sign":"","mill sign":"","naira sign":"","new sheqel sign":"","nordic mark sign":"","peseta sign":"","peso sign":"","ruble sign":"","rupee sign":"","spesmilo sign":"","styles":"","tenge sign":"","tugrik sign":"","turkish lira sign":"","won sign":"","yen character":"","yen/yuan character variant one":"","yuan character":"","yuan character, in hong kong and taiwan":"","{0} characters":"","{0} columns, {1} rows":"","{0} words":"{0} re\u010di"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/sv_SE.js b/staticfiles/tinymce/langs/sv_SE.js new file mode 100644 index 0000000..dbefc25 --- /dev/null +++ b/staticfiles/tinymce/langs/sv_SE.js @@ -0,0 +1 @@ +tinymce.addI18n("sv_SE",{"#":"#","Accessibility":"Tillg\xe4nglighet","Accordion":"Dragspelsmeny","Accordion body...":"Inneh\xe5ll i dragspelsmeny...","Accordion summary...":"Sammanfattning f\xf6r dragspelsmeny...","Action":"\xc5tg\xe4rd","Activity":"Aktivitet","Address":"Adress","Advanced":"Avancerat","Align":"Justera","Align center":"Centrera","Align left":"V\xe4nsterjustera","Align right":"H\xf6gerjustera","Alignment":"Justering","Alignment {0}":"Justering: {0}","All":"Alla","Alternative description":"Alternativ beskrivning","Alternative source":"Alternativ k\xe4lla","Alternative source URL":"Alternativ k\xe4llwebbadress","Anchor":"Ankare","Anchor...":"Ankare...","Anchors":"Ankare","Animals and Nature":"Djur och natur","Arrows":"Pilar","B":"B","Background color":"Bakgrundsf\xe4rg","Background color {0}":"Bakgrundsf\xe4rg {0}","Black":"Svart","Block":"Block","Block {0}":"Block {0}","Blockquote":"Citat","Blocks":"Block","Blue":"Bl\xe5","Blue component":"Bl\xe5 komponent","Body":"Br\xf6dtext","Bold":"Fet","Border":"Kantlinje","Border color":"Kantlinjef\xe4rg","Border style":"Kantlinjestil","Border width":"Kantlinjebredd","Bottom":"Nederkant","Browse files":"Bl\xe4ddra bland filer","Browse for an image":"Bl\xe4ddra efter en bild","Browse links":"Bl\xe4ddra bland l\xe4nkar","Bullet list":"Punktlista","Cancel":"Avbryt","Caption":"Rubrik","Cell":"Cell","Cell padding":"Cellutfyllnad","Cell properties":"Cellegenskaper","Cell spacing":"Cellmellanrum","Cell styles":"Cell stil","Cell type":"Celltyp","Center":"Centrera","Characters":"Tecken","Characters (no spaces)":"Tecken (inga mellanrum)","Circle":"Cirkel","Class":"Klass","Clear formatting":"Rensa formatering","Close":"St\xe4ng","Code":"Kod","Code sample...":"Kodexempel...","Code view":"Kodvy","Color Picker":"F\xe4rgv\xe4ljare","Color swatch":"F\xe4rgpalett","Cols":"Kolumner","Column":"Kolumn","Column clipboard actions":"\xc5tg\xe4rder f\xf6r kolumnurklipp","Column group":"Kolumngrupp","Column header":"Kolumnrubrik","Constrain proportions":"Bibeh\xe5ll proportioner","Copy":"Kopiera","Copy column":"Kopiera kolumn","Copy row":"Kopiera rad","Could not find the specified string.":"Kunde inte hitta den angivna str\xe4ngen.","Could not load emojis":"Kunde inte ladda emojis","Count":"Antal","Currency":"Valuta","Current window":"Nuvarande f\xf6nster","Custom color":"Anpassad f\xe4rg","Custom...":"Anpassad...","Cut":"Klipp ut","Cut column":"Klipp kolumn","Cut row":"Klipp ut rad","Dark Blue":"M\xf6rkbl\xe5","Dark Gray":"M\xf6rkgr\xe5","Dark Green":"M\xf6rkgr\xf6n","Dark Orange":"M\xf6rkorange","Dark Purple":"M\xf6rklila","Dark Red":"M\xf6rkr\xf6d","Dark Turquoise":"M\xf6rkturkos","Dark Yellow":"M\xf6rkgul","Dashed":"Streckad","Date/time":"Datum/tid","Decrease indent":"Minska indrag","Default":"Standard","Delete accordion":"Ta bort dragspelsmeny","Delete column":"Radera kolumn","Delete row":"Radera rad","Delete table":"Radera tabell","Dimensions":"M\xe5tt","Disc":"Disk","Div":"Div","Document":"Dokument","Dotted":"Prickad","Double":"Dubbel","Drop an image here":"Sl\xe4pp en bild h\xe4r","Dropped file type is not supported":"Filtypen st\xf6ds inte","Edit":"Redigera","Embed":"B\xe4dda in","Emojis":"Emojis","Emojis...":"Emojis...","Error":"Fel","Error: Form submit field collision.":"Fel: Kollision f\xe4lt f\xf6r s\xe4ndning av formul\xe4r.","Error: No form element found.":"Fel: Inget formul\xe4relement hittades.","Extended Latin":"Ut\xf6kad latin","Failed to initialize plugin: {0}":"Kunde inte initiera insticksprogram: {0}","Failed to load plugin url: {0}":"Kunde inte l\xe4sa in webbadress f\xf6r insticksprogram: {0}","Failed to load plugin: {0} from url {1}":"Kunde inte l\xe4sa in insticksprogram: {0} fr\xe5n webbadress {1}","Failed to upload image: {0}":"Kunde inte ladda upp bild: {0}","File":"Arkiv","Find":"S\xf6k","Find (if searchreplace plugin activated)":"S\xf6k (om searchreplace-insticksprogram \xe4r aktiverat)","Find and Replace":"S\xf6k och ers\xe4tt","Find and replace...":"S\xf6k och ers\xe4tt...","Find in selection":"S\xf6k i markering","Find whole words only":"Hitta endast hela ord","Flags":"Flaggor","Focus to contextual toolbar":"Fokusera p\xe5 snabbverktygsrad","Focus to element path":"Fokusera p\xe5 elements\xf6kv\xe4g","Focus to menubar":"Fokusera p\xe5 menyrad","Focus to toolbar":"Fokusera p\xe5 verktygsrad","Font":"Teckensnitt","Font size {0}":"Teckenstorlek {0}","Font sizes":"Textstorlek","Font {0}":"Teckensnitt {0}","Fonts":"Typsnitt","Food and Drink":"Mat och dryck","Footer":"Sidfot","Format":"Format","Format {0}":"Format {0}","Formats":"Format","Fullscreen":"Helsk\xe4rm","G":"G","General":"Allm\xe4nt","Gray":"Gr\xe5","Green":"Gr\xf6n","Green component":"Gr\xf6n komponent","Groove":"Urholkad","Handy Shortcuts":"Kortkommandon","Header":"Rubrik","Header cell":"Rubrikcell","Heading 1":"Rubrik 1","Heading 2":"Rubrik 2","Heading 3":"Rubrik 3","Heading 4":"Rubrik 4","Heading 5":"Rubrik 5","Heading 6":"Rubrik 6","Headings":"Rubriker","Height":"H\xf6jd","Help":"Hj\xe4lp","Hex color code":"Hexadecimal f\xe4rgkod","Hidden":"Dold","Horizontal align":"Horisontell justering","Horizontal line":"Horisontell linje","Horizontal space":"V\xe5gr\xe4t yta","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID b\xf6r starta med en bokstav f\xf6ljt av endast bokst\xe4ver, siffror, bindestreck, punkter, tabbar eller understreck.","Image is decorative":"Bilden \xe4r dekorativ","Image list":"Bildlista","Image title":"Bildtitel","Image...":"Bild...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP error: Kunde inte hitta bildproxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP error: Felaktig bildproxy URL","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP error: Avvisad beg\xe4ran","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP error: Ok\xe4nt Bildproxy fel","Increase indent":"\xd6ka indrag","Inline":"Inline","Insert":"Infoga","Insert Template":"Infoga mall","Insert accordion":"Infoga dragspelsmeny","Insert column after":"Infoga kolumn efter","Insert column before":"Infoga kolumn f\xf6re","Insert date/time":"Infoga datum/tid","Insert image":"Infoga bild","Insert link (if link plugin activated)":"Infoga l\xe4nk (om link-insticksprogram \xe4r aktiverat)","Insert row after":"Infoga rad efter","Insert row before":"Infoga rad f\xf6re","Insert table":"Infoga tabell","Insert template...":"Infoga mall...","Insert video":"Infoga video","Insert/Edit code sample":"Infoga/redigera kodexempel","Insert/edit image":"Infoga/redigera bild","Insert/edit link":"Infoga/redigera l\xe4nk","Insert/edit media":"Infoga/redigera media","Insert/edit video":"Infoga/redigera video","Inset":"Indrag","Invalid hex color code: {0}":"Ogiltig f\xe4rgkod: {0}","Invalid input":"Ogiltig inmatning","Italic":"Kursiv","Justify":"Verifiera","Keyboard Navigation":"Tangentbordsnavigering","Language":"Spr\xe5k","Learn more...":"L\xe4s mer...","Left":"V\xe4nster","Left to right":"V\xe4nster till h\xf6ger","Light Blue":"Ljusbl\xe5","Light Gray":"Ljusgr\xe5","Light Green":"Ljusgr\xf6n","Light Purple":"Ljuslila","Light Red":"Ljusr\xf6d","Light Yellow":"Ljusgul","Line height":"Radavst\xe5nd","Link list":"L\xe4nklista","Link...":"L\xe4nk...","List Properties":"Listegenskaper","List properties...":"Listegenskaper...","Loading emojis...":"Laddar emojis...","Loading...":"Laddar...","Lower Alpha":"Sm\xe5 bokst\xe4ver","Lower Greek":"Sm\xe5 grekiska","Lower Roman":"Sm\xe5 romerska","Match case":"Matcha gemener/VERSALER","Mathematical":"Matematiskt","Media poster (Image URL)":"Mediaposter (bildwebbadress)","Media...":"Media...","Medium Blue":"Mellanbl\xe5","Medium Gray":"Mellangr\xe5","Medium Purple":"Mellanlila","Merge cells":"Sammanfoga celler","Middle":"Mitten","Midnight Blue":"Midnattsbl\xe5","More...":"Mer...","Name":"Namn","Navy Blue":"M\xf6rkbl\xe5","New document":"Nytt dokument","New window":"Nytt f\xf6nster","Next":"N\xe4sta","No":"Nej","No alignment":"Ingen justering","No color":"Ingen f\xe4rg","Nonbreaking space":"H\xe5rt mellanslag","None":"Ingen","Numbered list":"Nummerlista","OR":"ELLER","Objects":"F\xf6rem\xe5l","Ok":"Ok","Open help dialog":"\xd6ppna hj\xe4lpdialogrutan","Open link":"\xd6ppna l\xe4nk","Open link in...":"\xd6ppna l\xe4nk i...","Open popup menu for split buttons":"\xd6ppna popup-meny f\xf6r delade knappar","Orange":"Orange","Outset":"Utst\xe4lld","Page break":"Sidbrytning","Paragraph":"Paragraf","Paste":"Klistra in","Paste as text":"Klistra in som text","Paste column after":"Klistra in kolumn efter","Paste column before":"Klistra in kolumn f\xf6re","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Klistra in som oformaterad text. Inneh\xe5llet klistras in som oformaterad text tills du st\xe4nger av det h\xe4r alternativet.","Paste or type a link":"Klistra in eller skriv en l\xe4nk","Paste row after":"Klistra in rad efter","Paste row before":"Klistra in rad f\xf6re","Paste your embed code below:":"Klistra in din inb\xe4ddningskod nedan:","People":"M\xe4nniskor","Plugins":"Plugins","Plugins installed ({0}):":"Installerade insticksprogram ({0}):","Powered by {0}":"St\xf6ds av {0}","Pre":"Pre","Preferences":"Inst\xe4llningar","Preformatted":"F\xf6rformaterad","Premium plugins:":"Premium-insticksprogram","Press the Up and Down arrow keys to resize the editor.":"Anv\xe4nd piltangenterna f\xf6r att \xe4ndra storlek p\xe5 redigeringsf\xf6nstret.","Press the arrow keys to resize the editor.":"Anv\xe4nd piltangenterna f\xf6r att \xe4ndra storlek p\xe5 editorn.","Press {0} for help":"Tryck p\xe5 {0} f\xf6r hj\xe4lp","Preview":"F\xf6rhandsgranska","Previous":"F\xf6reg\xe5ende","Print":"Skriv ut","Print...":"Skriv ut...","Purple":"Lila","Quotations":"Citattecken","R":"R","Range 0 to 255":"Spann 0 till 255","Red":"R\xf6d","Red component":"R\xf6d komponent","Redo":"G\xf6r om","Remove":"Ta bort","Remove color":"Ta bort f\xe4rg","Remove link":"Ta bort l\xe4nk","Replace":"Ers\xe4tt","Replace all":"Ers\xe4tt alla","Replace with":"Ers\xe4tt med","Resize":"\xc4ndra storlek","Restore last draft":"\xc5terst\xe4ll senaste utkast","Reveal or hide additional toolbar items":"Visa eller d\xf6lj ytterligare objekt i verktygsf\xe4ltet","Rich Text Area":"Rich Text Omr\xe5de","Rich Text Area. Press ALT-0 for help.":"Omr\xe5de med formaterad text. Tryck p\xe5 ALT-0 f\xf6r hj\xe4lp.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Omr\xe5de med formaterad text. Tryck p\xe5 ALT-F9 f\xf6r att \xf6ppna menyn. Tryck p\xe5 ALT-F10 f\xf6r att \xf6ppna verktygsraden. Tryck p\xe5 ALT-0 f\xf6r hj\xe4lp.","Ridge":"Rygg","Right":"H\xf6ger","Right to left":"H\xf6ger till v\xe4nster","Row":"Rad","Row clipboard actions":"\xc5tg\xe4rder f\xf6r radurklipp","Row group":"Radgrupp","Row header":"Radrubrik","Row properties":"Radegenskaper","Row type":"Radtyp","Rows":"Rader","Save":"Spara","Save (if save plugin activated)":"Spara (om save-insticksprogram \xe4r aktiverat)","Scope":"Omr\xe5de","Search":"S\xf6k","Select all":"Markera allt","Select...":"V\xe4lj...","Selection":"Val","Shortcut":"Genv\xe4g","Show blocks":"Visa block","Show caption":"Visa bildtext","Show invisible characters":"Visa osynliga tecken","Size":"Storlek","Solid":"Solid","Source":"K\xe4lla","Source code":"K\xe4llkod","Special Character":"Specialtecken","Special character...":"Specialtecken...","Split cell":"Dela cell","Square":"Fyrkant","Start list at number":"Starta listan p\xe5 nummer","Strikethrough":"Genomstruken","Style":"Stil","Subscript":"Neds\xe4nkt","Superscript":"Upph\xf6jd","Switch to or from fullscreen mode":"V\xe4xla till eller fr\xe5n fullsk\xe4rmsl\xe4ge","Symbols":"Symboler","System Font":"Systemtypsnitt","Table":"Tabell","Table caption":"Tabelltext","Table properties":"Tabellegenskaper","Table styles":"Tabell stil","Template":"Mall","Templates":"Mallar","Text":"Text","Text color":"Textf\xe4rg","Text color {0}":"Textf\xe4rg {0}","Text to display":"Text att visa","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Webbadressen du angav verkar vara en e-postadress. Vill du l\xe4gga till det obligatoriska prefixet mailto:?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Webbadressen du angav verkar vara en extern l\xe4nk. Vill du l\xe4gga till det obligatoriska prefixet http://?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL:en du angav verkar vara en extern-l\xe4nk. Vill du l\xe4gga till det obligatoriska https:// prefixet?","Title":"Titel","To open the popup, press Shift+Enter":"Tryck p\xe5 Shift\xa0+\xa0Enter f\xf6r att \xf6ppna popup-f\xf6nstret","Toggle accordion":"V\xe4xla dragspelsmeny","Tools":"Verktyg","Top":"\xd6verkant","Travel and Places":"Resa och platser","Turquoise":"Turkos","Underline":"Understruken","Undo":"\xc5ngra","Upload":"Ladda upp","Uploading image":"Laddar upp bild","Upper Alpha":"Stora bokst\xe4ver","Upper Roman":"Stora romerska","Url":"Webbadress","User Defined":"Anv\xe4ndardefinierade","Valid":"Giltig","Version":"Version","Vertical align":"Vertikal justering","Vertical space":"Lodr\xe4t yta","View":"Visa","Visual aids":"Visuella hj\xe4lpmedel","Warn":"Varning","White":"Vit","Width":"Bredd","Word count":"Ordantal","Words":"Ord","Words: {0}":"Ord: {0}","Yellow":"Gul","Yes":"Ja","You are using {0}":"Du anv\xe4nder {0}","You have unsaved changes are you sure you want to navigate away?":"Det finns osparade \xe4ndringar. \xc4r du s\xe4ker p\xe5 att du vill navigera vidare?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Din webbl\xe4sare st\xf6djer inte direkt \xe5tkomst till klippboken. Anv\xe4nd kortkommandona Ctrl\xa0+\xa0X/C/V i st\xe4llet.","alignment":"justering","austral sign":"australtecken","cedi sign":"ceditecken","colon sign":"kolon","cruzeiro sign":"cruzeirotecken","currency sign":"valutatecken","dollar sign":"dollartecken","dong sign":"dongtecken","drachma sign":"drachmertecken","euro-currency sign":"eurotecken","example":"exempel","formatting":"formatering","french franc sign":"franctecken","german penny symbol":"tecken f\xf6r tysk penny","guarani sign":"guaranitecken","history":"historik","hryvnia sign":"hryvniatecken","indentation":"indragning","indian rupee sign":"tecken f\xf6r indisk rupee","kip sign":"kiptecken","lira sign":"liratecken","livre tournois sign":"tecken f\xf6r livre tournois","manat sign":"manattecken","mill sign":"milltecken","naira sign":"nairatecken","new sheqel sign":"schekeltecken","nordic mark sign":"tecken f\xf6r nordisk mark","peseta sign":"pesetastecken","peso sign":"pesotecken","ruble sign":"rubeltecken","rupee sign":"rupeetecken","spesmilo sign":"spesmilotecken","styles":"stilar","tenge sign":"tengetecken","tugrik sign":"tugriktecken","turkish lira sign":"tecken f\xf6r turkisk lira","won sign":"wontecken","yen character":"yentecken","yen/yuan character variant one":"yen-/yuantecken variant ett","yuan character":"yuantecken","yuan character, in hong kong and taiwan":"yuantecken i Hongkong och Taiwan","{0} characters":"{0} tecken","{0} columns, {1} rows":"{0} kolumner, {1} rader","{0} words":"{0} ord"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ta.js b/staticfiles/tinymce/langs/ta.js new file mode 100644 index 0000000..86bae0e --- /dev/null +++ b/staticfiles/tinymce/langs/ta.js @@ -0,0 +1 @@ +tinymce.addI18n("ta",{"#":"#","Accessibility":"\u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bcd\u0ba4\u0ba9\u0bcd\u0bae\u0bc8","Accordion":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf","Accordion body...":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf \u0b89\u0b9f\u0bb2\u0bcd...","Accordion summary...":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bae\u0bcd...","Action":"\u0b9a\u0bc6\u0baf\u0bb2\u0bcd","Activity":"\u0b9a\u0bc6\u0baf\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1","Address":"\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf","Advanced":"\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","Align":"\u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Align center":"\u0bae\u0bc8\u0baf \u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Align left":"\u0b87\u0b9f\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Align right":"\u0bb5\u0bb2\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Alignment":"\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1","Alignment {0}":"\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1 {0}","All":"\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd","Alternative description":"\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd","Alternative source":"\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2\u0bae\u0bcd","Alternative source URL":"\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2 \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf","Anchor":"\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd","Anchor...":"\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd...","Anchors":"\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd","Animals and Nature":"\u0bae\u0bbf\u0bb0\u0bc1\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8","Arrows":"\u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","B":"B","Background color":"\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0ba3\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd","Background color {0}":"\u0baa\u0bbf\u0ba3\u0bcd\u0ba3\u0ba9\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd {0}","Black":"\u0b95\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1","Block":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf","Block {0}":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf {0}","Blockquote":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bcb\u0bb3\u0bcd","Blocks":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bcd","Blue":"\u0ba8\u0bc0\u0bb2\u0bae\u0bcd","Blue component":"\u0ba8\u0bc0\u0bb2\u0bae\u0bcd \u0b95\u0bb2\u0bb5\u0bc8\u0b95\u0bcd\u0b95\u0bc2\u0bb1\u0bc1","Body":"\u0b89\u0b9f\u0bb2\u0bcd","Bold":"\u0ba4\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0bc1","Border":"\u0b95\u0bb0\u0bc8","Border color":"\u0b95\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd","Border style":"\u0b95\u0bb0\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf","Border width":"\u0b95\u0bb0\u0bc8 \u0b85\u0b95\u0bb2\u0bae\u0bcd","Bottom":"\u0b95\u0bc0\u0bb4\u0bcd","Browse files":"\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95","Browse for an image":"\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95","Browse links":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95","Bullet list":"\u0baa\u0bca\u0b9f\u0bcd\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd","Cancel":"\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95","Caption":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Cell":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8","Cell padding":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0ba8\u0bbf\u0bb0\u0baa\u0bcd\u0baa\u0bb2\u0bcd","Cell properties":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","Cell spacing":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf","Cell styles":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd","Cell type":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0bb5\u0b95\u0bc8","Center":"\u0bae\u0bc8\u0baf\u0bae\u0bcd","Characters":"\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd","Characters (no spaces)":"\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd (\u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8)","Circle":"\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd","Class":"Class","Clear formatting":"\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95","Close":"\u0bae\u0bc2\u0b9f\u0bc1\u0b95","Code":"\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1","Code sample...":"\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf...","Code view":"\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1","Color Picker":"\u0ba8\u0bbf\u0bb1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bc1","Color swatch":"\u0ba8\u0bbf\u0bb1\u0b9a\u0bcd \u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0b95\u0bcd\u0b95\u0bb2\u0bb5\u0bc8","Cols":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd","Column":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8","Column clipboard actions":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0b95\u0bb3\u0bcd","Column group":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1","Column header":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Constrain proportions":"\u0bb5\u0bbf\u0b95\u0bbf\u0ba4\u0bbe\u0b9a\u0bcd\u0b9a\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Copy":"\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95","Copy column":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95","Copy row":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95","Could not find the specified string.":"\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bcd\u0b9f \u0b9a\u0bb0\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8","Could not load emojis":"Emojis \u0b8f\u0bb1\u0bcd\u0bb1 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8","Count":"\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8","Currency":"\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf (Currency)","Current window":"\u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd","Custom color":"\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd","Custom...":"\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd...","Cut":"\u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Cut column":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Cut row":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Dark Blue":"\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd","Dark Gray":"\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd","Dark Green":"\u0b85\u0b9f\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8","Dark Orange":"\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd","Dark Purple":"\u0b85\u0b9f\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe","Dark Red":"\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1","Dark Turquoise":"\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8","Dark Yellow":"\u0b85\u0b9f\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd","Dashed":"\u0b95\u0bcb\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","Date/time":"\u0ba4\u0bc7\u0ba4\u0bbf/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd","Decrease indent":"\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b95\u0bc1\u0bb1\u0bc8\u0b95\u0bcd\u0b95","Default":"\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1\u0ba8\u0bbf\u0bb2\u0bc8","Delete accordion":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95","Delete column":"\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95","Delete row":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95","Delete table":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95","Dimensions":"\u0baa\u0bb0\u0bbf\u0bae\u0bbe\u0ba3\u0b99\u0bcd\u0b95\u0bb3\u0bcd","Disc":"\u0bb5\u0b9f\u0bcd\u0b9f\u0bc1","Div":"\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 (Div)","Document":"\u0b86\u0bb5\u0ba3\u0bae\u0bcd","Dotted":"\u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0baf\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","Double":"\u0b87\u0bb0\u0b9f\u0bcd\u0b9f\u0bc8","Drop an image here":"\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc1 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd \u0baa\u0bcb\u0b9f\u0bb5\u0bc1\u0bae\u0bcd","Dropped file type is not supported":"\u0b95\u0bc8\u0bb5\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f (Dropped) \u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1 \u0bb5\u0b95\u0bc8 \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8","Edit":"\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Embed":"\u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u0baa\u0bbf\u0bb4\u0bc8","Error: Form submit field collision.":"\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0b9f\u0bbf\u0bb5\u0bae\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bcb\u0ba4\u0bb2\u0bcd.","Error: No form element found.":"\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bc2\u0bb2\u0b95\u0bae\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b95\u0bbe\u0ba3\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.","Extended Latin":"\u0ba8\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b87\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0ba9\u0bcd","Failed to initialize plugin: {0}":"\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0ba4\u0bc1\u0bb5\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}","Failed to load plugin url: {0}":"\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}","Failed to load plugin: {0} from url {1}":"\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0} - {1} \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1","Failed to upload image: {0}":"\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}","File":"\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1","Find":"\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95","Find (if searchreplace plugin activated)":"\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 (\u0ba4\u0bc7\u0b9f\u0bbf\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)","Find and Replace":"\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Find and replace...":"\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95...","Find in selection":"\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bbf\u0bb2\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95","Find whole words only":"\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95","Flags":"\u0b95\u0bca\u0b9f\u0bbf\u0b95\u0bb3\u0bcd","Focus to contextual toolbar":"\u0b9a\u0bc2\u0bb4\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Focus to element path":"\u0bae\u0bc2\u0bb2\u0b95\u0baa\u0bcd \u0baa\u0bbe\u0ba4\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Focus to menubar":"\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Focus to toolbar":"\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Font":"\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1","Font size {0}":"\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1 {0}","Font sizes":"\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1\u0b95\u0bb3\u0bcd","Font {0}":"\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 {0}","Fonts":"\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd","Food and Drink":"\u0b89\u0ba3\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0ba9\u0bae\u0bcd","Footer":"\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bc1","Format":"\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Format {0}":"\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 {0}","Formats":"\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","Fullscreen":"\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8","G":"G","General":"\u0baa\u0bca\u0ba4\u0bc1","Gray":"\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd","Green":"\u0baa\u0b9a\u0bcd\u0b9a\u0bc8","Green component":"\u0baa\u0b9a\u0bcd\u0b9a\u0bc8 \u0b95\u0bb2\u0bb5\u0bc8\u0b95\u0bcd\u0b95\u0bc2\u0bb1\u0bc1","Groove":"\u0bb5\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bb3\u0bcd\u0bb3\u0bae\u0bcd","Handy Shortcuts":"\u0b8e\u0bb3\u0bbf\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bc8\u0baf\u0bbe\u0bb3\u0b95\u0bcd\u0b95\u0bc2\u0b9f\u0bbf\u0baf \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bcd","Header":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Header cell":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8","Heading 1":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1","Heading 2":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2","Heading 3":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3","Heading 4":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4","Heading 5":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5","Heading 6":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6","Headings":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","Height":"\u0b89\u0baf\u0bb0\u0bae\u0bcd","Help":"\u0b89\u0ba4\u0bb5\u0bbf","Hex color code":"Hex \u0ba8\u0bbf\u0bb1 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1","Hidden":"\u0bae\u0bb1\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","Horizontal align":"\u0b95\u0bbf\u0b9f\u0bc8 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Horizontal line":"\u0b95\u0bbf\u0b9f\u0bc8\u0b95\u0bcd \u0b95\u0bcb\u0b9f\u0bc1","Horizontal space":"\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID \u0b92\u0bb0\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd (letter) \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd; \u0b85\u0ba4\u0bc8\u0ba4\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd, \u0b8e\u0ba3\u0bcd\u0b95\u0bb3\u0bcd, \u0b95\u0bcb\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (-), \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (dots), \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0bb2\u0bcd \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (:), \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (_) \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bc7 \u0b87\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.","Image is decorative":"\u0baa\u0b9f\u0bae\u0bcd \u0b85\u0bb2\u0b99\u0bcd\u0b95\u0bbe\u0bb0\u0bae\u0bbe\u0ba9\u0ba4\u0bc1","Image list":"\u0baa\u0b9f\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd","Image title":"\u0baa\u0b9f\u0ba4\u0bcd \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Image...":"\u0baa\u0b9f\u0bae\u0bcd...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP error: \u0baa\u0b9f\u0baa\u0bcd \u0baa\u0ba4\u0bbf\u0bb2\u0bbf\u0baf\u0bc8 (Image Proxy) \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP error: \u0ba4\u0bb5\u0bb1\u0bbe\u0ba9 \u0baa\u0b9f\u0baa\u0bcd \u0baa\u0ba4\u0bbf\u0bb2\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (Image Proxy URL)","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP error: \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0ba8\u0bbf\u0bb0\u0bbe\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP error: \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 ImageProxy \u0baa\u0bbf\u0bb4\u0bc8","Increase indent":"\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b85\u0ba4\u0bbf\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95","Inline":"\u0b89\u0bb3\u0bcd\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8","Insert":"\u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert Template":"\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert accordion":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert column after":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert column before":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert date/time":"\u0ba4\u0bc7\u0ba4\u0bbf/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert image":"\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert link (if link plugin activated)":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95 (\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)","Insert row after":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1\u0baa\u0bcd \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert row before":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert table":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert template...":"\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95...","Insert video":"\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95","Insert/Edit code sample":"\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Insert/edit image":"\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Insert/edit link":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Insert/edit media":"\u0b8a\u0b9f\u0b95\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Insert/edit video":"\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95","Inset":"\u0b89\u0b9f\u0bcd\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf","Invalid hex color code: {0}":"\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0bc1\u0baa\u0b9f\u0bbf\u0baf\u0bbe\u0b95\u0bbe\u0ba4 hex \u0ba8\u0bbf\u0bb1 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1: {0}","Invalid input":"\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0bc1\u0baa\u0b9f\u0bbf\u0baf\u0bbe\u0b95\u0bbe\u0ba4 \u0b89\u0bb3\u0bcd\u0bb3\u0bc0\u0b9f\u0bc1","Italic":"\u0b9a\u0bbe\u0baf\u0bcd\u0bb5\u0bc1","Justify":"\u0ba8\u0bc7\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95","Keyboard Navigation":"\u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0bb5\u0bb4\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd","Language":"\u0bae\u0bca\u0bb4\u0bbf","Learn more...":"\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0bb1\u0bbf\u0b95...","Left":"\u0b87\u0b9f\u0bae\u0bcd","Left to right":"\u0b87\u0b9f\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bb5\u0bb2\u0bae\u0bcd","Light Blue":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd","Light Gray":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd","Light Green":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8","Light Purple":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe","Light Red":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd\xa0\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1","Light Yellow":"\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd","Line height":"\u0bb5\u0bb0\u0bbf \u0b89\u0baf\u0bb0\u0bae\u0bcd","Link list":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd","Link...":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1...","List Properties":"\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95","List properties...":"\u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bbf\u0b9f\u0bc1\u0b95..","Loading emojis...":"Emojis \u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba9...","Loading...":"\u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1...","Lower Alpha":"\u0b95\u0bc0\u0bb4\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1","Lower Greek":"\u0b95\u0bc0\u0bb4\u0bcd \u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd","Lower Roman":"\u0b95\u0bc0\u0bb4\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd","Match case":"\u0bb5\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0baa\u0bca\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95","Mathematical":"\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bb2\u0bcd","Media poster (Image URL)":"\u0b8a\u0b9f\u0b95 \u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf (\u0b89\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf)","Media...":"\u0b8a\u0b9f\u0b95\u0bae\u0bcd...","Medium Blue":"\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd","Medium Gray":"\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd","Medium Purple":"\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b8a\u0ba4\u0bbe","Merge cells":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95","Middle":"\u0ba8\u0b9f\u0bc1","Midnight Blue":"\u0ba8\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bb5\u0bc1 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd","More...":"\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd...","Name":"\u0baa\u0bc6\u0baf\u0bb0\u0bcd","Navy Blue":"\u0b95\u0b9f\u0bb1\u0bcd\u0baa\u0b9f\u0bc8 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd","New document":"\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b86\u0bb5\u0ba3\u0bae\u0bcd","New window":"\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd","Next":"\u0b85\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4","No":"\u0b87\u0bb2\u0bcd\u0bb2\u0bc8","No alignment":"\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1 \u0b87\u0bb2\u0bcd\u0bb2\u0bc8","No color":"\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8","Nonbreaking space":"\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf","None":"\u0b8f\u0ba4\u0bc1\u0bae\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8","Numbered list":"\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd","OR":"\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1","Objects":"\u0baa\u0bca\u0bb0\u0bc1\u0b9f\u0bcd\u0b95\u0bb3\u0bcd","Ok":"\u0b9a\u0bb0\u0bbf","Open help dialog":"\u0b89\u0ba4\u0bb5\u0bbf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95","Open link":"\u0ba4\u0bbf\u0bb1\u0ba8\u0bcd\u0ba4 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Open link in...":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b87\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95...","Open popup menu for split buttons":"\u0baa\u0bbf\u0bb3\u0bb5\u0bc1 \u0baa\u0bca\u0ba4\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1 \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bc8 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95","Orange":"\u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd","Outset":"\u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf","Page break":"\u0baa\u0b95\u0bcd\u0b95 \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc1","Paragraph":"\u0baa\u0ba4\u0bcd\u0ba4\u0bbf","Paste":"\u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste as text":"\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste column after":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1\u0baa\u0bcd \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste column before":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1. \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bb5\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.","Paste or type a link":"\u0b92\u0bb0\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95","Paste row after":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1\u0baa\u0bcd \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste row before":"\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Paste your embed code below:":"\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bc6\u0bbe\u0ba4\u0bbf \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bcd\u0b9f\u0bc8 \u0b95\u0bc0\u0bb4\u0bc7 \u0b92\u0b9f\u0bcd\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:","People":"\u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd","Plugins":"\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd","Plugins installed ({0}):":"\u0ba8\u0bbf\u0bb1\u0bc1\u0bb5\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd ({0}):","Powered by {0}":"\u0bb5\u0bb2\u0bc1\u0bb5\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bc1 {0}","Pre":"\u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 (Pre)","Preferences":"\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bcd","Preformatted":"\u0bae\u0bc1\u0ba9\u0bcd\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1","Premium plugins:":"\u0b89\u0baf\u0bb0\u0bcd\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd:","Press the Up and Down arrow keys to resize the editor.":"\u0ba4\u0bca\u0b95\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bc8 \u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f, \u0bae\u0bc7\u0bb2\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b95\u0bc0\u0bb4\u0bcd \u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc8 \u0b85\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bb5\u0bc1\u0bae\u0bcd.","Press the arrow keys to resize the editor.":"\u0ba4\u0bca\u0b95\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bc8 \u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f, \u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc8 \u0b85\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bb5\u0bc1\u0bae\u0bcd.","Press {0} for help":"\u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 {0} \u0b90 \u0b85\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bb5\u0bc1\u0bae\u0bcd","Preview":"\u0bae\u0bc1\u0ba9\u0bcd\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1","Previous":"\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf","Print":"\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95","Print...":"\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95...","Purple":"\u0b8a\u0ba4\u0bbe","Quotations":"\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc7\u0bbe\u0bb3\u0bcd\u0b95\u0bb3\u0bcd","R":"R","Range 0 to 255":"\u0bb5\u0bb0\u0bae\u0bcd\u0baa\u0bc1 0 \u0bae\u0bc1\u0ba4\u0bb2\u0bcd 255 \u0bb5\u0bb0\u0bc8","Red":"\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1","Red component":"\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bb2\u0bb5\u0bc8\u0b95\u0bcd\u0b95\u0bc2\u0bb1\u0bc1","Redo":"\u0bae\u0bc0\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0b95","Remove":"\u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Remove color":"\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Remove link":"\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Replace":"\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Replace all":"\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Replace with":"\u0b87\u0ba4\u0ba9\u0bbe\u0bb2\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Resize":"\u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f\u0bc1","Restore last draft":"\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bb0\u0bc8\u0bb5\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95","Reveal or hide additional toolbar items":"\u0b95\u0bc2\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8 \u0b89\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0b95\u0bb3\u0bc8 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb5\u0bc1\u0bae\u0bcd \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bb1\u0bc8\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd","Rich Text Area":"\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 (rich text) \u0baa\u0b95\u0bc1\u0ba4\u0bbf","Rich Text Area. Press ALT-0 for help.":"\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-F9 , \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1 ALT-F10 , \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0","Ridge":"\u0bb5\u0bb0\u0baa\u0bcd\u0baa\u0bc1","Right":"\u0bb5\u0bb2\u0bae\u0bcd","Right to left":"\u0bb5\u0bb2\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b87\u0b9f\u0bae\u0bcd","Row":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8","Row clipboard actions":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0b95\u0bb3\u0bcd","Row group":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1","Row header":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Row properties":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","Row type":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0b95\u0bc8","Rows":"\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd","Save":"\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95","Save (if save plugin activated)":"\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95 (\u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)","Scope":"\u0bb5\u0bb0\u0bc8\u0baf\u0bc6\u0bb2\u0bcd\u0bb2\u0bc8","Search":"\u0ba4\u0bc7\u0b9f\u0bc1\u0b95","Select all":"\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95","Select...":"\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95...","Selection":"\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1","Shortcut":"\u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf","Show blocks":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Show caption":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Show invisible characters":"\u0b95\u0ba3\u0bcd\u0ba3\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bc8\u0b95\u0bcd \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95","Size":"\u0b85\u0bb3\u0bb5\u0bc1","Solid":"\u0ba4\u0bbf\u0b9f\u0bae\u0bcd","Source":"\u0bae\u0bc2\u0bb2\u0bae\u0bcd","Source code":"\u0bae\u0bc2\u0bb2\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1","Special Character":"\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1","Special character...":"\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1...","Split cell":"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95","Square":"\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd","Start list at number":"\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bc8 \u0b87\u0ba8\u0bcd\u0ba4 \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95\u0bc1\u0b95","Strikethrough":"\u0ba8\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1","Style":"\u0baa\u0bbe\u0ba3\u0bbf","Subscript":"\u0b95\u0bc0\u0bb4\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1","Superscript":"\u0bae\u0bc7\u0bb2\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1","Switch to or from fullscreen mode":"\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bc1/\u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0b95","Symbols":"\u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bb3\u0bcd","System Font":"\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1","Table":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8","Table caption":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","Table properties":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd","Table styles":"\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd","Template":"\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1","Templates":"\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd","Text":"\u0b89\u0bb0\u0bc8","Text color":"\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd","Text color {0}":"\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd {0}","Text to display":"\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bbf\u0baf \u0b89\u0bb0\u0bc8","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bae\u0bbf\u0ba9\u0bcd-\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 mailto: \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8 (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 http:// \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8 (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 https:// \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8 (prefix) \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bb3\u0bbe?","Title":"\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1","To open the popup, press Shift+Enter":"\u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1-\u0bb5\u0bc8\u0ba4\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95 Shift+Enter","Toggle accordion":"\u0ba4\u0bc1\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Tools":"\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd","Top":"\u0bae\u0bc7\u0bb2\u0bcd","Travel and Places":"\u0baa\u0baf\u0ba3\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd","Turquoise":"\u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8","Underline":"\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1","Undo":"\u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0ba4\u0bb5\u0bbf\u0bb0\u0bcd\u0b95\u0bcd\u0b95","Upload":"\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1\u0b95","Uploading image":"\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1","Upper Alpha":"\u0bae\u0bc7\u0bb2\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1","Upper Roman":"\u0bae\u0bc7\u0bb2\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd","Url":"\u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf","User Defined":"\u0baa\u0baf\u0ba9\u0bbe\u0bb3\u0bb0\u0bcd \u0bb5\u0bb0\u0bc8\u0baf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0ba4\u0bc1","Valid":"\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0b95\u0bcd\u0b95\u0ba4\u0bc1","Version":"\u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1","Vertical align":"\u0b9a\u0bc6\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8","Vertical space":"\u0ba8\u0bc6\u0b9f\u0bc1\u0ba4\u0bb3 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf","View":"\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1\u0b95","Visual aids":"\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0ba4\u0bcd \u0ba4\u0bc1\u0ba3\u0bc8\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd","Warn":"\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95","White":"\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bc8","Width":"\u0b85\u0b95\u0bb2\u0bae\u0bcd","Word count":"\u0b9a\u0bca\u0bb2\u0bcd \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8","Words":"\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd","Words: {0}":"\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd: {0}","Yellow":"\u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd","Yes":"\u0b86\u0bae\u0bcd","You are using {0}":"\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0ba4\u0bc1 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bbe\u0ba4 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba9; \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baf\u0bbe\u0b95 \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bbe\u0bb3\u0bbe?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8\u0b95\u0bcd\u0b95\u0bc1 \u0ba8\u0bc7\u0bb0\u0b9f\u0bbf \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb2\u0bbe\u0bb5\u0bbf \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8. \u0b86\u0b95\u0bb5\u0bc7 \u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bbe\u0ba9 Ctrl+X/C/V \u0b87\u0bb5\u0bb1\u0bcd\u0bb1\u0bc8\u0ba4\u0bcd \u0ba4\u0baf\u0bb5\u0bc1\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95.","alignment":"\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1","austral sign":"austral \u0b95\u0bc1\u0bb1\u0bbf","cedi sign":"cedi \u0b95\u0bc1\u0bb1\u0bbf","colon sign":"colon \u0b95\u0bc1\u0bb1\u0bbf","cruzeiro sign":"cruzeiro \u0b95\u0bc1\u0bb1\u0bbf","currency sign":"\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf","dollar sign":"dollar \u0b95\u0bc1\u0bb1\u0bbf","dong sign":"dong \u0b95\u0bc1\u0bb1\u0bbf","drachma sign":"drachma \u0b95\u0bc1\u0bb1\u0bbf","euro-currency sign":"euro-currency \u0b95\u0bc1\u0bb1\u0bbf","example":"\u0b89\u0ba4\u0bbe\u0bb0\u0ba3\u0bae\u0bcd","formatting":"\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd","french franc sign":"french franc \u0b95\u0bc1\u0bb1\u0bbf","german penny symbol":"german penny \u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf","guarani sign":"guarani \u0b95\u0bc1\u0bb1\u0bbf","history":"\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bc1","hryvnia sign":"hryvnia \u0b95\u0bc1\u0bb1\u0bbf","indentation":"\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bcd","indian rupee sign":"indian rupee \u0b95\u0bc1\u0bb1\u0bbf","kip sign":"kip \u0b95\u0bc1\u0bb1\u0bbf","lira sign":"lira \u0b95\u0bc1\u0bb1\u0bbf","livre tournois sign":"livre tournois \u0b95\u0bc1\u0bb1\u0bbf","manat sign":"manat \u0b95\u0bc1\u0bb1\u0bbf","mill sign":"mill \u0b95\u0bc1\u0bb1\u0bbf","naira sign":"naira \u0b95\u0bc1\u0bb1\u0bbf","new sheqel sign":"new sheqel \u0b95\u0bc1\u0bb1\u0bbf","nordic mark sign":"nordic mark \u0b95\u0bc1\u0bb1\u0bbf","peseta sign":"peseta \u0b95\u0bc1\u0bb1\u0bbf","peso sign":"peso \u0b95\u0bc1\u0bb1\u0bbf","ruble sign":"ruble \u0b95\u0bc1\u0bb1\u0bbf","rupee sign":"rupee \u0b95\u0bc1\u0bb1\u0bbf","spesmilo sign":"spesmilo \u0b95\u0bc1\u0bb1\u0bbf","styles":"\u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd","tenge sign":"tenge \u0b95\u0bc1\u0bb1\u0bbf","tugrik sign":"tugrik \u0b95\u0bc1\u0bb1\u0bbf","turkish lira sign":"turkish lira \u0b95\u0bc1\u0bb1\u0bbf","won sign":"won \u0b95\u0bc1\u0bb1\u0bbf","yen character":"yen \u0b89\u0bb0\u0bc1","yen/yuan character variant one":"yen/yuan \u0b89\u0bb0\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1","yuan character":"yuan \u0b89\u0bb0\u0bc1","yuan character, in hong kong and taiwan":"yuan \u0b89\u0bb0\u0bc1, \u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bbe\u0baf\u0bcd\u0bb5\u0bbe\u0ba9\u0bcd \u0b87\u0bb2\u0bcd","{0} characters":"{0} \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd","{0} columns, {1} rows":"{0} \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd, {1} \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd","{0} words":"{0} \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/tg.js b/staticfiles/tinymce/langs/tg.js new file mode 100644 index 0000000..28251cd --- /dev/null +++ b/staticfiles/tinymce/langs/tg.js @@ -0,0 +1 @@ +tinymce.addI18n("tg",{"#":"","Accessibility":"","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0410\u043c\u0430\u043b","Activity":"\u0424\u0430\u044a\u043e\u043b\u0438\u044f\u0442","Address":"\u0421\u0443\u0440\u043e\u0493\u0430","Advanced":"\u041c\u0443\u0442\u0430\u0440\u0430\u049b\u0438","Align":"\u04b2\u0430\u043c\u0432\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d","Align center":"\u0420\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u043c\u043e\u0431\u0430\u0439\u043d","Align left":"\u0420\u043e\u0441 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u0447\u0430\u043f","Align right":"\u0420\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d \u0430\u0437 \u0440\u043e\u0441\u0442","Alignment":"\u041c\u0443\u0442\u043e\u0431\u0438\u049b\u043a\u0443\u043d\u04e3","Alignment {0}":"","All":"\u04b2\u0430\u043c\u0430","Alternative description":"","Alternative source":"\u041c\u0430\u043d\u0431\u0430\u0438 \u0430\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u04e3","Alternative source URL":"\u041c\u0430\u043d\u0431\u0430\u0438 \u0430\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0438\u0438 URL","Anchor":"","Anchor...":"\u0410\u043d\u0447\u0443\u043c\u0430\u043d","Anchors":"\u041b\u0430\u043d\u0433\u0430\u0440","Animals and Nature":"\u04b2\u0430\u0439\u0432\u043e\u043d\u043e\u0442 \u0432\u0430 \u0442\u0430\u0431\u0438\u0430\u0442","Arrows":"\u0422\u0438\u0440\u04b3\u043e","B":"\u041a","Background color":"\u0420\u0430\u043d\u0433\u0438 \u043f\u0443\u0448\u0442\u0438 \u043c\u0430\u0442\u043d","Background color {0}":"","Black":"\u0421\u0438\u0451\u04b3","Block":"\u0411\u043b\u043e\u043a","Block {0}":"","Blockquote":"\u041d\u043e\u0445\u0443\u043d\u0430\u043a","Blocks":"\u0425\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u04e3","Blue":"\u041a\u0430\u0431\u0443\u0434","Blue component":"","Body":"\u049a\u0438\u0441\u043c\u0438 \u0430\u0441\u043b\u04e3","Bold":"\u0492\u0430\u0444\u0441","Border":"\u0427\u043e\u0440\u0447\u04ef\u0431\u0430","Border color":"\u0420\u0430\u043d\u0433\u0438 \u0447\u043e\u0440\u0447\u04ef\u0431\u0430","Border style":"\u0421\u0442\u0438\u043b\u0438 \u0447\u043e\u0440\u0447\u04ef\u0431\u0430","Border width":"\u041f\u0430\u04b3\u043c\u0438\u0438 \u0447\u043e\u0440\u0447\u04ef\u0431\u0430","Bottom":"\u0410\u0437 \u043f\u043e\u0451\u043d","Browse files":"","Browse for an image":"\u0418\u043b\u043e\u0432\u0430\u0438 \u0441\u0443\u0440\u0430\u0442","Browse links":"","Bullet list":"\u0420\u0443\u0439\u0445\u0430\u0442\u0438 \u0431\u0435 \u0442\u0430\u0440\u0442\u0438\u0431","Cancel":"\u0411\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d","Caption":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430","Cell":"\u041c\u0430\u0439\u0434\u043e\u043d\u0447\u0430","Cell padding":"\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0434\u0430\u0440\u0443\u043d\u0430","Cell properties":"\u0422\u0430\u043d\u0437\u0438\u043c\u043e\u0442\u04b3\u043e\u0438 \u043c\u0430\u0439\u0434\u043e\u043d\u0447\u0430","Cell spacing":"\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0431\u0435\u0440\u0443\u043d\u0430","Cell styles":"","Cell type":"\u041d\u0430\u043c\u0443\u0434\u0438 \u043c\u0430\u0439\u0434\u043e\u043d\u0447\u0430","Center":"\u0410\u0437 \u043c\u0430\u0440\u043a\u0430\u0437","Characters":"\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e","Characters (no spaces)":"\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e (\u0431\u0435 \u0444\u043e\u0441\u0438\u043b\u0430)","Circle":"\u0414\u043e\u0438\u0440\u0430","Class":"\u041a\u043b\u0430\u0441","Clear formatting":"\u0424\u043e\u0440\u043c\u0430\u0442\u04b3\u043e\u0440\u043e \u0431\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d","Close":"\u041c\u0430\u04b3\u043a\u0430\u043c \u043a\u0430\u0440\u0434\u0430\u043d","Code":"","Code sample...":"\u041d\u0430\u043c\u0443\u043d\u0430\u0438 \u043a\u043e\u0434 ...","Code view":"","Color Picker":"\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u043a\u0443\u043d\u0430\u043d\u0434\u0430\u0438 \u0440\u0430\u043d\u0433","Color swatch":"\u041a\u0430\u0448\u0438\u0448\u0438 \u0440\u0430\u043d\u0433","Cols":"\u0421\u0443\u0442\u0443\u043d\u04b3\u043e","Column":"\u0421\u0443\u0442\u0443\u043d","Column clipboard actions":"","Column group":"\u0413\u0443\u0440\u04ef\u04b3\u0438 \u0441\u0443\u0442\u0443\u043d\u04b3\u043e","Column header":"","Constrain proportions":"\u041d\u0438\u0433\u043e\u04b3 \u0434\u043e\u0448\u0442\u0430\u043d\u0438 \u0442\u0430\u043d\u043e\u0441\u0443\u0431\u0438\u044f\u0442","Copy":"\u041d\u0443\u0441\u0445\u0430\u0431\u043e\u0440\u0434\u043e\u043d\u0438 \u043a\u0430\u0440\u0434\u0430\u043d","Copy column":"","Copy row":"\u041d\u0443\u0441\u0445\u0430\u0431\u0430\u0440\u0434\u043e\u0440\u04e3 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0441\u0430\u0442\u0440","Could not find the specified string.":"\u0421\u0430\u0442\u0440\u0438 \u043d\u0438\u0448\u043e\u043d\u0434\u043e\u0434\u0430\u0448\u0443\u0434\u0430\u0440\u043e \u0451\u0444\u0442\u0430 \u043d\u0430\u0448\u0443\u0434.","Could not load emojis":"","Count":"\u0428\u0443\u043c\u043e\u0440\u0430","Currency":"\u0410\u0441\u044a\u043e\u0440","Current window":"\u0420\u0430\u0432\u0437\u0430\u043d\u0430\u0438 \u04b7\u043e\u0440\u04e3","Custom color":"\u0420\u0430\u043d\u0433\u0438 \u0445\u0443\u0441\u0443\u0441\u04e3","Custom...":"\u0425\u0443\u0441\u0443\u0441\u04e3...","Cut":"\u0411\u0443\u0440\u0438\u0434\u0430\u043d","Cut column":"","Cut row":"\u0421\u0430\u0442\u0440\u0440\u043e \u0431\u0443\u0440\u0438\u0434\u0430\u043d","Dark Blue":"\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u043e\u0440\u0438\u043a","Dark Gray":"\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u0442\u0438\u0440\u0430","Dark Green":"\u0421\u0430\u0431\u0437\u0438 \u0442\u043e\u0440\u0438\u043a","Dark Orange":"\u041d\u043e\u0440\u0438\u043d\u04b7\u0438\u0438 \u0442\u0438\u0440\u0430","Dark Purple":"\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u0442\u0438\u0440\u0430","Dark Red":"\u0421\u0443\u0440\u0445\u0438 \u0442\u043e\u0440\u0438\u043a","Dark Turquoise":"\u0422\u0443\u0440\u043a\u0443\u0438 \u0442\u043e\u0440\u0438\u043a","Dark Yellow":"\u0417\u0430\u0440\u0434\u0438 \u0442\u0438\u0440\u0430","Dashed":"","Date/time":"\u0420\u04ef\u0437/\u0421\u043e\u0430\u0442","Decrease indent":"\u0410\u0431\u0437\u0430\u0441\u0442\u0440\u043e \u0445\u0443\u0440\u0434 \u043a\u0430\u0440\u0434\u0430\u043d","Default":"\u0411\u043e \u0442\u0430\u0440\u0437\u0438 \u0445\u043e\u043c\u0443\u0448\u04e3","Delete accordion":"","Delete column":"\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0441\u0443\u0442\u0443\u043d","Delete row":"\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0441\u0430\u0442\u0440","Delete table":"\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b","Dimensions":"\u0427\u0435\u043d\u0430\u043a\u04b3\u043e","Disc":"\u0414\u0438\u0441\u043a","Div":"","Document":"\u04b2\u0443\u04b7\u04b7\u0430\u0442","Dotted":"","Double":"","Drop an image here":"\u0421\u0443\u0440\u0430\u0442\u0440\u043e \u0438\u043d \u04b7\u043e \u043f\u0430\u0440\u0442\u043e\u0435\u0434","Dropped file type is not supported":"","Edit":"\u0422\u0430\u0493\u0439\u0438\u0440 \u0434\u043e\u0434\u0430\u043d","Embed":"\u041a\u043e\u0434 \u0431\u0430\u0440\u043e\u0438 \u0441\u0430\u0431\u0442","Emojis":"","Emojis...":"","Error":"\u0425\u0430\u0442\u043e\u0433\u04e3","Error: Form submit field collision.":"\u0425\u0430\u0442\u043e\u0433\u04e3: \u0414\u0430\u0440 \u043c\u0430\u0439\u0434\u043e\u043d\u04b3\u043e\u0438 \u0434\u043e\u0445\u0438\u043b\u043a\u0443\u043d\u0438 \u0437\u0438\u0434\u0434\u0438\u044f\u0442 \u0451\u0444\u0442 \u0448\u0443\u0434.","Error: No form element found.":"\u0425\u0430\u0442\u043e\u0433\u04e3: \u042f\u0433\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043c\u0430\u0439\u0434\u043e\u043d \u0451\u0444\u0442 \u043d\u0430\u0448\u0443\u0434.","Extended Latin":"\u041b\u043e\u0442\u0438\u043d\u0438\u0438 \u0432\u0430\u0441\u0435\u044a","Failed to initialize plugin: {0}":"\u0422\u0430\u043d\u0437\u0438\u043c \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u0443\u044f\u0441\u0441\u0430\u0440 \u043d\u0430\u0448\u0443\u0434: {0}","Failed to load plugin url: {0}":"\u0425\u0430\u0442\u043e\u0433\u0438\u0438 URL, \u0431\u043e\u0440\u043a\u0443\u043d\u04e3 \u043c\u0443\u044f\u0441\u0441\u0430\u0440 \u043d\u0430\u0448\u0443\u0434: {0}","Failed to load plugin: {0} from url {1}":"\u0411\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u043c\u043a\u043e\u043d\u043d\u043e\u043f\u0430\u0437\u0438\u0440 \u043d\u0435\u0441\u0442: {0} \u0430\u0437 URL {1}","Failed to upload image: {0}":"\u0421\u0443\u0440\u0430\u0442 \u0431\u043e\u0440 \u043a\u0430\u0440\u0434\u0430 \u043d\u0430\u0448\u0443\u0434: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0401\u0444\u0442\u0430\u043d","Find (if searchreplace plugin activated)":"\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u04b7\u043e\u0438 \u04b7\u0443\u0441\u0442\u0443\u04b7\u04ef \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)","Find and Replace":"","Find and replace...":"\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef \u0432\u0430 \u0438\u0432\u0430\u0437 ...","Find in selection":"","Find whole words only":"\u0422\u0430\u043d\u04b3\u043e \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e\u0440\u043e \u04b7\u0443\u0441\u0442\u0430\u043d","Flags":"\u041f\u0430\u0440\u0447\u0430\u043c\u04b3\u043e","Focus to contextual toolbar":"\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0441\u0431\u043e\u0431\u04b3\u043e\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u04e3","Focus to element path":"\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u0440\u043e\u04b3\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","Focus to menubar":"\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043c\u0435\u043d\u044e","Focus to toolbar":"\u0422\u0430\u0432\u0430\u04b7\u04b7\u04ef\u04b3 (\u0424\u043e\u043a\u0443\u0441) \u0431\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0441\u0431\u043e\u0431\u04b3\u043e","Font":"\u04b2\u0443\u0440\u0443\u0444","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"\u04b2\u0443\u0440\u0443\u0444\u04b3\u043e","Food and Drink":"\u0492\u0438\u0437\u043e \u0432\u0430 \u043d\u04ef\u0448\u043e\u043a\u04e3","Footer":"\u049a\u0438\u0441\u043c\u0438 \u043f\u043e\u0451\u043d\u04e3","Format":"\u0424\u043e\u0440\u043c\u0430\u0442","Format {0}":"","Formats":"\u0424\u0430\u0440\u043c\u0430\u0442\u04b3\u043e","Fullscreen":"\u041a\u0430\u043b\u043e\u043d \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0440\u0430\u0432\u0437\u0430\u043d\u0430 (\u044d\u043a\u0440\u0430\u043d)","G":"\u0421","General":"\u0423\u043c\u0443\u043c\u04e3","Gray":"\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433","Green":"\u0421\u0430\u0431\u0437","Green component":"","Groove":"","Handy Shortcuts":"\u0428\u043e\u0440\u0442\u043a\u043e\u0434\u0438 \u0434\u0430\u0441\u0442\u04e3","Header":"\u049a\u0438\u0441\u043c\u0438 \u0431\u043e\u043b\u043e\u04e3","Header cell":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430","Heading 1":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 1","Heading 2":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 2","Heading 3":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 3","Heading 4":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 4","Heading 5":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 5","Heading 6":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u0438 6","Headings":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430\u04b3\u043e","Height":"\u0411\u0430\u043b\u0430\u043d\u0434\u04e3","Help":"\u0401\u0440\u04e3","Hex color code":"","Hidden":"","Horizontal align":"","Horizontal line":"\u0425\u0430\u0442\u0438 \u0443\u0444\u0443\u049b\u04e3","Horizontal space":"\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0443\u0444\u0443\u049b\u04e3","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"","Image list":"\u0420\u04ef\u0439\u0445\u0430\u0442\u0438 c\u0443\u0440\u0430\u0442\u04b3\u043e","Image title":"\u0423\u043d\u0432\u043e\u043d\u0438 \u0442\u0430\u0441\u0432\u0438\u0440","Image...":"\u0421\u0443\u0440\u0430\u0442 ...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0410\u0431\u0437\u0430\u0441\u0442\u0440\u043e \u0432\u0430\u0441\u0435\u044a \u043a\u0430\u0440\u0434\u0430\u043d","Inline":"\u0414\u0430\u0440 \u044f\u043a \u0445\u0430\u0442","Insert":"\u0421\u0430\u0431\u0442 \u043a\u0430\u0440\u0434\u0430\u043d","Insert Template":"","Insert accordion":"","Insert column after":"\u0421\u0443\u0442\u0443\u043d\u0440\u043e \u0430\u0437 \u0442\u0430\u0440\u0430\u0444\u0438 \u0440\u043e\u0441\u0442 \u0438\u043b\u043e\u0432\u0430 \u043a\u0430\u0440\u0434\u0430\u043d","Insert column before":"\u0421\u0443\u0442\u0443\u043d\u0440\u043e \u0430\u0437 \u0442\u0430\u0440\u0430\u0444\u0438 \u0447\u0430\u043f \u0438\u043b\u043e\u0432\u0430 \u043a\u0430\u0440\u0434\u0430\u043d","Insert date/time":"\u0412\u043e\u0440\u0438\u0434\u0438 \u0420\u04ef\u0437/\u0421\u043e\u0430\u0442","Insert image":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0441\u0443\u0440\u0430\u0442","Insert link (if link plugin activated)":"\u0412\u043e\u0440\u0438\u0434 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434\u0430\u043a (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434 \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)","Insert row after":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0441\u0430\u0442\u0440\u0438 \u0445\u043e\u043b\u04e3 \u0430\u0437 \u043f\u043e\u0451\u043d","Insert row before":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0441\u0430\u0442\u0440\u0438 \u0445\u043e\u043b\u04e3 \u0430\u0437 \u0431\u043e\u043b\u043e","Insert table":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b","Insert template...":"\u0428\u0430\u0431\u043b\u043e\u043d \u0433\u0443\u0437\u043e\u0440\u0435\u0434 ...","Insert video":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0432\u0438\u0434\u0435\u043e","Insert/Edit code sample":"\u0418\u043b\u043e\u0432\u0430/\u0442\u0430\u0493\u0439\u0438\u0440 \u0434\u043e\u0434\u0430\u043d\u0438 \u043d\u0430\u043c\u0443\u043d\u0430\u0438 \u043a\u043e\u0434","Insert/edit image":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438/\u0442\u0430\u0493\u0439\u0438\u0440\u0434\u043e\u0434\u0430\u043d\u0438 \u0441\u0443\u0440\u0430\u0442","Insert/edit link":"\u0412\u043e\u0440\u0438\u0434/\u0442\u0430\u04b3\u0440\u0438\u0440 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434","Insert/edit media":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d/\u0442\u0430\u04b3\u0440\u0438\u0440 \u0442\u0430\u0493\u0439\u0438\u0440\u0434\u043e\u0434\u0430\u043d\u0438 \u043c\u0435\u0434\u0438\u0430","Insert/edit video":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438/\u0442\u0430\u0493\u0439\u0438\u0440\u0434\u043e\u0434\u0430\u043d\u0438 \u0432\u0438\u0434\u0435\u043e","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u0418\u0442\u0430\u043b\u0438\u043a","Justify":"\u0410\u0437 \u04b3\u0430\u0440 \u0434\u0443 \u0442\u0430\u0440\u0430\u0444 \u0440\u043e\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d","Keyboard Navigation":"\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u0441\u0438\u044f\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430","Language":"\u0417\u0430\u0431\u043e\u043d","Learn more...":"\u0411\u0435\u0448\u0442\u0430\u0440 \u0445\u043e\u043d\u0434\u0430\u043d...","Left":"\u0410\u0437 \u0442\u0430\u0440\u0430\u0444\u0438 \u0447\u0430\u043f","Left to right":"\u0421\u0430\u043c\u0442 \u0430\u0437 \u0447\u0430\u043f \u0431\u0430 \u0440\u043e\u0441\u0442","Light Blue":"\u041a\u0430\u0431\u0443\u0434\u0438 \u0445\u0438\u0440\u0430","Light Gray":"\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u0445\u0438\u0440\u0430","Light Green":"\u0421\u0430\u0431\u0437\u0438 \u0445\u0438\u0440\u0430","Light Purple":"\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u0445\u0438\u0440\u0430","Light Red":"\u0421\u0443\u0440\u0445\u0438 \u0445\u0438\u0440\u0430","Light Yellow":"\u0417\u0430\u0440\u0434\u0438 \u0445\u0438\u0440\u0430","Line height":"","Link list":"\u0420\u04ef\u0439\u0445\u0430\u0442\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434\u04b3\u043e","Link...":"\u041f\u0430\u0439\u0432\u0430\u043d\u0434...","List Properties":"","List properties...":"","Loading emojis...":"","Loading...":"","Lower Alpha":"\u04b2\u0430\u0440\u0444\u04b3\u043e\u0438 \u043b\u043e\u0442\u0438\u043d\u0438\u0438 \u0445\u0443\u0440\u0434","Lower Greek":"\u04b2\u0430\u0440\u0444\u04b3\u043e\u0438 \u044e\u043d\u043e\u043d\u0438\u0438 \u0445\u0443\u0440\u0434","Lower Roman":"\u04b2\u0430\u0440\u0444\u04b3\u043e\u0438 \u0440\u0438\u043c\u0438\u0438 \u0445\u0443\u0440\u0434","Match case":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0440\u043e \u0431\u0430 \u0438\u043d\u043e\u0431\u0430\u0442 \u0433\u0438\u0440\u0438\u0444\u0442\u0430\u043d","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u04e3","Media poster (Image URL)":"\u042d\u044a\u043b\u043e\u043d\u0438 \u0440\u0430\u0441\u043e\u043d\u0430 (URL\u0438 \u0441\u0443\u0440\u0430\u0442)","Media...":"\u041c\u0435\u0434\u0438\u0430..","Medium Blue":"\u041a\u0430\u0431\u0443\u0434\u0438 \u043c\u0438\u0451\u043d\u0430","Medium Gray":"\u0425\u043e\u043a\u0438\u0441\u0442\u0430\u0440\u0440\u0430\u043d\u0433\u0438 \u043c\u0438\u0451\u043d\u0430","Medium Purple":"\u0410\u0440\u0493\u0443\u0432\u043e\u043d\u0438 \u043c\u0438\u0451\u043d\u0430","Merge cells":"\u042f\u043a\u04b7\u043e\u044f \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043c\u0430\u0439\u0434\u043e\u043d\u0447\u0430\u04b3\u043e","Middle":"\u0410\u0437 \u0431\u0430\u0439\u043d","Midnight Blue":"\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u0438\u0440\u0430","More...":"\u0411\u0435\u0448\u0442\u0430\u0440...","Name":"\u041d\u043e\u043c","Navy Blue":"\u041a\u0430\u0431\u0443\u0434\u0438 \u0442\u0438\u0440\u0430","New document":"\u04b2\u0443\u04b7\u04b7\u0430\u0442\u0438 \u043d\u0430\u0432","New window":"\u0414\u0430\u0440 \u0440\u0430\u0432\u0437\u0430\u043d\u0430\u0438 \u043d\u0430\u0432","Next":"\u0411\u0430\u044a\u0434\u04e3","No":"\u041d\u0435","No alignment":"","No color":"\u0411\u0435 \u0440\u0430\u043d\u0433","Nonbreaking space":"\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0431\u0435\u043a\u0430\u043d\u0434\u0430\u0448\u0430\u0432\u04e3","None":"\u041d\u0435","Numbered list":"\u0420\u0443\u0439\u0445\u0430\u0442\u0438 \u0431\u043e \u0442\u0430\u0440\u0442\u0438\u0431","OR":"\u0401","Objects":"\u041e\u0431\u044a\u0435\u043a\u0442\u04b3\u043e","Ok":"\u041e\u043a","Open help dialog":"\u041e\u0438\u043d\u0430\u0438 \u043a\u04ef\u043c\u0430\u043a\u0440\u043e \u043a\u0443\u0448\u043e\u0435\u0434","Open link":"","Open link in...":"\u041f\u0430\u0439\u0432\u0430\u043d\u0434\u0440\u043e \u043a\u0443\u0448\u043e\u0435\u0434 \u0434\u0430\u0440 ...","Open popup menu for split buttons":"","Orange":"\u041d\u043e\u0440\u0438\u043d\u04b7\u04e3","Outset":"","Page break":"\u0428\u0438\u043a\u0430\u0441\u0442\u0438 \u0432\u0430\u0440\u0430\u049b","Paragraph":"\u0410\u0431\u0437\u0430\u0441\u0442","Paste":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d","Paste as text":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d \u04b3\u0430\u043c\u0447\u0443 \u043c\u0430\u0442\u043d","Paste column after":"","Paste column before":"","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0422\u043e \u043e\u043d \u0437\u0430\u043c\u043e\u043d\u0435, \u043a\u0438 \u0438\u043d \u0445\u043e\u043c\u0443\u0448 \u0430\u0441\u0442, \u04b3\u0430\u043c\u0447\u0443\u043d \u043c\u0430\u043d\u0442 \u0432\u043e\u0440\u0438\u0434 \u043a\u0443\u043d\u0435\u0434.","Paste or type a link":"\u041f\u0430\u0439\u0432\u0430\u043d\u0434\u0440\u043e \u043c\u043e\u043d\u0435\u0434 \u0451 \u043d\u0430\u0432\u0438\u0441\u0435\u0434","Paste row after":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0441\u0430\u0442\u0440 \u0434\u0430\u0440 \u043f\u043e\u0451\u043d","Paste row before":"\u0413\u0443\u0437\u043e\u0448\u0442\u0430\u043d\u0438 \u0441\u0430\u0442\u0440 \u0434\u0430\u0440 \u0431\u043e\u043b\u043e","Paste your embed code below:":"\u041a\u043e\u0434\u0438 \u0445\u0443\u0434\u0440\u043e \u0434\u0430\u0440 \u043f\u043e\u0451\u043d \u0433\u0443\u0437\u043e\u0440\u0435\u0434:","People":"\u041c\u0430\u0440\u0434\u0443\u043c","Plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e","Plugins installed ({0}):":"\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e\u0438 \u043d\u0430\u0441\u0431\u0448\u0443\u0434\u0430 ({0}):","Powered by {0}":"\u041d\u0435\u0440\u04ef\u043c\u0430\u043d\u0434\u0448\u0443\u0434\u0430 \u0430\u0437 \u04b7\u043e\u043d\u0438\u0431\u0438 {0}","Pre":"","Preferences":"\u0410\u0444\u0437\u0430\u043b\u0438\u044f\u0442\u04b3\u043e","Preformatted":"\u0411\u0430\u0440\u043e\u0431\u0430\u0440 \u043a\u0430\u0440\u0434\u0430 \u0448\u0443\u0434\u0430","Premium plugins:":"\u041f\u043b\u0430\u0433\u0438\u043d\u04b3\u043e\u0438 \u043f\u0440\u0435\u043c\u0438\u0443\u043c:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u041f\u0435\u0448\u043d\u0430\u043c\u043e\u0438\u0448","Previous":"\u041f\u0435\u0448\u0442\u0430\u0440","Print":"","Print...":"\u0427\u043e\u043f \u043a\u0430\u0440\u0434\u0430\u043d...","Purple":"\u0410\u0440\u0493\u0443\u0432\u043e\u043d","Quotations":"\u0418\u049b\u0442\u0438\u0431\u043e\u0441\u04b3\u043e","R":"\u0421","Range 0 to 255":"","Red":"\u0421\u0443\u0440\u0445","Red component":"","Redo":"\u0411\u0435\u043a\u043e\u0440 \u043a\u0430\u0440\u0434\u0430\u043d","Remove":"","Remove color":"\u0420\u0430\u043d\u0433\u0440\u043e \u043d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d","Remove link":"\u041d\u0435\u0441\u0442 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043f\u0430\u0439\u0432\u0430\u043d\u0434","Replace":"\u0418\u0432\u0430\u0437 \u043a\u0430\u0440\u0434\u0430\u043d","Replace all":"\u0418\u0432\u0430\u0437 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u04b3\u0430\u043c\u0430","Replace with":"\u0418\u0432\u0430\u0437 \u043a\u0430\u0440\u0434\u0430\u043d \u0431\u043e","Resize":"\u0422\u0430\u0493\u0439\u0438\u0440\u0438 \u0430\u043d\u0434\u043e\u0437\u0430","Restore last draft":"\u0411\u0430\u0440\u049b\u0430\u0440\u043e\u0440\u043a\u0443\u043d\u0438\u0438 \u043b\u043e\u0438\u04b3\u0430\u0438 \u043e\u0445\u0438\u0440\u043e\u043d","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u041c\u0438\u043d\u0442\u0430\u049b\u0430\u0438 \u0431\u043e\u0439\u0438 \u043c\u0430\u0442\u043d. \u0411\u0430\u0440\u043e\u0438 \u043a\u04ef\u043c\u0430\u043a ALT-0 -\u0440\u043e \u043f\u0430\u0445\u0448 \u043a\u0443\u043d\u0435\u0434.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u041c\u0430\u0439\u0434\u043e\u043d\u0438 \u043c\u0430\u0442\u043d\u04e3. \u0422\u0443\u0433\u043c\u0430\u04b3\u043e\u0438 ALT-F9-\u0440\u043e \u043f\u0430\u0445\u0448 \u043a\u0443\u043d\u0435\u0434, \u0430\u0433\u0430\u0440 \u0445\u043e\u04b3\u0435\u0434 \u043c\u0435\u043d\u044e\u0440\u043e \u0444\u0430\u0440\u0451\u0434 \u043a\u0430\u0440\u0434\u0430\u043d, ALT-F10 \u0431\u0430\u0441\u0442\u0430\u0438 \u0430\u0441\u0431\u043e\u0431\u04b3\u043e, ALT-0 \u0431\u0430\u0440\u043e\u0438 \u0444\u0430\u0440\u0451\u0434 \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u0451\u0440\u0434\u0430\u043c.","Ridge":"","Right":"\u0410\u0437 \u0442\u0430\u0440\u0430\u0444\u0438 \u0440\u043e\u0441\u0442","Right to left":"\u0421\u0430\u043c\u0442 \u0430\u0437 \u0440\u043e\u0441\u0442 \u0431\u0430 \u0447\u0430\u043f","Row":"\u0421\u0430\u0442\u0440","Row clipboard actions":"","Row group":"\u0413\u0443\u0440\u04ef\u04b3\u0438 \u0441\u0430\u0442\u0440\u04b3\u043e","Row header":"","Row properties":"\u0422\u0430\u043d\u0437\u0438\u043c\u043e\u0442\u04b3\u043e\u0438 \u0441\u0430\u0442\u0440","Row type":"\u041d\u0430\u043c\u0443\u0434\u0438 \u0441\u0430\u0442\u0440","Rows":"\u0421\u0430\u0442\u0440\u04b3\u043e","Save":"\u0421\u0430\u0431\u0442 \u043a\u0430\u0440\u0434\u0430\u043d","Save (if save plugin activated)":"\u0421\u0430\u0431\u0442 \u043a\u0430\u0440\u0434\u0430\u043d (\u0430\u0433\u0430\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0438 \u0441\u0430\u0431\u0442 \u0444\u0430\u044a\u043e\u043b \u0431\u043e\u0448\u0430\u0434)","Scope":"","Search":"\u04b6\u0443\u0441\u0442\u0443\u04b7\u04ef","Select all":"\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u0438 \u043a\u0443\u043b\u043b\u0438","Select...":"\u0418\u043d\u0442\u0438\u0445\u043e\u0431 \u043a\u0443\u043d\u0435\u0434 ...","Selection":"\u0418\u043d\u0442\u0438\u0445\u043e\u0431\u04b3\u043e","Shortcut":"\u0428\u043e\u0440\u0442\u043a\u043e\u0434","Show blocks":"\u041d\u0438\u0448\u043e\u043d \u0434\u043e\u0434\u0430\u043d\u0438 \u0431\u043b\u043e\u043a\u04b3\u043e","Show caption":"\u041d\u0430\u043c\u043e\u0438\u0448\u0438 \u0441\u0430\u0440\u043b\u0430\u0432\u04b3\u0430","Show invisible characters":"\u041d\u0438\u0448\u043e\u043d \u0434\u043e\u0434\u0430\u043d\u0438 \u0430\u043b\u043e\u043c\u0430\u0442\u04b3\u043e\u0438 \u043f\u0438\u043d\u04b3\u043e\u043d\u04e3","Size":"\u0410\u043d\u0434\u043e\u0437\u0430","Solid":"","Source":"\u041c\u0430\u043d\u0431\u0430","Source code":"\u0421\u0430\u0440\u0447\u0430\u0448\u043c\u0430\u0438 \u043a\u043e\u0434","Special Character":"","Special character...":"\u0425\u0443\u0441\u0443\u0441\u0438\u044f\u0442\u0438 \u043c\u0430\u0445\u0441\u0443\u0441 ...","Split cell":"\u0422\u0430\u049b\u0441\u0438\u043c \u043a\u0430\u0440\u0434\u0430\u043d\u0438 \u043c\u0430\u0439\u0434\u043e\u043d\u0447\u0430","Square":"\u0427\u043e\u0440\u043a\u0443\u043d\u04b7\u0430","Start list at number":"","Strikethrough":"\u0410\u0437 \u043c\u043e\u0431\u0430\u0439\u043d\u0430\u0448 \u0445\u0430\u0442 \u043a\u0430\u0448\u0438\u0434\u0430\u043d","Style":"\u041d\u0430\u043c\u0443\u0434","Subscript":"\u0410\u0437 \u0445\u0430\u0442 \u043f\u043e\u0451\u043d\u0442\u0430\u0440","Superscript":"\u0410\u0437 \u0445\u0430\u0442 \u0431\u043e\u043b\u043e\u0442\u0430\u0440","Switch to or from fullscreen mode":"\u0411\u0430 \u04b3\u043e\u043b\u0430\u0442\u0438 \u043f\u0443\u0440\u0440\u0430\u0438 \u0440\u0430\u0432\u0437\u0430\u043d\u0430 \u0433\u0443\u0437\u0430\u0440\u0435\u0434","Symbols":"\u0410\u043b\u043e\u043c\u0430\u0442\u04b3\u043e","System Font":"\u04b2\u0430\u0440\u0444\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430","Table":"\u04b6\u0430\u0434\u0432\u0430\u043b","Table caption":"","Table properties":"\u0422\u0430\u043d\u0437\u0438\u043c\u043e\u0442\u0438 \u04b7\u0430\u0434\u0432\u0430\u043b","Table styles":"","Template":"\u041d\u0430\u043c\u0443\u043d\u0430","Templates":"\u041d\u0430\u043c\u0443\u043d\u0430\u04b3\u043e","Text":"\u041c\u0430\u0442\u043d","Text color":"\u0420\u0430\u043d\u0433\u0438 \u043c\u0430\u0442\u043d","Text color {0}":"","Text to display":"\u041c\u0430\u0442\u043d \u0431\u0430\u0440\u043e\u0438 \u043d\u0430\u043c\u043e\u0438\u0448","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL-\u0438 \u0432\u043e\u0440\u0438\u0434\u043a\u0430\u0440\u0434\u0430 \u043f\u043e\u0447\u0442\u0430\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u0438 \u0434\u0443\u0440\u0443\u0441\u0442 \u043c\u0435\u0431\u043e\u0448\u0430\u0434. \u0428\u0443\u043c\u043e \u043c\u0435\u0445\u043e\u04b3\u0435\u0434 \u0431\u0430 \u04ef \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0438 \xabmailto:\xbb \u0438\u043b\u043e\u0432\u0430 \u043a\u0443\u043d\u0435\u0434?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL-\u0438 \u0432\u043e\u0440\u0438\u0434\u043a\u0430\u0440\u0434\u0430 \u043f\u0430\u0439\u0432\u0430\u043d\u0434\u0438 \u0431\u0435\u0440\u0443\u043d\u0430 \u043c\u0435\u0431\u043e\u0448\u0430\u0434. \u0428\u0443\u043c\u043e \u043c\u0435\u0445\u043e\u04b3\u0435\u0434 \u0431\u0430 \u04ef \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0438 \xabhttp://\xbb \u0438\u043b\u043e\u0432\u0430 \u043a\u0443\u043d\u0435\u0434?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"","Title":"\u0421\u0430\u0440\u043b\u0430\u0432\u04b3\u0430","To open the popup, press Shift+Enter":"\u0411\u0430\u0440\u043e\u0438 \u043a\u0443\u0448\u043e\u0434\u0430\u043d\u0438 \u043f\u043e\u043f-\u0430\u043f, Shift + Enter\u0440\u043e \u043f\u0430\u0445\u0448 \u043a\u0443\u043d\u0435\u0434","Toggle accordion":"","Tools":"\u0410\u0441\u0431\u043e\u0431\u04b3\u043e","Top":"\u0410\u0437 \u0431\u043e\u043b\u043e","Travel and Places":"\u0421\u0430\u0444\u0430\u0440 \u0432\u0430 \u04b7\u043e\u0439\u04b3\u043e","Turquoise":"\u0422\u0443\u0440\u043a\u0443","Underline":"\u0414\u0430\u0440 \u0442\u0430\u0433\u0430\u0448 \u0445\u0430\u0442 \u043a\u0430\u0448\u0438\u0434\u0430\u043d","Undo":"\u0411\u043e\u0437 \u0433\u0430\u0440\u0434\u043e\u043d\u0438\u0434\u0430\u043d","Upload":"\u0411\u043e\u0440\u043a\u0443\u043d\u04e3","Uploading image":"","Upper Alpha":"\u04b2\u0430\u0440\u0444\u04b3\u043e\u0438 \u043a\u0430\u043b\u043e\u043d\u0438 \u043b\u043e\u0442\u0438\u043d\u04e3","Upper Roman":"\u04b2\u0430\u0440\u0444\u04b3\u043e\u0438 \u043a\u0430\u043b\u043e\u043d\u0438 \u0440\u0438\u043c\u04e3","Url":"","User Defined":"\u041a\u043e\u0440\u0431\u0430\u0440 \u043c\u0443\u0430\u0439\u044f\u043d \u043a\u0430\u0440\u0434\u0430","Valid":"\u0414\u0443\u0440\u0443\u0441\u0442","Version":"\u0412\u0435\u0440\u0441\u0438\u044f","Vertical align":"","Vertical space":"\u0424\u043e\u0441\u0438\u043b\u0430\u0438 \u0430\u043c\u0443\u0434\u04e3 (\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u04e3)","View":"\u041d\u0430\u043c\u0443\u0434","Visual aids":"\u041a\u0443\u043c\u043c\u0430\u043a\u0438 \u0430\u0451\u043d\u04e3","Warn":"\u041e\u0433\u043e\u04b3\u04e3","White":"\u0421\u0430\u0444\u0435\u0434","Width":"\u041f\u0430\u04b3\u043c\u04e3","Word count":"\u0428\u0443\u043c\u043e\u0440\u0430\u0438 \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e","Words":"\u041a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e","Words: {0}":"\u041a\u043b\u0438\u043c\u0430\u04b3\u043e: {0}","Yellow":"\u0417\u0430\u0440\u0434","Yes":"\u04b2a","You are using {0}":"\u0428\u0443\u043c\u043e {0} -\u0440\u043e \u0438\u0441\u0442\u0438\u0444\u043e\u0434\u0430 \u043c\u0435\u0431\u0430\u0440\u0435\u0434","You have unsaved changes are you sure you want to navigate away?":"\u0428\u0443\u043c\u043e \u0442\u0430\u0493\u0438\u0440\u043e\u0442\u04b3\u043e\u0438 \u0441\u0430\u0431\u0442 \u043d\u0430\u0448\u0443\u0434\u0430 \u0434\u043e\u0440\u0435\u0434.\n\u0428\u0443\u043c\u043e \u043c\u0443\u0442\u043c\u0430\u0438\u043d \u04b3\u0430\u0441\u0442\u0435\u0434, \u043a\u0438 \u0431\u0430 \u0434\u0438\u0433\u0430\u0440 \u049b\u0438\u0441\u043c \u0433\u0443\u0437\u0430\u0440\u0435\u0434?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0411\u0430\u0440\u0438 \u0448\u0443\u0441\u0445\u0430\u0431\u0430\u0440\u0434\u043e\u0440\u0438 \u043a\u0430\u0440\u0434\u0430\u043d Ctrl+X/C/V \u0438\u0441\u0442\u0438\u0444\u043e\u0434\u0430 \u043a\u0443\u043d\u0435\u0434","alignment":"\u041c\u0443\u0442\u043e\u0431\u0438\u049b\u043a\u0443\u043d\u04e3","austral sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0432\u0441\u0442\u0440\u0430\u043b","cedi sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0441\u0435\u0434\u0438","colon sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043a\u043e\u043b\u043e\u043d","cruzeiro sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 cruzeiro","currency sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0441\u044a\u043e\u0440","dollar sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u043e\u043b\u043b\u0430\u0440","dong sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u043e\u043d\u0433","drachma sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u0440\u0430\u0445\u043c\u0430","euro-currency sign":"\u0435\u0432\u0440\u043e \u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0430\u0441\u044a\u043e\u0440","example":"\u043d\u0430\u043c\u0443\u043d\u0430","formatting":"\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043d\u04e3","french franc sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0444\u0440\u0430\u043d\u043a\u0438 \u0444\u0430\u0440\u043e\u043d\u0441\u0430\u0432\u04e3","german penny symbol":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0434\u0438\u043d\u043e\u0440\u0438 \u041e\u043b\u043c\u043e\u043d","guarani sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0433\u0443\u0430\u0440\u0430\u043d\u0430","history":"\u0442\u0430\u044a\u0440\u0438\u0445","hryvnia sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0433\u0440\u0438\u0432\u043d\u0430","indentation":"\u0444\u043e\u0441\u0438\u043b\u0430","indian rupee sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u043f\u0438\u0438 \u04b3\u0438\u043d\u0434\u04e3","kip sign":"\u043d\u0438\u0448\u043e\u043d\u0438 \u043a\u0438\u043f","lira sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0440\u0430","livre tournois sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0432\u0440 \u0442\u0443\u0440\u043d\u043e\u0441","manat sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0430\u043d\u0430\u0442","mill sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0438\u043b","naira sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043d\u0430\u0438\u0440\u0430","new sheqel sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0448\u0435\u043a\u0435\u043b\u0438 \u043d\u0430\u0432","nordic mark sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043c\u0430\u0440\u043a\u0438 \u043d\u043e\u0440\u0432\u0435\u0433\u0438","peseta sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043f\u0435\u0441\u0435\u0442\u0430","peso sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043f\u0435\u0441\u043e","ruble sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u0431\u043b","rupee sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0440\u0443\u043f\u0438","spesmilo sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e","styles":"\u0443\u0441\u043b\u0443\u0431\u04b3\u043e","tenge sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0442\u0435\u043d\u0433\u0435","tugrik sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0442\u0443\u0433\u0440\u0438\u043a","turkish lira sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u043b\u0438\u0440\u0430\u0438 \u0442\u0443\u0440\u043a\u04e3","won sign":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0432\u043e\u043d","yen character":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0439\u0435\u043d","yen/yuan character variant one":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u0439\u0435\u043d/\u044e\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0438 \u044f\u043a\u0443\u043c","yuan character":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u044e\u0430\u043d","yuan character, in hong kong and taiwan":"\u0430\u043b\u043e\u043c\u0430\u0442\u0438 \u044e\u0430\u043d, \u0434\u0430\u0440 \u0425\u043e\u043d\u0433 \u041a\u043e\u043d\u0433 \u0432\u0430 \u0422\u0430\u0439\u0432\u0430\u043d","{0} characters":"{0} \u0430\u043b\u043e\u043c\u0430\u0442\u04b3\u043e","{0} columns, {1} rows":"","{0} words":"{0} \u043a\u0430\u043b\u0438\u043c\u0430\u04b3\u043e"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/th_TH.js b/staticfiles/tinymce/langs/th_TH.js new file mode 100644 index 0000000..b0636f5 --- /dev/null +++ b/staticfiles/tinymce/langs/th_TH.js @@ -0,0 +1 @@ +tinymce.addI18n("th_TH",{"#":"","Accessibility":"\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0e41\u0e2d\u0e4a\u0e04\u0e0a\u0e31\u0e48\u0e19","Activity":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","Address":"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48","Advanced":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","Align":"\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07","Align center":"\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07","Align left":"\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e0b\u0e49\u0e32\u0e22","Align right":"\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e02\u0e27\u0e32","Alignment":"\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27","Alignment {0}":"","All":"\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14","Alternative description":"\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e17\u0e32\u0e07\u0e40\u0e25\u0e37\u0e2d\u0e01","Alternative source":"\u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07","Alternative source URL":"URL \u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07","Anchor":"","Anchor...":"\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14...","Anchors":"\u0e08\u0e38\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e42\u0e22\u0e07 (Anchor)","Animals and Nature":"\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e41\u0e25\u0e30\u0e18\u0e23\u0e23\u0e21\u0e0a\u0e32\u0e15\u0e34","Arrows":"\u0e25\u0e39\u0e01\u0e28\u0e23","B":"","Background color":"\u0e2a\u0e35\u0e09\u0e32\u0e01\u0e2b\u0e25\u0e31\u0e07","Background color {0}":"","Black":"\u0e14\u0e33","Block":"\u0e1a\u0e25\u0e47\u0e2d\u0e01","Block {0}":"","Blockquote":"blockquote","Blocks":"\u0e1a\u0e25\u0e4a\u0e2d\u0e04","Blue":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19","Blue component":"","Body":"\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","Bold":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32","Border":"\u0e02\u0e2d\u0e1a","Border color":"\u0e2a\u0e35\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a","Border style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a","Border width":"\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a","Bottom":"\u0e25\u0e48\u0e32\u0e07","Browse files":"","Browse for an image":"\u0e40\u0e23\u0e35\u0e22\u0e01\u0e14\u0e39\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Browse links":"","Bullet list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e22\u0e48\u0e2d\u0e22","Cancel":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01","Caption":"\u0e1b\u0e49\u0e32\u0e22\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22","Cell":"\u0e0a\u0e48\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c","Cell padding":"\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e20\u0e32\u0e22\u0e43\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c","Cell properties":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c","Cell spacing":"\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c","Cell styles":"\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30\u0e0a\u0e48\u0e2d\u0e07","Cell type":"\u0e1b\u0e23\u0e30\u0e40\u0e20\u0e17\u0e0a\u0e48\u0e2d\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07","Center":"\u0e01\u0e25\u0e32\u0e07","Characters":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","Characters (no spaces)":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 (\u0e44\u0e21\u0e48\u0e21\u0e35\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07)","Circle":"\u0e27\u0e07\u0e01\u0e25\u0e21","Class":"\u0e0a\u0e31\u0e49\u0e19","Clear formatting":"\u0e25\u0e49\u0e32\u0e07\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","Close":"\u0e1b\u0e34\u0e14","Code":"\u0e23\u0e2b\u0e31\u0e2a","Code sample...":"\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14...","Code view":"\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07\u0e42\u0e04\u0e49\u0e14","Color Picker":"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35","Color swatch":"\u0e41\u0e16\u0e1a\u0e2a\u0e35","Cols":"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Column":"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Column clipboard actions":"","Column group":"\u0e01\u0e25\u0e38\u0e48\u0e21\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Column header":"","Constrain proportions":"\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e02\u0e19\u0e32\u0e14\u0e43\u0e2b\u0e49\u0e04\u0e07\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19","Copy":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01","Copy column":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Copy row":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e41\u0e16\u0e27","Could not find the specified string.":"\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2a\u0e15\u0e23\u0e34\u0e07\u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38","Could not load emojis":"","Count":"\u0e19\u0e31\u0e1a","Currency":"\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19","Current window":"\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19","Custom color":"\u0e2a\u0e35\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07","Custom...":"\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07...","Cut":"\u0e15\u0e31\u0e14","Cut column":"\u0e15\u0e31\u0e14\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Cut row":"\u0e15\u0e31\u0e14\u0e41\u0e16\u0e27","Dark Blue":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21","Dark Gray":"\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e40\u0e02\u0e49\u0e21","Dark Green":"\u0e40\u0e02\u0e35\u0e22\u0e27\u0e40\u0e02\u0e49\u0e21","Dark Orange":"\u0e2a\u0e49\u0e21\u0e40\u0e02\u0e49\u0e21","Dark Purple":"\u0e21\u0e48\u0e27\u0e07\u0e40\u0e02\u0e49\u0e21","Dark Red":"\u0e41\u0e14\u0e07\u0e40\u0e02\u0e49\u0e21","Dark Turquoise":"\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e04\u0e23\u0e32\u0e21\u0e40\u0e02\u0e49\u0e21","Dark Yellow":"\u0e2a\u0e35\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e40\u0e02\u0e49\u0e21","Dashed":"\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e35\u0e14","Date/time":"\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48/\u0e40\u0e27\u0e25\u0e32","Decrease indent":"\u0e25\u0e14\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07","Default":"\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e44\u0e27\u0e49","Delete accordion":"","Delete column":"\u0e25\u0e1a\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","Delete row":"\u0e25\u0e1a\u0e41\u0e16\u0e27","Delete table":"\u0e25\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07","Dimensions":"\u0e21\u0e34\u0e15\u0e34","Disc":"\u0e01\u0e25\u0e21\u0e41\u0e1a\u0e19","Div":"div","Document":"\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","Dotted":"\u0e40\u0e2a\u0e49\u0e19\u0e1b\u0e23\u0e30","Double":"\u0e40\u0e2a\u0e49\u0e19\u0e04\u0e39\u0e48","Drop an image here":"\u0e27\u0e32\u0e07\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48","Dropped file type is not supported":"","Edit":"\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e41\u0e01\u0e49\u0e44\u0e02","Embed":"\u0e1d\u0e31\u0e07","Emojis":"\u0e2d\u0e34\u0e42\u0e21\u0e08\u0e34","Emojis...":"\u0e2d\u0e34\u0e42\u0e21\u0e08\u0e34...","Error":"\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14","Error: Form submit field collision.":"\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e0a\u0e48\u0e2d\u0e07\u0e2a\u0e48\u0e07\u0e41\u0e1a\u0e1a\u0e1f\u0e2d\u0e23\u0e4c\u0e21\u0e02\u0e31\u0e14\u0e41\u0e22\u0e49\u0e07\u0e01\u0e31\u0e19","Error: No form element found.":"\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e02\u0e2d\u0e07\u0e1f\u0e2d\u0e23\u0e4c\u0e21","Extended Latin":"\u0e20\u0e32\u0e29\u0e32\u0e25\u0e32\u0e15\u0e34\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22","Failed to initialize plugin: {0}":"\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}","Failed to load plugin url: {0}":"\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14 url \u0e02\u0e2d\u0e07\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}","Failed to load plugin: {0} from url {1}":"\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0} \u0e08\u0e32\u0e01 url {1}","Failed to upload image: {0}":"\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e: {0}","File":"\u0e44\u0e1f\u0e25\u0e4c","Find":"\u0e04\u0e49\u0e19\u0e2b\u0e32","Find (if searchreplace plugin activated)":"\u0e04\u0e49\u0e19\u0e2b\u0e32 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19 searchreplace)","Find and Replace":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48","Find and replace...":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48...","Find in selection":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e40\u0e25\u0e37\u0e2d\u0e01","Find whole words only":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e04\u0e33\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19","Flags":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22","Focus to contextual toolbar":"\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e15\u0e32\u0e21\u0e1a\u0e23\u0e34\u0e1a\u0e17","Focus to element path":"\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a","Focus to menubar":"\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e21\u0e19\u0e39","Focus to toolbar":"\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d","Font":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","Font size {0}":"","Font sizes":"","Font {0}":"","Fonts":"\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23","Food and Drink":"\u0e2d\u0e32\u0e2b\u0e32\u0e23\u0e41\u0e25\u0e30\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e14\u0e37\u0e48\u0e21","Footer":"\u0e43\u0e15\u0e49\u0e15\u0e32\u0e23\u0e32\u0e07","Format":"\u0e41\u0e1a\u0e1a","Format {0}":"","Formats":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","Fullscreen":"\u0e40\u0e15\u0e47\u0e21\u0e08\u0e2d","G":"","General":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","Gray":"\u0e40\u0e17\u0e32","Green":"\u0e40\u0e02\u0e35\u0e22\u0e27","Green component":"","Groove":"","Handy Shortcuts":"\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14\u0e17\u0e35\u0e48\u0e21\u0e35\u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e19\u0e4c","Header":"\u0e2b\u0e31\u0e27\u0e15\u0e32\u0e23\u0e32\u0e07","Header cell":"\u0e40\u0e0b\u0e25\u0e25\u0e4c\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27","Heading 1":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 1","Heading 2":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 2","Heading 3":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 3","Heading 4":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 4","Heading 5":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 5","Heading 6":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 6","Headings":"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07","Height":"\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07","Help":"\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","Hex color code":"","Hidden":"\u0e0b\u0e48\u0e2d\u0e19","Horizontal align":"\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","Horizontal line":"\u0e40\u0e2a\u0e49\u0e19\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","Horizontal space":"\u0e17\u0e35\u0e48\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","ID":"","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"","Image is decorative":"\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07","Image list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Image title":"\u0e0a\u0e37\u0e48\u0e2d\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Image...":"\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e...","ImageProxy HTTP error: Could not find Image Proxy":"","ImageProxy HTTP error: Incorrect Image Proxy URL":"","ImageProxy HTTP error: Rejected request":"","ImageProxy HTTP error: Unknown ImageProxy error":"","Increase indent":"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07","Inline":"\u0e41\u0e1a\u0e1a\u0e2d\u0e34\u0e19\u0e44\u0e25\u0e19\u0e4c","Insert":"\u0e41\u0e17\u0e23\u0e01","Insert Template":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a","Insert accordion":"","Insert column after":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e27\u0e49\u0e20\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07","Insert column before":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32","Insert date/time":"\u0e41\u0e17\u0e23\u0e01\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48/\u0e40\u0e27\u0e25\u0e32","Insert image":"\u0e41\u0e17\u0e23\u0e01\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Insert link (if link plugin activated)":"\u0e41\u0e17\u0e23\u0e01\u0e25\u0e34\u0e07\u0e01\u0e4c (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c)","Insert row after":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e44\u0e27\u0e49\u0e20\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07","Insert row before":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32","Insert table":"\u0e41\u0e17\u0e23\u0e01\u0e15\u0e32\u0e23\u0e32\u0e07","Insert template...":"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a...","Insert video":"\u0e41\u0e17\u0e23\u0e01\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d","Insert/Edit code sample":"\u0e41\u0e17\u0e23\u0e01/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14","Insert/edit image":"\u0e41\u0e17\u0e23\u0e01/\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Insert/edit link":"\u0e41\u0e17\u0e23\u0e01/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e25\u0e34\u0e07\u0e01\u0e4c","Insert/edit media":"\u0e41\u0e17\u0e23\u0e01/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22","Insert/edit video":"\u0e41\u0e17\u0e23\u0e01/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d","Inset":"","Invalid hex color code: {0}":"","Invalid input":"","Italic":"\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07","Justify":"\u0e40\u0e15\u0e47\u0e21\u0e41\u0e19\u0e27","Keyboard Navigation":"\u0e01\u0e32\u0e23\u0e19\u0e33\u0e17\u0e32\u0e07\u0e14\u0e49\u0e27\u0e22\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c","Language":"\u0e20\u0e32\u0e29\u0e32","Learn more...":"\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...","Left":"\u0e0b\u0e49\u0e32\u0e22","Left to right":"\u0e08\u0e32\u0e01\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32","Light Blue":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e48\u0e2d\u0e19","Light Gray":"\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e2d\u0e48\u0e2d\u0e19","Light Green":"\u0e40\u0e02\u0e35\u0e22\u0e27\u0e2d\u0e48\u0e2d\u0e19","Light Purple":"\u0e21\u0e48\u0e27\u0e07\u0e2d\u0e48\u0e2d\u0e19","Light Red":"\u0e41\u0e14\u0e07\u0e2d\u0e48\u0e2d\u0e19","Light Yellow":"\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e2d\u0e48\u0e2d\u0e19","Line height":"\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07\u0e02\u0e2d\u0e07\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","Link list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e07\u0e04\u0e4c","Link...":"\u0e25\u0e34\u0e07\u0e01\u0e4c...","List Properties":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","List properties...":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23...","Loading emojis...":"\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14 \u0e2d\u0e34\u0e42\u0e21\u0e08\u0e34...","Loading...":"\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14...","Lower Alpha":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e47\u0e01","Lower Greek":"\u0e20\u0e32\u0e29\u0e32\u0e01\u0e23\u0e35\u0e01\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e47\u0e01","Lower Roman":"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e42\u0e23\u0e21\u0e31\u0e19\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e47\u0e01","Match case":"\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e01\u0e31\u0e19","Mathematical":"\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e04\u0e13\u0e34\u0e15\u0e28\u0e32\u0e2a\u0e15\u0e23\u0e4c","Media poster (Image URL)":"\u0e42\u0e1b\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22 (URL \u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e)","Media...":"\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22...","Medium Blue":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e32\u0e19\u0e01\u0e25\u0e32\u0e07","Medium Gray":"\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e01\u0e25\u0e32\u0e07\u0e46","Medium Purple":"\u0e2a\u0e35\u0e21\u0e48\u0e27\u0e07\u0e01\u0e25\u0e32\u0e07\u0e46","Merge cells":"\u0e1c\u0e2a\u0e32\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c","Middle":"\u0e01\u0e25\u0e32\u0e07","Midnight Blue":"\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e40\u0e02\u0e49\u0e21","More...":"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...","Name":"","Navy Blue":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21","New document":"\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e2b\u0e21\u0e48","New window":"\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48","Next":"\u0e15\u0e48\u0e2d\u0e44\u0e1b","No":"\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48","No alignment":"\u0e44\u0e21\u0e48\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07","No color":"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e35","Nonbreaking space":"\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e41\u0e1a\u0e1a\u0e44\u0e21\u0e48\u0e15\u0e31\u0e14\u0e04\u0e33","None":"\u0e44\u0e21\u0e48\u0e21\u0e35","Numbered list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e40\u0e25\u0e02","OR":"","Objects":"\u0e27\u0e31\u0e15\u0e16\u0e38","Ok":"\u0e15\u0e01\u0e25\u0e07","Open help dialog":"\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e01\u0e32\u0e23\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","Open link":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c","Open link in...":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e43\u0e19...","Open popup menu for split buttons":"\u0e40\u0e1b\u0e34\u0e14\u0e40\u0e21\u0e19\u0e39\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1b\u0e38\u0e48\u0e21\u0e41\u0e22\u0e01","Orange":"\u0e2a\u0e49\u0e21","Outset":"","Page break":"\u0e15\u0e31\u0e27\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32","Paragraph":"\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32","Paste":"\u0e27\u0e32\u0e07","Paste as text":"\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","Paste column after":"\u0e27\u0e32\u0e07\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e27\u0e49\u0e20\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07","Paste column before":"\u0e27\u0e32\u0e07\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e01\u0e32\u0e23\u0e27\u0e32\u0e07\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32 \u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e08\u0e30\u0e16\u0e39\u0e01\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e08\u0e30\u0e1b\u0e34\u0e14\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49","Paste or type a link":"\u0e27\u0e32\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e1b\u0e49\u0e2d\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c","Paste row after":"\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07","Paste row before":"\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19","Paste your embed code below:":"\u0e27\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14\u0e1d\u0e31\u0e07\u0e15\u0e31\u0e27\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07:","People":"\u0e1c\u0e39\u0e49\u0e04\u0e19","Plugins":"\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e0a\u0e48\u0e27\u0e22 (Plugins)","Plugins installed ({0}):":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e41\u0e25\u0e49\u0e27 ({0}):","Powered by {0}":"\u0e02\u0e31\u0e1a\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e42\u0e14\u0e22 {0}","Pre":"pre","Preferences":"\u0e04\u0e48\u0e32\u0e01\u0e33\u0e2b\u0e19\u0e14","Preformatted":"\u0e1f\u0e2d\u0e23\u0e4c\u0e41\u0e21\u0e15\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19","Premium plugins:":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1e\u0e23\u0e35\u0e40\u0e21\u0e35\u0e22\u0e21:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u0e0a\u0e21\u0e01\u0e48\u0e2d\u0e19","Previous":"\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49","Print":"\u0e1e\u0e34\u0e21\u0e1e\u0e4c","Print...":"\u0e1e\u0e34\u0e21\u0e1e\u0e4c...","Purple":"\u0e21\u0e48\u0e27\u0e07","Quotations":"\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32","R":"","Range 0 to 255":"\u0e04\u0e48\u0e32 0 \u0e16\u0e36\u0e07 255","Red":"\u0e41\u0e14\u0e07","Red component":"","Redo":"\u0e17\u0e33\u0e43\u0e2b\u0e21\u0e48\u0e2d\u0e35\u0e01","Remove":"\u0e25\u0e1a\u0e2d\u0e2d\u0e01","Remove color":"\u0e25\u0e1a\u0e2a\u0e35","Remove link":"\u0e25\u0e1a\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e2d\u0e2d\u0e01","Replace":"\u0e43\u0e2a\u0e48\u0e04\u0e48\u0e32\u0e41\u0e17\u0e19","Replace all":"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14","Replace with":"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22","Resize":"\u0e1b\u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14","Restore last draft":"\u0e04\u0e37\u0e19\u0e04\u0e48\u0e32\u0e41\u0e1a\u0e1a\u0e23\u0e48\u0e32\u0e07\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14","Reveal or hide additional toolbar items":"","Rich Text Area":"","Rich Text Area. Press ALT-0 for help.":"\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-F9 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e21\u0e19\u0e39 \u0e01\u0e14 ALT-F10 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d \u0e41\u0e25\u0e30\u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","Ridge":"","Right":"\u0e02\u0e27\u0e32","Right to left":"\u0e08\u0e32\u0e01\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","Row":"\u0e41\u0e16\u0e27","Row clipboard actions":"","Row group":"\u0e01\u0e25\u0e38\u0e48\u0e21\u0e41\u0e16\u0e27","Row header":"","Row properties":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27","Row type":"\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27","Rows":"\u0e41\u0e16\u0e27","Save":"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01","Save (if save plugin activated)":"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01)","Scope":"\u0e02\u0e2d\u0e1a\u0e02\u0e48\u0e32\u0e22","Search":"\u0e04\u0e49\u0e19\u0e2b\u0e32","Select all":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14","Select...":"\u0e40\u0e25\u0e37\u0e2d\u0e01...","Selection":"\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01","Shortcut":"\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14","Show blocks":"\u0e41\u0e2a\u0e14\u0e07\u0e1a\u0e25\u0e47\u0e2d\u0e01","Show caption":"\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e1a\u0e23\u0e23\u0e22\u0e32\u0e22","Show invisible characters":"\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e17\u0e35\u0e48\u0e21\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19","Size":"\u0e02\u0e19\u0e32\u0e14","Solid":"\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e36\u0e1a","Source":"\u0e41\u0e2b\u0e25\u0e48\u0e07","Source code":"\u0e42\u0e04\u0e49\u0e14\u0e15\u0e49\u0e19\u0e09\u0e1a\u0e31\u0e1a","Special Character":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29","Special character...":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29...","Split cell":"\u0e41\u0e22\u0e01\u0e40\u0e0b\u0e25\u0e25\u0e4c","Square":"\u0e2a\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e35\u0e48\u0e22\u0e21","Start list at number":"\u0e40\u0e23\u0e34\u0e48\u0e21\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e14\u0e49\u0e27\u0e22\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02","Strikethrough":"\u0e02\u0e35\u0e14\u0e04\u0e23\u0e48\u0e2d\u0e21","Style":"\u0e41\u0e1a\u0e1a","Subscript":"\u0e15\u0e31\u0e27\u0e2b\u0e49\u0e2d\u0e22","Superscript":"\u0e15\u0e31\u0e27\u0e22\u0e01","Switch to or from fullscreen mode":"\u0e2a\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e32\u0e01\u0e42\u0e2b\u0e21\u0e14\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d","Symbols":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c","System Font":"\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e1a\u0e1a","Table":"\u0e15\u0e32\u0e23\u0e32\u0e07","Table caption":"\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e15\u0e32\u0e23\u0e32\u0e07","Table properties":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07...","Table styles":"\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30\u0e15\u0e32\u0e23\u0e32\u0e07","Template":"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a","Templates":"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a","Text":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","Text color":"\u0e2a\u0e35\u0e02\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","Text color {0}":"","Text to display":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e19\u0e33\u0e44\u0e1b\u0e41\u0e2a\u0e14\u0e07","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e41\u0e2d\u0e14\u0e40\u0e14\u0e23\u0e2a \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 http:// \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32 https:// \u0e17\u0e35\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","Title":"\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07","To open the popup, press Shift+Enter":"\u0e01\u0e14 Shift+Enter \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e4a\u0e2d\u0e1a\u0e2d\u0e31\u0e1e","Toggle accordion":"","Tools":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d","Top":"\u0e1a\u0e19","Travel and Places":"\u0e01\u0e32\u0e23\u0e17\u0e48\u0e2d\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e27\u0e41\u0e25\u0e30\u0e2a\u0e16\u0e32\u0e19\u0e17\u0e35\u0e48","Turquoise":"\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e21\u0e40\u0e02\u0e35\u0e22\u0e27","Underline":"\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49","Undo":"\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e01\u0e25\u0e31\u0e1a\u0e04\u0e37\u0e19","Upload":"\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14","Uploading image":"\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2d\u0e31\u0e1e\u0e42\u0e2b\u0e25\u0e14\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e","Upper Alpha":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48","Upper Roman":"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e42\u0e23\u0e21\u0e31\u0e19\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48","Url":"URL","User Defined":"\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07","Valid":"\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07","Version":"\u0e23\u0e38\u0e48\u0e19","Vertical align":"\u0e08\u0e31\u0e14\u0e40\u0e23\u0e35\u0e22\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","Vertical space":"\u0e17\u0e35\u0e48\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e14\u0e34\u0e48\u0e07","View":"\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07","Visual aids":"\u0e17\u0e31\u0e28\u0e19\u0e39\u0e1b\u0e01\u0e23\u0e13\u0e4c","Warn":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e40\u0e15\u0e37\u0e2d\u0e19","White":"\u0e02\u0e32\u0e27","Width":"\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07","Word count":"\u0e19\u0e31\u0e1a\u0e08\u0e33\u0e19\u0e27\u0e19\u0e04\u0e33","Words":"\u0e04\u0e33","Words: {0}":"\u0e04\u0e33: {0}","Yellow":"\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07","Yes":"\u0e43\u0e0a\u0e48","You are using {0}":"\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e43\u0e0a\u0e49 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0e04\u0e38\u0e13\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e2d\u0e2d\u0e01\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0e40\u0e1a\u0e23\u0e32\u0e27\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e42\u0e14\u0e22\u0e15\u0e23\u0e07\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e04\u0e25\u0e34\u0e1b\u0e1a\u0e2d\u0e23\u0e4c\u0e14 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e43\u0e0a\u0e49\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e25\u0e31\u0e14 Ctrl+X/C/V \u0e41\u0e17\u0e19","alignment":"\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27","austral sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e2d\u0e2a\u0e15\u0e23\u0e31\u0e25","cedi sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e0b\u0e14\u0e35","colon sign":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e08\u0e38\u0e14\u0e04\u0e39\u0e48","cruzeiro sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e04\u0e23\u0e39\u0e40\u0e0b\u0e42\u0e35\u0e23","currency sign":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19","dollar sign":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e14\u0e2d\u0e25\u0e25\u0e48\u0e32\u0e23\u0e4c","dong sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e2d\u0e07","drachma sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e23\u0e31\u0e04\u0e21\u0e32","euro-currency sign":"\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e22\u0e39\u0e42\u0e23","example":"\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07","formatting":"\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","french franc sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1f\u0e23\u0e31\u0e07\u0e01\u0e4c\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a","german penny symbol":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1e\u0e19\u0e19\u0e35\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e31\u0e19","guarani sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e27\u0e32\u0e23\u0e32\u0e19\u0e35","history":"\u0e1b\u0e23\u0e30\u0e27\u0e31\u0e15\u0e34","hryvnia sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2e\u0e23\u0e34\u0e1f\u0e40\u0e19\u0e35\u0e22","indentation":"\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32","indian rupee sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22","kip sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e35\u0e1a","lira sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32","livre tournois sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e15\u0e39\u0e23\u0e4c","manat sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e19\u0e31\u0e15","mill sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e34\u0e25\u0e25\u0e4c","naira sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e44\u0e19\u0e23\u0e32","new sheqel sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e19\u0e34\u0e27\u0e40\u0e0a\u0e40\u0e01\u0e25","nordic mark sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e19\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e01","peseta sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e40\u0e0b\u0e15\u0e32","peso sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e42\u0e0b","ruble sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e40\u0e1a\u0e34\u0e25","rupee sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35","spesmilo sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2a\u0e40\u0e1b\u0e2a\u0e21\u0e34\u0e42\u0e25","styles":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","tenge sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e17\u0e07\u0e40\u0e08","tugrik sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e17\u0e39\u0e01\u0e23\u0e34\u0e01","turkish lira sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32\u0e15\u0e38\u0e23\u0e01\u0e35","won sign":"\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e27\u0e2d\u0e19","yen character":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19","yen/yuan character variant one":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19/\u0e2b\u0e22\u0e27\u0e19 \u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e17\u0e35\u0e48 1","yuan character":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19","yuan character, in hong kong and taiwan":"\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19 \u0e43\u0e19\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07\u0e41\u0e25\u0e30\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19","{0} characters":"{0} \u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30","{0} columns, {1} rows":"","{0} words":"{0} \u0e04\u0e33"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/tr.js b/staticfiles/tinymce/langs/tr.js new file mode 100644 index 0000000..a2dbdbc --- /dev/null +++ b/staticfiles/tinymce/langs/tr.js @@ -0,0 +1 @@ +tinymce.addI18n("tr",{"#":"#","Accessibility":"Eri\u015filebilirlik","Accordion":"Akordeon","Accordion body...":"Akordeon g\xf6vdesi...","Accordion summary...":"Akordeon \xf6zeti...","Action":"\u0130\u015flem","Activity":"Etkinlik","Address":"Adres","Advanced":"Geli\u015fmi\u015f","Align":"Hizala","Align center":"Ortala","Align left":"Sola hizala","Align right":"Sa\u011fa hizala","Alignment":"Hizalama","Alignment {0}":"Hizalama {0}","All":"T\xfcm\xfc","Alternative description":"Alternatif a\xe7\u0131klama","Alternative source":"Alternatif kaynak","Alternative source URL":"Alternatif kaynak URL","Anchor":"\xc7apa","Anchor...":"\xc7apa...","Anchors":"\xc7apalar","Animals and Nature":"Hayvanlar ve Do\u011fa","Arrows":"Oklar","B":"M","Background color":"Arkaplan rengi","Background color {0}":"Arka plan rengi {0}","Black":"Siyah","Block":"Blok","Block {0}":"Blok {0}","Blockquote":"Blockquote","Blocks":"Bloklar","Blue":"Mavi","Blue component":"Mavi par\xe7a","Body":"G\xf6vde","Bold":"Kal\u0131n","Border":"Kenar","Border color":"Kenarl\u0131k Rengi","Border style":"Kenar sitili","Border width":"Kenar geni\u015fli\u011fi","Bottom":"Alt","Browse files":"Dosyalara g\xf6z at","Browse for an image":"Bir resim aray\u0131n","Browse links":"Ba\u011flant\u0131lara g\xf6z at","Bullet list":"S\u0131ras\u0131z liste","Cancel":"\u0130ptal","Caption":"Ba\u015fl\u0131k","Cell":"H\xfccre","Cell padding":"H\xfccre i\xe7 bo\u015flu\u011fu","Cell properties":"H\xfccre \xf6zellikleri","Cell spacing":"H\xfccre aral\u0131\u011f\u0131","Cell styles":"H\xfccre stilleri","Cell type":"H\xfccre tipi","Center":"Orta","Characters":"Karakter","Characters (no spaces)":"Karakter (bo\u015fluksuz)","Circle":"Daire","Class":"S\u0131n\u0131f","Clear formatting":"Bi\xe7imi temizle","Close":"Kapat","Code":"Kod","Code sample...":"Kod \xf6rne\u011fi...","Code view":"Kod g\xf6r\xfcn\xfcm\xfc","Color Picker":"Renk Se\xe7ici","Color swatch":"Renk \xf6rne\u011fi","Cols":"S\xfctunlar","Column":"S\xfctun","Column clipboard actions":"S\xfctun panosu eylemleri","Column group":"S\xfctun grubu","Column header":"S\xfct\xfcn ba\u015fl\u0131\u011f\u0131","Constrain proportions":"En - Boy oran\u0131n\u0131 koru","Copy":"Kopyala","Copy column":"S\xfctunu kopyala","Copy row":"Sat\u0131r\u0131 kopyala","Could not find the specified string.":"Belirtilen dizin bulunamad\u0131.","Could not load emojis":"Emojiler y\xfcklenemedi","Count":"Say\u0131m","Currency":"Para birimi","Current window":"Mevcut pencere","Custom color":"\xd6zel Renk","Custom...":"\xd6zel...","Cut":"Kes","Cut column":"S\xfctunu kes","Cut row":"Sat\u0131r\u0131 kes","Dark Blue":"Lacivert","Dark Gray":"Koyu Gri","Dark Green":"Koyu Ye\u015fil","Dark Orange":"Koyu Turuncu","Dark Purple":"Koyu Mor","Dark Red":"Koyu K\u0131rm\u0131z\u0131","Dark Turquoise":"Koyu Turkuaz","Dark Yellow":"Koyu Sar\u0131","Dashed":"Kesikli","Date/time":"Tarih/zaman","Decrease indent":"Girintiyi azalt","Default":"Varsay\u0131lan","Delete accordion":"Akordeon'u sil","Delete column":"S\xfctunu sil","Delete row":"Sat\u0131r\u0131 sil","Delete table":"Tabloyu sil","Dimensions":"Boyutlar","Disc":"Disk","Div":"Div","Document":"Belge","Dotted":"Noktal\u0131","Double":"\xc7ift","Drop an image here":"Buraya bir resim koyun","Dropped file type is not supported":"S\xfcr\xfcklenen dosya tipi desteklenmiyor","Edit":"D\xfczenle","Embed":"G\xf6mme","Emojis":"Emojiler","Emojis...":"Emojiler...","Error":"Hata","Error: Form submit field collision.":"Hata: Form g\xf6nderme alan\u0131 \xe7at\u0131\u015fmas\u0131.","Error: No form element found.":"Hata: Form eleman\u0131 bulunamad\u0131.","Extended Latin":"Uzat\u0131lm\u0131\u015f Latin","Failed to initialize plugin: {0}":"Eklenti ba\u015flat\u0131lamad\u0131: {0}","Failed to load plugin url: {0}":"Url eklentisi y\xfcklenemedi: {0}","Failed to load plugin: {0} from url {1}":"Eklenti y\xfcklenemedi: {1} url\u2019sinden {0}","Failed to upload image: {0}":"Resim y\xfcklenemedi: {0}","File":"Dosya","Find":"Bul","Find (if searchreplace plugin activated)":"Bul (SearchReplace eklentisi aktif ise)","Find and Replace":"Bul ve De\u011fi\u015ftir","Find and replace...":"Bul ve de\u011fi\u015ftir...","Find in selection":"Se\xe7im i\xe7inde bul","Find whole words only":"Sadece t\xfcm kelimeyi ara","Flags":"Bayraklar","Focus to contextual toolbar":"Ba\u011flamsal ara\xe7 \xe7ubu\u011funa odaklan","Focus to element path":"Eleman yoluna odaklan","Focus to menubar":"Men\xfc \xe7ubu\u011funa odaklan","Focus to toolbar":"Ara\xe7 \xe7ubu\u011funa odaklan","Font":"Yaz\u0131 Tipi","Font size {0}":"Yaz\u0131 tipi boyutu {0}","Font sizes":"Yaz\u0131 tipi boyutu","Font {0}":"Yaz\u0131 tipi {0}","Fonts":"Yaz\u0131 Tipleri","Food and Drink":"Yiyecek ve \u0130\xe7ecek","Footer":"Footer","Format":"Bi\xe7im","Format {0}":"Bi\xe7im {0}","Formats":"Bi\xe7imler","Fullscreen":"Tam ekran","G":"Y","General":"Genel","Gray":"Gri","Green":"Ye\u015fil","Green component":"Ye\u015fil par\xe7a","Groove":"Oluk","Handy Shortcuts":"Kullan\u0131\u015fl\u0131 K\u0131sayollar","Header":"Header","Header cell":"Ba\u015fl\u0131k h\xfccresi","Heading 1":"Ba\u015fl\u0131k 1","Heading 2":"Ba\u015fl\u0131k 2","Heading 3":"Ba\u015fl\u0131k 3","Heading 4":"Ba\u015fl\u0131k 4","Heading 5":"Ba\u015fl\u0131k 5","Heading 6":"Ba\u015fl\u0131k 6","Headings":"Ba\u015fl\u0131klar","Height":"Y\xfckseklik","Help":"Yard\u0131m","Hex color code":"Hex renk kodu","Hidden":"Gizli","Horizontal align":"Yatay hizalama","Horizontal line":"Yatay \xe7izgi","Horizontal space":"Yatay bo\u015fluk","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID bir harfle ba\u015flamal\u0131, ard\u0131ndan yaln\u0131zca harf, say\u0131, tire, nokta, iki nokta \xfcst \xfcste veya alt \xe7izgi gelmelidir.","Image is decorative":"Resim dekoratif","Image list":"Resim listesi","Image title":"Resim ba\u015fl\u0131\u011f\u0131","Image...":"Resim...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP hatas\u0131: G\xf6rsel Proxy bulunamad\u0131","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP hatas\u0131: Ge\xe7ersiz G\xf6rsel Proxy URL'i","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP hatas\u0131: \u0130stek reddedildi","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP hatas\u0131: Bilinmeyen ImageProxy hatas\u0131","Increase indent":"Girintiyi art\u0131r","Inline":"Sat\u0131r i\xe7i","Insert":"Ekle","Insert Template":"\u015eablon Ekle","Insert accordion":"Akordeon ekle","Insert column after":"Sonras\u0131na yeni s\xfctun ekle","Insert column before":"\xd6ncesine yeni s\xfctun ekle","Insert date/time":"Tarih / Zaman ekle","Insert image":"Resim ekle","Insert link (if link plugin activated)":"Link ekle (Link eklentisi aktif ise)","Insert row after":"Sonras\u0131na yeni sat\u0131r ekle","Insert row before":"\xd6ncesine yeni sat\u0131r ekle","Insert table":"Tablo ekle","Insert template...":"\u015eablon ekle...","Insert video":"Video ekle","Insert/Edit code sample":"Kod \xf6rne\u011fini Kaydet/D\xfczenle","Insert/edit image":"Resim ekle/d\xfczenle","Insert/edit link":"Ba\u011flant\u0131 ekle/d\xfczenle","Insert/edit media":"Medya ekle/d\xfczenle","Insert/edit video":"Video ekle/d\xfczenle","Inset":"\u0130\xe7 metin","Invalid hex color code: {0}":"Ge\xe7ersiz hex renk kodu: {0}","Invalid input":"Ge\xe7ersiz input","Italic":"\u0130talik","Justify":"\u0130ki yana yasla","Keyboard Navigation":"Klavye Tu\u015flar\u0131","Language":"Dil","Learn more...":"Daha fazla bilgi edinin...","Left":"Sol","Left to right":"Soldan sa\u011fa","Light Blue":"A\xe7\u0131k Mavi","Light Gray":"A\xe7\u0131k Gri","Light Green":"A\xe7\u0131k Ye\u015fil","Light Purple":"A\xe7\u0131k Mor","Light Red":"A\xe7\u0131k K\u0131rm\u0131z\u0131","Light Yellow":"A\xe7\u0131k Sar\u0131","Line height":"Sat\u0131r y\xfcksekli\u011fi","Link list":"Link listesi","Link...":"Ba\u011flant\u0131...","List Properties":"\xd6zellikleri listele","List properties...":"Liste \xf6zellikleri","Loading emojis...":"Emojiler y\xfckleniyor...","Loading...":"Y\xfckleniyor...","Lower Alpha":"K\xfc\xe7\xfck Harf","Lower Greek":"K\xfc\xe7\xfck Yunan alfabesi","Lower Roman":"K\xfc\xe7\xfck Roman","Match case":"B\xfcy\xfck / K\xfc\xe7\xfck harfe duyarl\u0131","Mathematical":"Matematik","Media poster (Image URL)":"Medya posteri (Resim URL)","Media...":"Medya...","Medium Blue":"Donuk Mavi","Medium Gray":"Orta Gri","Medium Purple":"Orta Mor","Merge cells":"H\xfccreleri birle\u015ftir","Middle":"Orta","Midnight Blue":"Gece Yar\u0131s\u0131 Mavisi","More...":"Devam\u0131...","Name":"\u0130sim","Navy Blue":"Lacivert","New document":"Yeni dok\xfcman","New window":"Yeni pencere","Next":"\u0130leri","No":"Hay\u0131r","No alignment":"Hizalama yok","No color":"Renk Yok","Nonbreaking space":"B\xf6l\xfcnemez bo\u015fluk","None":"Yok","Numbered list":"S\u0131ral\u0131 liste","OR":"VEYA","Objects":"Nesneler","Ok":"Tamam","Open help dialog":"Yard\u0131m penceresini a\xe7","Open link":"Linki a\xe7","Open link in...":"Ba\u011flant\u0131y\u0131 a\xe7...","Open popup menu for split buttons":"\xc7ok i\u015flevli butonlar i\xe7in a\xe7\u0131l\u0131r men\xfc a\xe7","Orange":"Turuncu","Outset":"D\u0131\u015f Metin","Page break":"Sayfa sonu","Paragraph":"Paragraf","Paste":"Yap\u0131\u015ft\u0131r","Paste as text":"Metin olarak yap\u0131\u015ft\u0131r","Paste column after":"S\xfctun\xfc sonras\u0131na yap\u0131\u015ft\u0131r","Paste column before":"S\xfctun\xfc \xf6ncesine yap\u0131\u015ft\u0131r","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"D\xfcz metin modunda yap\u0131\u015ft\u0131r. Bu se\xe7ene\u011fi kapatana kadar i\xe7erikler d\xfcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.","Paste or type a link":"Bir ba\u011flant\u0131 yap\u0131\u015ft\u0131r\u0131n ya da yaz\u0131n.","Paste row after":"Sonras\u0131na sat\u0131r yap\u0131\u015ft\u0131r","Paste row before":"\xd6ncesine sat\u0131r yap\u0131\u015ft\u0131r","Paste your embed code below:":"Medya g\xf6mme kodunu buraya yap\u0131\u015ft\u0131r:","People":"\u0130nsan","Plugins":"Eklentiler","Plugins installed ({0}):":"Y\xfckl\xfc eklenti ({0}):","Powered by {0}":"Sa\u011flay\u0131c\u0131 {0}","Pre":"Pre","Preferences":"Tercihler","Preformatted":"\xd6nceden bi\xe7imlendirilmi\u015f","Premium plugins:":"Premium eklentileri","Press the Up and Down arrow keys to resize the editor.":"D\xfczenleyiciyi yeniden boyutland\u0131rmak i\xe7in Yukar\u0131 ve A\u015fa\u011f\u0131 ok tu\u015flar\u0131na bas\u0131n.","Press the arrow keys to resize the editor.":"D\xfczenleyiciyi yeniden boyutland\u0131rmak i\xe7in ok tu\u015flar\u0131na bas\u0131n.","Press {0} for help":"Yard\u0131m i\xe7in {0} tu\u015funa bas\u0131n","Preview":"\xd6nizleme","Previous":"Geri","Print":"Yazd\u0131r","Print...":"Yazd\u0131r...","Purple":"Mor","Quotations":"Al\u0131nt\u0131","R":"K","Range 0 to 255":"0 ile 255 aral\u0131\u011f\u0131","Red":"K\u0131rm\u0131z\u0131","Red component":"K\u0131rm\u0131z\u0131 par\xe7a","Redo":"Yinele","Remove":"Kald\u0131r","Remove color":"Rengi kald\u0131r","Remove link":"Ba\u011flant\u0131y\u0131 kald\u0131r","Replace":"De\u011fi\u015ftir","Replace all":"T\xfcm\xfcn\xfc de\u011fi\u015ftir","Replace with":"Bununla de\u011fi\u015ftir","Resize":"Yeniden Boyutland\u0131r","Restore last draft":"Son tasla\u011f\u0131 kurtar","Reveal or hide additional toolbar items":"Ek ara\xe7 \xe7ubu\u011fu \xf6\u011felerini g\xf6ster veya gizle","Rich Text Area":"Zengin Metin Alan\u0131","Rich Text Area. Press ALT-0 for help.":"Zengin Metin Alan\u0131. Yard\u0131m i\xe7in Alt-0'a bas\u0131n.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Zengin Metin Alan\u0131. Men\xfc i\xe7in ALT-F9 k\u0131sayolunu kullan\u0131n. Ara\xe7 \xe7ubu\u011fu i\xe7in ALT-F10 k\u0131sayolunu kullan\u0131n. Yard\u0131m i\xe7in ALT-0 k\u0131sayolunu kullan\u0131n.","Ridge":"\xc7\u0131k\u0131nt\u0131","Right":"Sa\u011f","Right to left":"Sa\u011fdan sola","Row":"Sat\u0131r","Row clipboard actions":"Sat\u0131r panosu eylemleri","Row group":"Sat\u0131r grubu","Row header":"Sat\u0131r ba\u015fl\u0131\u011f\u0131","Row properties":"Sat\u0131r \xf6zellikleri","Row type":"Sat\u0131r tipi","Rows":"Sat\u0131rlar","Save":"Kaydet","Save (if save plugin activated)":"Kaydet (Kay\u0131t eklentisi aktif ise)","Scope":"Kapsam","Search":"Ara","Select all":"T\xfcm\xfcn\xfc se\xe7","Select...":"Se\xe7...","Selection":"Se\xe7im","Shortcut":"K\u0131sayol","Show blocks":"Bloklar\u0131 g\xf6r\xfcnt\xfcle","Show caption":"Ba\u015fl\u0131\u011f\u0131 g\xf6ster","Show invisible characters":"G\xf6r\xfcnmez karakterleri g\xf6ster","Size":"Boyut","Solid":"Kat\u0131","Source":"Kaynak","Source code":"Kaynak kodu","Special Character":"\xd6zel karakter","Special character...":"\xd6zel karakter...","Split cell":"H\xfccreleri ay\u0131r","Square":"Kare","Start list at number":"Listeyi \u015fu say\u0131dan ba\u015flat","Strikethrough":"\xdcst\xfc \xe7izgili","Style":"Stil","Subscript":"Alt simge","Superscript":"\xdcst simge","Switch to or from fullscreen mode":"Tam ekran moduna ge\xe7 veya \xe7\u0131k","Symbols":"Semboller","System Font":"Sistem Yaz\u0131 Tipi","Table":"Tablo","Table caption":"Tablo altyaz\u0131s\u0131","Table properties":"Tablo \xf6zellikleri","Table styles":"Tablo stilleri","Template":"Tema","Templates":"\u015eablonlar","Text":"Metin","Text color":"Yaz\u0131 rengi","Text color {0}":"Metin rengi {0}","Text to display":"G\xf6r\xfcnt\xfclenecek metin","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"Girdi\u011finiz URL bir e-posta adresi gibi g\xf6z\xfck\xfcyor. Gerekli olan mailto: \xf6nekini eklemek ister misiniz?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\xf6z\xfck\xfcyor. Gerekli olan http:// \xf6nekini eklemek ister misiniz?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\xf6z\xfck\xfcyor. Gerekli olan https:// \xf6nekini eklemek ister misiniz?","Title":"Ba\u015fl\u0131k","To open the popup, press Shift+Enter":"Popup'\u0131 a\xe7mak i\xe7in Shift+Enter'a bas\u0131n","Toggle accordion":"Akordeon'u de\u011fi\u015ftir","Tools":"Ara\xe7lar","Top":"\xdcst","Travel and Places":"Gezi ve Yerler","Turquoise":"Turkuaz","Underline":"Alt\u0131 \xe7izili","Undo":"Geri al","Upload":"Y\xfckle","Uploading image":"Resim y\xfckleniyor","Upper Alpha":"B\xfcy\xfck Harf","Upper Roman":"B\xfcy\xfck Roman","Url":"Url","User Defined":"Kullan\u0131c\u0131 Tan\u0131ml\u0131","Valid":"Ge\xe7erli","Version":"S\xfcr\xfcm","Vertical align":"Dikey hizalama","Vertical space":"Dikey bo\u015fluk","View":"G\xf6r\xfcnt\xfcle","Visual aids":"G\xf6rsel ara\xe7lar","Warn":"Uyar\u0131","White":"Beyaz","Width":"Geni\u015flik","Word count":"Kelime say\u0131s\u0131","Words":"S\xf6zc\xfck","Words: {0}":"Kelime: {0}","Yellow":"Sar\u0131","Yes":"Evet","You are using {0}":"{0} kullan\u0131yorsun.","You have unsaved changes are you sure you want to navigate away?":"Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\xfctfen Ctrl+X/C/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.","alignment":"hizalanma","austral sign":"austral i\u015fareti","cedi sign":"cedi i\u015fareti","colon sign":"colon i\u015fareti","cruzeiro sign":"cruzeiro i\u015fareti","currency sign":"para birimi i\u015fareti","dollar sign":"dolar i\u015fareti","dong sign":"dong i\u015fareti","drachma sign":"drahma i\u015fareti","euro-currency sign":"euro para birimi i\u015fareti","example":"\xf6rnek","formatting":"bi\xe7imlendirme","french franc sign":"frans\u0131z frang\u0131 i\u015fareti","german penny symbol":"alman kuru\u015f sembol\xfc","guarani sign":"guarani i\u015fareti","history":"ge\xe7mi\u015f","hryvnia sign":"hrivniya i\u015fareti","indentation":"girinti","indian rupee sign":"hindistan rupisi i\u015fareti","kip sign":"kip i\u015fareti","lira sign":"lira i\u015fareti","livre tournois sign":"livre tournois i\u015fareti","manat sign":"manat i\u015fareti","mill sign":"mill i\u015fareti","naira sign":"naira i\u015fareti","new sheqel sign":"yeni \u015fekel i\u015fareti","nordic mark sign":"nordic i\u015fareti","peseta sign":"peseta i\u015fareti","peso sign":"peso i\u015fareti","ruble sign":"ruble i\u015fareti","rupee sign":"rupi i\u015fareti","spesmilo sign":"spesmilo i\u015fareti","styles":"stiller","tenge sign":"tenge i\u015fareti","tugrik sign":"tugrik i\u015fareti","turkish lira sign":"t\xfcrk liras\u0131 i\u015fareti","won sign":"won i\u015fareti","yen character":"yen karakteri","yen/yuan character variant one":"yen/yuan karakter de\u011fi\u015fkeni","yuan character":"yuan karakteri","yuan character, in hong kong and taiwan":"yuan karakteri, hong kong ve tayvan'da kullan\u0131lan","{0} characters":"{0} karakter","{0} columns, {1} rows":"{0} s\xfctun, {1} sat\u0131r","{0} words":"{0} kelime"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/ug.js b/staticfiles/tinymce/langs/ug.js new file mode 100644 index 0000000..273cc3c --- /dev/null +++ b/staticfiles/tinymce/langs/ug.js @@ -0,0 +1 @@ +tinymce.addI18n("ug",{"#":"#","Accessibility":"\u064a\u0627\u0631\u062f\u06d5\u0645\u0686\u06d5 \u0626\u0649\u0642\u062a\u0649\u062f\u0627\u0631","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u0645\u06d5\u0634\u063a\u06c7\u0644\u0627\u062a","Activity":"\u067e\u0627\u0626\u0627\u0644\u0649\u064a\u06d5\u062a","Address":"\u0626\u0627\u062f\u0631\u06d0\u0633\u0649","Advanced":"\u0626\u0627\u0644\u0649\u064a","Align":"\u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Align center":"\u0626\u0648\u062a\u062a\u06c7\u0631\u0649\u063a\u0627 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Align left":"\u0633\u0648\u0644\u063a\u0627 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Align right":"\u0626\u0648\u06ad\u063a\u0627 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Alignment":"\u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Alignment {0}":"","All":"\u06be\u06d5\u0645\u0645\u06d5","Alternative description":"\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u0686\u06c8\u0634\u06d5\u0646\u062f\u06c8\u0631\u06c8\u0634\u0649","Alternative source":"\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u0645\u06d5\u0646\u0628\u06d5","Alternative source URL":"\u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0627 \u0645\u06d5\u0646\u0628\u06d5 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649","Anchor":"\u0644\u06d5\u06ad\u06af\u06d5\u0631","Anchor...":"\u0644\u06d5\u06ad\u06af\u06d5\u0631...","Anchors":"\u0644\u06d5\u06ad\u06af\u06d5\u0631\u0644\u06d5\u0631","Animals and Nature":"\u06be\u0627\u064a\u06cb\u0627\u0646\u0644\u0627\u0631 \u06cb\u06d5 \u062a\u06d5\u0628\u0649\u0626\u06d5\u062a","Arrows":"\u0626\u0649\u0633\u062a\u0631\u06d0\u0644\u0643\u0649\u0644\u0627\u0631","B":"B","Background color":"\u062a\u06d5\u06af\u0644\u0649\u0643 \u0631\u06d5\u06ad\u06af\u0649","Background color {0}":"","Black":"\u0642\u0627\u0631\u0627","Block":"\u0628\u06c6\u0644\u06d5\u0643","Block {0}":"","Blockquote":"\u0646\u06d5\u0642\u0649\u0644","Blocks":"\u0628\u06c6\u0644\u06d5\u0643\u0644\u06d5\u0631","Blue":"\u0643\u06c6\u0643","Blue component":"\u0643\u06c6\u0643 \u0628\u0649\u0631\u0649\u0643\u0645\u06d5","Body":"\u0628\u06d5\u062a \u06af\u06d5\u06cb\u062f\u0649\u0633\u0649","Bold":"\u062a\u0648\u0645","Border":"\u06af\u0649\u0631\u06cb\u06d5\u0643","Border color":"\u06af\u0649\u0631\u06cb\u06d5\u0643 \u0631\u06d5\u06ad\u06af\u0649","Border style":"\u06af\u0649\u0631\u06cb\u06d5\u0643 \u0626\u06c7\u0633\u0644\u06c7\u0628\u0649","Border width":"\u06af\u0649\u0631\u06cb\u06d5\u0643 \u0643\u06d5\u06ad\u0644\u0649\u0643\u0649","Bottom":"\u0626\u0627\u0633\u062a\u0649\u063a\u0627","Browse files":"","Browse for an image":"\u0631\u06d5\u0633\u0649\u0645\u0649\u0646\u0649 \u0643\u06c6\u0631\u06c8\u0634","Browse links":"","Bullet list":"\u0628\u06d5\u0644\u06af\u06d5 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643","Cancel":"\u0626\u0649\u0646\u0627\u06cb\u06d5\u062a\u0633\u0649\u0632","Caption":"\u062a\u06d0\u0645\u0649\u0633\u0649","Cell":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5","Cell padding":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u0626\u0649\u0686\u0643\u0649 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649","Cell properties":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649","Cell spacing":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649","Cell styles":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u0626\u06c7\u0633\u0644\u06c7\u0628\u0644\u0649\u0631\u0649","Cell type":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u062a\u0649\u067e\u0649","Center":"\u0626\u0648\u062a\u062a\u06c7\u0631\u0649\u063a\u0627","Characters":"\u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631","Characters (no spaces)":"\u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631 (\u0628\u0648\u0634\u0644\u06c7\u0642\u0646\u0649 \u0626\u06c6\u0632 \u0626\u0649\u0686\u0649\u06af\u06d5 \u0626\u0627\u0644\u0645\u0627\u064a\u062f\u06c7)","Circle":"\u0686\u06d5\u0645\u0628\u06d5\u0631","Class":"\u062a\u06c8\u0631","Clear formatting":"\u0641\u0648\u0631\u0645\u0627\u062a \u062a\u0627\u0632\u0649\u0644\u0627\u0634","Close":"\u062a\u0627\u0642\u0627\u0634","Code":"\u0643\u0648\u062f","Code sample...":"\u0626\u06c8\u0644\u06af\u06d5 \u0643\u0648\u062f...","Code view":"\u0643\u0648\u062f \u0643\u06c6\u0631\u06c8\u0646\u06c8\u0634\u0649","Color Picker":"\u0631\u06d5\u06ad \u062a\u0627\u0644\u0644\u0649\u063a\u06c7\u0686","Color swatch":"\u0631\u06d5\u06ad \u0626\u06c8\u0644\u06af\u0649\u0633\u0649","Cols":"\u0626\u0649\u0633\u062a\u0648\u0646\u0644\u0627\u0631","Column":"\u0626\u0649\u0633\u062a\u0648\u0646","Column clipboard actions":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634 \u0645\u06d5\u0634\u063a\u06c7\u0644\u0627\u062a\u0649","Column group":"\u0626\u0649\u0633\u062a\u0648\u0646 \u06af\u06c7\u0631\u06c7\u067e\u067e\u0649\u0633\u0649","Column header":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0642\u06d0\u0634\u0649","Constrain proportions":"\u0646\u0649\u0633\u0628\u06d5\u062a\u0646\u0649 \u0686\u06d5\u0643\u0644\u06d5\u0634","Copy":"\u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634","Copy column":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634","Copy row":"\u0642\u06c7\u0631 \u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634","Could not find the specified string.":"\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0646\u06af\u06d5\u0646 \u0645\u06d5\u0632\u0645\u06c7\u0646 \u062a\u06d0\u067e\u0649\u0644\u0645\u0649\u062f\u0649.","Could not load emojis":"\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649 \u064a\u06c8\u0643\u0644\u06d5\u0646\u0645\u0649\u062f\u0649","Count":"\u0633\u0627\u0646\u0627\u0634","Currency":"\u067e\u06c7\u0644","Current window":"\u0646\u06c6\u06cb\u06d5\u062a\u062a\u0649\u0643\u0649 \u0643\u06c6\u0632\u0646\u06d5\u0643","Custom color":"\u0626\u0649\u062e\u062a\u0649\u064a\u0627\u0631\u0649\u064a \u0631\u06d5\u06ad","Custom...":"\u0626\u0649\u062e\u062a\u0649\u064a\u0627\u0631\u0649\u064a...","Cut":"\u0643\u06d0\u0633\u0649\u0634","Cut column":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0643\u06d0\u0633\u0649\u0634","Cut row":"\u0642\u06c7\u0631 \u0643\u06d0\u0633\u0649\u0634","Dark Blue":"\u062a\u0648\u0642 \u0643\u06c6\u0643","Dark Gray":"\u062a\u0648\u0642 \u0643\u06c8\u0644\u0631\u06d5\u06ad","Dark Green":"\u062a\u0648\u0642 \u064a\u06d0\u0634\u0649\u0644","Dark Orange":"\u062a\u0648\u0642 \u0642\u0649\u0632\u063a\u06c7\u0686","Dark Purple":"\u062a\u0648\u0642 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5","Dark Red":"\u062a\u0648\u0642 \u0642\u0649\u0632\u0649\u0644","Dark Turquoise":"\u062a\u0648\u0642 \u0643\u06c6\u0643\u06c8\u0686 \u064a\u06d0\u0634\u0649\u0644","Dark Yellow":"\u062a\u0648\u0642 \u0633\u06d0\u0631\u0649\u0642","Dashed":"\u0626\u06c8\u0632\u06c8\u0643 \u0633\u0649\u0632\u0649\u0642","Date/time":"\u0686\u06d0\u0633\u0644\u0627 \u064a\u0627\u0643\u0649 \u06cb\u0627\u0642\u0649\u062a","Decrease indent":"\u062a\u0627\u0631\u0627\u064a\u062a\u0649\u0634\u0646\u0649 \u0626\u0627\u0632\u0627\u064a\u062a\u0649\u0634","Default":"\u0633\u06c8\u0643\u06c8\u062a\u062a\u0649\u0643\u0649","Delete accordion":"","Delete column":"\u0626\u0649\u0633\u062a\u0648\u0646\u0646\u0649 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634","Delete row":"\u0642\u06c7\u0631\u0646\u0649 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634","Delete table":"\u062c\u06d5\u062f\u06cb\u06d5\u0644\u0646\u0649 \u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634","Dimensions":"\u0626\u06c6\u0644\u0686\u0649\u0645\u0649","Disc":"\u062f\u0649\u0633\u0643\u0627","Div":"Div","Document":"\u06be\u06c6\u062c\u062c\u06d5\u062a","Dotted":"\u0686\u06d0\u0643\u0649\u062a\u0644\u0649\u0643","Double":"\u0642\u0648\u0634 \u0633\u0649\u0632\u0649\u0642","Drop an image here":"\u0631\u06d5\u0633\u0649\u0645\u0646\u0649 \u0628\u06c7 \u064a\u06d5\u0631\u06af\u06d5 \u062a\u0627\u0634\u0644\u0627\u06ad","Dropped file type is not supported":"\u062a\u0627\u0634\u0644\u0627\u0646\u063a\u0627\u0646 \u06be\u06c6\u062c\u062c\u06d5\u062a \u062a\u0649\u067e\u0649\u0646\u0649 \u0642\u0648\u0644\u0644\u0649\u0645\u0627\u064a\u062f\u06c7","Edit":"\u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Embed":"\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Emojis":"\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649","Emojis...":"\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649...","Error":"\u062e\u0627\u062a\u0627\u0644\u0649\u0642","Error: Form submit field collision.":"\u062e\u0627\u062a\u0627\u0644\u0649\u0642: \u0631\u0627\u0645\u0643\u0627 (form) \u064a\u0648\u0644\u0644\u0627\u0634 \u0628\u06c6\u0644\u0649\u0643\u0649 \u062a\u0648\u0642\u06c7\u0646\u06c7\u0634\u062a\u0649.","Error: No form element found.":"\u062e\u0627\u062a\u0627\u0644\u0649\u0642: \u0631\u0627\u0645\u0643\u0627 (form) \u0626\u06d0\u0644\u06d0\u0645\u06d0\u0646\u062a\u0649 \u062a\u06d0\u067e\u0649\u0644\u0645\u0649\u062f\u0649.","Extended Latin":"\u0643\u06d0\u06ad\u06d5\u064a\u062a\u0649\u0644\u06af\u06d5\u0646 \u0644\u0627\u062a\u0649\u0646 \u06be\u06d5\u0631\u067e\u0644\u0649\u0631\u0649","Failed to initialize plugin: {0}":"\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u062f\u06d5\u0633\u0644\u06d5\u067e\u0644\u06d5\u0634\u062a\u06c8\u0631\u06d5\u0644\u0645\u0649\u062f\u0649: {0}","Failed to load plugin url: {0}":"\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649: {0}","Failed to load plugin: {0} from url {1}":"\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649: {0} \u0646\u0649\u06ad \u0645\u06d5\u0646\u0628\u06d5 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649 {1}","Failed to upload image: {0}":"\u0631\u06d5\u0633\u0649\u0645\u0646\u0649 \u064a\u06c8\u0643\u0644\u0649\u064a\u06d5\u0644\u0645\u0649\u062f\u0649: {0}","File":"\u06be\u06c6\u062c\u062c\u06d5\u062a","Find":"\u0626\u0649\u0632\u062f\u06d5\u0634","Find (if searchreplace plugin activated)":"\u0626\u0649\u0632\u062f\u06d5\u0634 (\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649 \u0626\u0627\u0643\u062a\u0649\u067e\u0644\u0627\u0646\u063a\u0627\u0646 \u0628\u0648\u0644\u0633\u0627)","Find and Replace":"\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634","Find and replace...":"\u0626\u0649\u0632\u062f\u06d5\u0634 \u06cb\u06d5 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634...","Find in selection":"\u062a\u0627\u0644\u0644\u0627\u0646\u063a\u0627\u0646\u062f\u0649\u0646 \u0626\u0649\u0632\u062f\u06d5\u0634","Find whole words only":"\u067e\u06c8\u062a\u06c8\u0646 \u0633\u06c6\u0632\u0646\u0649\u0644\u0627 \u0626\u0649\u0632\u062f\u06d5\u0634","Flags":"\u0628\u0627\u064a\u0631\u0627\u0642\u0644\u0627\u0631","Focus to contextual toolbar":"\u0643\u0648\u0646\u062a\u06d0\u0643\u0649\u0633\u062a\u0644\u0649\u0642 \u0642\u0648\u0631\u0627\u0644\u0628\u0627\u0644\u062f\u0627\u0642\u0646\u0649 \u0641\u0648\u0643\u06c7\u0633\u0644\u0627\u0634","Focus to element path":"\u0626\u06d0\u0644\u06d0\u0645\u06d0\u0646\u062a \u064a\u0648\u0644\u0649\u0646\u0649 \u0641\u0648\u0643\u06c7\u0633\u0644\u0627\u0634","Focus to menubar":"\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0628\u0627\u0644\u062f\u0649\u0642\u0649\u0646\u0649 \u0641\u0648\u0643\u06c7\u0633\u0644\u0627\u0634","Focus to toolbar":"\u0642\u0648\u0631\u0627\u0644\u0628\u0627\u0644\u062f\u0627\u0642\u0646\u0649 \u0641\u0648\u0643\u06c7\u0633\u0644\u0627\u0634","Font":"\u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0633\u0649","Font size {0}":"","Font sizes":"\u062e\u06d5\u062a \u0686\u0648\u06ad\u0644\u06c7\u0642\u0649","Font {0}":"","Fonts":"\u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0644\u0649\u0631\u0649","Food and Drink":"\u064a\u06d0\u0645\u06d5\u0643-\u0626\u0649\u0686\u0645\u06d5\u0643","Footer":"\u0628\u06d5\u062a \u0626\u0627\u0633\u062a\u0649","Format":"\u0641\u0648\u0631\u0645\u0627\u062a","Format {0}":"","Formats":"\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0627\u0631","Fullscreen":"\u062a\u0648\u0644\u06c7\u0642 \u0626\u06d0\u0643\u0631\u0627\u0646","G":"G","General":"\u062f\u0627\u0626\u0649\u0645\u0649\u064a","Gray":"\u0643\u06c8\u0644\u0631\u06d5\u06ad","Green":"\u064a\u06d0\u0634\u0649\u0644","Green component":"\u064a\u06d0\u0634\u0649\u0644 \u0628\u0649\u0631\u0649\u0643\u0645\u06d5","Groove":"\u0626\u0648\u0642\u06c7\u0631","Handy Shortcuts":"\u0642\u0648\u0644\u0627\u064a\u0644\u0649\u0642 \u0642\u0649\u0633\u0642\u0627 \u064a\u0648\u0644\u0644\u0627\u0631","Header":"\u0628\u06d5\u062a \u0642\u06d0\u0634\u0649","Header cell":"\u0628\u06d5\u062a \u0642\u06d0\u0634\u0649 \u0643\u0627\u062a\u06d5\u0643\u0686\u0649\u0633\u0649","Heading 1":"\u0645\u0627\u06cb\u0632\u06c7 1","Heading 2":"\u0645\u0627\u06cb\u0632\u06c7 2","Heading 3":"\u0645\u0627\u06cb\u0632\u06c7 3","Heading 4":"\u0645\u0627\u06cb\u0632\u06c7 4","Heading 5":"\u0645\u0627\u06cb\u0632\u06c7 5","Heading 6":"\u0645\u0627\u06cb\u0632\u06c7 6","Headings":"\u0645\u0627\u06cb\u0632\u06c7\u0644\u0627\u0631","Height":"\u0626\u06d0\u06af\u0649\u0632\u0644\u0649\u0643\u0649","Help":"\u064a\u0627\u0631\u062f\u06d5\u0645","Hex color code":"\u0626\u0648\u0646 \u0626\u0627\u0644\u062a\u0649\u0644\u0649\u0643 \u0631\u06d5\u06ad \u0643\u0648\u062f\u0649","Hidden":"\u064a\u0648\u0634\u06c7\u0631\u06c7\u0646","Horizontal align":"\u06af\u0648\u0631\u0649\u0632\u0648\u0646\u062a\u0627\u0644 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Horizontal line":"\u06af\u0648\u0631\u0649\u0632\u0648\u0646\u062a\u0627\u0644 \u0633\u0649\u0632\u0649\u0642","Horizontal space":"\u06af\u0648\u0631\u0649\u0632\u0648\u0646\u062a\u0627\u0644 \u0628\u0648\u0634\u0644\u06c7\u0642","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID \u06be\u06d5\u0631\u067e \u0628\u0649\u0644\u06d5\u0646 \u0628\u0627\u0634\u0644\u0649\u0646\u0649\u067e\u060c \u0626\u0627\u0631\u0642\u0649\u0633\u0649 \u067e\u06d5\u0642\u06d5\u062a \u06be\u06d5\u0631\u067e\u060c \u0633\u0627\u0646\u060c \u0633\u0649\u0632\u0649\u0642\u060c \u0686\u06d0\u0643\u0649\u062a\u060c \u0642\u0648\u0634 \u0686\u06d0\u0643\u0649\u062a \u06cb\u06d5 \u0626\u0627\u0633\u062a\u0649 \u0633\u0649\u0632\u0649\u0642\u0644\u0627\u0631 \u0628\u0648\u0644\u0633\u0627 \u0628\u0648\u0644\u0649\u062f\u06c7.","Image is decorative":"\u0628\u06d0\u0632\u06d5\u0643 \u0631\u06d5\u0633\u0649\u0645","Image list":"\u0631\u06d5\u0633\u0649\u0645 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643\u0649","Image title":"\u0631\u06d5\u0633\u0649\u0645 \u062a\u06d0\u0645\u0649\u0633\u0649","Image...":"\u0631\u06d5\u0633\u0649\u0645...","ImageProxy HTTP error: Could not find Image Proxy":"\u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 HTTP \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649: \u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649\u0633\u0649\u0646\u0649 \u062a\u0627\u067e\u0627\u0644\u0645\u0649\u062f\u0649","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 HTTP \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649: \u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649 \u062e\u0627\u062a\u0627","ImageProxy HTTP error: Rejected request":"\u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 HTTP \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649: \u0626\u0649\u0644\u062a\u0649\u0645\u0627\u0633 \u0631\u06d5\u062a \u0642\u0649\u0644\u0649\u0646\u062f\u0649","ImageProxy HTTP error: Unknown ImageProxy error":"\u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 HTTP \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649: \u0646\u0627\u0645\u06d5\u0644\u06c7\u0645 \u0631\u06d5\u0633\u0649\u0645 \u06cb\u0627\u0643\u0627\u0644\u06d5\u062a\u0686\u0649 \u062e\u0627\u062a\u0627\u0644\u0649\u0642\u0649","Increase indent":"\u062a\u0627\u0631\u0627\u064a\u062a\u0649\u0634\u0646\u0649 \u0626\u0627\u0634\u06c7\u0631\u06c7\u0634","Inline":"\u0626\u0649\u0686\u0643\u0649","Insert":"\u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert Template":"\u0642\u06d0\u0644\u0649\u067e \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert accordion":"","Insert column after":"\u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u0626\u0649\u0633\u062a\u0648\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert column before":"\u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0626\u0649\u0633\u062a\u0648\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert date/time":"\u0686\u06d0\u0633\u0644\u0627 \u064a\u0627\u0643\u0649 \u06cb\u0627\u0642\u0649\u062a \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert image":"\u0631\u06d5\u0633\u0649\u0645 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert link (if link plugin activated)":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 (\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649 \u0626\u0627\u0643\u062a\u0649\u067e\u0644\u0627\u0646\u063a\u0627\u0646 \u0628\u0648\u0644\u0633\u0627)","Insert row after":"\u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u0642\u06c7\u0631 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert row before":"\u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0642\u06c7\u0631 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert table":"\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert template...":"\u0642\u06d0\u0644\u0649\u067e \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634...","Insert video":"\u0633\u0649\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634","Insert/Edit code sample":"\u0626\u06c8\u0644\u06af\u06d5 \u0643\u0648\u062f \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Insert/edit image":"\u0631\u06d5\u0633\u0649\u0645 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Insert/edit link":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Insert/edit media":"\u0645\u06d0\u062f\u0649\u064a\u0627 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Insert/edit video":"\u0633\u0649\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u06c7\u0634 \u064a\u0627\u0643\u0649 \u062a\u06d5\u06be\u0631\u0649\u0631\u0644\u06d5\u0634","Inset":"\u0626\u0649\u0686\u0643\u0649","Invalid hex color code: {0}":"\u0626\u06c8\u0646\u06c8\u0645\u0633\u0649\u0632 \u0626\u0648\u0646 \u0626\u0627\u0644\u062a\u0649\u0644\u0649\u0643 \u0631\u06d5\u06ad \u0643\u0648\u062f\u0649: {0}","Invalid input":"\u0643\u0649\u0631\u06af\u06c8\u0632\u06c8\u0634 \u0626\u06c8\u0646\u06c8\u0645\u0633\u0649\u0632","Italic":"\u064a\u0627\u0646\u062a\u06c7","Justify":"\u062a\u06d5\u0643\u0634\u0649\u0644\u06d5\u0634","Keyboard Navigation":"\u064a\u06c6\u062a\u0643\u0649\u0644\u0649\u0634\u0686\u0627\u0646 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0627 \u062a\u0627\u062e\u062a\u0649\u0633\u0649","Language":"\u062a\u0649\u0644","Learn more...":"\u062a\u06d5\u067e\u0633\u0649\u0644\u0627\u062a\u0649...","Left":"\u0633\u0648\u0644\u063a\u0627","Left to right":"\u0633\u0648\u0644\u062f\u0649\u0646 \u0626\u0648\u06ad\u063a\u0627","Light Blue":"\u0626\u0627\u0686 \u0643\u06c6\u0643","Light Gray":"\u0626\u0627\u0686 \u0643\u06c8\u0644\u0631\u06d5\u06ad","Light Green":"\u0626\u0627\u0686 \u064a\u06d0\u0634\u0649\u0644","Light Purple":"\u0626\u0627\u0686 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5","Light Red":"\u0626\u0627\u0686 \u0642\u0649\u0632\u0649\u0644","Light Yellow":"\u0626\u0627\u0686 \u0633\u06d0\u0631\u0649\u0642","Line height":"\u0642\u06c7\u0631 \u0626\u0627\u0631\u0649\u0644\u0649\u0642\u0649","Link list":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643\u0649","Link...":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627...","List Properties":"\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649","List properties...":"\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649...","Loading emojis...":"\u0686\u0649\u0631\u0627\u064a \u0626\u0649\u067e\u0627\u062f\u0649\u0644\u0649\u0631\u0649 \u064a\u06c8\u0643\u0644\u0649\u0646\u0649\u06cb\u0627\u062a\u0649\u062f\u06c7...","Loading...":"\u064a\u06c8\u0643\u0644\u0649\u0646\u0649\u06cb\u0627\u062a\u0649\u062f\u06c7...","Lower Alpha":"\u0626\u0649\u0646\u06af\u0644\u0649\u0632\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649","Lower Greek":"\u06af\u0649\u0631\u06d0\u0643\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649","Lower Roman":"\u0631\u0649\u0645\u0686\u06d5 \u0643\u0649\u0686\u0649\u0643 \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649","Match case":"\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649 \u0645\u0627\u0633 \u0643\u06d0\u0644\u0649\u0634","Mathematical":"\u0645\u0627\u062a\u06d0\u0645\u0627\u062a\u0649\u0643\u0649\u0644\u0649\u0642","Media poster (Image URL)":"\u0645\u06d0\u062f\u0649\u064a\u0627 \u0645\u06c7\u0642\u0627\u06cb\u0649\u0633\u0649 (\u0631\u06d5\u0633\u0649\u0645 \u0626\u0627\u062f\u0631\u06d0\u0633\u0649)","Media...":"\u0645\u06d0\u062f\u0649\u064a\u0627...","Medium Blue":"\u0626\u0627\u0631\u0627 \u0643\u06c6\u0643","Medium Gray":"\u0626\u0648\u062a\u062a\u06c7\u0631\u06be\u0627\u0644 \u0643\u06c8\u0644\u0631\u06d5\u06ad","Medium Purple":"\u0626\u0627\u0631\u0627 \u0628\u0649\u0646\u06d5\u067e\u0634\u06d5","Merge cells":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u0628\u0649\u0631\u0644\u06d5\u0634\u062a\u06c8\u0631\u06c8\u0634","Middle":"\u0626\u0648\u062a\u062a\u06c7\u0631\u0649\u063a\u0627","Midnight Blue":"\u0642\u0627\u0631\u0627 \u0643\u06c6\u0643","More...":"\u062a\u06d0\u062e\u0649\u0645\u06c7 \u0643\u06c6\u067e...","Name":"\u0646\u0627\u0645\u0649","Navy Blue":"\u062f\u06d0\u06ad\u0649\u0632 \u0643\u06c6\u0643","New document":"\u064a\u06d0\u06ad\u0649 \u06be\u06c6\u062c\u062c\u06d5\u062a","New window":"\u064a\u06d0\u06ad\u0649 \u0643\u06c6\u0632\u0646\u06d5\u0643","Next":"\u0643\u06d0\u064a\u0649\u0646\u0643\u0649","No":"\u064a\u0627\u0642","No alignment":"\u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0646\u0645\u0649\u063a\u0627\u0646","No color":"\u0631\u06d5\u06ad \u064a\u0648\u0642","Nonbreaking space":"\u0626\u06c8\u0632\u06c8\u0644\u0645\u06d5\u0633 \u0628\u0648\u0634\u0644\u06c7\u0642","None":"\u064a\u0648\u0642","Numbered list":"\u0646\u0648\u0645\u06c7\u0631\u0644\u06c7\u0642 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643","OR":"\u064a\u0627\u0643\u0649","Objects":"\u0646\u06d5\u0631\u0633\u0649\u0644\u06d5\u0631","Ok":"\u0645\u0627\u0642\u06c7\u0644","Open help dialog":"\u064a\u0627\u0631\u062f\u06d5\u0645 \u062f\u0649\u064a\u0627\u0644\u0648\u06af\u0649\u0646\u0649 \u0626\u06d0\u0686\u0649\u0634","Open link":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0626\u06d0\u0686\u0649\u0634","Open link in...":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0626\u06d0\u0686\u0649\u0634 \u0626\u0648\u0631\u0646\u0649...","Open popup menu for split buttons":"\u0628\u06c6\u0644\u06c8\u0646\u0645\u06d5 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0649\u0644\u0627\u0631 \u0626\u06c8\u0686\u06c8\u0646 \u0633\u06d5\u0643\u0631\u0649\u0645\u06d5 \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0626\u06d0\u0686\u0649\u0634","Orange":"\u0642\u0649\u0632\u063a\u06c7\u0686 \u0633\u06d0\u0631\u0649\u0642","Outset":"\u0633\u0649\u0631\u062a\u0642\u0649","Page break":"\u0628\u06d5\u062a \u0626\u0627\u064a\u0631\u0649\u0634","Paragraph":"\u0626\u0627\u0628\u0632\u0627\u0633","Paste":"\u0686\u0627\u067e\u0644\u0627\u0634","Paste as text":"\u062a\u06d0\u0643\u0649\u0633\u062a \u0634\u06d5\u0643\u0644\u0649\u062f\u06d5 \u0686\u0627\u067e\u0644\u0627\u0634","Paste column after":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u0634","Paste column before":"\u0626\u0649\u0633\u062a\u0648\u0646 \u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u0634","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0686\u0627\u067e\u0644\u0627\u0634 \u06be\u0627\u0632\u0649\u0631 \u0633\u0627\u067e \u062a\u06d0\u0643\u0649\u0633\u062a \u06be\u0627\u0644\u0649\u062a\u0649\u062f\u06d5. \u0628\u06c7 \u062a\u0627\u0644\u0644\u0627\u0646\u0645\u0649\u0646\u0649 \u0626\u06d0\u062a\u0649\u06cb\u06d5\u062a\u0643\u0649\u0686\u06d5 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0644\u0627\u0631 \u0633\u0627\u067e \u062a\u06d0\u0643\u0649\u0633\u062a \u0628\u0648\u064a\u0649\u0686\u06d5 \u0686\u0627\u067e\u0644\u0649\u0646\u0649\u062f\u06c7.","Paste or type a link":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0627 \u0686\u0627\u067e\u0644\u0627\u06ad \u064a\u0627\u0643\u0649 \u0643\u0649\u0631\u06af\u06c8\u0632\u06c8\u06ad","Paste row after":"\u0642\u06c7\u0631 \u0626\u0627\u0631\u0642\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u0634","Paste row before":"\u0642\u06c7\u0631 \u0626\u0627\u0644\u062f\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u0634","Paste your embed code below:":"\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0627 \u0643\u0648\u062f\u0649\u06ad\u0649\u0632\u0646\u0649 \u0626\u0627\u0633\u062a\u0649\u063a\u0627 \u0686\u0627\u067e\u0644\u0627\u06ad:","People":"\u0626\u0627\u062f\u06d5\u0645\u0644\u06d5\u0631","Plugins":"\u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0644\u0627\u0631","Plugins installed ({0}):":"\u0642\u0627\u0686\u0649\u0644\u0627\u0646\u063a\u0627\u0646 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0644\u0627\u0631 ({0}):","Powered by {0}":"{0} \u062a\u06d5\u0645\u0649\u0646\u0644\u0649\u06af\u06d5\u0646","Pre":"Pre","Preferences":"\u0645\u0627\u064a\u0649\u0644\u0644\u0649\u0642\u0644\u0649\u0631\u0649","Preformatted":"\u0626\u0627\u0644\u062f\u0649\u0646 \u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0627\u0646\u063a\u0627\u0646","Premium plugins:":"\u0626\u0627\u0644\u0649\u064a \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0644\u0627\u0631:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u0643\u06c6\u0631\u06c8\u067e \u0628\u06d0\u0642\u0649\u0634","Previous":"\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649","Print":"\u0628\u06d0\u0633\u0649\u0634","Print...":"\u0628\u06d0\u0633\u0649\u0634...","Purple":"\u0628\u0649\u0646\u06d5\u067e\u0634\u06d5","Quotations":"\u0646\u06d5\u0642\u0649\u0644\u0644\u06d5\u0631","R":"R","Range 0 to 255":"\u062f\u0627\u0626\u0649\u0631\u0649\u0633\u0649 0 \u062f\u0649\u0646 255 \u06af\u0649\u0686\u06d5","Red":"\u0642\u0649\u0632\u0649\u0644","Red component":"\u0642\u0649\u0632\u0649\u0644 \u0628\u0649\u0631\u0649\u0643\u0645\u06d5","Redo":"\u062a\u06d5\u0643\u0631\u0627\u0631\u0644\u0627\u0634","Remove":"\u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634","Remove color":"\u0631\u06d5\u06ad\u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634","Remove link":"\u0626\u06c7\u0644\u0627\u0646\u0645\u0649\u0646\u0649 \u0686\u0649\u0642\u0649\u0631\u0649\u06cb\u06d0\u062a\u0649\u0634","Replace":"\u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634","Replace all":"\u06be\u06d5\u0645\u0645\u0649\u0646\u0649 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634","Replace with":"\u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634 \u0645\u06d5\u0632\u0645\u06c7\u0646\u0649","Resize":"\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649\u0646\u0649 \u0626\u06c6\u0632\u06af\u06d5\u0631\u062a\u0649\u0634","Restore last draft":"\u0626\u0627\u062e\u0649\u0631\u0642\u0649 \u0626\u0627\u0631\u06af\u0649\u0646\u0627\u0644\u0646\u0649 \u0626\u06d5\u0633\u0644\u0649\u06af\u06d5 \u0643\u06d5\u0644\u062a\u06c8\u0631\u06c8\u0634","Reveal or hide additional toolbar items":"","Rich Text Area":"\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0649\u0642 \u062a\u06d0\u0643\u0649\u0633\u062a \u0631\u0627\u064a\u0648\u0646\u0649","Rich Text Area. Press ALT-0 for help.":"\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0649\u0642 \u062a\u06d0\u0643\u0649\u0633\u062a \u0631\u0627\u064a\u0648\u0646\u0649. \u064a\u0627\u0631\u062f\u06d5\u0645 \u0626\u06c8\u0686\u06c8\u0646 ALT-0 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0649\u0642 \u062a\u06d0\u0643\u0649\u0633\u062a \u0631\u0627\u064a\u0648\u0646\u0649. \u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643 \u0626\u06c8\u0686\u06c8\u0646 ALT-F9 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad. \u0642\u0648\u0631\u0627\u0644\u0628\u0627\u0644\u062f\u0627\u0642 \u0626\u06c8\u0686\u06c8\u0646 ALT-F10 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad. \u064a\u0627\u0631\u062f\u06d5\u0645 \u0626\u06c8\u0686\u06c8\u0646 ALT-0 \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad","Ridge":"\u0642\u0649\u064a\u0627","Right":"\u0626\u0648\u06ad\u063a\u0627","Right to left":"\u0626\u0648\u06ad\u062f\u0649\u0646 \u0633\u0648\u0644\u063a\u0627","Row":"\u0642\u06c7\u0631","Row clipboard actions":"\u0642\u06c7\u0631 \u0643\u06c6\u0686\u06c8\u0631\u06c8\u0634 \u0645\u06d5\u0634\u063a\u06c7\u0644\u0627\u062a\u0649","Row group":"\u0642\u06c7\u0631 \u06af\u06c7\u0631\u06c7\u067e\u067e\u0649\u0633\u0649","Row header":"\u0642\u06c7\u0631 \u0642\u06d0\u0634\u0649","Row properties":"\u0642\u06c7\u0631 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649","Row type":"\u0642\u06c7\u0631 \u062a\u0649\u067e\u0649","Rows":"\u0642\u06c7\u0631\u0644\u0627\u0631","Save":"\u0633\u0627\u0642\u0644\u0627\u0634","Save (if save plugin activated)":"\u0633\u0627\u0642\u0644\u0627\u0634 (\u0633\u0627\u0642\u0644\u0627\u0634 \u0642\u0649\u0633\u062a\u06c7\u0631\u0645\u0649\u0633\u0649 \u0626\u0627\u0643\u062a\u0649\u067e\u0644\u0627\u0646\u063a\u0627\u0646 \u0628\u0648\u0644\u0633\u0627)","Scope":"\u062f\u0627\u0626\u0649\u0631\u06d5","Search":"\u0626\u0649\u0632\u062f\u06d5\u0634","Select all":"\u06be\u06d5\u0645\u0645\u0649\u0646\u0649 \u062a\u0627\u0644\u0644\u0627\u0634","Select...":"\u062a\u0627\u0644\u0644\u0627\u0634...","Selection":"\u062a\u0627\u0644\u0644\u0627\u0646\u063a\u0627\u0646","Shortcut":"\u0642\u0649\u0633\u0642\u0627 \u064a\u0648\u0644","Show blocks":"\u0628\u06c6\u0644\u06d5\u0643\u0644\u06d5\u0631\u0646\u0649 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634","Show caption":"\u062a\u06d0\u0645\u0649\u0633\u0649\u0646\u0649 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634","Show invisible characters":"\u064a\u0648\u0634\u06c7\u0631\u06c7\u0646 \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631\u0646\u0649 \u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u0634","Size":"\u0686\u0648\u06ad\u0644\u06c7\u0642\u0649","Solid":"\u067e\u06c8\u062a\u06c8\u0646 \u0633\u0649\u0632\u0649\u0642","Source":"\u0645\u06d5\u0646\u0628\u06d5","Source code":"\u0645\u06d5\u0646\u0628\u06d5 \u0643\u0648\u062f\u0649","Special Character":"\u0626\u0627\u0644\u0627\u06be\u0649\u062f\u06d5 \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631","Special character...":"\u0626\u0627\u0644\u0627\u06be\u0649\u062f\u06d5 \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631...","Split cell":"\u0643\u0627\u062a\u06d5\u0643\u0686\u06d5 \u067e\u0627\u0631\u0686\u0649\u0644\u0627\u0634","Square":"\u0643\u0649\u06cb\u0627\u062f\u0631\u0627\u062a","Start list at number":"\u062a\u0649\u0632\u0649\u0645\u0644\u0649\u0643\u0646\u0649 \u0633\u0627\u0646 \u0628\u0649\u0644\u06d5\u0646 \u0628\u0627\u0634\u0644\u0627\u0634","Strikethrough":"\u0626\u06c6\u0686\u06c8\u0631\u06c8\u0634 \u0633\u0649\u0632\u0649\u0642\u0649","Style":"\u0626\u06c7\u0633\u0644\u06c7\u0628","Subscript":"\u0626\u0627\u0633\u062a\u0628\u06d5\u0644\u06af\u06d5","Superscript":"\u0626\u06c8\u0633\u062a\u0628\u06d5\u0644\u06af\u06d5","Switch to or from fullscreen mode":"\u062a\u0648\u0644\u06c7\u0642 \u0626\u06d0\u0643\u0631\u0627\u0646 \u06be\u0627\u0644\u0649\u062a\u0649\u0646\u0649 \u0626\u0627\u0644\u0645\u0627\u0634\u062a\u06c7\u0631\u06c7\u0634","Symbols":"\u0628\u06d5\u0644\u06af\u0649\u0644\u06d5\u0631","System Font":"\u0633\u0649\u0633\u062a\u06d0\u0645\u0627 \u062e\u06d5\u062a \u0646\u06c7\u0633\u062e\u0649\u0633\u0649","Table":"\u062c\u06d5\u062f\u06cb\u06d5\u0644","Table caption":"\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u062a\u06d0\u0645\u0649\u0633\u0649","Table properties":"\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u062e\u0627\u0633\u0644\u0649\u0642\u0644\u0649\u0631\u0649","Table styles":"\u062c\u06d5\u062f\u06cb\u06d5\u0644 \u0626\u06c7\u0633\u0644\u06c7\u0628\u0644\u0649\u0631\u0649","Template":"\u0642\u06d0\u0644\u0649\u067e","Templates":"\u0642\u06d0\u0644\u0649\u067e\u0644\u0627\u0631","Text":"\u062a\u06d0\u0643\u0649\u0633\u062a","Text color":"\u062a\u06d0\u0643\u0649\u0633\u062a \u0631\u06d5\u06ad\u06af\u0649","Text color {0}":"","Text to display":"\u0643\u06c6\u0631\u0633\u0649\u062a\u0649\u062f\u0649\u063a\u0627\u0646 \u062a\u06d0\u0643\u0649\u0633\u062a","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 \u0626\u0627\u062f\u0631\u06d0\u0633 \u062a\u0648\u0631\u062e\u06d5\u062a \u0626\u0627\u062f\u0631\u06d0\u0633\u0649\u062f\u06d5\u0643 \u062a\u06c7\u0631\u0649\u062f\u06c7. \u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 mailto: \u0626\u0627\u0644\u062f\u0649 \u0642\u0648\u0634\u06c7\u0645\u0686\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0634\u0627\u0645\u0633\u0649\u0632\u061f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 \u0626\u0627\u062f\u0631\u06d0\u0633 \u0633\u0649\u0631\u062a\u0642\u0649 \u0626\u06c7\u0644\u0627\u0646\u0645\u0649\u062f\u06d5\u0643 \u062a\u06c7\u0631\u0649\u062f\u06c7. \u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 http:// \u0626\u0627\u0644\u062f\u0649 \u0642\u0648\u0634\u06c7\u0645\u0686\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0634\u0627\u0645\u0633\u0649\u0632\u061f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u0633\u0649\u0632 \u0643\u0649\u0631\u06af\u06c8\u0632\u06af\u06d5\u0646 \u0626\u0627\u062f\u0631\u06d0\u0633 \u0633\u0649\u0631\u062a\u0642\u0649 \u0626\u06c7\u0644\u0627\u0646\u0645\u0649\u062f\u06d5\u0643 \u062a\u06c7\u0631\u0649\u062f\u06c7. \u062a\u06d5\u0644\u06d5\u067e \u0642\u0649\u0644\u0649\u0646\u063a\u0627\u0646 https:// \u0626\u0627\u0644\u062f\u0649 \u0642\u0648\u0634\u06c7\u0645\u0686\u0649\u0633\u0649\u0646\u0649 \u0642\u0648\u0634\u0627\u0645\u0633\u0649\u0632\u061f","Title":"\u062a\u06d0\u0645\u0649\u0633\u0649","To open the popup, press Shift+Enter":"\u0633\u06d5\u0643\u0631\u0649\u0645\u06d5 \u0643\u06c6\u0632\u0646\u06d5\u0643\u0646\u0649 \u0626\u06d0\u0686\u0649\u0634 \u0626\u06c8\u0686\u06c8\u0646 Shift+Enter \u0646\u0649 \u0628\u06d0\u0633\u0649\u06ad","Toggle accordion":"","Tools":"\u0642\u0648\u0631\u0627\u0644\u0644\u0627\u0631","Top":"\u0626\u06c8\u0633\u062a\u0649\u06af\u06d5","Travel and Places":"\u0633\u0627\u064a\u0627\u06be\u06d5\u062a \u06cb\u06d5 \u062c\u0627\u064a\u0644\u0627\u0631","Turquoise":"\u0643\u06c6\u0643\u06c8\u0686 \u064a\u06d0\u0634\u0649\u0644","Underline":"\u0626\u0627\u0633\u062a\u0649 \u0633\u0649\u0632\u0649\u0642","Undo":"\u064a\u06d0\u0646\u0649\u06cb\u06d0\u0644\u0649\u0634","Upload":"\u064a\u06c8\u0643\u0644\u06d5\u0634","Uploading image":"\u0631\u06d5\u0633\u0649\u0645 \u064a\u06c8\u0643\u0644\u06d5\u06cb\u0627\u062a\u0649\u062f\u06c7","Upper Alpha":"\u0626\u0649\u0646\u06af\u0644\u0649\u0632\u0686\u06d5 \u0686\u0648\u06ad \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649","Upper Roman":"\u0631\u0649\u0645\u0686\u06d5 \u0686\u0648\u06ad \u064a\u06d0\u0632\u0649\u0644\u0649\u0634\u0649","Url":"\u0626\u0627\u062f\u0631\u06d0\u0633\u0649","User Defined":"\u0626\u0649\u0634\u0644\u06d5\u062a\u0643\u06c8\u0686\u0649 \u0628\u06d5\u0644\u06af\u0649\u0644\u0649\u06af\u06d5\u0646","Valid":"\u0626\u06c8\u0646\u06c8\u0645\u0644\u06c8\u0643","Version":"\u0646\u06d5\u0634\u0631\u0649","Vertical align":"\u06cb\u06d0\u0631\u062a\u0649\u0643\u0627\u0644 \u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","Vertical space":"\u06cb\u06d0\u0631\u062a\u0649\u0643\u0627\u0644 \u0628\u0648\u0634\u0644\u06c7\u0642","View":"\u0643\u06c6\u0631\u06c8\u0646\u06c8\u0634","Visual aids":"\u0643\u06c6\u0631\u06c8\u0646\u0645\u06d5 \u0642\u0648\u0631\u0627\u0644\u0644\u0627\u0631","Warn":"\u0626\u0627\u06af\u0627\u06be\u0644\u0627\u0646\u062f\u06c7\u0631\u06c7\u0634","White":"\u0626\u0627\u0642","Width":"\u0643\u06d5\u06ad\u0644\u0649\u0643\u0649","Word count":"\u0633\u06c6\u0632 \u0633\u0627\u0646\u0649","Words":"\u0633\u06c6\u0632\u0644\u06d5\u0631","Words: {0}":"\u0633\u06c6\u0632\u0644\u06d5\u0631: {0}","Yellow":"\u0633\u06d0\u0631\u0649\u0642","Yes":"\u06be\u06d5\u0626\u06d5","You are using {0}":"\u0626\u0649\u0634\u0644\u0649\u062a\u0649\u06cb\u0627\u062a\u0642\u0649\u0646\u0649\u06ad\u0649\u0632 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0633\u0627\u0642\u0644\u0627\u0646\u0645\u0649\u063a\u0627\u0646 \u0626\u06c6\u0632\u06af\u06d5\u0631\u062a\u0649\u0634\u0644\u0649\u0631\u0649\u06ad\u0649\u0632 \u0628\u0627\u0631\u060c \u0631\u0627\u0633\u062a\u062a\u0649\u0646\u0644\u0627 \u0626\u0627\u064a\u0631\u0649\u0644\u0627\u0645\u0633\u0649\u0632\u061f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u062a\u0648\u0631 \u0643\u06c6\u0631\u06af\u06c8\u0686\u0649\u06ad\u0649\u0632 \u0643\u06d0\u0633\u0649\u0634 \u062a\u0627\u062e\u062a\u0649\u0633\u0649\u0646\u0649 \u0628\u0649\u06cb\u0627\u0633\u0649\u062a\u06d5 \u0632\u0649\u064a\u0627\u0631\u06d5\u062a \u0642\u0649\u0644\u0627\u0644\u0645\u0627\u064a\u062f\u06c7. \u0626\u06c7\u0646\u0649\u06ad \u0626\u0648\u0631\u0646\u0649\u063a\u0627 Ctrl+X/C/V \u062a\u06d0\u0632\u0644\u06d5\u062a\u0645\u06d5 \u0643\u06c7\u0646\u06c7\u067e\u0643\u0649\u0644\u0649\u0631\u0649\u0646\u0649 \u0626\u0649\u0634\u0644\u0649\u062a\u0649\u06ad.","alignment":"\u062a\u0648\u063a\u0631\u0649\u0644\u0627\u0634","austral sign":"\u0626\u0627\u06cb\u0633\u062a\u0631\u0627\u0644\u0649\u064a\u06d5 \u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","cedi sign":"\u0633\u06d0\u062f\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","colon sign":"\u0642\u0648\u0634 \u0686\u06d0\u0643\u0649\u062a \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","cruzeiro sign":"\u0643\u0631\u06c7 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","currency sign":"\u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","dollar sign":"\u062f\u0648\u0644\u0644\u0627\u0631 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","dong sign":"\u06cb\u0649\u064a\u06d0\u062a\u0646\u0627\u0645 \u062f\u0648\u06ad\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","drachma sign":"\u062f\u0649\u0631\u0627\u062e\u0645\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","euro-currency sign":"\u064a\u0627\u06cb\u0631\u0648 \u067e\u06c7\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","example":"\u0645\u06d5\u0633\u0649\u0644\u06d5\u0646","formatting":"\u0641\u0648\u0631\u0645\u0627\u062a\u0644\u0627\u0634","french franc sign":"\u0641\u0649\u0631\u0627\u0646\u0633\u0649\u064a\u06d5 \u0641\u0649\u0631\u0627\u0646\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","german penny symbol":"\u06af\u06d0\u0631\u0645\u0627\u0646\u0649\u064a\u06d5 \u067e\u06d0\u0646\u0646\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","guarani sign":"\u06af\u06c7\u0626\u0627\u0631\u0627\u0646\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","history":"\u062a\u0627\u0631\u0649\u062e\u0649\u064a \u0626\u06c7\u0686\u06c7\u0631","hryvnia sign":"hryvnia \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","indentation":"\u062a\u0627\u0631\u0627\u064a\u062a\u0649\u0634","indian rupee sign":"\u06be\u0649\u0646\u062f\u0649\u0633\u062a\u0627\u0646 \u0631\u06c7\u067e\u0649\u064a\u06d5 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","kip sign":"\u0643\u0649\u067e \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","lira sign":"\u0644\u0649\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","livre tournois sign":"livre tournois \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","manat sign":"manat \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","mill sign":"\u0645\u0649\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","naira sign":"\u0646\u0627\u064a\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","new sheqel sign":"\u064a\u06d0\u06ad\u0649 \u0634\u0649\u0643\u0649\u0644 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","nordic mark sign":"\u0634\u0649\u0645\u0627\u0644\u0649\u064a \u064a\u0627\u06cb\u0631\u0648\u067e\u0627 \u0645\u0627\u0631\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","peseta sign":"\u067e\u06d0\u0633\u06d0\u062a\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","peso sign":"\u067e\u06d0\u0633\u0648 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","ruble sign":"\u0631\u06c7\u0628\u0644\u0649 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","rupee sign":"\u0631\u06c7\u067e\u0649\u064a\u06d5 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","spesmilo sign":"spesmilo \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","styles":"\u0626\u06c7\u0633\u0644\u06c7\u0628\u0644\u0627\u0631","tenge sign":"tenge \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","tugrik sign":"\u062a\u06c8\u06af\u0631\u0649\u0643 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","turkish lira sign":"\u062a\u06c8\u0631\u0643\u0649\u064a\u06d5 \u0644\u0649\u0631\u0627 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","won sign":"\u06cb\u0648\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","yen character":"\u064a\u06d0\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","yen/yuan character variant one":"\u064a\u06d0\u0646 \u06cb\u06d5 \u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","yuan character":"\u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649","yuan character, in hong kong and taiwan":"\u064a\u06c8\u06d5\u0646 \u0628\u06d5\u0644\u06af\u0649\u0633\u0649 (\u0634\u064a\u0627\u06ad\u06af\u0627\u06ad \u06cb\u06d5 \u062a\u06d5\u064a\u06cb\u06d5\u0646)","{0} characters":"{0} \u06be\u06d5\u0631\u067e-\u0628\u06d5\u0644\u06af\u06d5","{0} columns, {1} rows":"","{0} words":"{0} \u0633\u06c6\u0632"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/uk.js b/staticfiles/tinymce/langs/uk.js new file mode 100644 index 0000000..fb10296 --- /dev/null +++ b/staticfiles/tinymce/langs/uk.js @@ -0,0 +1 @@ +tinymce.addI18n("uk",{"#":"#","Accessibility":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c","Accordion":'\u041c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"',"Accordion body...":'\u0422\u0435\u043a\u0441\u0442 \u043c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"...',"Accordion summary...":'\u0417\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"...',"Action":"\u0414\u0456\u044f","Activity":"\u0410\u043a\u0442\u0438\u0432\u043d\u0456\u0441\u0442\u044c","Address":"\u0410\u0434\u0440\u0435\u0441\u0430","Advanced":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","Align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","Align center":"\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","Align left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","Align right":"\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u0437\u0430 \u043f\u0440\u0430\u0432\u0438\u043c \u043a\u0440\u0430\u0454\u043c","Alignment":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","Alignment {0}":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f {0}","All":"\u0412\u0441\u0435","Alternative description":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441","Alternative source":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e","Alternative source URL":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e","Anchor":"\u042f\u043a\u0456\u0440","Anchor...":"\u042f\u043a\u0456\u0440\u2026","Anchors":"\u042f\u043a\u043e\u0440\u0456","Animals and Nature":"\u0422\u0432\u0430\u0440\u0438\u043d\u0438 \u0442\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0430","Arrows":"\u0421\u0442\u0440\u0456\u043b\u043a\u0438","B":"\u0421\u0438\u043d\u0456\u0439","Background color":"\u041a\u043e\u043b\u0456\u0440 \u0442\u043b\u0430","Background color {0}":"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443 {0}","Black":"\u0427\u043e\u0440\u043d\u0438\u0439","Block":"\u0411\u043b\u043e\u043a","Block {0}":"\u0411\u043b\u043e\u043a {0}","Blockquote":"\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f","Blocks":"\u0411\u043b\u043e\u043a\u0438","Blue":"\u0421\u0438\u043d\u0456\u0439","Blue component":"\u0421\u0438\u043d\u0456\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Body":"\u0422\u0456\u043b\u043e","Bold":"\u0416\u0438\u0440\u043d\u0438\u0439","Border":"\u041c\u0435\u0436\u0430","Border color":"\u041a\u043e\u043b\u0456\u0440 \u043c\u0435\u0436\u0456","Border style":"\u0421\u0442\u0438\u043b\u044c \u043c\u0435\u0436\u0456","Border width":"\u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u0435\u0436\u0456","Bottom":"\u0417\u043d\u0438\u0437\u0443","Browse files":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u0444\u0430\u0439\u043b\u0438","Browse for an image":"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","Browse links":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","Bullet list":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","Cancel":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438","Caption":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","Cell":"\u041a\u043e\u043c\u0456\u0440\u043a\u0430","Cell padding":"\u041f\u043e\u043b\u044f \u043a\u043e\u043c\u0456\u0440\u043e\u043a","Cell properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","Cell spacing":"\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438","Cell styles":"\u0421\u0442\u0438\u043b\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","Cell type":"\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438","Center":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","Characters":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438","Characters (no spaces)":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0456\u043b\u0456\u0432)","Circle":"\u041a\u043e\u043b\u043e","Class":"\u041a\u043b\u0430\u0441","Clear formatting":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","Close":"\u0417\u0430\u043a\u0440\u0438\u0442\u0438","Code":"\u041a\u043e\u0434","Code sample...":"\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443\u2026","Code view":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 \u043a\u043e\u0434\u0443","Color Picker":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443","Color swatch":"\u0417\u0440\u0430\u0437\u043e\u043a \u043a\u043e\u043b\u044c\u043e\u0440\u0443","Cols":"\u0421\u0442\u043e\u0432\u043f\u0446\u0456","Column":"\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c","Column clipboard actions":"\u0414\u0456\u0457 \u0437 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043e\u0431\u043c\u0456\u043d\u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432","Column group":"\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432","Column header":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u0432\u043f\u0446\u044f","Constrain proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457","Copy":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","Copy column":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0443","Copy row":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","Could not find the specified string.":"\u0412\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","Could not load emojis":"\u041d\u0435 \u043c\u043e\u0436\u0443 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0435\u043c\u043e\u0434\u0436\u0456","Count":"\u041b\u0456\u0447\u0438\u043b\u044c\u043d\u0438\u043a","Currency":"\u0412\u0430\u043b\u044e\u0442\u0430","Current window":"\u0423 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","Custom color":"\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u0456\u0440","Custom...":"\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439\u2026","Cut":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438","Cut column":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0443","Cut row":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","Dark Blue":"\u0422\u0435\u043c\u043d\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439","Dark Gray":"\u0422\u0435\u043c\u043d\u043e-\u0441\u0456\u0440\u0438\u0439","Dark Green":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439","Dark Orange":"\u0422\u0435\u043c\u043d\u043e-\u043f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439","Dark Purple":"\u0422\u0435\u043c\u043d\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439","Dark Red":"\u0422\u0435\u043c\u043d\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439","Dark Turquoise":"\u0422\u0435\u043c\u043d\u043e-\u0431\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439","Dark Yellow":"\u0422\u0435\u043c\u043d\u043e-\u0436\u043e\u0432\u0442\u0438\u0439","Dashed":"\u0428\u0442\u0440\u0438\u0445\u043e\u0432\u0430","Date/time":"\u0414\u0430\u0442\u0430/\u0447\u0430\u0441","Decrease indent":"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","Default":"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c","Delete accordion":'\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"',"Delete column":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c","Delete row":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","Delete table":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","Dimensions":"\u0420\u043e\u0437\u043c\u0456\u0440\u0438","Disc":"\u0414\u0438\u0441\u043a","Div":"\u0420\u043e\u0437\u0434\u0456\u043b","Document":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442","Dotted":"\u041f\u0443\u043d\u043a\u0442\u0438\u0440\u043d\u0430","Double":"\u041f\u043e\u0434\u0432\u0456\u0439\u043d\u0430","Drop an image here":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u044e\u0434\u0438","Dropped file type is not supported":"\u041d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454\u0442\u044c\u0441\u044f \u0441\u043a\u0438\u043d\u0443\u0442\u0438\u0439 \u0442\u0438\u043f \u0444\u0430\u0439\u043b\u0443","Edit":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438","Embed":"\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438","Emojis":"\u0415\u043c\u043e\u0434\u0436\u0456","Emojis...":"\u0415\u043c\u043e\u0434\u0436\u0456...","Error":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430","Error: Form submit field collision.":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043a\u043e\u043b\u0456\u0437\u0456\u044f \u043f\u043e\u043b\u044f \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438.","Error: No form element found.":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0444\u043e\u0440\u043c\u0438.","Extended Latin":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044f","Failed to initialize plugin: {0}":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0}","Failed to load plugin url: {0}":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043b\u0430\u0491\u0456\u043d: {0}","Failed to load plugin: {0} from url {1}":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0} \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c {1}","Failed to upload image: {0}":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0432\u0456\u0434\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f: {0}","File":"\u0424\u0430\u0439\u043b","Find":"\u0417\u043d\u0430\u0439\u0442\u0438","Find (if searchreplace plugin activated)":"\u0417\u043d\u0430\u0439\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0491\u0456\u043d \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)","Find and Replace":"\u0417\u043d\u0430\u0439\u0442\u0438 \u0456 \u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438","Find and replace...":"\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0456\u043d\u0430\u2026","Find in selection":"\u0417\u043d\u0430\u0439\u0442\u0438 \u0443 \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u043e\u043c\u0443","Find whole words only":"\u0428\u0443\u043a\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0446\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430","Flags":"\u041f\u0440\u0430\u043f\u043e\u0440\u0438","Focus to contextual toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0456\u0439 \u043f\u0430\u043d\u0435\u043b\u0456","Focus to element path":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445\u0443 \u0434\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430","Focus to menubar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043c\u0435\u043d\u044e","Focus to toolbar":"\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432","Font":"\u0428\u0440\u0438\u0444\u0442","Font size {0}":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443 {0}","Font sizes":"\u0420\u043e\u0437\u043c\u0456\u0440\u0438 \u0448\u0440\u0438\u0444\u0442\u0456\u0432","Font {0}":"\u0428\u0440\u0438\u0444\u0442 {0}","Fonts":"\u0428\u0440\u0438\u0444\u0442\u0438","Food and Drink":"\u0407\u0436\u0430 \u0442\u0430 \u043d\u0430\u043f\u043e\u0457","Footer":"\u041d\u0438\u0436\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b","Format":"\u0424\u043e\u0440\u043c\u0430\u0442","Format {0}":"\u0424\u043e\u0440\u043c\u0430\u0442 {0}","Formats":"\u0424\u043e\u0440\u043c\u0430\u0442\u0438","Fullscreen":"\u041d\u0430 \u0432\u0435\u0441\u044c \u0435\u043a\u0440\u0430\u043d","G":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439","General":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456","Gray":"\u0421\u0456\u0440\u0438\u0439","Green":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439","Green component":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Groove":"\u041a\u0430\u043d\u0430\u0432\u043a\u0430","Handy Shortcuts":"\u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448","Header":"\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b","Header cell":"\u041a\u043b\u0456\u0442\u0438\u043d\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430","Heading 1":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1","Heading 2":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2","Heading 3":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3","Heading 4":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4","Heading 5":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5","Heading 6":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6","Headings":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438","Height":"\u0412\u0438\u0441\u043e\u0442\u0430","Help":"\u0414\u043e\u0432\u0456\u0434\u043a\u0430","Hex color code":"\u041a\u043e\u043b\u0456\u0440\u043d\u0438\u0439 \u043a\u043e\u0434","Hidden":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u043e","Horizontal align":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","Horizontal line":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043b\u0456\u043d\u0456\u044f","Horizontal space":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043c\u0430\u0454 \u043f\u043e\u0447\u0438\u043d\u0430\u0442\u0438\u0441\u044f \u0437 \u043b\u0456\u0442\u0435\u0440\u0438, \u0437\u0430 \u044f\u043a\u043e\u044e \u0439\u0434\u0443\u0442\u044c \u043b\u0438\u0448\u0435 \u043b\u0456\u0442\u0435\u0440\u0438, \u0446\u0438\u0444\u0440\u0438, \u0442\u0438\u0440\u0435, \u043a\u0440\u0430\u043f\u043a\u0438, \u0434\u0432\u043e\u043a\u0440\u0430\u043f\u043a\u0438 \u0430\u0431\u043e \u043f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f.","Image is decorative":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u0435","Image list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","Image title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","Image...":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u2026","ImageProxy HTTP error: Could not find Image Proxy":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430 HTTP ImageProxy: \u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u043d\u0430\u0439\u0442\u0438 Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430 HTTP Image Proxy: \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u043e\u043a\u0441\u0456-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","ImageProxy HTTP error: Rejected request":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430 HTTP ImageProxy: \u0412\u0456\u0434\u0445\u0438\u043b\u0435\u043d\u043e \u0437\u0430\u043f\u0438\u0442","ImageProxy HTTP error: Unknown ImageProxy error":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430 HTTP ImageProxy: \u041d\u0435\u0432\u0456\u0434\u043e\u043c\u0430 \u043f\u043e\u043c\u0438\u043b\u043a\u0430 ImageProxy","Increase indent":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","Inline":"\u0420\u044f\u0434\u043a\u043e\u0432\u0438\u0439","Insert":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","Insert Template":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d","Insert accordion":'\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"',"Insert column after":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447","Insert column before":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043b\u0456\u0432\u043e\u0440\u0443\u0447","Insert date/time":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443/\u0447\u0430\u0441","Insert image":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","Insert link (if link plugin activated)":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0491\u0456\u043d \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)","Insert row after":"\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u043d\u0438\u0437\u0443","Insert row before":"\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443","Insert table":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","Insert template...":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u2026","Insert video":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0432\u0456\u0434\u0435\u043e","Insert/Edit code sample":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443","Insert/edit image":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","Insert/edit link":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","Insert/edit media":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u0434\u0456\u0430","Insert/edit video":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043e","Inset":"\u0412\u043a\u043b\u0430\u0434\u043a\u0430","Invalid hex color code: {0}":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 hex-\u043a\u043e\u0434 \u043a\u043e\u043b\u044c\u043e\u0440\u0443: {0}","Invalid input":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 \u0432\u0432\u0456\u0434","Italic":"\u041a\u0443\u0440\u0441\u0438\u0432","Justify":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","Keyboard Navigation":"\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0438","Language":"\u041c\u043e\u0432\u0430","Learn more...":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u2026","Left":"\u041b\u0456\u0432\u043e\u0440\u0443\u0447","Left to right":"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","Light Blue":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0438\u043d\u0456\u0439","Light Gray":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0456\u0440\u0438\u0439","Light Green":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439","Light Purple":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439","Light Red":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439","Light Yellow":"\u0421\u0432\u0456\u0442\u043b\u043e-\u0436\u043e\u0432\u0442\u0438\u0439","Line height":"\u0412\u0438\u0441\u043e\u0442\u0430 \u0440\u044f\u0434\u043a\u0430","Link list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","Link...":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u2026","List Properties":"\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439","List properties...":"\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439...","Loading emojis...":"\u0415\u043c\u043e\u0434\u0436\u0456 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u044e\u0442\u044c\u0441\u044f...","Loading...":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f...","Lower Alpha":"\u041c\u0430\u043b\u0456 \u043b\u0456\u0442\u0435\u0440\u0438","Lower Greek":"\u041c\u0430\u043b\u0456 \u0433\u0440\u0435\u0446\u044c\u043a\u0456 \u043b\u0456\u0442\u0435\u0440\u0438","Lower Roman":"\u041c\u0430\u043b\u0456 \u0440\u0438\u043c\u0441\u044c\u043a\u0456 \u043b\u0456\u0442\u0435\u0440\u0438","Match case":"\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0433\u0456\u0441\u0442\u0440","Mathematical":"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438","Media poster (Image URL)":"\u0421\u0432\u0456\u0442\u043b\u0438\u043d\u0430 \u043c\u0435\u0434\u0456\u0430 (\u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f)","Media...":"\u041c\u0435\u0434\u0456\u0430\u2026","Medium Blue":"\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0438\u043d\u0456\u0439","Medium Gray":"\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0456\u0440\u0438\u0439","Medium Purple":"\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439","Merge cells":"\u041e\u0431\u2019\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","Middle":"\u041f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0456","Midnight Blue":"\u041e\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0431\u043b\u0430\u043a\u0438\u0442\u044c","More...":"\u0411\u0456\u043b\u044c\u0448\u0435\u2026","Name":"\u041d\u0430\u0437\u0432\u0430","Navy Blue":"\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0456\u0439","New document":"\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","New window":"\u0423 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","Next":"\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439","No":"\u041d\u0456","No alignment":"\u0411\u0435\u0437 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","No color":"\u0411\u0435\u0437 \u043a\u043e\u043b\u044c\u043e\u0440\u0443","Nonbreaking space":"\u041d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0431\u0456\u043b","None":"\u041d\u0435\u043c\u0430\u0454","Numbered list":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","OR":"\u0410\u0411\u041e","Objects":"\u041e\u0431\u2019\u0454\u043a\u0442\u0438","Ok":"\u0413\u0430\u0440\u0430\u0437\u0434","Open help dialog":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432\u0456\u043a\u043d\u043e \u0434\u043e\u0432\u0456\u0434\u043a\u0438","Open link":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","Open link in...":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0432\u2026","Open popup menu for split buttons":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0441\u043f\u043b\u0438\u0432\u0430\u044e\u0447\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0440\u043e\u0437\u0434\u0456\u043b\u0435\u043d\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a","Orange":"\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439","Outset":"\u041d\u0430 \u043f\u043e\u0447\u0430\u0442\u043a\u0443","Page break":"\u0420\u043e\u0437\u0440\u0438\u0432 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438","Paragraph":"\u0410\u0431\u0437\u0430\u0446","Paste":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","Paste as text":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442","Paste column after":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447","Paste column before":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043b\u0456\u0432\u043e\u0440\u0443\u0447","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u0454\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443, \u043f\u043e\u043a\u0438 \u0434\u0430\u043d\u0443 \u043e\u043f\u0446\u0456\u044e \u043d\u0435 \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043e.","Paste or type a link":"\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0430\u0431\u043e \u0432\u0441\u0442\u0430\u0432\u0442\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","Paste row after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u0437\u043d\u0438\u0437\u0443","Paste row before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u0437\u0432\u0435\u0440\u0445\u0443","Paste your embed code below:":"\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0447\u0435:","People":"\u041b\u044e\u0434\u0438","Plugins":"\u041f\u043b\u0430\u0491\u0456\u043d\u0438","Plugins installed ({0}):":"\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456 \u043f\u043b\u0430\u0491\u0456\u043d\u0438 ({0}):","Powered by {0}":"\u0417\u0430\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 {0}","Pre":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","Preferences":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438","Preformatted":"\u0424\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439","Premium plugins:":"\u041f\u0440\u0435\u043c\u0456\u0443\u043c \u043f\u043b\u0430\u0491\u0456\u043d\u0438:","Press the Up and Down arrow keys to resize the editor.":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u043a\u043b\u0430\u0432\u0456\u0448\u0456 \u0437\u0456 \u0441\u0442\u0440\u0456\u043b\u043a\u0430\u043c\u0438 \u0432\u0433\u043e\u0440\u0443 \u0442\u0430 \u0432\u043d\u0438\u0437, \u0449\u043e\u0431 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.","Press the arrow keys to resize the editor.":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u043a\u043b\u0430\u0432\u0456\u0448\u0456 \u0437\u0456 \u0441\u0442\u0440\u0456\u043b\u043a\u0430\u043c\u0438, \u0449\u043e\u0431 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.","Press {0} for help":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c {0}, \u0449\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0434\u043e\u0432\u0456\u0434\u043a\u0443","Preview":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434","Previous":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439","Print":"\u0414\u0440\u0443\u043a","Print...":"\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438\u2026","Purple":"\u0424\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439","Quotations":"\u0426\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f","R":"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439","Range 0 to 255":"\u0414\u0456\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0456\u0434 0 \u0434\u043e 255","Red":"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439","Red component":"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442","Redo":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438","Remove":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438","Remove color":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u043e\u043b\u0456\u0440","Remove link":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","Replace":"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438","Replace all":"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435","Replace with":"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430","Resize":"\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440","Restore last draft":"\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043e\u0441\u0442\u0430\u043d\u043d\u044c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443","Reveal or hide additional toolbar items":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0430\u0431\u043e \u043f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432","Rich Text Area":"\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0440\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443","Rich Text Area. Press ALT-0 for help.":"\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT\xa0+\xa00, \u0449\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0434\u043e\u0432\u0456\u0434\u043a\u0443.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT\xa0+\xa0F9, \u0449\u043e\u0431 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 \u043c\u0435\u043d\u044e, ALT\xa0+\xa0F10 \u2014 \u043f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432, ALT\xa0+\xa00 \u2014 \u0434\u043e\u0432\u0456\u0434\u043a\u0443.","Ridge":"\u0412\u0438\u0441\u0442\u0443\u043f","Right":"\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447","Right to left":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","Row":"\u0420\u044f\u0434\u043e\u043a","Row clipboard actions":"\u0414\u0456\u0457 \u0437 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043e\u0431\u043c\u0456\u043d\u0443 \u0440\u044f\u0434\u043a\u0456\u0432","Row group":"\u0413\u0440\u0443\u043f\u0430 \u0440\u044f\u0434\u043a\u0456\u0432","Row header":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0440\u044f\u0434\u043a\u0430","Row properties":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0440\u044f\u0434\u043a\u0430","Row type":"\u0422\u0438\u043f \u0440\u044f\u0434\u043a\u0430","Rows":"\u0420\u044f\u0434\u043a\u0438","Save":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438","Save (if save plugin activated)":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0491\u0456\u043d \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)","Scope":"\u041e\u0431\u043b\u0430\u0441\u0442\u044c","Search":"\u041f\u043e\u0448\u0443\u043a","Select all":"\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435","Select...":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438\u2026","Selection":"\u0412\u0438\u0434\u0456\u043b\u0435\u043d\u043d\u044f","Shortcut":"\u042f\u0440\u043b\u0438\u043a","Show blocks":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u0438","Show caption":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","Show invisible characters":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438","Size":"\u0420\u043e\u0437\u043c\u0456\u0440","Solid":"\u0421\u0443\u0446\u0456\u043b\u044c\u043d\u0430","Source":"\u0414\u0436\u0435\u0440\u0435\u043b\u043e","Source code":"\u0412\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u043a\u043e\u0434","Special Character":"\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","Special character...":"\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u2026","Split cell":"\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0443","Square":"\u041a\u0432\u0430\u0434\u0440\u0430\u0442","Start list at number":"\u041f\u043e\u0447\u0430\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0437 \u043d\u043e\u043c\u0435\u0440\u0430","Strikethrough":"\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f","Style":"\u0421\u0442\u0438\u043b\u044c","Subscript":"\u041f\u0456\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","Superscript":"\u041d\u0430\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","Switch to or from fullscreen mode":"\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0443","Symbols":"\u0421\u0438\u043c\u0432\u043e\u043b\u0438","System Font":"\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u0439 \u0448\u0440\u0438\u0444\u0442","Table":"\u0422\u0430\u0431\u043b\u0438\u0446\u044f","Table caption":"\u041f\u0456\u0434\u043f\u0438\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","Table properties":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","Table styles":"\u0421\u0442\u0438\u043b\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","Template":"\u0428\u0430\u0431\u043b\u043e\u043d","Templates":"\u0428\u0430\u0431\u043b\u043e\u043d\u0438","Text":"\u0422\u0435\u043a\u0441\u0442","Text color":"\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","Text color {0}":"\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443 {0}","Text to display":"\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0443\u0432\u0430\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 \xabmailto:\xbb?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 \xabhttp://\xbb?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":'\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0412\u0438 \u0432\u0432\u0435\u043b\u0438 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 "https://"?',"Title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","To open the popup, press Shift+Enter":"\u0429\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0441\u043f\u043b\u0438\u0432\u043d\u0435 \u0432\u0456\u043a\u043d\u043e, \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c Shift\xa0+\xa0Enter","Toggle accordion":'\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u043e \u0432\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u043c\u0435\u043d\u044e "\u0410\u043a\u043e\u0440\u0434\u0435\u043e\u043d"',"Tools":"\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","Top":"\u0412\u0433\u043e\u0440\u0456","Travel and Places":"\u041f\u043e\u0434\u043e\u0440\u043e\u0436\u0456 \u0456 \u043c\u0456\u0441\u0446\u044f","Turquoise":"\u0411\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439","Underline":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f","Undo":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438","Upload":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438","Uploading image":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","Upper Alpha":"\u0412\u0435\u043b\u0438\u043a\u0456 \u043b\u0456\u0442\u0435\u0440\u0438","Upper Roman":"\u0412\u0435\u043b\u0438\u043a\u0456 \u0440\u0438\u043c\u0441\u044c\u043a\u0456 \u043b\u0456\u0442\u0435\u0440\u0438","Url":"\u0410\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","User Defined":"\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c","Valid":"\u0412\u0456\u0440\u043d\u0438\u0439","Version":"\u0412\u0435\u0440\u0441\u0456\u044f","Vertical align":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","Vertical space":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b","View":"\u0412\u0438\u0433\u043b\u044f\u0434","Visual aids":"\u041d\u0430\u043e\u0447\u043d\u0456 \u043f\u0440\u0438\u043b\u0430\u0434\u0434\u044f","Warn":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f","White":"\u0411\u0456\u043b\u0438\u0439","Width":"\u0428\u0438\u0440\u0438\u043d\u0430","Word count":"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432","Words":"\u0421\u043b\u043e\u0432\u0430","Words: {0}":"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432: {0}","Yellow":"\u0416\u043e\u0432\u0442\u0438\u0439","Yes":"\u0422\u0430\u043a","You are using {0}":"\u0412\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u0435 {0}","You have unsaved changes are you sure you want to navigate away?":"\u0423 \u0432\u0430\u0441 \u0454 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u0437\u043c\u0456\u043d\u0438. \u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u043f\u0456\u0442\u0438?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u043f\u0440\u044f\u043c\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0456\u043d\u0443. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043d\u0430\u0442\u043e\u043c\u0456\u0441\u0442\u044c \u0441\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl\xa0+\xa0C/V/X.","alignment":"\u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","austral sign":"\u0437\u043d\u0430\u043a \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u044e","cedi sign":"\u0437\u043d\u0430\u043a \u0441\u0435\u0434\u0456","colon sign":"\u0437\u043d\u0430\u043a \u0434\u0432\u043e\u043a\u0440\u0430\u043f\u043a\u0438","cruzeiro sign":"\u0437\u043d\u0430\u043a \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e","currency sign":"\u0437\u043d\u0430\u043a \u0432\u0430\u043b\u044e\u0442\u0438","dollar sign":"\u0437\u043d\u0430\u043a \u0434\u043e\u043b\u0430\u0440\u0430","dong sign":"\u0437\u043d\u0430\u043a \u0434\u043e\u043d\u0433\u0443","drachma sign":"\u0437\u043d\u0430\u043a \u0434\u0440\u0430\u0445\u043c\u0438","euro-currency sign":"\u0437\u043d\u0430\u043a \u0454\u0432\u0440\u043e","example":"\u043f\u0440\u0438\u043a\u043b\u0430\u0434","formatting":"\u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","french franc sign":"\u0437\u043d\u0430\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0443","german penny symbol":"\u0417\u043d\u0430\u043a \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u043e\u0433\u043e \u043f\u0435\u043d\u043d\u0456","guarani sign":"\u0417\u043d\u0430\u043a \u0433\u0443\u0430\u0440\u0430\u043d\u0456","history":"\u0456\u0441\u0442\u043e\u0440\u0456\u044f","hryvnia sign":"\u0437\u043d\u0430\u043a \u0433\u0440\u0438\u0432\u043d\u0456","indentation":"\u0432\u0456\u0434\u0441\u0442\u0443\u043f","indian rupee sign":"\u0437\u043d\u0430\u043a \u0456\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u0457 \u0440\u0443\u043f\u0456\u0457","kip sign":"\u0437\u043d\u0430\u043a \u043a\u0456\u043f\u0443","lira sign":"\u0437\u043d\u0430\u043a \u043b\u0456\u0440\u0438","livre tournois sign":"\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043b\u0456\u0432\u0440\u0443","manat sign":"\u0437\u043d\u0430\u043a \u043c\u0430\u043d\u0430\u0442\u0443","mill sign":"\u0437\u043d\u0430\u043a \u043c\u0456\u043b\u044e","naira sign":"\u0437\u043d\u0430\u043a \u043d\u0430\u0439\u0440\u0438","new sheqel sign":"\u0437\u043d\u0430\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0435\u043a\u0435\u043b\u044f","nordic mark sign":"\u0437\u043d\u0430\u043a \u043f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0457 \u043c\u0430\u0440\u043a\u0438","peseta sign":"\u0437\u043d\u0430\u043a \u043f\u0435\u0441\u0435\u0442\u0438","peso sign":"\u0417\u043d\u0430\u043a \u043f\u0435\u0441\u043e","ruble sign":"\u0437\u043d\u0430\u043a \u0440\u0443\u0431\u043b\u044f","rupee sign":"\u0437\u043d\u0430\u043a \u0440\u0443\u043f\u0456\u0457","spesmilo sign":"\u0437\u043d\u0430\u043a \u0441\u043f\u0435\u0441\u043c\u0456\u043b\u043e","styles":"\u0441\u0442\u0438\u043b\u0456","tenge sign":"\u0437\u043d\u0430\u043a \u0442\u0435\u043d\u0433\u0435","tugrik sign":"\u0437\u043d\u0430\u043a \u0442\u0443\u0433\u0440\u0438\u043a\u0430","turkish lira sign":"\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0435\u0446\u044c\u043a\u043e\u0457 \u043b\u0456\u0440\u0438","won sign":"\u0437\u043d\u0430\u043a \u0432\u043e\u043d\u0438","yen character":"\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438","yen/yuan character variant one":"\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438/\u044e\u0430\u043d\u044e, \u043f\u0435\u0440\u0448\u0438\u0439 \u0432\u0430\u0440\u0456\u0430\u043d\u0442","yuan character":"\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e","yuan character, in hong kong and taiwan":"\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e \u0432 \u0413\u043e\u043d\u043a\u043e\u043d\u0437\u0456 \u0456 \u0422\u0430\u0439\u0432\u0430\u043d\u0456","{0} characters":"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432: {0}","{0} columns, {1} rows":"{0} \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432, {1} \u0440\u044f\u0434\u043a\u0456\u0432","{0} words":"{0} \u0441\u043b\u0456\u0432"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/uz.js b/staticfiles/tinymce/langs/uz.js new file mode 100644 index 0000000..1577a63 --- /dev/null +++ b/staticfiles/tinymce/langs/uz.js @@ -0,0 +1 @@ +tinymce.addI18n("uz",{"#":"#","Accessibility":"Maxsus qobiliyatlar","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"Harakat","Activity":"Harakatlar","Address":"Manzil","Advanced":"Ilg'or","Align":"Saflamoq","Align center":"Markazga tekislash","Align left":"Chapga tekislash","Align right":"O'ngga tekislash","Alignment":"Tekislash","Alignment {0}":"","All":"Hammasi","Alternative description":"Muqobil tavsif","Alternative source":"Muqobil manba","Alternative source URL":"Muqobil manba URL manzili","Anchor":"","Anchor...":"","Anchors":"Langarlar","Animals and Nature":"Hayvonlar va Tabiat","Arrows":"Strelkalar","B":"B","Background color":"Orqa fon rangi","Background color {0}":"","Black":"Qora","Block":"Blok","Block {0}":"","Blockquote":"Matn blok parchasi","Blocks":"Bloklar","Blue":"Ko'k","Blue component":"Ko'k komponent","Body":"Tanasi","Bold":"Qalin","Border":"Chegara","Border color":"Chegara rangi","Border style":"Chegara stili","Border width":"Chegara qalinligi","Bottom":"Tagiga","Browse files":"","Browse for an image":"Rasmni yuklash","Browse links":"","Bullet list":"Nuqtali ro\u2018yxat","Cancel":"Bekor qilish","Caption":"Taglavha","Cell":"Katak","Cell padding":"Kataklar chegarasidan bo'sh joy","Cell properties":"Katak hususiyatlari","Cell spacing":"Kataklar orasi","Cell styles":"Katak stillari","Cell type":"Katak turi","Center":"Markazga","Characters":"Belgilar","Characters (no spaces)":"Belgilar (bosh joylarsiz)","Circle":"Doira","Class":"Klass","Clear formatting":"Formatlashni tozalash","Close":"Yopish","Code":"Kod","Code sample...":"Kod namunasi...","Code view":"Kod ko'rinishi","Color Picker":"Rang tanlovchi","Color swatch":"Rang namunasi","Cols":"Ustunlar","Column":"Ustun","Column clipboard actions":"Ustunning almashish buferini harakatlari","Column group":"Ustunlar guruhi","Column header":"Ustun sarlavhasi","Constrain proportions":"Nisbatlarni cheklash","Copy":"Nusxa olish","Copy column":"Ustunni nusxalash","Copy row":"Satrdan nusxa ko'chirish","Could not find the specified string.":"Belgilangan satr topilmadi.","Could not load emojis":"Emojilar yuklanmadi","Count":"Son","Currency":"Valyuta","Current window":"Joriy oyna","Custom color":"O'zgacha rang","Custom...":"O'zgacha...","Cut":"Kesib olish","Cut column":"Ustunni kesib olish","Cut row":"Satrni kesib olish","Dark Blue":"To'q ko'k","Dark Gray":"To'q kulrang","Dark Green":"To'q yashil","Dark Orange":"To'q oranjiviy","Dark Purple":"To'q siyohrang","Dark Red":"To'q qizil","Dark Turquoise":"","Dark Yellow":"To'q sariq","Dashed":"","Date/time":"Kun/vaqt","Decrease indent":"Satr boshini kamaytirish","Default":"Standart","Delete accordion":"","Delete column":"Ustunni olib tashlash","Delete row":"Satrni olib tashlash","Delete table":"Jadvalni o'chirib tashlash","Dimensions":"O'lchamlari","Disc":"Disk","Div":"Div","Document":"Hujjat","Dotted":"Nuqtali","Double":"","Drop an image here":"Bu erga rasmni olib o'ting","Dropped file type is not supported":"Fayl turi qo'llab-quvvatlanmaydi","Edit":"Tahrirlash","Embed":"Ichiga olgan","Emojis":"Emojilar","Emojis...":"Emojilar...","Error":"Xatolik","Error: Form submit field collision.":"Xato: Formani yuborish maydonidagi konflikt.","Error: No form element found.":"Xato: Form elementi topilmadi.","Extended Latin":"Kengaytirilgan Lotin","Failed to initialize plugin: {0}":"Plaginni ishga tushirib bo\u2018lmadi: {0}","Failed to load plugin url: {0}":"Url plaginni yuklab bo\u2018lmadi: {0}","Failed to load plugin: {0} from url {1}":"Plaginni yuklab bo\u2018lmadi: {0} {1} urldan","Failed to upload image: {0}":"{0}ni yuklashda xatolik yuz berdi","File":"Fayl","Find":"Qidirish","Find (if searchreplace plugin activated)":"Qidirish (qidirish plagini o'rnatilgan bo'lsa)","Find and Replace":"Qidirish va O'zgartirish","Find and replace...":"Qidirish va o'zgartirish...","Find in selection":"Belgilangandan topish","Find whole words only":"Faqat to'liq so'zni topish","Flags":"Bayroqlar","Focus to contextual toolbar":"Kontekstli vositalar paneliga e'tibor qaratish","Focus to element path":"Elementlar manziliga e'tibor qaratish","Focus to menubar":"Menubarga e'tibor qaratish","Focus to toolbar":"Vositalar paneliga e'tibor qaratish","Font":"Shrift","Font size {0}":"","Font sizes":"Shrift o'lchamlari","Font {0}":"","Fonts":"Shriftlar","Food and Drink":"Ovqatlar va Ichimliklar","Footer":"Tag qismi","Format":"Shakllar","Format {0}":"","Formats":"Formatlar","Fullscreen":"Butun ekran rejimi","G":"G","General":"Umumiy","Gray":"Kulrang","Green":"Yashil","Green component":"Yashil komponent","Groove":"","Handy Shortcuts":"Foydalanadigan yorliqlar","Header":"Sarlavha","Header cell":"Sarlavha katagi","Heading 1":"Sarlavha 1","Heading 2":"Sarlavha 2","Heading 3":"Sarlavha 3","Heading 4":"Sarlavha 4","Heading 5":"Sarlavha 5","Heading 6":"Sarlavha 6","Headings":"Sarlavhalar","Height":"Balandligi","Help":"Yordam","Hex color code":"Hex rang kodi","Hidden":"Yashirin","Horizontal align":"Gorizontal tekislash","Horizontal line":"Gorizontal chiziq","Horizontal space":"Gorizontal o'lchov","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID harf bilan boshlanishi kerak, faqat harflar, raqamlar, tire, nuqta, ikki nuqta yoki pastki chiziqdan iborat bo'lishi kerak.","Image is decorative":"Dekorativ rasm","Image list":"Rasmlar ro'yhati","Image title":"Rasm nomi","Image...":"Rasm...","ImageProxy HTTP error: Could not find Image Proxy":"ImageProxy HTTP xato: Image Proxy topilmadi","ImageProxy HTTP error: Incorrect Image Proxy URL":"ImageProxy HTTP xato: Image Proxy URL noto'g'ri","ImageProxy HTTP error: Rejected request":"ImageProxy HTTP xato: So'rov rad etildi","ImageProxy HTTP error: Unknown ImageProxy error":"ImageProxy HTTP xato: Aniqlanmagan ImageProxy xato","Increase indent":"Satr boshini oshirish","Inline":"Bir qator ketma-ketlikda","Insert":"Qo'shish","Insert Template":"Shablon Joylashtirish","Insert accordion":"","Insert column after":"Ustunni ketidan qo'shish","Insert column before":"Ustunni oldi tomoniga qo'shish","Insert date/time":"Kun / vaqtni qo'shish","Insert image":"Rasm qo'shish","Insert link (if link plugin activated)":"Havolani qo'shish (havola plagini o'rnatilgan bo'lsa)","Insert row after":"Ketidan satr qo'shish","Insert row before":"Yuqorisiga satr qo'shish","Insert table":"Jadvalni qo'shish","Insert template...":"Shablon joylashtirish...","Insert video":"Video qo'shish","Insert/Edit code sample":"Kod namunasini qo'shish / tahrirlash","Insert/edit image":"Rasmni qo'shish / tahrirlash","Insert/edit link":"Havola qo'shish / tahrirlash","Insert/edit media":"Media qo'shish / tahrirlash","Insert/edit video":"Videoni qo'shish / tahrirlash","Inset":"","Invalid hex color code: {0}":"Hex rang kodi noto\u2018g\u2018ri: {0}","Invalid input":"Noto'g'ri kiritish","Italic":"Yotiq","Justify":"Ikki tomondan tekislash","Keyboard Navigation":"Klaviatura Navigatsiyasi","Language":"Til","Learn more...":"Batafsil ma'lumot...","Left":"Chapga","Left to right":"Chapdan o'ngga","Light Blue":"Och ko'k","Light Gray":"Och kulrang","Light Green":"Och yashil","Light Purple":"Och siyohrang","Light Red":"Och qizil","Light Yellow":"Och sariq","Line height":"Chiziq balandligi","Link list":"Havolalar ro'yhati","Link...":"Havola...","List Properties":"Ro'yxat Xususiyatlari","List properties...":"Ro'yxat xususiyatlari...","Loading emojis...":"Emojilar yuklanmoqda...","Loading...":"Yuklanmoqda...","Lower Alpha":"Kichik lotincha","Lower Greek":"Pastki yunon","Lower Roman":"Kichik kirilcha","Match case":"O'xshashliklar","Mathematical":"Matematik","Media poster (Image URL)":"Media poster (Rasm URL)","Media...":"Media...","Medium Blue":"O\u02bbrtacha ko\u02bbk","Medium Gray":"O'rtacha kulrang","Medium Purple":"O\u02bbrtacha siyohrang","Merge cells":"Kataklarni birlashtirish","Middle":"Markaziga","Midnight Blue":"Yarim tun ko'k","More...":"Ko'proq...","Name":"Nomi","Navy Blue":"To'q ko'k rang","New document":"Yangi hujjat","New window":"Yangi oyna","Next":"Keyingisi","No":"Yo'q","No alignment":"","No color":"Rangsiz","Nonbreaking space":"Buzilmas bo'sh joy","None":"Hech bir","Numbered list":"Raqamli ro\u2018yxat","OR":"YOKI","Objects":"Obyektlar","Ok":"Ok","Open help dialog":"Yordamni ochish","Open link":"Havolani ochish","Open link in...":"Havolani ...da ochish","Open popup menu for split buttons":"Ajratish tugmalari uchun menyuni ochsh","Orange":"Oranjiviy","Outset":"","Page break":"Yangi bet","Paragraph":"Paragraf","Paste":"Qo\u2018yish","Paste as text":"Tekst qo'shish","Paste column after":"Keyingi ustun qo'yish","Paste column before":"Oldinga ustun qo'yish","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"Joylashtirish oddiy matn rejimida amalga oshiriladi. Ushbu hususiyatni o'chirmaguningizcha, kontent oddiy matn sifatida joylashtiriladi.","Paste or type a link":"Havolani joylashtirish yoki kiritish","Paste row after":"Ketidan satrni joylashtirish","Paste row before":"Yuqorisiga satrni joylashtirish","Paste your embed code below:":"Kodni quyiga joylashtiring:","People":"Odamlar","Plugins":"Plaginlar","Plugins installed ({0}):":"O'rnatilgan plaginlar ({0})","Powered by {0}":"{0} bilan ishlaydi","Pre":"Pre","Preferences":"Afzalliklar","Preformatted":"","Premium plugins:":"Premium plaginlar:","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"Tahrirni avvaldan ko'rish","Previous":"Oldingi","Print":"Chop etish","Print...":"Chop etish...","Purple":"Siyohrang","Quotations":"Iqtiboslar","R":"R","Range 0 to 255":"0 dan 255 gacha","Red":"Qizil","Red component":"Qizil komponent","Redo":"Bekor qilish","Remove":"Olib tashlash","Remove color":"Rangni olib tashlash","Remove link":"Havolani olib tashlash","Replace":"Almashtirish","Replace all":"Barchasini almashtirish","Replace with":"bilan almashtirish","Resize":"O'lchamini o'zgartirish","Restore last draft":"Oxirgi ","Reveal or hide additional toolbar items":"","Rich Text Area":"Boy Matn Maydoni","Rich Text Area. Press ALT-0 for help.":"Boy Matn Maydoni. Yordam olish uchun ALT-0 bosing.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Murakkab matn maydoni. Menyu uchun ALT-F9 tugmalarini bosing. Vositalar paneli uchun ALT-F10 tugmasini bosing. Yordamni chaqirish uchun ALT-0-ni bosing","Ridge":"","Right":"O'ngga","Right to left":"O'ngdan chapga","Row":"Satr","Row clipboard actions":"Qatorning almashish buferini harakatlari","Row group":"Satrlar guruhi","Row header":"Qator sarlavhasi","Row properties":"Satr hususiyatlari","Row type":"Satr turi","Rows":"Satrlar","Save":"Saqlash","Save (if save plugin activated)":"Saqlash (saqlash plagini o'rnatilgan bo'lsa)","Scope":"Muhit","Search":"Qidirish","Select all":"Barchasini belgilash","Select...":"Tanlash...","Selection":"Tanlangan","Shortcut":"Yorliq","Show blocks":"Bloklarni ko'rsatish","Show caption":"Sarlavhani ko'rish","Show invisible characters":"Ko'rinmas belgilarni ko'rsatish","Size":"O'lcham","Solid":"","Source":"Manba","Source code":"Manba kodi","Special Character":"Mahsus Belgi","Special character...":"Mahsus belgi...","Split cell":"Kataklarni bo'lish","Square":"Kvadrat","Start list at number":"Ro'yxatni raqamdan boshlash","Strikethrough":"O'chirilgan yozuv","Style":"Uslub","Subscript":"Quyi yozuv","Superscript":"Yuqori yozuv","Switch to or from fullscreen mode":"To\u02bbliq ekran rejimiga o\u02bbtish","Symbols":"Belgilar","System Font":"Tizim shrifti","Table":"Jadval","Table caption":"Jadval sarlavhasi","Table properties":"Jadval xususiyatlari","Table styles":"Jadval stillari","Template":"Andoza","Templates":"Andozalar","Text":"Matn","Text color":"Matn rangi","Text color {0}":"","Text to display":"Ko'rsatiladigan matn","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":'Siz kiritgan URL elektron pochta manziliga oxshayapti. "mailto:" prefiksi qo\'shilsinmi?',"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":'Siz kiritgan URL tashqi havolaga oxshayapti. "http://" prefiksi qo\'shilsinmi?',"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Siz kiritgan URL tashqi havolaga o'xshaydi. Kerakli https:// prefiksini qo'shmoqchimisiz?","Title":"Nomi","To open the popup, press Shift+Enter":"Menuni ochish uchun Shift+Enter bosing","Toggle accordion":"","Tools":"Vositalar","Top":"Yuqoriga","Travel and Places":"Sayohat va Joylar","Turquoise":"","Underline":"Tagi chizilgan","Undo":"Orqaga qaytarish","Upload":"Yuklash","Uploading image":"Rasm yuklanmoqda","Upper Alpha":"Katta lotincha","Upper Roman":"Katta kirilcha","Url":"URL","User Defined":"Foydalanuvchi aniqlangan","Valid":"Yaroqli","Version":"Versiya","Vertical align":"Vertikal tekislash","Vertical space":"Vertikal o'lchov","View":"Ko'rish","Visual aids":"Ko\u2018rgazmali o\u2018quv qurollar","Warn":"Ogohlantirish","White":"Oq","Width":"Kengligi","Word count":"So'zlar soni","Words":"So'zlar","Words: {0}":"So'zlar soni: {0}","Yellow":"Sariq","Yes":"Ha","You are using {0}":"Siz {0} ishlatmoqdasiz","You have unsaved changes are you sure you want to navigate away?":"Sizda saqlanmagan o'zgartirishlar bor. Boshqa yerga chiqib ketish uchun ishonchingiz komilmi?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Sizning brauzeringiz buferga to\u2018g\u2018ridan-to\u2018g\u2018ri kirish qo\u2018llab-quvvatlamaydi. O\u2018rniga klaviaturaning Ctrl+X/C/V qisqartirishlarni foydalaning.","alignment":"tekislash","austral sign":"austral belgisi","cedi sign":"cedi belgisi","colon sign":"colon belgisi","cruzeiro sign":"cruzeiro belgisi","currency sign":"valyuta belgisi","dollar sign":"dollar belgisi","dong sign":"dong belgisi","drachma sign":"drachma belgisi","euro-currency sign":"yevro-valyuta belgisi","example":"namuna","formatting":"formatlash","french franc sign":"fransiya franc belgisi","german penny symbol":"nemis pennisi belgisi","guarani sign":"guarani belgisi","history":"tarix","hryvnia sign":"hryvnia belgisi","indentation":"","indian rupee sign":"hind rupiysi belgisi","kip sign":"kip belgisi","lira sign":"lira belgisi","livre tournois sign":"livre tournois belgisi","manat sign":"manat belgisi","mill sign":"mill belgisi","naira sign":"naira belgisi","new sheqel sign":"sheqel belgisi","nordic mark sign":"shimoliy belgi belgisi","peseta sign":"paseta belgisi","peso sign":"peso belgisi","ruble sign":"rubl belgisi","rupee sign":"rupiy belgisi","spesmilo sign":"spesmilo belgisi","styles":"stillar","tenge sign":"tenge belgisi","tugrik sign":"tugrik belgisi","turkish lira sign":"turkiya lirasi belgisi","won sign":"von belgisi","yen character":"yen belgisi","yen/yuan character variant one":"yen/yuan belgisi, 1 variantda","yuan character":"yuan belgisi","yuan character, in hong kong and taiwan":"yuan belgisi, hong kong va tayvandagi","{0} characters":"{0} belgi","{0} columns, {1} rows":"","{0} words":"{0} so`z"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/vi.js b/staticfiles/tinymce/langs/vi.js new file mode 100644 index 0000000..45c1673 --- /dev/null +++ b/staticfiles/tinymce/langs/vi.js @@ -0,0 +1 @@ +tinymce.addI18n("vi",{"#":"#","Accessibility":"Kh\u1ea3 n\u0103ng ti\u1ebfp c\u1eadn","Accordion":"M\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c","Accordion body...":"N\u1ed9i dung m\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c...","Accordion summary...":"T\xf3m t\u1eaft m\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c...","Action":"H\xe0nh \u0111\u1ed9ng","Activity":"Ho\u1ea1t \u0111\u1ed9ng","Address":"\u0110\u1ecba ch\u1ec9","Advanced":"N\xe2ng cao","Align":"Canh l\u1ec1","Align center":"C\u0103n gi\u1eefa","Align left":"Canh tr\xe1i","Align right":"C\u0103n ph\u1ea3i","Alignment":"Canh ch\u1ec9nh","Alignment {0}":"C\u0103n l\u1ec1 {0}","All":"T\u1ea5t c\u1ea3","Alternative description":"M\xf4 t\u1ea3 thay th\u1ebf (Alt)","Alternative source":"Ngu\u1ed3n thay th\u1ebf","Alternative source URL":"\u0110\u01b0\u1eddng d\u1eabn ngu\u1ed3n thay th\u1ebf","Anchor":"Neo li\xean k\u1ebft","Anchor...":"Neo...","Anchors":"Neo","Animals and Nature":"\u0110\u1ed9ng v\u1eadt v\xe0 thi\xean nhi\xean","Arrows":"M\u0169i t\xean","B":"M\xe0u xanh d\u01b0\u01a1ng","Background color":"M\xe0u n\u1ec1n","Background color {0}":"M\xe0u n\u1ec1n {0}","Black":"\u0110en","Block":"Kh\u1ed1i","Block {0}":"Kh\u1ed1i {0}","Blockquote":"\u0110o\u1ea1n tr\xedch d\u1eabn","Blocks":"Kh\u1ed1i","Blue":"Xanh d\u01b0\u01a1ng","Blue component":"Th\xe0nh ph\u1ea7n xanh","Body":"N\u1ed9i dung","Bold":"In \u0111\u1eadm","Border":"Vi\u1ec1n","Border color":"M\xe0u vi\u1ec1n","Border style":"Ki\u1ec3u vi\u1ec1n","Border width":"\u0110\u1ed9 d\xe0y vi\u1ec1n","Bottom":"D\u01b0\u1edbi","Browse files":"M\u1edf t\u1ec7p","Browse for an image":"Ch\u1ecdn m\u1ed9t h\xecnh \u1ea3nh","Browse links":"M\u1edf li\xean k\u1ebft","Bullet list":"Danh s\xe1ch d\u1ea1ng bi\u1ec3u t\u01b0\u1ee3ng","Cancel":"Hu\u1ef7 B\u1ecf","Caption":"Ch\xfa th\xedch","Cell":"\xd4","Cell padding":"Kho\u1ea3ng c\xe1ch trong \xf4","Cell properties":"Thu\u1ed9c t\xednh \xf4","Cell spacing":"Kho\u1ea3ng c\xe1ch \xf4","Cell styles":"Ki\u1ec3u d\xe1ng \xf4","Cell type":"Lo\u1ea1i \xf4","Center":"Gi\u1eefa","Characters":"Nh\xe2n v\u1eadt","Characters (no spaces)":"K\xfd t\u1ef1 (kh\xf4ng kho\u1ea3ng tr\u1ed1ng)","Circle":"H\xecnh tr\xf2n","Class":"L\u1edbp","Clear formatting":"Xo\xe1 \u0111\u1ecbnh d\u1ea1ng","Close":"\u0110\xf3ng L\u1ea1i","Code":"M\xe3","Code sample...":"M\xe3 m\u1eabu...","Code view":"Xem code","Color Picker":"B\u1ea3ng ch\u1ecdn m\xe0u","Color swatch":"M\u1eabu m\xe0u","Cols":"C\u1ed9t","Column":"C\u1ed9t","Column clipboard actions":"C\u1ed9t thao t\xe1c tr\xean khay nh\u1edb t\u1ea1m","Column group":"Gom nh\xf3m c\u1ed9t","Column header":"Ti\xeau \u0111\u1ec1 c\u1ed9t","Constrain proportions":"T\u1ef7 l\u1ec7 r\xe0ng bu\u1ed9c","Copy":"Sao ch\xe9p 2","Copy column":"Sao ch\xe9p c\u1ed9t","Copy row":"Sao ch\xe9p d\xf2ng","Could not find the specified string.":"Kh\xf4ng t\xecm th\u1ea5y chu\u1ed7i ch\u1ec9 \u0111\u1ecbnh.","Could not load emojis":"Kh\xf4ng th\u1ec3 t\u1ea3i bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\xfac","Count":"\u0110\u1ebfm","Currency":"Ti\u1ec1n t\u1ec7","Current window":"C\u1eeda s\u1ed5 hi\u1ec7n t\u1ea1i","Custom color":"Tu\u1ef3 ch\u1ec9nh m\xe0u","Custom...":"Tu\u1ef3 ch\u1ec9nh...","Cut":"C\u1eaft","Cut column":"C\u1eaft c\u1ed9t","Cut row":"C\u1eaft d\xf2ng","Dark Blue":"Xanh d\u01b0\u01a1ng \u0111\u1eadm","Dark Gray":"X\xe1m \u0111\u1eadm","Dark Green":"Xanh l\xe1 c\xe2y \u0111\u1eadm","Dark Orange":"Cam \u0111\u1eadm","Dark Purple":"T\xedm \u0111\u1eadm","Dark Red":"\u0110\u1ecf \u0111\u1eadm","Dark Turquoise":"Ng\u1ecdc lam t\u1ed1i","Dark Yellow":"V\xe0ng \u0111\u1eadm","Dashed":"N\xe9t \u0111\u1ee9t","Date/time":"Ng\xe0y/th\u1eddi gian","Decrease indent":"Th\u1ee5t l\xf9i d\xf2ng","Default":"M\u1eb7c \u0111\u1ecbnh","Delete accordion":"X\xf3a m\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c","Delete column":"Xo\xe1 c\u1ed9t","Delete row":"Xo\xe1 d\xf2ng","Delete table":"Xo\xe1 b\u1ea3ng","Dimensions":"K\xedch th\u01b0\u1edbc","Disc":"\u0110\u0129a","Div":"Khung","Document":"T\xe0i li\u1ec7u","Dotted":"N\xe9t ch\u1ea5m","Double":"N\xe9t \u0111\xf4i","Drop an image here":"Th\u1ea3 h\xecnh \u1ea3nh v\xe0o \u0111\xe2y","Dropped file type is not supported":"Lo\u1ea1i t\u1ec7p \u0111\xe3 k\xe9o th\u1ea3 kh\xf4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3","Edit":"S\u1eeda","Embed":"Nh\xfang","Emojis":"Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\xfac","Emojis...":"Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\xfac...","Error":"L\u1ed7i","Error: Form submit field collision.":"L\u1ed7i: Xung \u0111\u1ed9t tr\u01b0\u1eddng trong bi\u1ec3u m\u1eabu.","Error: No form element found.":"L\u1ed7i: Kh\xf4ng t\xecm th\u1ea5y bi\u1ec3u m\u1eabu.","Extended Latin":"Latin m\u1edf r\u1ed9ng","Failed to initialize plugin: {0}":"Kh\xf4ng th\u1ec3 kh\u1edfi t\u1ea1o plugin: {0}","Failed to load plugin url: {0}":"Kh\xf4ng th\u1ec3 t\u1ea3i \u0111\u01b0\u1eddng d\u1eabn plugin: {0}","Failed to load plugin: {0} from url {1}":"Kh\xf4ng th\u1ec3 t\u1ea3i plugin: {0} t\u1eeb \u0111\u01b0\u1eddng d\u1eabn {1}","Failed to upload image: {0}":"Kh\xf4ng th\u1ec3 \u0111\u0103ng h\xecnh: {0}","File":"T\u1eadp tin","Find":"T\xecm ki\u1ebfm","Find (if searchreplace plugin activated)":"T\xecm ki\u1ebfm","Find and Replace":"T\xecm v\xe0 thay th\u1ebf","Find and replace...":"T\xecm v\xe0 thay th\u1ebf...","Find in selection":"T\xecm trong l\u1ef1a ch\u1ecdn","Find whole words only":"Ch\u1ec9 t\xecm to\xe0n b\u1ed9 t\u1eeb","Flags":"C\u1edd","Focus to contextual toolbar":"T\u1eadp trung v\xe0o thanh c\xf4ng c\u1ee5 ng\u1eef c\u1ea3nh","Focus to element path":"T\u1eadp trung v\xe0o \u0111\u01b0\u1eddng d\u1eabn ph\u1ea7n t\u1eed","Focus to menubar":"T\u1eadp trung v\xe0o tr\xecnh \u0111\u01a1n","Focus to toolbar":"T\u1eadp trung v\xe0o thanh c\xf4ng c\u1ee5","Font":"Ph\xf4ng ch\u1eef","Font size {0}":"C\u1ee1 ch\u1eef {0}","Font sizes":"K\xedch th\u01b0\u1edbc ch\u1eef","Font {0}":"Ph\xf4ng ch\u1eef {0}","Fonts":"Ph\xf4ng ch\u1eef","Food and Drink":"Th\u1ee9c \u0103n v\xe0 \u0111\u1ed3 u\u1ed1ng","Footer":"Ch\xe2n","Format":"\u0110\u1ecbnh d\u1ea1ng","Format {0}":"\u0110\u1ecbnh d\u1ea1ng {0}","Formats":"\u0110\u1ecbnh d\u1ea1ng","Fullscreen":"To\xe0n m\xe0n h\xecnh","G":"M\xe0u xanh l\xe1","General":"Chung","Gray":"X\xe1m","Green":"Xanh l\xe1","Green component":"Th\xe0nh ph\u1ea7n xanh","Groove":"3D c\xf3 x\u1ebb r\xe3nh","Handy Shortcuts":"Ph\xedm t\u1eaft th\xf4ng d\u1ee5ng","Header":"Ti\xeau \u0111\u1ec1","Header cell":"Ti\xeau \u0111\u1ec1 \xf4","Heading 1":"H1","Heading 2":"H2","Heading 3":"H3","Heading 4":"H4","Heading 5":"H5","Heading 6":"H6","Headings":"\u0110\u1ec1 m\u1ee5c","Height":"\u0110\u1ed9 Cao","Help":"Tr\u1ee3 gi\xfap","Hex color code":"M\xe3 m\xe0u hex","Hidden":"\u1ea8n","Horizontal align":"C\u0103n ngang","Horizontal line":"K\u1ebb ngang","Horizontal space":"N\u1eb1m ngang","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID ph\u1ea3i b\u1eaft \u0111\u1ea7u b\u1eb1ng ch\u1eef c\xe1i, theo sau l\xe0 c\xe1c ch\u1eef c\xe1i, s\u1ed1, d\u1ea5u g\u1ea1ch ngang, d\u1ea5u ch\u1ea5m, d\u1ea5u hai ch\u1ea5m ho\u1eb7c d\u1ea5u g\u1ea1ch d\u01b0\u1edbi.","Image is decorative":"H\xecnh \u1ea3nh minh ho\u1ea1","Image list":"Danh s\xe1ch h\xecnh \u1ea3nh","Image title":"Ti\xeau \u0111\u1ec1 \u1ea3nh","Image...":"H\xecnh \u1ea3nh...","ImageProxy HTTP error: Could not find Image Proxy":"L\u1ed7i HTTP ImageProxy: Kh\xf4ng th\u1ec3 t\xecm th\u1ea5y Image Proxy","ImageProxy HTTP error: Incorrect Image Proxy URL":"L\u1ed7i HTTP ImageProxy: URL proxy h\xecnh \u1ea3nh kh\xf4ng ch\xednh x\xe1c","ImageProxy HTTP error: Rejected request":"L\u1ed7i HTTP ImageProxy: Y\xeau c\u1ea7u b\u1ecb t\u1eeb ch\u1ed1i","ImageProxy HTTP error: Unknown ImageProxy error":"L\u1ed7i HTTP ImageProxy: L\u1ed7i ImageProxy kh\xf4ng x\xe1c \u0111\u1ecbnh","Increase indent":"T\u0103ng kho\u1ea3ng c\xe1ch d\xf2ng","Inline":"C\xf9ng d\xf2ng","Insert":"Ch\xe8n","Insert Template":"Th\xeam m\u1eabu","Insert accordion":"Ch\xe8n m\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c","Insert column after":"Th\xeam c\u1ed9t b\xean ph\u1ea3i","Insert column before":"Th\xeam c\u1ed9t b\xean tr\xe1i","Insert date/time":"Ch\xe8n ng\xe0y/th\xe1ng","Insert image":"Ch\xe8n \u1ea3nh","Insert link (if link plugin activated)":"Ch\xe8n li\xean k\u1ebft","Insert row after":"Th\xeam d\xf2ng ph\xeda d\u01b0\u1edbi","Insert row before":"Th\xeam d\xf2ng ph\xeda tr\xean","Insert table":"Th\xeam b\u1ea3ng","Insert template...":"Th\xeam m\u1eabu...","Insert video":"Ch\xe8n video","Insert/Edit code sample":"Ch\xe8n/S\u1eeda m\xe3 m\u1eabu","Insert/edit image":"Ch\xe8n/s\u1eeda \u1ea3nh","Insert/edit link":"Ch\xe8n/s\u1eeda li\xean k\u1ebft","Insert/edit media":"Ch\xe8n/s\u1eeda \u0111a ph\u01b0\u01a1ng ti\u1ec7n","Insert/edit video":"Ch\xe8n/s\u1eeda video","Inset":"3D khung ch\xecm","Invalid hex color code: {0}":"M\xe3 m\xe0u hex kh\xf4ng h\u1ee3p l\u1ec7: {0}","Invalid input":"\u0110\u1ea7u v\xe0o kh\xf4ng h\u1ee3p l\u1ec7","Italic":"In nghi\xeang","Justify":"C\u0103n \u0111\u1ec1u hai b\xean","Keyboard Navigation":"Ph\xedm \u0111i\u1ec1u h\u01b0\u1edbng","Language":"Ng\xf4n ng\u1eef","Learn more...":"T\xecm hi\u1ec3u th\xeam...","Left":"Tr\xe1i","Left to right":"Tr\xe1i sang ph\u1ea3i","Light Blue":"Xanh d\u01b0\u01a1ng nh\u1ea1t","Light Gray":"X\xe1m nh\u1ea1t","Light Green":"Xanh l\xe1 nh\u1ea1t","Light Purple":"T\xedm nh\u1ea1t","Light Red":"\u0110\u1ecf nh\u1ea1t","Light Yellow":"V\xe0ng nh\u1ea1t","Line height":"\u0110\u1ed9 cao d\xf2ng","Link list":"Danh s\xe1ch li\xean k\u1ebft","Link...":"Li\xean k\u1ebft...","List Properties":"Thu\u1ed9c t\xednh danh s\xe1ch","List properties...":"C\xe1c thu\u1ed9c t\xednh danh s\xe1ch...","Loading emojis...":"\u0110ang t\u1ea3i bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\xfac...","Loading...":"\u0110ang t\u1ea3i...","Lower Alpha":"K\xfd t\u1ef1 th\u01b0\u1eddng","Lower Greek":"S\u1ed1 Hy L\u1ea1p th\u01b0\u1eddng","Lower Roman":"S\u1ed1 la m\xe3 th\u01b0\u1eddng","Match case":"Ph\xe2n bi\u1ec7t hoa/th\u01b0\u1eddng","Mathematical":"To\xe1n h\u1ecdc","Media poster (Image URL)":"\xc1p ph\xedch \u0111a ph\u01b0\u01a1ng ti\u1ec7n (\u0110\u01b0\u1eddng d\u1eabn h\xecnh \u1ea3nh)","Media...":"\u0110a ph\u01b0\u01a1ng ti\u1ec7n...","Medium Blue":"Xanh d\u01b0\u01a1ng nh\u1eb9","Medium Gray":"X\xe1m nh\u1eb9","Medium Purple":"T\xedm nh\u1eb9","Merge cells":"Tr\u1ed9n \xf4","Middle":"\u1ede gi\u1eefa","Midnight Blue":"Xanh d\u01b0\u01a1ng n\u1eeda \u0111\xeam","More...":"Th\xeam...","Name":"T\xean","Navy Blue":"Xanh n\u01b0\u1edbc bi\u1ec3n","New document":"T\u1ea1o t\xe0i li\u1ec7u m\u1edbi","New window":"C\u1eeda s\u1ed5 m\u1edbi","Next":"Sau","No":"Kh\xf4ng","No alignment":"Kh\xf4ng c\u0103n l\u1ec1","No color":"Kh\xf4ng c\xf3 m\xe0u","Nonbreaking space":"Kh\xf4ng xu\u1ed1ng h\xe0ng","None":"Kh\xf4ng","Numbered list":"Danh s\xe1ch \u0111\xe1nh s\u1ed1","OR":"HO\u1eb6C","Objects":"V\u1eadt d\u1ee5ng","Ok":"\u0110\u1ed3ng \xfd","Open help dialog":"M\u1edf h\u1ed9p tho\u1ea1i tr\u1ee3 gi\xfap","Open link":"M\u1edf li\xean k\u1ebft","Open link in...":"M\u1edf \u0111\u01b0\u1eddng d\u1eabn trong...","Open popup menu for split buttons":"M\u1edf menu b\u1eadt l\xean cho c\xe1c n\xfat t\xe1ch","Orange":"Cam","Outset":"3D khung n\u1ed5i","Page break":"Ng\u1eaft trang","Paragraph":"\u0110o\u1ea1n v\u0103n","Paste":"D\xe1n","Paste as text":"D\xe1n \u0111o\u1ea1n v\u0103n b\u1ea3n","Paste column after":"D\xe1n c\u1ed9t v\xe0o b\xean ph\u1ea3i","Paste column before":"D\xe1n c\u1ed9t v\xe0o b\xean tr\xe1i","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"D\xe1n \u0111ang trong tr\u1ea1ng th\xe1i v\u0103n b\u1ea3n thu\u1ea7n. N\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c d\xe1n d\u01b0\u1edbi d\u1ea1ng v\u0103n b\u1ea3n thu\u1ea7n, kh\xf4ng \u0111\u1ecbnh d\u1ea1ng.","Paste or type a link":"D\xe1n ho\u1eb7c nh\u1eadp m\u1ed9t li\xean k\u1ebft","Paste row after":"D\xe1n v\xe0o ph\xeda sau, d\u01b0\u1edbi","Paste row before":"D\xe1n v\xe0o ph\xeda tr\u01b0\u1edbc, tr\xean","Paste your embed code below:":"D\xe1n m\xe3 nh\xfang c\u1ee7a b\u1ea1n d\u01b0\u1edbi \u0111\xe2y:","People":"Ng\u01b0\u1eddi","Plugins":"Plugin","Plugins installed ({0}):":"Plugin \u0111\xe3 c\xe0i ({0}):","Powered by {0}":"Cung c\u1ea5p b\u1edfi {0}","Pre":"Ti\u1ec1n t\u1ed1","Preferences":"T\xf9y ch\u1ecdn","Preformatted":"\u0110\u1ecbnh d\u1ea1ng s\u1eb5n","Premium plugins:":"Plugin cao c\u1ea5p:","Press the Up and Down arrow keys to resize the editor.":"Nh\u1ea5n L\xean v\xe0 Xu\u1ed1ng \u0111\u1ec3 ch\u1ec9nh k\xedch c\u1ee1 tr\xecnh so\u1ea1n th\u1ea3o.","Press the arrow keys to resize the editor.":"Nh\u1ea5n ph\xedm m\u0169i t\xean \u0111\u1ec3 ch\u1ec9nh k\xedch c\u1ee1 tr\xecnh so\u1ea1n th\u1ea3o.","Press {0} for help":"Nh\u1ea5n {0} \u0111\u1ec3 \u0111\u01b0\u1ee3c tr\u1ee3 gi\xfap","Preview":"Xem th\u1eed","Previous":"Tr\u01b0\u1edbc","Print":"In","Print...":"In...","Purple":"T\xedm","Quotations":"Tr\xedch d\u1eabn","R":"M\xe0u \u0111\u1ecf","Range 0 to 255":"T\u1eeb 0 \u0111\u1ebfn 255","Red":"\u0110\u1ecf","Red component":"Th\xe0nh ph\u1ea7n \u0111\u1ecf","Redo":"L\xe0m l\u1ea1i","Remove":"Xo\xe1","Remove color":"B\u1ecf m\xe0u","Remove link":"H\u1ee7y li\xean k\u1ebft","Replace":"Thay th\u1ebf","Replace all":"Thay t\u1ea5t c\u1ea3","Replace with":"Thay th\u1ebf b\u1edfi","Resize":"Thay \u0111\u1ed5i k\xedch th\u01b0\u1edbc","Restore last draft":"Kh\xf4i ph\u1ee5c b\u1ea3n g\u1ea7n nh\u1ea5t","Reveal or hide additional toolbar items":"Hi\u1ec7n ho\u1eb7c \u1ea9n c\xe1c m\u1ee5c b\u1ed5 sung","Rich Text Area":"V\xf9ng v\u0103n b\u1ea3n phong ph\xfa","Rich Text Area. Press ALT-0 for help.":"V\xf9ng v\u0103n b\u1ea3n phong ph\xfa. Nh\xe2n ALT-0 \u0111\u1ec3 bi\u1ebft th\xeam.","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"Rich Text Area. B\u1ea5m ALT-F9 m\u1edf tr\xecnh \u0111\u01a1n. B\u1ea5m ALT-F10 m\u1edf thanh c\xf4ng c\u1ee5. B\u1ea5m ALT-0 m\u1edf tr\u1ee3 gi\xfap","Ridge":"3D tr\xf2n n\u1ed5i","Right":"Ph\u1ea3i","Right to left":"Ph\u1ea3i sang tr\xe1i","Row":"D\xf2ng","Row clipboard actions":"H\xe0ng thao t\xe1c tr\xean khay nh\u1edb t\u1ea1m","Row group":"Gom nh\xf3m d\xf2ng","Row header":"Ti\xeau \u0111\u1ec1 h\xe0ng","Row properties":"Thu\u1ed9c t\xednh d\xf2ng","Row type":"Th\u1ec3 lo\u1ea1i d\xf2ng","Rows":"D\xf2ng","Save":"L\u01b0u","Save (if save plugin activated)":"L\u01b0u","Scope":"Quy\u1ec1n","Search":"T\xecm ki\u1ebfm","Select all":"Ch\u1ecdn t\u1ea5t c\u1ea3","Select...":"Ch\u1ecdn...","Selection":"L\u1ef1a ch\u1ecdn","Shortcut":"Ph\xedm t\u1eaft","Show blocks":"Hi\u1ec3n th\u1ecb kh\u1ed1i","Show caption":"Hi\u1ec7n ch\xfa th\xedch","Show invisible characters":"Hi\u1ec3n th\u1ecb k\xfd t\u1ef1 \u1ea9n","Size":"K\xedch th\u01b0\u1edbc","Solid":"N\xe9t li\u1ec1n m\u1ea1ch","Source":"Ngu\u1ed3n","Source code":"M\xe3 ngu\u1ed3n","Special Character":"K\xfd t\u1ef1 \u0111\u1eb7c bi\u1ec7t","Special character...":"K\xfd t\u1ef1 \u0111\u1eb7c bi\u1ec7t...","Split cell":"Chia c\u1eaft \xf4","Square":"\xd4 vu\xf4ng","Start list at number":"Danh s\xe1ch b\u1eaft \u0111\u1ea7u b\u1eb1ng s\u1ed1","Strikethrough":"G\u1ea1ch ngang ch\u1eef","Style":"Ki\u1ec3u","Subscript":"K\xfd t\u1ef1 th\u1ea5p","Superscript":"K\xfd t\u1ef1 m\u0169","Switch to or from fullscreen mode":"Chuy\u1ec3n qua ho\u1eb7c l\u1ea1i ch\u1ebf \u0111\u1ed9 to\xe0n m\xe0n h\xecnh","Symbols":"K\xfd hi\u1ec7u","System Font":"Ph\xf4ng ch\u1eef h\u1ec7 th\u1ed1ng","Table":"B\u1ea3ng","Table caption":"Ch\xfa th\xedch b\u1ea3ng","Table properties":"Thu\u1ed9c t\xednh b\u1ea3ng","Table styles":"Ki\u1ec3u d\xe1ng b\u1ea3ng","Template":"M\u1eabu","Templates":"M\u1eabu","Text":"V\u0103n b\u1ea3n","Text color":"M\xe0u v\u0103n b\u1ea3n","Text color {0}":"M\xe0u ch\u1eef {0}","Text to display":"N\u1ed9i dung hi\u1ec3n th\u1ecb","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t \u0111\u1ecba ch\u1ec9 email. B\u1ea1n c\xf3 mu\u1ed1n th\xeam ti\u1ec1n t\u1ed1 mailto: kh\xf4ng?","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t li\xean k\u1ebft. B\u1ea1n c\xf3 mu\u1ed1n th\xeam ti\u1ec1n t\u1ed1 http:// kh\xf4ng?","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"Li\xean k\u1ebft b\u1ea1n nh\u1eadp c\xf3 v\u1ebb l\xe0 li\xean k\u1ebft b\xean ngo\xe0i. B\u1ea1n c\xf3 mu\u1ed1n b\u1eaft bu\u1ed9c th\xeam ti\u1ec1n t\u1ed1 https:// ?","Title":"Ti\xeau \u0111\u1ec1","To open the popup, press Shift+Enter":"\u0110\u1ec3 m\u1edf h\u1ed9p tho\u1ea1i, nh\u1ea5n Shift+Enter","Toggle accordion":"Chuy\u1ec3n \u0111\u1ed5i m\xf4-\u0111un n\u1ed9i dung m\u1edf r\u1ed9ng/thu g\u1ecdn \u0111\u01b0\u1ee3c","Tools":"C\xf4ng c\u1ee5","Top":"Tr\xean","Travel and Places":"Du l\u1ecbch v\xe0 \u0111\u1ecba \u0111i\u1ec3m","Turquoise":"Ng\u1ecdc lam","Underline":"G\u1ea1ch d\u01b0\u1edbi","Undo":"Ho\xe0n t\xe1c","Upload":"T\u1ea3i l\xean","Uploading image":"\u0110ang t\u1ea3i \u1ea3nh l\xean","Upper Alpha":"In hoa","Upper Roman":"S\u1ed1 la m\xe3 hoa","Url":"Url","User Defined":"\u0110\u1ecbnh ngh\u0129a b\u1edfi ng\u01b0\u1eddi d\xf9ng","Valid":"H\u1ee3p l\u1ec7","Version":"Phi\xean b\u1ea3n","Vertical align":"C\u0103n d\u1ecdc","Vertical space":"N\u1eb1m d\u1ecdc","View":"Xem","Visual aids":"Ch\u1ec9 d\u1eabn tr\u1ef1c quan","Warn":"C\u1ea3nh b\xe1o","White":"Tr\u1eafng","Width":"\u0110\u1ed9 R\u1ed9ng","Word count":"S\u1ed1 t\u1eeb","Words":"Ch\u1eef","Words: {0}":"Ch\u1eef: {0}","Yellow":"V\xe0ng","Yes":"C\xf3","You are using {0}":"B\u1ea1n \u0111ang s\u1eed d\u1ee5ng {0}","You have unsaved changes are you sure you want to navigate away?":"B\u1ea1n ch\u01b0a l\u01b0u thay \u0111\u1ed5i b\u1ea1n c\xf3 ch\u1eafc b\u1ea1n mu\u1ed1n di chuy\u1ec3n \u0111i?","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"Tr\xecnh duy\u1ec7t c\u1ee7a b\u1ea1n kh\xf4ng h\u1ed7 tr\u1ee3 truy c\u1eadp truy c\u1eadp b\u1ed9 nh\u1edb \u1ea3o, vui l\xf2ng s\u1eed d\u1ee5ng c\xe1c t\u1ed5 h\u1ee3p ph\xedm Ctrl + X, C, V.","alignment":"canh l\u1ec1","austral sign":"k\xfd hi\u1ec7u austral","cedi sign":"k\xfd hi\u1ec7u cedi ","colon sign":"d\u1ea5u hai ch\u1ea5m","cruzeiro sign":"k\xfd hi\u1ec7u cruzeiro","currency sign":"k\xfd hi\u1ec7u ti\u1ec1n t\u1ec7","dollar sign":"k\xfd hi\u1ec7u \u0111\xf4 la","dong sign":"k\xfd hi\u1ec7u \u0111\u1ed3ng","drachma sign":"k\xfd hi\u1ec7u drachma","euro-currency sign":"k\xfd hi\u1ec7u euro","example":"v\xed d\u1ee5","formatting":"\u0111\u1ecbnh d\u1ea1ng","french franc sign":"k\xfd hi\u1ec7u franc Ph\xe1p","german penny symbol":"k\xfd hi\u1ec7u xu \u0110\u1ee9c","guarani sign":"k\xfd hi\u1ec7u guarani","history":"l\u1ecbch s\u1eed","hryvnia sign":"k\xfd hi\u1ec7u hryvnia","indentation":"th\u1ee5t \u0111\u1ea7u d\xf2ng","indian rupee sign":"k\xfd hi\u1ec7u rupee \u1ea5n \u0111\u1ed9","kip sign":"k\xfd hi\u1ec7u \u0111\u1ed3ng kip","lira sign":"k\xfd hi\u1ec7u lira","livre tournois sign":"k\xfd hi\u1ec7u livre tournois","manat sign":"k\xfd hi\u1ec7u manat","mill sign":"k\xfd hi\u1ec7u mill","naira sign":"k\xfd hi\u1ec7u naira","new sheqel sign":"k\xfd hi\u1ec7u new sheqel","nordic mark sign":"k\xfd hi\u1ec7u mark b\u1eafc \xe2u","peseta sign":"k\xfd hi\u1ec7u peseta","peso sign":"k\xfd hi\u1ec7u peso","ruble sign":"k\xfd hi\u1ec7u r\xfap","rupee sign":"k\xfd hi\u1ec7u rupee","spesmilo sign":"k\xfd hi\u1ec7u spesmilo","styles":"ki\u1ec3u","tenge sign":"K\xfd hi\u1ec7u tenge","tugrik sign":"k\xfd hi\u1ec7u tugrik","turkish lira sign":"k\xfd hi\u1ec7u lira th\u1ed5 nh\u0129 k\u1ef3","won sign":"k\xfd hi\u1ec7u won","yen character":"k\xfd hi\u1ec7u y\xean","yen/yuan character variant one":"k\xfd hi\u1ec7u y\xean/yuan bi\u1ebfn th\u1ec3","yuan character":"k\xfd hi\u1ec7u yuan","yuan character, in hong kong and taiwan":"k\xfd hi\u1ec7u yuan, \u1edf h\u1ed3ng k\xf4ng v\xe0 \u0111\xe0i loan","{0} characters":"{0} k\xfd t\u1ef1","{0} columns, {1} rows":"{0} c\u1ed9t, {1} h\xe0ng","{0} words":"{0} ch\u1eef"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/zh_CN.js b/staticfiles/tinymce/langs/zh_CN.js new file mode 100644 index 0000000..6611995 --- /dev/null +++ b/staticfiles/tinymce/langs/zh_CN.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_CN",{"#":"#","Accessibility":"\u8f85\u52a9\u529f\u80fd","Accordion":"\u6298\u53e0\u9762\u677f","Accordion body...":"\u6298\u53e0\u9762\u677f\u6b63\u6587...","Accordion summary...":"\u6298\u53e0\u9762\u677f\u6458\u8981...","Action":"\u52a8\u4f5c","Activity":"\u6d3b\u52a8","Address":"\u5730\u5740","Advanced":"\u9ad8\u7ea7","Align":"\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align left":"\u5de6\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","Alignment":"\u5bf9\u9f50","Alignment {0}":"\u5bf9\u9f50{0}","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u955c\u50cf","Alternative source URL":"\u66ff\u4ee3\u6765\u6e90\u7f51\u5740","Anchor":"\u951a\u70b9","Anchor...":"\u951a\u70b9...","Anchors":"\u951a\u70b9","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u5934","B":"B","Background color":"\u80cc\u666f\u989c\u8272","Background color {0}":"\u80cc\u666f\u989c\u8272 {0}","Black":"\u9ed1\u8272","Block":"\u5757","Block {0}":"\u6587\u672c\u5757{0}","Blockquote":"Blockquote","Blocks":"\u6837\u5f0f","Blue":"\u84dd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u4f53","Bold":"\u7c97\u4f53","Border":"\u6846\u7ebf","Border color":"\u6846\u7ebf\u989c\u8272","Border style":"\u8fb9\u6846\u6837\u5f0f","Border width":"\u8fb9\u6846\u5bbd\u5ea6","Bottom":"\u4e0b\u65b9\u5bf9\u9f50","Browse files":"\u6d4f\u89c8\u6587\u4ef6","Browse for an image":"\u6d4f\u89c8\u56fe\u7247","Browse links":"\u6d4f\u89c8\u94fe\u63a5","Bullet list":"\u65e0\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6807\u9898","Cell":"\u5355\u5143\u683c","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Cell properties":"\u5355\u5143\u683c\u5c5e\u6027","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Cell type":"\u50a8\u5b58\u683c\u522b","Center":"\u5c45\u4e2d","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5706","Class":"\u7c7b\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u5173\u95ed","Code":"\u4ee3\u7801","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Code view":"\u4ee3\u7801\u89c6\u56fe","Color Picker":"\u9009\u8272\u5668","Color swatch":"\u989c\u8272\u6837\u672c","Cols":"\u5217","Column":"\u5217","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Column group":"\u5217\u7ec4","Column header":"\u5217\u6807\u9898","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u590d\u5236","Copy column":"\u590d\u5236\u5217","Copy row":"\u590d\u5236\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","Count":"\u8ba1\u6570","Currency":"\u8d27\u5e01","Current window":"\u5f53\u524d\u7a97\u53e3","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Cut":"\u526a\u5207","Cut column":"\u526a\u5207\u5217","Cut row":"\u526a\u5207\u884c","Dark Blue":"\u6df1\u84dd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7eff\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7ea2\u8272","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dashed":"\u865a\u7ebf","Date/time":"\u65e5\u671f/\u65f6\u95f4","Decrease indent":"\u51cf\u5c11\u7f29\u8fdb","Default":"\u9884\u8bbe","Delete accordion":"\u5220\u9664\u6298\u53e0\u9762\u677f","Delete column":"\u5220\u9664\u5217","Delete row":"\u5220\u9664\u884c","Delete table":"\u5220\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5b9e\u5fc3\u5706","Div":"Div","Document":"\u6587\u6863","Dotted":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7f16\u8f91","Embed":"\u5185\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u9519\u8bef","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Extended Latin":"\u62c9\u4e01\u8bed\u6269\u5145","Failed to initialize plugin: {0}":"\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}","Failed to load plugin url: {0}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}","Failed to load plugin: {0} from url {1}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}","Failed to upload image: {0}":"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}","File":"\u6587\u4ef6","Find":"\u5bfb\u627e","Find (if searchreplace plugin activated)":"\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e1c","Focus to contextual toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355","Focus to element path":"\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84","Focus to menubar":"\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f","Focus to toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f","Font":"\u5b57\u4f53","Font size {0}":"\u5b57\u4f53\u5927\u5c0f{0}","Font sizes":"\u5b57\u4f53\u5927\u5c0f","Font {0}":"\u5b57\u4f53{0}","Fonts":"\u5b57\u4f53","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"\u683c\u5f0f{0}","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u5c4f","G":"G","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7eff\u8272","Green component":"\u7eff\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u6377\u952e","Header":"\u8868\u5934","Header cell":"\u8868\u5934\u5355\u5143\u683c","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Headings":"\u6807\u9898","Height":"\u9ad8\u5ea6","Help":"\u5e2e\u52a9","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Hidden":"\u9690\u85cf","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Horizontal line":"\u6c34\u5e73\u5206\u5272\u7ebf","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Image list":"\u56fe\u7247\u6e05\u5355","Image title":"\u56fe\u7247\u6807\u9898","Image...":"\u56fe\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef","Increase indent":"\u589e\u52a0\u7f29\u8fdb","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u6a21\u677f","Insert accordion":"\u63d2\u5165\u6298\u53e0\u9762\u677f","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Insert image":"\u63d2\u5165\u56fe\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u6a21\u677f...","Insert video":"\u63d2\u5165\u89c6\u9891","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Insert/edit image":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Insert/edit media":"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","Insert/edit video":"\u63d2\u5165/\u7f16\u8f91\u89c6\u9891","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","Italic":"\u659c\u4f53","Justify":"\u4e24\u7aef\u5bf9\u9f50","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Language":"\u8bed\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6d45\u84dd\u8272","Light Gray":"\u6d45\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Line height":"\u884c\u9ad8","Link list":"\u94fe\u63a5\u6e05\u5355","Link...":"\u94fe\u63a5...","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Loading...":"\u52a0\u8f7d\u4e2d...","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Mathematical":"\u6570\u5b66","Media poster (Image URL)":"\u5c01\u9762(\u56fe\u7247\u5730\u5740)","Media...":"\u591a\u5a92\u4f53...","Medium Blue":"\u4e2d\u84dd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u5e76\u5355\u5143\u683c","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Midnight Blue":"\u6df1\u84dd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u79f0","Navy Blue":"\u6d77\u519b\u84dd","New document":"\u65b0\u5efa\u6587\u6863","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u4e2a","No":"\u5426","No alignment":"\u672a\u5bf9\u9f50","No color":"\u65e0","Nonbreaking space":"\u4e0d\u95f4\u65ad\u7a7a\u683c","None":"\u65e0","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u786e\u5b9a","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","Open link":"\u6253\u5f00\u94fe\u63a5","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9875\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u7c98\u8d34","Paste as text":"\u7c98\u8d34\u4e3a\u6587\u672c","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","Paste or type a link":"\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:","People":"\u4eba\u7c7b","Plugins":"\u63d2\u4ef6","Plugins installed ({0}):":"\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):","Powered by {0}":"\u7531{0}\u9a71\u52a8","Pre":"\u524d\u8a00","Preferences":"\u9996\u9009\u9879","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4f18\u79c0\u63d2\u4ef6\uff1a","Press the Up and Down arrow keys to resize the editor.":"\u6309\u4e0a\u4e0b\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press the arrow keys to resize the editor.":"\u6309\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press {0} for help":"\u6309 {0} \u83b7\u5f97\u5e2e\u52a9","Preview":"\u9884\u89c8","Previous":"\u4e0a\u4e00\u4e2a","Print":"\u6253\u5370","Print...":"\u6253\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"R","Range 0 to 255":"\u8303\u56f40\u81f3255","Red":"\u7ea2\u8272","Red component":"\u7ea2\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u989c\u8272","Remove link":"\u79fb\u9664\u94fe\u63a5","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Replace with":"\u66ff\u6362\u4e3a","Resize":"\u8c03\u6574\u5927\u5c0f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"\u663e\u793a\u6216\u9690\u85cf\u5176\u4ed6\u5de5\u5177\u680f\u9879","Rich Text Area":"\u5bcc\u6587\u672c\u533a\u57df","Rich Text Area. Press ALT-0 for help.":"\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7f16\u8f91\u533a\u3002\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Row group":"\u884c\u7ec4","Row header":"\u884c\u5934","Row properties":"\u884c\u5c5e\u6027","Row type":"\u884c\u7c7b\u578b","Rows":"\u884c\u6570","Save":"\u4fdd\u5b58","Save (if save plugin activated)":"\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Scope":"\u8303\u56f4","Search":"\u641c\u7d22","Select all":"\u5168\u9009","Select...":"\u9009\u62e9...","Selection":"\u9009\u62e9","Shortcut":"\u5feb\u6377\u65b9\u5f0f","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show caption":"\u663e\u793a\u6807\u9898","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Size":"\u5b57\u53f7","Solid":"\u5b9e\u7ebf","Source":"\u5730\u5740","Source code":"\u6e90\u4ee3\u7801","Special Character":"\u7279\u6b8a\u5b57\u7b26","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Split cell":"\u62c6\u5206\u5355\u5143\u683c","Square":"\u5b9e\u5fc3\u65b9\u5757","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Strikethrough":"\u5220\u9664\u7ebf","Style":"\u6837\u5f0f","Subscript":"\u4e0b\u6807","Superscript":"\u4e0a\u6807","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Symbols":"\u7b26\u53f7","System Font":"\u7cfb\u7edf\u5b57\u4f53","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6807\u9898","Table properties":"\u8868\u683c\u5c5e\u6027","Table styles":"\u8868\u683c\u6837\u5f0f","Template":"\u6a21\u677f","Templates":"\u6a21\u677f","Text":"\u6587\u5b57","Text color":"\u5b57\u4f53\u989c\u8272","Text color {0}":"\u5b57\u4f53\u989c\u8272 {0}","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto: \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:// \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Title":"\u6807\u9898","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846","Toggle accordion":"\u5207\u6362\u6298\u53e0\u9762\u677f","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5bf9\u9f50","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Turquoise":"\u9752\u7eff\u8272","Underline":"\u4e0b\u5212\u7ebf","Undo":"\u64a4\u9500","Upload":"\u4e0a\u4f20","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u5b9a\u4e49","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Vertical space":"\u5782\u76f4\u95f4\u8ddd","View":"\u67e5\u770b","Visual aids":"\u7f51\u683c\u7ebf","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bbd\u5ea6","Word count":"\u5b57\u6570","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","Yellow":"\u9ec4\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002","alignment":"\u5bf9\u9f50","austral sign":"\u6fb3\u5143\u7b26\u53f7","cedi sign":"\u585e\u5730\u7b26\u53f7","colon sign":"\u5192\u53f7","cruzeiro sign":"\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7","currency sign":"\u8d27\u5e01\u7b26\u53f7","dollar sign":"\u7f8e\u5143\u7b26\u53f7","dong sign":"\u8d8a\u5357\u76fe\u7b26\u53f7","drachma sign":"\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7","euro-currency sign":"\u6b27\u5143\u7b26\u53f7","example":"\u793a\u4f8b","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u53f7","german penny symbol":"\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u53f7","history":"\u5386\u53f2","hryvnia sign":"\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7","indentation":"\u7f29\u8fdb","indian rupee sign":"\u5370\u5ea6\u5362\u6bd4","kip sign":"\u8001\u631d\u57fa\u666e\u7b26\u53f7","lira sign":"\u91cc\u62c9\u7b26\u53f7","livre tournois sign":"\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7","manat sign":"\u9a6c\u7eb3\u7279\u7b26\u53f7","mill sign":"\u5bc6\u5c14\u7b26\u53f7","naira sign":"\u5948\u62c9\u7b26\u53f7","new sheqel sign":"\u65b0\u8c22\u514b\u5c14\u7b26\u53f7","nordic mark sign":"\u5317\u6b27\u9a6c\u514b","peseta sign":"\u6bd4\u585e\u5854\u7b26\u53f7","peso sign":"\u6bd4\u7d22\u7b26\u53f7","ruble sign":"\u5362\u5e03\u7b26\u53f7","rupee sign":"\u5362\u6bd4\u7b26\u53f7","spesmilo sign":"spesmilo\u7b26\u53f7","styles":"\u6837\u5f0f","tenge sign":"\u575a\u6208\u7b26\u53f7","tugrik sign":"\u56fe\u683c\u91cc\u514b\u7b26\u53f7","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97e9\u5143\u7b26\u53f7","yen character":"\u65e5\u5143\u5b57\u6837","yen/yuan character variant one":"\u5143\u5b57\u6837\uff08\u5927\u5199\uff09","yuan character":"\u4eba\u6c11\u5e01\u5143\u5b57\u6837","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09","{0} characters":"{0} \u4e2a\u5b57\u7b26","{0} columns, {1} rows":"{0} \u5217\uff0c{1} \u884c","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/zh_HK.js b/staticfiles/tinymce/langs/zh_HK.js new file mode 100644 index 0000000..975b1ae --- /dev/null +++ b/staticfiles/tinymce/langs/zh_HK.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_HK",{"#":"#","Accessibility":"\u5354\u52a9\u5de5\u5177","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u52d5\u4f5c","Activity":"\u6d3b\u52d5","Address":"\u5730\u5740","Advanced":"\u9ad8\u7d1a","Align":"\u5c0d\u9f4a","Align center":"\u7f6e\u4e2d\u5c0d\u9f4a","Align left":"\u5de6\u5c0d\u9f4a","Align right":"\u53f3\u5c0d\u9f4a","Alignment":"\u5c0d\u9f4a","Alignment {0}":"","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u93e1\u50cf","Alternative source URL":"\u66ff\u4ee3\u4f86\u6e90\u7db2\u5740","Anchor":"\u9328\u9ede","Anchor...":"\u9328\u9ede...","Anchors":"\u9328\u9ede","Animals and Nature":"\u52d5\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u982d","B":"\u85cd","Background color":"\u80cc\u666f\u984f\u8272","Background color {0}":"","Black":"\u9ed1\u8272","Block":"\u584a","Block {0}":"","Blockquote":"\u5f15\u6587\u5340\u584a","Blocks":"\u6a23\u5f0f","Blue":"\u85cd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u9ad4","Bold":"\u7c97\u9ad4","Border":"\u6846\u7dda","Border color":"\u6846\u7dda\u984f\u8272","Border style":"\u908a\u6846\u6a23\u5f0f","Border width":"\u908a\u6846\u5bec\u5ea6","Bottom":"\u4e0b\u65b9\u5c0d\u9f4a","Browse files":"","Browse for an image":"\u700f\u89bd\u5716\u50cf","Browse links":"","Bullet list":"\u7121\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6a19\u984c","Cell":"\u5132\u5b58\u683c","Cell padding":"\u5132\u5b58\u683c\u5167\u908a\u8ddd","Cell properties":"\u5132\u5b58\u683c\u5c6c\u6027","Cell spacing":"\u5132\u5b58\u683c\u5916\u9593\u8ddd","Cell styles":"\u5132\u5b58\u683c\u6a23\u5f0f","Cell type":"\u5132\u5b58\u683c\u5225","Center":"\u7f6e\u4e2d","Characters":"\u5b57\u5143","Characters (no spaces)":"\u5b57\u5143(\u7121\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5713","Class":"\u985e\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u95dc\u9589","Code":"\u4ee3\u78bc","Code sample...":"\u793a\u7bc4\u4ee3\u78bc...","Code view":"\u4ee3\u78bc\u8996\u5716","Color Picker":"\u9078\u8272\u5668","Color swatch":"\u984f\u8272\u6a23\u672c","Cols":"\u5217","Column":"\u6b04","Column clipboard actions":"\u5217\u526a\u8cbc\u677f\u64cd\u4f5c","Column group":"\u5217\u7d44","Column header":"\u5217\u6a19\u984c","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u8907\u88fd","Copy column":"\u8907\u88fd\u5217","Copy row":"\u8907\u88fd\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5167\u5bb9\u3002","Could not load emojis":"\u7121\u6cd5\u8f09\u5165Emojis","Count":"\u8a08\u6578","Currency":"\u8ca8\u5e63","Current window":"\u7576\u524d\u7a97\u53e3","Custom color":"\u81ea\u8a02\u984f\u8272","Custom...":"\u81ea\u8a02......","Cut":"\u526a\u4e0b","Cut column":"\u526a\u4e0b\u5217","Cut row":"\u526a\u4e0b\u884c","Dark Blue":"\u6df1\u85cd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7da0\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7d05\u8272","Dark Turquoise":"\u6df1\u85cd\u7da0\u8272","Dark Yellow":"\u6697\u9ec3\u8272","Dashed":"\u865b\u7dda","Date/time":"\u65e5\u671f/\u6642\u9593","Decrease indent":"\u6e1b\u5c11\u7e2e\u9032","Default":"\u9810\u8a2d","Delete accordion":"","Delete column":"\u522a\u9664\u5217","Delete row":"\u522a\u9664\u884c","Delete table":"\u522a\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5be6\u5fc3\u5713","Div":"DIV","Document":"\u6587\u4ef6","Dotted":"\u865b\u7dda","Double":"\u96d9\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f35\u5716\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6a94\u6848\u985e\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7de8\u8f2f","Embed":"\u5167\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u932f\u8aa4","Error: Form submit field collision.":"\u932f\u8aa4\uff1a\u8868\u683c\u51fa\u73fe\u591a\u91cd\u63d0\u4ea4\u885d\u7a81\u3002","Error: No form element found.":"\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002","Extended Latin":"\u62c9\u4e01\u8a9e\u64f4\u5145","Failed to initialize plugin: {0}":"\u7121\u6cd5\u521d\u59cb\u5316\u63d2\u4ef6 {0}","Failed to load plugin url: {0}":"\u7121\u6cd5\u8f09\u5165\u63d2\u4ef6\u93c8\u7d50 {0}","Failed to load plugin: {0} from url {1}":"\u7121\u6cd5\u5f9e {1} \u8f09\u5165\u63d2\u4ef6 {0}","Failed to upload image: {0}":"\u4e0a\u8f09\u5716\u7247\u5931\u6557\uff1a{0}","File":"\u6587\u4ef6","Find":"\u5c0b\u627e","Find (if searchreplace plugin activated)":"\u5c0b\u627e(\u5982\u679c\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Find and Replace":"\u5c0b\u627e\u548c\u53d6\u4ee3","Find and replace...":"\u5c0b\u627e\u4e26\u53d6\u4ee3...","Find in selection":"\u5728\u9078\u5340\u4e2d\u5c0b\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e5f","Focus to contextual toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u4e0a\u4e0b\u6587\u83dc\u55ae","Focus to element path":"\u79fb\u52d5\u7126\u9ede\u5230\u5143\u7d20\u8def\u5f91","Focus to menubar":"\u79fb\u52d5\u7126\u9ede\u5230\u529f\u80fd\u8868\u5217","Focus to toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u5de5\u5177\u5217","Font":"\u5b57\u9ad4","Font size {0}":"","Font sizes":"\u5b57\u9ad4\u5927\u5c0f","Font {0}":"","Fonts":"\u5b57\u9ad4","Food and Drink":"\u98df\u7269\u548c\u98f2\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u7192\u5e55","G":"\u7da0","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7da0\u8272","Green component":"\u7da0\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u901f\u9375","Header":"\u8868\u982d","Header cell":"\u8868\u982d\u5132\u5b58\u683c","Heading 1":"\u4e00\u7d1a\u6a19\u984c","Heading 2":"\u4e8c\u7d1a\u6a19\u984c","Heading 3":"\u4e09\u7d1a\u6a19\u984c","Heading 4":"\u56db\u7d1a\u6a19\u984c","Heading 5":"\u4e94\u7d1a\u6a19\u984c","Heading 6":"\u516d\u7d1a\u6a19\u984c","Headings":"\u6a19\u984c","Height":"\u9ad8\u5ea6","Help":"\u5e6b\u52a9","Hex color code":"\u5341\u516d\u9032\u4f4d\u984f\u8272\u4ee3\u78bc","Hidden":"\u96b1\u85cf","Horizontal align":"\u6c34\u6e96\u5c0d\u9f4a","Horizontal line":"\u6c34\u6e96\u5206\u5272\u7dda","Horizontal space":"\u6c34\u6e96\u9593\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u61c9\u8a72\u4ee5\u82f1\u6587\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6578\u4f4d\u3001\u7834\u6298\u865f\u3001\u9ede\u3001\u5192\u865f\u6216\u5e95\u7dda\u3002","Image is decorative":"\u9019\u662f\u88dd\u98fe\u5716\u50cf","Image list":"\u5716\u7247\u6e05\u55ae","Image title":"\u5716\u7247\u6a19\u984c","Image...":"\u5716\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u5716\u7247\u670d\u52d9\uff1a\u627e\u4e0d\u5230\u670d\u52d9","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u5716\u7247\u670d\u52d9\uff1a\u932f\u8aa4\u93c8\u7d50","ImageProxy HTTP error: Rejected request":"\u5716\u7247\u670d\u52d9\uff1a\u62d2\u7d55\u5b58\u53d6","ImageProxy HTTP error: Unknown ImageProxy error":"\u5716\u7247\u670d\u52d9\uff1a\u672a\u77e5\u932f\u8aa4","Increase indent":"\u589e\u52a0\u7e2e\u9032","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u7bc4\u672c","Insert accordion":"","Insert column after":"\u5728\u53f3\u5074\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u5074\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u6642\u9593","Insert image":"\u63d2\u5165\u5716\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u9023\u7d50 (\u5982\u679c\u9023\u7d50\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u7bc4\u672c...","Insert video":"\u63d2\u5165\u8996\u983b","Insert/Edit code sample":"\u63d2\u5165/\u7de8\u8f2f\u4ee3\u78bc\u793a\u7bc4","Insert/edit image":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","Insert/edit link":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","Insert/edit media":"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","Insert/edit video":"\u63d2\u5165/\u7de8\u8f2f\u8996\u983b","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u7121\u6548\u7684\u984f\u8272\u78bc\uff1a{0}","Invalid input":"\u7121\u6548\u8f38\u5165","Italic":"\u659c\u9ad4","Justify":"\u5169\u7aef\u5c0d\u9f4a","Keyboard Navigation":"\u9375\u76e4\u6307\u5f15","Language":"\u8a9e\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6dfa\u85cd\u8272","Light Gray":"\u6dfa\u7070\u8272","Light Green":"\u6dfa\u7da0\u8272","Light Purple":"\u6dfa\u7d2b\u8272","Light Red":"\u6dfa\u7d05\u8272","Light Yellow":"\u6dfa\u9ec3\u8272","Line height":"\u884c\u9ad8","Link list":"\u9023\u7d50\u6e05\u55ae","Link...":"\u9023\u7d50...","List Properties":"\u6e05\u55ae\u5c6c\u6027","List properties...":"\u6a19\u984c\u5b57\u9ad4\u5c6c\u6027","Loading emojis...":"\u6b63\u5728\u8f09\u5165Emojis...","Loading...":"\u8f09\u5165\u4e2d...","Lower Alpha":"\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5beb\u5e0c\u81d8\u5b57\u6bcd","Lower Roman":"\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57","Match case":"\u5927\u5c0f\u5beb\u5339\u914d","Mathematical":"\u6578\u5b78","Media poster (Image URL)":"\u5c01\u9762(\u5716\u7247\u4f4d\u5740)","Media...":"\u591a\u5a92\u9ad4...","Medium Blue":"\u4e2d\u85cd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u4f75\u5132\u5b58\u683c","Middle":"\u7f6e\u4e2d\u5c0d\u9f4a","Midnight Blue":"\u6df1\u85cd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u7a31","Navy Blue":"\u6d77\u8ecd\u85cd","New document":"\u65b0\u589e\u6587\u4ef6","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u500b","No":"\u5426","No alignment":"\u4e0d\u5c0d\u9f4a","No color":"\u7121","Nonbreaking space":"\u4e0d\u5206\u884c\u7a7a\u683c","None":"\u7121","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u78ba\u5b9a","Open help dialog":"\u6253\u958b\u5e6b\u52a9\u5c0d\u8a71\u65b9\u584a","Open link":"\u6253\u958b\u9023\u7d50","Open link in...":"\u9023\u7d50\u6253\u958b\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u958b\u5f48\u51fa\u5f0f\u529f\u80fd\u8868\uff0c\u7528\u65bc\u62c6\u5206\u6309\u9215","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9801\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u8cbc\u4e0a","Paste as text":"\u8cbc\u4e0a\u70ba\u6587\u672c","Paste column after":"\u8cbc\u4e0a\u5f8c\u9762\u7684\u5217","Paste column before":"\u8cbc\u4e0a\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u7576\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u6b21\u9ede\u64ca\u53ef\u4ee5\u56de\u5230\u666e\u901a\u8cbc\u4e0a\u6a21\u5f0f\u3002","Paste or type a link":"\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50","Paste row after":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","Paste row before":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c07\u5167\u5d4c\u4ee3\u78bc\u8cbc\u4e0a\u5728\u4e0b\u9762:","People":"\u4eba\u985e","Plugins":"\u5916\u639b\u7a0b\u5f0f","Plugins installed ({0}):":"\u5df2\u5b89\u88dd\u5916\u639b\u7a0b\u5f0f ({0}):","Powered by {0}":"\u7531{0}\u9a45\u52d5","Pre":"\u524d\u8a00","Preferences":"\u9996\u9078\u9805","Preformatted":"\u9810\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4ed8\u8cbb\u5916\u639b\u7a0b\u5f0f\uff1a","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u9810\u89bd","Previous":"\u4e0a\u4e00\u500b","Print":"\u5217\u5370","Print...":"\u5217\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"\u7d05","Range 0 to 255":"\u7bc4\u570d0\u81f3255","Red":"\u7d05\u8272","Red component":"\u7d05\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u984f\u8272","Remove link":"\u79fb\u9664\u9023\u7d50","Replace":"\u53d6\u4ee3","Replace all":"\u53d6\u4ee3\u5168\u90e8","Replace with":"\u53d6\u4ee3\u70ba","Resize":"\u8abf\u6574\u5927\u5c0f","Restore last draft":"\u6062\u5fa9\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"","Rich Text Area":"\u5bcc\u6587\u672c\u5340\u57df","Rich Text Area. Press ALT-0 for help.":"\u7de8\u8f2f\u5340\u3002\u6309Alt+0\u9375\u6253\u958b\u5e6b\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7de8\u8f2f\u5340\u3002\u6309ALT-F9\u6253\u958b\u529f\u80fd\u8868\uff0c\u6309ALT-F10\u6253\u958b\u5de5\u5177\u5217\uff0c\u6309ALT-0\u67e5\u770b\u5e6b\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8cbc\u677f\u64cd\u4f5c","Row group":"\u884c\u7d44","Row header":"\u884c\u982d","Row properties":"\u884c\u5c6c\u6027","Row type":"\u884c\u985e\u578b","Rows":"\u884c\u6578","Save":"\u5132\u5b58","Save (if save plugin activated)":"\u5132\u5b58(\u5982\u679c\u5132\u5b58\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Scope":"\u7bc4\u570d","Search":"\u641c\u7d22","Select all":"\u5168\u9078","Select...":"\u9078\u64c7...","Selection":"\u9078\u64c7","Shortcut":"\u6377\u5f91","Show blocks":"\u986f\u793a\u5340\u584a\u908a\u6846","Show caption":"\u986f\u793a\u6a19\u984c","Show invisible characters":"\u986f\u793a\u4e0d\u53ef\u898b\u5b57\u5143","Size":"\u5b57\u578b\u5927\u5c0f","Solid":"\u5be6\u7dda","Source":"\u6e90","Source code":"\u539f\u59cb\u7a0b\u5f0f\u78bc","Special Character":"\u7279\u6b8a\u5b57\u5143","Special character...":"\u7279\u6b8a\u5b57\u5143...","Split cell":"\u62c6\u5206\u5132\u5b58\u683c","Square":"\u5be6\u5fc3\u65b9\u584a","Start list at number":"\u4ee5\u6578\u5b57\u958b\u59cb\u6e05\u55ae","Strikethrough":"\u522a\u9664\u7dda","Style":"\u6a23\u5f0f","Subscript":"\u4e0b\u6a19","Superscript":"\u4e0a\u6a19","Switch to or from fullscreen mode":"\u5207\u63db\u5168\u7192\u5e55\u6a21\u5f0f","Symbols":"\u7b26\u865f","System Font":"\u7cfb\u7d71\u5b57\u9ad4","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6a19\u984c","Table properties":"\u8868\u683c\u5c6c\u6027","Table styles":"\u8868\u683c\u6a23\u5f0f","Template":"\u7bc4\u672c","Templates":"\u7bc4\u672c","Text":"\u6587\u5b57","Text color":"\u6587\u672c\u984f\u8272","Text color {0}":"","Text to display":"\u8981\u986f\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u96fb\u90f5\u5730\u5740\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 mailto:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 http:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 https:// \u9996\u78bc\u55ce\uff1f","Title":"\u6a19\u984c","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u9375\u6253\u958b\u5c0d\u8a71\u65b9\u584a","Toggle accordion":"","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5c0d\u9f4a","Travel and Places":"\u65c5\u904a\u548c\u5730\u9ede","Turquoise":"\u9752\u7da0\u8272","Underline":"\u5e95\u7dda","Undo":"\u5fa9\u539f","Upload":"\u4e0a\u8f09","Uploading image":"\u4e0a\u8f09\u5716\u7247","Upper Alpha":"\u5927\u5beb\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5beb\u7f85\u99ac\u6578\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u8a02","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5c0d\u9f4a","Vertical space":"\u5782\u76f4\u9593\u8ddd","View":"\u67e5\u770b","Visual aids":"\u683c\u7dda","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bec\u5ea6","Word count":"\u5b57\u6578","Words":"\u55ae\u8a5e","Words: {0}":"\u5b57\u6578\uff1a{0}","Yellow":"\u9ec3\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u9084\u6709\u6587\u4ef6\u5c1a\u672a\u5132\u5b58\uff0c\u78ba\u5b9a\u8981\u96e2\u958b\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6253\u958b\u526a\u8cbc\u677f\uff0c\u8acb\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u901f\u9375\u3002","alignment":"\u5c0d\u9f4a","austral sign":"\u6fb3\u5143\u7b26\u865f","cedi sign":"\u585e\u5730\u7b26\u865f","colon sign":"\u5192\u865f","cruzeiro sign":"\u514b\u9b6f\u8cfd\u7f85\u5e63\u7b26\u865f","currency sign":"\u8ca8\u5e63\u7b26\u865f","dollar sign":"\u7f8e\u5143\u7b26\u865f","dong sign":"\u8d8a\u5357\u76fe\u7b26\u865f","drachma sign":"\u5fb7\u62c9\u514b\u99ac\u7b26\u865f","euro-currency sign":"\u6b50\u5143\u7b26\u865f","example":"\u4f8b\u5b50","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u865f","german penny symbol":"\u5fb7\u570b\u4fbf\u58eb\u7b26\u865f","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u865f","history":"\u6b77\u53f2","hryvnia sign":"\u683c\u88e1\u592b\u5c3c\u4e9e\u7b26\u865f","indentation":"\u7e2e\u9032","indian rupee sign":"\u5370\u5ea6\u76e7\u6bd4","kip sign":"\u8001\u64be\u57fa\u666e\u7b26\u865f","lira sign":"\u91cc\u62c9\u7b26\u865f","livre tournois sign":"\u88e1\u5f17\u5f17\u723e\u7b26\u865f","manat sign":"\u99ac\u7d0d\u7279\u7b26\u865f","mill sign":"\u5bc6\u723e\u7b26\u865f","naira sign":"\u5948\u62c9\u7b26\u865f","new sheqel sign":"\u65b0\u8b1d\u514b\u723e\u7b26\u865f","nordic mark sign":"\u5317\u6b50\u99ac\u514b","peseta sign":"\u6bd4\u85a9\u659c\u5854\u7b26\u865f","peso sign":"\u6bd4\u7d22\u7b26\u865f","ruble sign":"\u76e7\u5e03\u7b26\u865f","rupee sign":"\u76e7\u6bd4\u7b26\u865f","spesmilo sign":"spesmilo\u7b26\u865f","styles":"\u6a23\u5f0f","tenge sign":"\u5805\u6208\u7b26\u865f","tugrik sign":"\u5716\u683c\u88e1\u514b\u7b26\u865f","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97d3\u5143\u7b26\u865f","yen character":"\u65e5\u5143\u5b57\u6a23","yen/yuan character variant one":"\u5143\u5b57\u6a23\uff08\u5927\u5beb\uff09","yuan character":"\u4eba\u6c11\u5e63\u5143\u5b57\u6a23","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6a23\uff08\u6e2f\u81fa\u5730\u5340\uff09","{0} characters":"{0} \u500b\u5b57\u5143","{0} columns, {1} rows":"","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/zh_MO.js b/staticfiles/tinymce/langs/zh_MO.js new file mode 100644 index 0000000..676b3e9 --- /dev/null +++ b/staticfiles/tinymce/langs/zh_MO.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_MO",{"#":"#","Accessibility":"\u5354\u52a9\u5de5\u5177","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u52d5\u4f5c","Activity":"\u6d3b\u52d5","Address":"\u5730\u5740","Advanced":"\u9ad8\u7d1a","Align":"\u5c0d\u9f4a","Align center":"\u7f6e\u4e2d\u5c0d\u9f4a","Align left":"\u5de6\u5c0d\u9f4a","Align right":"\u53f3\u5c0d\u9f4a","Alignment":"\u5c0d\u9f4a","Alignment {0}":"","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u93e1\u50cf","Alternative source URL":"\u66ff\u4ee3\u4f86\u6e90\u7db2\u5740","Anchor":"\u9328\u9ede","Anchor...":"\u9328\u9ede...","Anchors":"\u9328\u9ede","Animals and Nature":"\u52d5\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u982d","B":"\u85cd","Background color":"\u80cc\u666f\u984f\u8272","Background color {0}":"","Black":"\u9ed1\u8272","Block":"\u584a","Block {0}":"","Blockquote":"\u5f15\u6587\u5340\u584a","Blocks":"\u6a23\u5f0f","Blue":"\u85cd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u9ad4","Bold":"\u7c97\u9ad4","Border":"\u6846\u7dda","Border color":"\u6846\u7dda\u984f\u8272","Border style":"\u908a\u6846\u6a23\u5f0f","Border width":"\u908a\u6846\u5bec\u5ea6","Bottom":"\u4e0b\u65b9\u5c0d\u9f4a","Browse files":"","Browse for an image":"\u700f\u89bd\u5716\u50cf","Browse links":"","Bullet list":"\u7121\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6a19\u984c","Cell":"\u5132\u5b58\u683c","Cell padding":"\u5132\u5b58\u683c\u5167\u908a\u8ddd","Cell properties":"\u5132\u5b58\u683c\u5c6c\u6027","Cell spacing":"\u5132\u5b58\u683c\u5916\u9593\u8ddd","Cell styles":"\u5132\u5b58\u683c\u6a23\u5f0f","Cell type":"\u5132\u5b58\u683c\u5225","Center":"\u7f6e\u4e2d","Characters":"\u5b57\u5143","Characters (no spaces)":"\u5b57\u5143(\u7121\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5713","Class":"\u985e\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u95dc\u9589","Code":"\u4ee3\u78bc","Code sample...":"\u793a\u7bc4\u4ee3\u78bc...","Code view":"\u4ee3\u78bc\u8996\u5716","Color Picker":"\u9078\u8272\u5668","Color swatch":"\u984f\u8272\u6a23\u672c","Cols":"\u5217","Column":"\u6b04","Column clipboard actions":"\u5217\u526a\u8cbc\u677f\u64cd\u4f5c","Column group":"\u5217\u7d44","Column header":"\u5217\u6a19\u984c","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u8907\u88fd","Copy column":"\u8907\u88fd\u5217","Copy row":"\u8907\u88fd\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5167\u5bb9\u3002","Could not load emojis":"\u7121\u6cd5\u8f09\u5165Emojis","Count":"\u8a08\u6578","Currency":"\u8ca8\u5e63","Current window":"\u7576\u524d\u7a97\u53e3","Custom color":"\u81ea\u8a02\u984f\u8272","Custom...":"\u81ea\u8a02......","Cut":"\u526a\u4e0b","Cut column":"\u526a\u4e0b\u5217","Cut row":"\u526a\u4e0b\u884c","Dark Blue":"\u6df1\u85cd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7da0\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7d05\u8272","Dark Turquoise":"\u6df1\u85cd\u7da0\u8272","Dark Yellow":"\u6697\u9ec3\u8272","Dashed":"\u865b\u7dda","Date/time":"\u65e5\u671f/\u6642\u9593","Decrease indent":"\u6e1b\u5c11\u7e2e\u9032","Default":"\u9810\u8a2d","Delete accordion":"","Delete column":"\u522a\u9664\u5217","Delete row":"\u522a\u9664\u884c","Delete table":"\u522a\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5be6\u5fc3\u5713","Div":"DIV","Document":"\u6587\u4ef6","Dotted":"\u865b\u7dda","Double":"\u96d9\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f35\u5716\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6a94\u6848\u985e\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7de8\u8f2f","Embed":"\u5167\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u932f\u8aa4","Error: Form submit field collision.":"\u932f\u8aa4\uff1a\u8868\u683c\u51fa\u73fe\u591a\u91cd\u63d0\u4ea4\u885d\u7a81\u3002","Error: No form element found.":"\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002","Extended Latin":"\u62c9\u4e01\u8a9e\u64f4\u5145","Failed to initialize plugin: {0}":"\u7121\u6cd5\u521d\u59cb\u5316\u63d2\u4ef6 {0}","Failed to load plugin url: {0}":"\u7121\u6cd5\u8f09\u5165\u63d2\u4ef6\u93c8\u7d50 {0}","Failed to load plugin: {0} from url {1}":"\u7121\u6cd5\u5f9e {1} \u8f09\u5165\u63d2\u4ef6 {0}","Failed to upload image: {0}":"\u4e0a\u8f09\u5716\u7247\u5931\u6557\uff1a{0}","File":"\u6587\u4ef6","Find":"\u5c0b\u627e","Find (if searchreplace plugin activated)":"\u5c0b\u627e(\u5982\u679c\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Find and Replace":"\u5c0b\u627e\u548c\u53d6\u4ee3","Find and replace...":"\u5c0b\u627e\u4e26\u53d6\u4ee3...","Find in selection":"\u5728\u9078\u5340\u4e2d\u5c0b\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e5f","Focus to contextual toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u4e0a\u4e0b\u6587\u83dc\u55ae","Focus to element path":"\u79fb\u52d5\u7126\u9ede\u5230\u5143\u7d20\u8def\u5f91","Focus to menubar":"\u79fb\u52d5\u7126\u9ede\u5230\u529f\u80fd\u8868\u5217","Focus to toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u5de5\u5177\u5217","Font":"\u5b57\u9ad4","Font size {0}":"","Font sizes":"\u5b57\u9ad4\u5927\u5c0f","Font {0}":"","Fonts":"\u5b57\u9ad4","Food and Drink":"\u98df\u7269\u548c\u98f2\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u7192\u5e55","G":"\u7da0","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7da0\u8272","Green component":"\u7da0\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u901f\u9375","Header":"\u8868\u982d","Header cell":"\u8868\u982d\u5132\u5b58\u683c","Heading 1":"\u4e00\u7d1a\u6a19\u984c","Heading 2":"\u4e8c\u7d1a\u6a19\u984c","Heading 3":"\u4e09\u7d1a\u6a19\u984c","Heading 4":"\u56db\u7d1a\u6a19\u984c","Heading 5":"\u4e94\u7d1a\u6a19\u984c","Heading 6":"\u516d\u7d1a\u6a19\u984c","Headings":"\u6a19\u984c","Height":"\u9ad8\u5ea6","Help":"\u5e6b\u52a9","Hex color code":"\u5341\u516d\u9032\u4f4d\u984f\u8272\u4ee3\u78bc","Hidden":"\u96b1\u85cf","Horizontal align":"\u6c34\u6e96\u5c0d\u9f4a","Horizontal line":"\u6c34\u6e96\u5206\u5272\u7dda","Horizontal space":"\u6c34\u6e96\u9593\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u61c9\u8a72\u4ee5\u82f1\u6587\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6578\u4f4d\u3001\u7834\u6298\u865f\u3001\u9ede\u3001\u5192\u865f\u6216\u5e95\u7dda\u3002","Image is decorative":"\u9019\u662f\u88dd\u98fe\u5716\u50cf","Image list":"\u5716\u7247\u6e05\u55ae","Image title":"\u5716\u7247\u6a19\u984c","Image...":"\u5716\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u5716\u7247\u670d\u52d9\uff1a\u627e\u4e0d\u5230\u670d\u52d9","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u5716\u7247\u670d\u52d9\uff1a\u932f\u8aa4\u93c8\u7d50","ImageProxy HTTP error: Rejected request":"\u5716\u7247\u670d\u52d9\uff1a\u62d2\u7d55\u5b58\u53d6","ImageProxy HTTP error: Unknown ImageProxy error":"\u5716\u7247\u670d\u52d9\uff1a\u672a\u77e5\u932f\u8aa4","Increase indent":"\u589e\u52a0\u7e2e\u9032","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u7bc4\u672c","Insert accordion":"","Insert column after":"\u5728\u53f3\u5074\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u5074\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u6642\u9593","Insert image":"\u63d2\u5165\u5716\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u9023\u7d50 (\u5982\u679c\u9023\u7d50\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u7bc4\u672c...","Insert video":"\u63d2\u5165\u8996\u983b","Insert/Edit code sample":"\u63d2\u5165/\u7de8\u8f2f\u4ee3\u78bc\u793a\u7bc4","Insert/edit image":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","Insert/edit link":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","Insert/edit media":"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","Insert/edit video":"\u63d2\u5165/\u7de8\u8f2f\u8996\u983b","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u7121\u6548\u7684\u984f\u8272\u78bc\uff1a{0}","Invalid input":"\u7121\u6548\u8f38\u5165","Italic":"\u659c\u9ad4","Justify":"\u5169\u7aef\u5c0d\u9f4a","Keyboard Navigation":"\u9375\u76e4\u6307\u5f15","Language":"\u8a9e\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6dfa\u85cd\u8272","Light Gray":"\u6dfa\u7070\u8272","Light Green":"\u6dfa\u7da0\u8272","Light Purple":"\u6dfa\u7d2b\u8272","Light Red":"\u6dfa\u7d05\u8272","Light Yellow":"\u6dfa\u9ec3\u8272","Line height":"\u884c\u9ad8","Link list":"\u9023\u7d50\u6e05\u55ae","Link...":"\u9023\u7d50...","List Properties":"\u6e05\u55ae\u5c6c\u6027","List properties...":"\u6a19\u984c\u5b57\u9ad4\u5c6c\u6027","Loading emojis...":"\u6b63\u5728\u8f09\u5165Emojis...","Loading...":"\u8f09\u5165\u4e2d...","Lower Alpha":"\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5beb\u5e0c\u81d8\u5b57\u6bcd","Lower Roman":"\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57","Match case":"\u5927\u5c0f\u5beb\u5339\u914d","Mathematical":"\u6578\u5b78","Media poster (Image URL)":"\u5c01\u9762(\u5716\u7247\u4f4d\u5740)","Media...":"\u591a\u5a92\u9ad4...","Medium Blue":"\u4e2d\u85cd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u4f75\u5132\u5b58\u683c","Middle":"\u7f6e\u4e2d\u5c0d\u9f4a","Midnight Blue":"\u6df1\u85cd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u7a31","Navy Blue":"\u6d77\u8ecd\u85cd","New document":"\u65b0\u589e\u6587\u4ef6","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u500b","No":"\u5426","No alignment":"\u4e0d\u5c0d\u9f4a","No color":"\u7121","Nonbreaking space":"\u4e0d\u5206\u884c\u7a7a\u683c","None":"\u7121","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u78ba\u5b9a","Open help dialog":"\u6253\u958b\u5e6b\u52a9\u5c0d\u8a71\u65b9\u584a","Open link":"\u6253\u958b\u9023\u7d50","Open link in...":"\u9023\u7d50\u6253\u958b\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u958b\u5f48\u51fa\u5f0f\u529f\u80fd\u8868\uff0c\u7528\u65bc\u62c6\u5206\u6309\u9215","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9801\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u8cbc\u4e0a","Paste as text":"\u8cbc\u4e0a\u70ba\u6587\u672c","Paste column after":"\u8cbc\u4e0a\u5f8c\u9762\u7684\u5217","Paste column before":"\u8cbc\u4e0a\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u7576\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u6b21\u9ede\u64ca\u53ef\u4ee5\u56de\u5230\u666e\u901a\u8cbc\u4e0a\u6a21\u5f0f\u3002","Paste or type a link":"\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50","Paste row after":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","Paste row before":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c07\u5167\u5d4c\u4ee3\u78bc\u8cbc\u4e0a\u5728\u4e0b\u9762:","People":"\u4eba\u985e","Plugins":"\u5916\u639b\u7a0b\u5f0f","Plugins installed ({0}):":"\u5df2\u5b89\u88dd\u5916\u639b\u7a0b\u5f0f ({0}):","Powered by {0}":"\u7531{0}\u9a45\u52d5","Pre":"\u524d\u8a00","Preferences":"\u9996\u9078\u9805","Preformatted":"\u9810\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4ed8\u8cbb\u5916\u639b\u7a0b\u5f0f\uff1a","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u9810\u89bd","Previous":"\u4e0a\u4e00\u500b","Print":"\u5217\u5370","Print...":"\u5217\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"\u7d05","Range 0 to 255":"\u7bc4\u570d0\u81f3255","Red":"\u7d05\u8272","Red component":"\u7d05\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u984f\u8272","Remove link":"\u79fb\u9664\u9023\u7d50","Replace":"\u53d6\u4ee3","Replace all":"\u53d6\u4ee3\u5168\u90e8","Replace with":"\u53d6\u4ee3\u70ba","Resize":"\u8abf\u6574\u5927\u5c0f","Restore last draft":"\u6062\u5fa9\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"","Rich Text Area":"\u5bcc\u6587\u672c\u5340\u57df","Rich Text Area. Press ALT-0 for help.":"\u7de8\u8f2f\u5340\u3002\u6309Alt+0\u9375\u6253\u958b\u5e6b\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7de8\u8f2f\u5340\u3002\u6309ALT-F9\u6253\u958b\u529f\u80fd\u8868\uff0c\u6309ALT-F10\u6253\u958b\u5de5\u5177\u5217\uff0c\u6309ALT-0\u67e5\u770b\u5e6b\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8cbc\u677f\u64cd\u4f5c","Row group":"\u884c\u7d44","Row header":"\u884c\u982d","Row properties":"\u884c\u5c6c\u6027","Row type":"\u884c\u985e\u578b","Rows":"\u884c\u6578","Save":"\u5132\u5b58","Save (if save plugin activated)":"\u5132\u5b58(\u5982\u679c\u5132\u5b58\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Scope":"\u7bc4\u570d","Search":"\u641c\u7d22","Select all":"\u5168\u9078","Select...":"\u9078\u64c7...","Selection":"\u9078\u64c7","Shortcut":"\u6377\u5f91","Show blocks":"\u986f\u793a\u5340\u584a\u908a\u6846","Show caption":"\u986f\u793a\u6a19\u984c","Show invisible characters":"\u986f\u793a\u4e0d\u53ef\u898b\u5b57\u5143","Size":"\u5b57\u578b\u5927\u5c0f","Solid":"\u5be6\u7dda","Source":"\u6e90","Source code":"\u539f\u59cb\u7a0b\u5f0f\u78bc","Special Character":"\u7279\u6b8a\u5b57\u5143","Special character...":"\u7279\u6b8a\u5b57\u5143...","Split cell":"\u62c6\u5206\u5132\u5b58\u683c","Square":"\u5be6\u5fc3\u65b9\u584a","Start list at number":"\u4ee5\u6578\u5b57\u958b\u59cb\u6e05\u55ae","Strikethrough":"\u522a\u9664\u7dda","Style":"\u6a23\u5f0f","Subscript":"\u4e0b\u6a19","Superscript":"\u4e0a\u6a19","Switch to or from fullscreen mode":"\u5207\u63db\u5168\u7192\u5e55\u6a21\u5f0f","Symbols":"\u7b26\u865f","System Font":"\u7cfb\u7d71\u5b57\u9ad4","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6a19\u984c","Table properties":"\u8868\u683c\u5c6c\u6027","Table styles":"\u8868\u683c\u6a23\u5f0f","Template":"\u7bc4\u672c","Templates":"\u7bc4\u672c","Text":"\u6587\u5b57","Text color":"\u6587\u672c\u984f\u8272","Text color {0}":"","Text to display":"\u8981\u986f\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u96fb\u90f5\u5730\u5740\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 mailto:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 http:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 https:// \u9996\u78bc\u55ce\uff1f","Title":"\u6a19\u984c","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u9375\u6253\u958b\u5c0d\u8a71\u65b9\u584a","Toggle accordion":"","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5c0d\u9f4a","Travel and Places":"\u65c5\u904a\u548c\u5730\u9ede","Turquoise":"\u9752\u7da0\u8272","Underline":"\u5e95\u7dda","Undo":"\u5fa9\u539f","Upload":"\u4e0a\u8f09","Uploading image":"\u4e0a\u8f09\u5716\u7247","Upper Alpha":"\u5927\u5beb\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5beb\u7f85\u99ac\u6578\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u8a02","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5c0d\u9f4a","Vertical space":"\u5782\u76f4\u9593\u8ddd","View":"\u67e5\u770b","Visual aids":"\u683c\u7dda","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bec\u5ea6","Word count":"\u5b57\u6578","Words":"\u55ae\u8a5e","Words: {0}":"\u5b57\u6578\uff1a{0}","Yellow":"\u9ec3\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u9084\u6709\u6587\u4ef6\u5c1a\u672a\u5132\u5b58\uff0c\u78ba\u5b9a\u8981\u96e2\u958b\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6253\u958b\u526a\u8cbc\u677f\uff0c\u8acb\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u901f\u9375\u3002","alignment":"\u5c0d\u9f4a","austral sign":"\u6fb3\u5143\u7b26\u865f","cedi sign":"\u585e\u5730\u7b26\u865f","colon sign":"\u5192\u865f","cruzeiro sign":"\u514b\u9b6f\u8cfd\u7f85\u5e63\u7b26\u865f","currency sign":"\u8ca8\u5e63\u7b26\u865f","dollar sign":"\u7f8e\u5143\u7b26\u865f","dong sign":"\u8d8a\u5357\u76fe\u7b26\u865f","drachma sign":"\u5fb7\u62c9\u514b\u99ac\u7b26\u865f","euro-currency sign":"\u6b50\u5143\u7b26\u865f","example":"\u4f8b\u5b50","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u865f","german penny symbol":"\u5fb7\u570b\u4fbf\u58eb\u7b26\u865f","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u865f","history":"\u6b77\u53f2","hryvnia sign":"\u683c\u88e1\u592b\u5c3c\u4e9e\u7b26\u865f","indentation":"\u7e2e\u9032","indian rupee sign":"\u5370\u5ea6\u76e7\u6bd4","kip sign":"\u8001\u64be\u57fa\u666e\u7b26\u865f","lira sign":"\u91cc\u62c9\u7b26\u865f","livre tournois sign":"\u88e1\u5f17\u5f17\u723e\u7b26\u865f","manat sign":"\u99ac\u7d0d\u7279\u7b26\u865f","mill sign":"\u5bc6\u723e\u7b26\u865f","naira sign":"\u5948\u62c9\u7b26\u865f","new sheqel sign":"\u65b0\u8b1d\u514b\u723e\u7b26\u865f","nordic mark sign":"\u5317\u6b50\u99ac\u514b","peseta sign":"\u6bd4\u85a9\u659c\u5854\u7b26\u865f","peso sign":"\u6bd4\u7d22\u7b26\u865f","ruble sign":"\u76e7\u5e03\u7b26\u865f","rupee sign":"\u76e7\u6bd4\u7b26\u865f","spesmilo sign":"spesmilo\u7b26\u865f","styles":"\u6a23\u5f0f","tenge sign":"\u5805\u6208\u7b26\u865f","tugrik sign":"\u5716\u683c\u88e1\u514b\u7b26\u865f","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97d3\u5143\u7b26\u865f","yen character":"\u65e5\u5143\u5b57\u6a23","yen/yuan character variant one":"\u5143\u5b57\u6a23\uff08\u5927\u5beb\uff09","yuan character":"\u4eba\u6c11\u5e63\u5143\u5b57\u6a23","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6a23\uff08\u6e2f\u81fa\u5730\u5340\uff09","{0} characters":"{0} \u500b\u5b57\u5143","{0} columns, {1} rows":"{0} \u6b04\uff0c{1} \u5217","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/zh_SG.js b/staticfiles/tinymce/langs/zh_SG.js new file mode 100644 index 0000000..1042bb1 --- /dev/null +++ b/staticfiles/tinymce/langs/zh_SG.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_SG",{"#":"#","Accessibility":"\u5354\u52a9\u5de5\u5177","Accordion":"","Accordion body...":"","Accordion summary...":"","Action":"\u52d5\u4f5c","Activity":"\u6d3b\u52d5","Address":"\u5730\u5740","Advanced":"\u9ad8\u7d1a","Align":"\u5c0d\u9f4a","Align center":"\u7f6e\u4e2d\u5c0d\u9f4a","Align left":"\u5de6\u5c0d\u9f4a","Align right":"\u53f3\u5c0d\u9f4a","Alignment":"\u5c0d\u9f4a","Alignment {0}":"","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u93e1\u50cf","Alternative source URL":"\u66ff\u4ee3\u4f86\u6e90\u7db2\u5740","Anchor":"\u9328\u9ede","Anchor...":"\u9328\u9ede...","Anchors":"\u9328\u9ede","Animals and Nature":"\u52d5\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u982d","B":"\u85cd","Background color":"\u80cc\u666f\u984f\u8272","Background color {0}":"","Black":"\u9ed1\u8272","Block":"\u584a","Block {0}":"","Blockquote":"\u5f15\u6587\u5340\u584a","Blocks":"\u6a23\u5f0f","Blue":"\u85cd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u9ad4","Bold":"\u7c97\u9ad4","Border":"\u6846\u7dda","Border color":"\u6846\u7dda\u984f\u8272","Border style":"\u908a\u6846\u6a23\u5f0f","Border width":"\u908a\u6846\u5bec\u5ea6","Bottom":"\u4e0b\u65b9\u5c0d\u9f4a","Browse files":"","Browse for an image":"\u700f\u89bd\u5716\u50cf","Browse links":"","Bullet list":"\u7121\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6a19\u984c","Cell":"\u5132\u5b58\u683c","Cell padding":"\u5132\u5b58\u683c\u5167\u908a\u8ddd","Cell properties":"\u5132\u5b58\u683c\u5c6c\u6027","Cell spacing":"\u5132\u5b58\u683c\u5916\u9593\u8ddd","Cell styles":"\u5132\u5b58\u683c\u6a23\u5f0f","Cell type":"\u5132\u5b58\u683c\u5225","Center":"\u7f6e\u4e2d","Characters":"\u5b57\u5143","Characters (no spaces)":"\u5b57\u5143(\u7121\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5713","Class":"\u985e\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u95dc\u9589","Code":"\u4ee3\u78bc","Code sample...":"\u793a\u7bc4\u4ee3\u78bc...","Code view":"\u4ee3\u78bc\u8996\u5716","Color Picker":"\u9078\u8272\u5668","Color swatch":"\u984f\u8272\u6a23\u672c","Cols":"\u5217","Column":"\u6b04","Column clipboard actions":"\u5217\u526a\u8cbc\u677f\u64cd\u4f5c","Column group":"\u5217\u7d44","Column header":"\u5217\u6a19\u984c","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u8907\u88fd","Copy column":"\u8907\u88fd\u5217","Copy row":"\u8907\u88fd\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5167\u5bb9\u3002","Could not load emojis":"\u7121\u6cd5\u8f09\u5165Emojis","Count":"\u8a08\u6578","Currency":"\u8ca8\u5e63","Current window":"\u7576\u524d\u7a97\u53e3","Custom color":"\u81ea\u8a02\u984f\u8272","Custom...":"\u81ea\u8a02......","Cut":"\u526a\u4e0b","Cut column":"\u526a\u4e0b\u5217","Cut row":"\u526a\u4e0b\u884c","Dark Blue":"\u6df1\u85cd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7da0\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7d05\u8272","Dark Turquoise":"\u6df1\u85cd\u7da0\u8272","Dark Yellow":"\u6697\u9ec3\u8272","Dashed":"\u865b\u7dda","Date/time":"\u65e5\u671f/\u6642\u9593","Decrease indent":"\u6e1b\u5c11\u7e2e\u9032","Default":"\u9810\u8a2d","Delete accordion":"","Delete column":"\u522a\u9664\u5217","Delete row":"\u522a\u9664\u884c","Delete table":"\u522a\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5be6\u5fc3\u5713","Div":"DIV","Document":"\u6587\u4ef6","Dotted":"\u865b\u7dda","Double":"\u96d9\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f35\u5716\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6a94\u6848\u985e\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7de8\u8f2f","Embed":"\u5167\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u932f\u8aa4","Error: Form submit field collision.":"\u932f\u8aa4\uff1a\u8868\u683c\u51fa\u73fe\u591a\u91cd\u63d0\u4ea4\u885d\u7a81\u3002","Error: No form element found.":"\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002","Extended Latin":"\u62c9\u4e01\u8a9e\u64f4\u5145","Failed to initialize plugin: {0}":"\u7121\u6cd5\u521d\u59cb\u5316\u63d2\u4ef6 {0}","Failed to load plugin url: {0}":"\u7121\u6cd5\u8f09\u5165\u63d2\u4ef6\u93c8\u7d50 {0}","Failed to load plugin: {0} from url {1}":"\u7121\u6cd5\u5f9e {1} \u8f09\u5165\u63d2\u4ef6 {0}","Failed to upload image: {0}":"\u4e0a\u8f09\u5716\u7247\u5931\u6557\uff1a{0}","File":"\u6587\u4ef6","Find":"\u5c0b\u627e","Find (if searchreplace plugin activated)":"\u5c0b\u627e(\u5982\u679c\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Find and Replace":"\u5c0b\u627e\u548c\u53d6\u4ee3","Find and replace...":"\u5c0b\u627e\u4e26\u53d6\u4ee3...","Find in selection":"\u5728\u9078\u5340\u4e2d\u5c0b\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e5f","Focus to contextual toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u4e0a\u4e0b\u6587\u83dc\u55ae","Focus to element path":"\u79fb\u52d5\u7126\u9ede\u5230\u5143\u7d20\u8def\u5f91","Focus to menubar":"\u79fb\u52d5\u7126\u9ede\u5230\u529f\u80fd\u8868\u5217","Focus to toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u5de5\u5177\u5217","Font":"\u5b57\u9ad4","Font size {0}":"","Font sizes":"\u5b57\u9ad4\u5927\u5c0f","Font {0}":"","Fonts":"\u5b57\u9ad4","Food and Drink":"\u98df\u7269\u548c\u98f2\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u7192\u5e55","G":"\u7da0","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7da0\u8272","Green component":"\u7da0\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u901f\u9375","Header":"\u8868\u982d","Header cell":"\u8868\u982d\u5132\u5b58\u683c","Heading 1":"\u4e00\u7d1a\u6a19\u984c","Heading 2":"\u4e8c\u7d1a\u6a19\u984c","Heading 3":"\u4e09\u7d1a\u6a19\u984c","Heading 4":"\u56db\u7d1a\u6a19\u984c","Heading 5":"\u4e94\u7d1a\u6a19\u984c","Heading 6":"\u516d\u7d1a\u6a19\u984c","Headings":"\u6a19\u984c","Height":"\u9ad8\u5ea6","Help":"\u5e6b\u52a9","Hex color code":"\u5341\u516d\u9032\u4f4d\u984f\u8272\u4ee3\u78bc","Hidden":"\u96b1\u85cf","Horizontal align":"\u6c34\u6e96\u5c0d\u9f4a","Horizontal line":"\u6c34\u6e96\u5206\u5272\u7dda","Horizontal space":"\u6c34\u6e96\u9593\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u61c9\u8a72\u4ee5\u82f1\u6587\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6578\u4f4d\u3001\u7834\u6298\u865f\u3001\u9ede\u3001\u5192\u865f\u6216\u5e95\u7dda\u3002","Image is decorative":"\u9019\u662f\u88dd\u98fe\u5716\u50cf","Image list":"\u5716\u7247\u6e05\u55ae","Image title":"\u5716\u7247\u6a19\u984c","Image...":"\u5716\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u5716\u7247\u670d\u52d9\uff1a\u627e\u4e0d\u5230\u670d\u52d9","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u5716\u7247\u670d\u52d9\uff1a\u932f\u8aa4\u93c8\u7d50","ImageProxy HTTP error: Rejected request":"\u5716\u7247\u670d\u52d9\uff1a\u62d2\u7d55\u5b58\u53d6","ImageProxy HTTP error: Unknown ImageProxy error":"\u5716\u7247\u670d\u52d9\uff1a\u672a\u77e5\u932f\u8aa4","Increase indent":"\u589e\u52a0\u7e2e\u9032","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u7bc4\u672c","Insert accordion":"","Insert column after":"\u5728\u53f3\u5074\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u5074\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u6642\u9593","Insert image":"\u63d2\u5165\u5716\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u9023\u7d50 (\u5982\u679c\u9023\u7d50\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u7bc4\u672c...","Insert video":"\u63d2\u5165\u8996\u983b","Insert/Edit code sample":"\u63d2\u5165/\u7de8\u8f2f\u4ee3\u78bc\u793a\u7bc4","Insert/edit image":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","Insert/edit link":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","Insert/edit media":"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","Insert/edit video":"\u63d2\u5165/\u7de8\u8f2f\u8996\u983b","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u7121\u6548\u7684\u984f\u8272\u78bc\uff1a{0}","Invalid input":"\u7121\u6548\u8f38\u5165","Italic":"\u659c\u9ad4","Justify":"\u5169\u7aef\u5c0d\u9f4a","Keyboard Navigation":"\u9375\u76e4\u6307\u5f15","Language":"\u8a9e\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6dfa\u85cd\u8272","Light Gray":"\u6dfa\u7070\u8272","Light Green":"\u6dfa\u7da0\u8272","Light Purple":"\u6dfa\u7d2b\u8272","Light Red":"\u6dfa\u7d05\u8272","Light Yellow":"\u6dfa\u9ec3\u8272","Line height":"\u884c\u9ad8","Link list":"\u9023\u7d50\u6e05\u55ae","Link...":"\u9023\u7d50...","List Properties":"\u6e05\u55ae\u5c6c\u6027","List properties...":"\u6a19\u984c\u5b57\u9ad4\u5c6c\u6027","Loading emojis...":"\u6b63\u5728\u8f09\u5165Emojis...","Loading...":"\u8f09\u5165\u4e2d...","Lower Alpha":"\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5beb\u5e0c\u81d8\u5b57\u6bcd","Lower Roman":"\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57","Match case":"\u5927\u5c0f\u5beb\u5339\u914d","Mathematical":"\u6578\u5b78","Media poster (Image URL)":"\u5c01\u9762(\u5716\u7247\u4f4d\u5740)","Media...":"\u591a\u5a92\u9ad4...","Medium Blue":"\u4e2d\u85cd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u4f75\u5132\u5b58\u683c","Middle":"\u7f6e\u4e2d\u5c0d\u9f4a","Midnight Blue":"\u6df1\u85cd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u7a31","Navy Blue":"\u6d77\u8ecd\u85cd","New document":"\u65b0\u589e\u6587\u4ef6","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u500b","No":"\u5426","No alignment":"\u4e0d\u5c0d\u9f4a","No color":"\u7121","Nonbreaking space":"\u4e0d\u5206\u884c\u7a7a\u683c","None":"\u7121","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u78ba\u5b9a","Open help dialog":"\u6253\u958b\u5e6b\u52a9\u5c0d\u8a71\u65b9\u584a","Open link":"\u6253\u958b\u9023\u7d50","Open link in...":"\u9023\u7d50\u6253\u958b\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u958b\u5f48\u51fa\u5f0f\u529f\u80fd\u8868\uff0c\u7528\u65bc\u62c6\u5206\u6309\u9215","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9801\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u8cbc\u4e0a","Paste as text":"\u8cbc\u4e0a\u70ba\u6587\u672c","Paste column after":"\u8cbc\u4e0a\u5f8c\u9762\u7684\u5217","Paste column before":"\u8cbc\u4e0a\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u7576\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u6b21\u9ede\u64ca\u53ef\u4ee5\u56de\u5230\u666e\u901a\u8cbc\u4e0a\u6a21\u5f0f\u3002","Paste or type a link":"\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50","Paste row after":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","Paste row before":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c07\u5167\u5d4c\u4ee3\u78bc\u8cbc\u4e0a\u5728\u4e0b\u9762:","People":"\u4eba\u985e","Plugins":"\u5916\u639b\u7a0b\u5f0f","Plugins installed ({0}):":"\u5df2\u5b89\u88dd\u5916\u639b\u7a0b\u5f0f ({0}):","Powered by {0}":"\u7531{0}\u9a45\u52d5","Pre":"\u524d\u8a00","Preferences":"\u9996\u9078\u9805","Preformatted":"\u9810\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4ed8\u8cbb\u5916\u639b\u7a0b\u5f0f\uff1a","Press the Up and Down arrow keys to resize the editor.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","Preview":"\u9810\u89bd","Previous":"\u4e0a\u4e00\u500b","Print":"\u5217\u5370","Print...":"\u5217\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"\u7d05","Range 0 to 255":"\u7bc4\u570d0\u81f3255","Red":"\u7d05\u8272","Red component":"\u7d05\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u984f\u8272","Remove link":"\u79fb\u9664\u9023\u7d50","Replace":"\u53d6\u4ee3","Replace all":"\u53d6\u4ee3\u5168\u90e8","Replace with":"\u53d6\u4ee3\u70ba","Resize":"\u8abf\u6574\u5927\u5c0f","Restore last draft":"\u6062\u5fa9\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"","Rich Text Area":"\u5bcc\u6587\u672c\u5340\u57df","Rich Text Area. Press ALT-0 for help.":"\u7de8\u8f2f\u5340\u3002\u6309Alt+0\u9375\u6253\u958b\u5e6b\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7de8\u8f2f\u5340\u3002\u6309ALT-F9\u6253\u958b\u529f\u80fd\u8868\uff0c\u6309ALT-F10\u6253\u958b\u5de5\u5177\u5217\uff0c\u6309ALT-0\u67e5\u770b\u5e6b\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8cbc\u677f\u64cd\u4f5c","Row group":"\u884c\u7d44","Row header":"\u884c\u982d","Row properties":"\u884c\u5c6c\u6027","Row type":"\u884c\u985e\u578b","Rows":"\u884c\u6578","Save":"\u5132\u5b58","Save (if save plugin activated)":"\u5132\u5b58(\u5982\u679c\u5132\u5b58\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Scope":"\u7bc4\u570d","Search":"\u641c\u7d22","Select all":"\u5168\u9078","Select...":"\u9078\u64c7...","Selection":"\u9078\u64c7","Shortcut":"\u6377\u5f91","Show blocks":"\u986f\u793a\u5340\u584a\u908a\u6846","Show caption":"\u986f\u793a\u6a19\u984c","Show invisible characters":"\u986f\u793a\u4e0d\u53ef\u898b\u5b57\u5143","Size":"\u5b57\u578b\u5927\u5c0f","Solid":"\u5be6\u7dda","Source":"\u6e90","Source code":"\u539f\u59cb\u7a0b\u5f0f\u78bc","Special Character":"\u7279\u6b8a\u5b57\u5143","Special character...":"\u7279\u6b8a\u5b57\u5143...","Split cell":"\u62c6\u5206\u5132\u5b58\u683c","Square":"\u5be6\u5fc3\u65b9\u584a","Start list at number":"\u4ee5\u6578\u5b57\u958b\u59cb\u6e05\u55ae","Strikethrough":"\u522a\u9664\u7dda","Style":"\u6a23\u5f0f","Subscript":"\u4e0b\u6a19","Superscript":"\u4e0a\u6a19","Switch to or from fullscreen mode":"\u5207\u63db\u5168\u7192\u5e55\u6a21\u5f0f","Symbols":"\u7b26\u865f","System Font":"\u7cfb\u7d71\u5b57\u9ad4","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6a19\u984c","Table properties":"\u8868\u683c\u5c6c\u6027","Table styles":"\u8868\u683c\u6a23\u5f0f","Template":"\u7bc4\u672c","Templates":"\u7bc4\u672c","Text":"\u6587\u5b57","Text color":"\u6587\u672c\u984f\u8272","Text color {0}":"","Text to display":"\u8981\u986f\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u96fb\u90f5\u5730\u5740\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 mailto:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 http:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 https:// \u9996\u78bc\u55ce\uff1f","Title":"\u6a19\u984c","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u9375\u6253\u958b\u5c0d\u8a71\u65b9\u584a","Toggle accordion":"","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5c0d\u9f4a","Travel and Places":"\u65c5\u904a\u548c\u5730\u9ede","Turquoise":"\u9752\u7da0\u8272","Underline":"\u5e95\u7dda","Undo":"\u5fa9\u539f","Upload":"\u4e0a\u8f09","Uploading image":"\u4e0a\u8f09\u5716\u7247","Upper Alpha":"\u5927\u5beb\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5beb\u7f85\u99ac\u6578\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u8a02","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5c0d\u9f4a","Vertical space":"\u5782\u76f4\u9593\u8ddd","View":"\u67e5\u770b","Visual aids":"\u683c\u7dda","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bec\u5ea6","Word count":"\u5b57\u6578","Words":"\u55ae\u8a5e","Words: {0}":"\u5b57\u6578\uff1a{0}","Yellow":"\u9ec3\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u9084\u6709\u6587\u4ef6\u5c1a\u672a\u5132\u5b58\uff0c\u78ba\u5b9a\u8981\u96e2\u958b\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6253\u958b\u526a\u8cbc\u677f\uff0c\u8acb\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u901f\u9375\u3002","alignment":"\u5c0d\u9f4a","austral sign":"\u6fb3\u5143\u7b26\u865f","cedi sign":"\u585e\u5730\u7b26\u865f","colon sign":"\u5192\u865f","cruzeiro sign":"\u514b\u9b6f\u8cfd\u7f85\u5e63\u7b26\u865f","currency sign":"\u8ca8\u5e63\u7b26\u865f","dollar sign":"\u7f8e\u5143\u7b26\u865f","dong sign":"\u8d8a\u5357\u76fe\u7b26\u865f","drachma sign":"\u5fb7\u62c9\u514b\u99ac\u7b26\u865f","euro-currency sign":"\u6b50\u5143\u7b26\u865f","example":"\u4f8b\u5b50","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u865f","german penny symbol":"\u5fb7\u570b\u4fbf\u58eb\u7b26\u865f","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u865f","history":"\u6b77\u53f2","hryvnia sign":"\u683c\u88e1\u592b\u5c3c\u4e9e\u7b26\u865f","indentation":"\u7e2e\u9032","indian rupee sign":"\u5370\u5ea6\u76e7\u6bd4","kip sign":"\u8001\u64be\u57fa\u666e\u7b26\u865f","lira sign":"\u91cc\u62c9\u7b26\u865f","livre tournois sign":"\u88e1\u5f17\u5f17\u723e\u7b26\u865f","manat sign":"\u99ac\u7d0d\u7279\u7b26\u865f","mill sign":"\u5bc6\u723e\u7b26\u865f","naira sign":"\u5948\u62c9\u7b26\u865f","new sheqel sign":"\u65b0\u8b1d\u514b\u723e\u7b26\u865f","nordic mark sign":"\u5317\u6b50\u99ac\u514b","peseta sign":"\u6bd4\u85a9\u659c\u5854\u7b26\u865f","peso sign":"\u6bd4\u7d22\u7b26\u865f","ruble sign":"\u76e7\u5e03\u7b26\u865f","rupee sign":"\u76e7\u6bd4\u7b26\u865f","spesmilo sign":"spesmilo\u7b26\u865f","styles":"\u6a23\u5f0f","tenge sign":"\u5805\u6208\u7b26\u865f","tugrik sign":"\u5716\u683c\u88e1\u514b\u7b26\u865f","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97d3\u5143\u7b26\u865f","yen character":"\u65e5\u5143\u5b57\u6a23","yen/yuan character variant one":"\u5143\u5b57\u6a23\uff08\u5927\u5beb\uff09","yuan character":"\u4eba\u6c11\u5e63\u5143\u5b57\u6a23","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6a23\uff08\u6e2f\u81fa\u5730\u5340\uff09","{0} characters":"{0} \u500b\u5b57\u5143","{0} columns, {1} rows":"","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/staticfiles/tinymce/langs/zh_TW.js b/staticfiles/tinymce/langs/zh_TW.js new file mode 100644 index 0000000..291d70a --- /dev/null +++ b/staticfiles/tinymce/langs/zh_TW.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_TW",{"#":"#","Accessibility":"\u5354\u52a9\u5de5\u5177","Accordion":"\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868","Accordion body...":"\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868\u4e3b\u9ad4...","Accordion summary...":"\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868\u6458\u8981...","Action":"\u52d5\u4f5c","Activity":"\u6d3b\u52d5","Address":"\u5730\u5740","Advanced":"\u9032\u968e","Align":"\u5c0d\u9f4a","Align center":"\u7f6e\u4e2d\u5c0d\u9f4a","Align left":"\u9760\u5de6\u5c0d\u9f4a","Align right":"\u9760\u53f3\u5c0d\u9f4a","Alignment":"\u5c0d\u9f4a","Alignment {0}":"\u5c0d\u9f4a {0}","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u66ff\u4ee3\u4f86\u6e90","Alternative source URL":"\u66ff\u4ee3\u4f86\u6e90\u7db2\u5740","Anchor":"\u9328\u9ede","Anchor...":"\u9328\u9ede...","Anchors":"\u9328\u9ede","Animals and Nature":"\u52d5\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u982d","B":"\u85cd","Background color":"\u80cc\u666f\u984f\u8272","Background color {0}":"\u80cc\u666f\u984f\u8272 {0}","Black":"\u9ed1\u8272","Block":"\u5340\u584a","Block {0}":"\u5340\u584a {0}","Blockquote":"\u5f15\u6587\u5340\u584a","Blocks":"\u6bb5\u843d\u5340\u584a","Blue":"\u85cd\u8272","Blue component":"\u85cd\u8272\u90e8\u5206","Body":"\u8868\u9ad4","Bold":"\u7c97\u9ad4","Border":"\u6846\u7dda","Border color":"\u6846\u7dda\u984f\u8272","Border style":"\u908a\u6846\u6a23\u5f0f","Border width":"\u908a\u6846\u5bec\u5ea6","Bottom":"\u4e0b\u65b9\u5c0d\u9f4a","Browse files":"\u700f\u89bd\u6a94\u6848","Browse for an image":"\u5f9e\u5716\u7247\u4e2d\u700f\u89bd","Browse links":"\u700f\u89bd\u9023\u7d50","Bullet list":"\u7121\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6a19\u984c","Cell":"\u5132\u5b58\u683c","Cell padding":"\u5132\u5b58\u683c\u5167\u908a\u8ddd","Cell properties":"\u5132\u5b58\u683c\u5c6c\u6027","Cell spacing":"\u5132\u5b58\u683c\u5916\u9593\u8ddd","Cell styles":"\u5132\u5b58\u683c\u6a23\u5f0f","Cell type":"\u5132\u5b58\u683c\u5225","Center":"\u7f6e\u4e2d","Characters":"\u5b57\u5143","Characters (no spaces)":"\u5b57\u5143(\u7121\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5713","Class":"\u985e\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u95dc\u9589","Code":"\u7a0b\u5f0f\u78bc","Code sample...":"\u7a0b\u5f0f\u78bc\u7bc4\u4f8b...","Code view":"\u4ee3\u78bc\u8996\u5716","Color Picker":"\u9078\u8272\u5668","Color swatch":"\u984f\u8272\u6a23\u672c","Cols":"\u5217","Column":"\u6b04","Column clipboard actions":"\u5217\u526a\u8cbc\u677f\u64cd\u4f5c","Column group":"\u5217\u7d44","Column header":"\u5217\u6a19\u984c","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u8907\u88fd","Copy column":"\u8907\u88fd\u5217","Copy row":"\u8907\u88fd\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5167\u5bb9\u3002","Could not load emojis":"\u7121\u6cd5\u8f09\u5165Emojis","Count":"\u8a08\u6578","Currency":"\u8ca8\u5e63","Current window":"\u7576\u524d\u8996\u7a97","Custom color":"\u81ea\u8a02\u984f\u8272","Custom...":"\u81ea\u8a02......","Cut":"\u526a\u4e0b","Cut column":"\u526a\u4e0b\u5217","Cut row":"\u526a\u4e0b\u884c","Dark Blue":"\u6df1\u85cd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7da0\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7d05\u8272","Dark Turquoise":"\u6df1\u85cd\u7da0\u8272","Dark Yellow":"\u6697\u9ec3\u8272","Dashed":"\u865b\u7dda","Date/time":"\u65e5\u671f/\u6642\u9593","Decrease indent":"\u6e1b\u5c11\u7e2e\u6392","Default":"\u9810\u8a2d","Delete accordion":"\u522a\u9664\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868","Delete column":"\u522a\u9664\u5217","Delete row":"\u522a\u9664\u884c","Delete table":"\u522a\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5be6\u5fc3\u5713","Div":"DIV","Document":"\u6587\u4ef6","Dotted":"\u865b\u7dda","Double":"\u96d9\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f35\u5716\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6a94\u6848\u985e\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7de8\u8f2f","Embed":"\u5167\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u932f\u8aa4","Error: Form submit field collision.":"\u932f\u8aa4\uff1a\u8868\u683c\u51fa\u73fe\u591a\u91cd\u63d0\u4ea4\u885d\u7a81\u3002","Error: No form element found.":"\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002","Extended Latin":"\u62c9\u4e01\u8a9e\u64f4\u5145","Failed to initialize plugin: {0}":"\u7121\u6cd5\u521d\u59cb\u5316\u63d2\u4ef6 {0}","Failed to load plugin url: {0}":"\u7121\u6cd5\u8f09\u5165\u63d2\u4ef6\u93c8\u7d50 {0}","Failed to load plugin: {0} from url {1}":"\u7121\u6cd5\u5f9e {1} \u8f09\u5165\u63d2\u4ef6 {0}","Failed to upload image: {0}":"\u4e0a\u8f09\u5716\u7247\u5931\u6557\uff1a{0}","File":"\u6587\u4ef6","Find":"\u5c0b\u627e","Find (if searchreplace plugin activated)":"\u5c0b\u627e(\u5982\u679c\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Find and Replace":"\u5c0b\u627e\u548c\u53d6\u4ee3","Find and replace...":"\u5c0b\u627e\u4e26\u53d6\u4ee3...","Find in selection":"\u5728\u9078\u5340\u4e2d\u5c0b\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e5f","Focus to contextual toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u4e0a\u4e0b\u6587\u83dc\u55ae","Focus to element path":"\u79fb\u52d5\u7126\u9ede\u5230\u5143\u7d20\u8def\u5f91","Focus to menubar":"\u79fb\u52d5\u7126\u9ede\u5230\u529f\u80fd\u8868\u5217","Focus to toolbar":"\u79fb\u52d5\u7126\u9ede\u5230\u5de5\u5177\u5217","Font":"\u5b57\u578b","Font size {0}":"\u5b57\u9ad4\u5927\u5c0f {0}","Font sizes":"\u5b57\u9ad4\u5927\u5c0f","Font {0}":"\u5b57\u9ad4 {0}","Fonts":"\u5b57\u9ad4","Food and Drink":"\u98df\u7269\u548c\u98f2\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"\u683c\u5f0f {0}","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u87a2\u5e55","G":"\u7da0","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7da0\u8272","Green component":"\u7da0\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u901f\u9375","Header":"\u8868\u982d","Header cell":"\u8868\u982d\u5132\u5b58\u683c","Heading 1":"\u6a19\u984c1","Heading 2":"\u6a19\u984c2","Heading 3":"\u6a19\u984c3","Heading 4":"\u6a19\u984c4","Heading 5":"\u6a19\u984c5","Heading 6":"\u6a19\u984c6","Headings":"\u6a19\u984c","Height":"\u9ad8\u5ea6","Help":"\u5e6b\u52a9","Hex color code":"\u5341\u516d\u9032\u4f4d\u984f\u8272\u4ee3\u78bc","Hidden":"\u96b1\u85cf","Horizontal align":"\u6c34\u5e73\u5c0d\u9f4a","Horizontal line":"\u6c34\u6e96\u5206\u5272\u7dda","Horizontal space":"\u6c34\u5e73\u9593\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u61c9\u8a72\u4ee5\u82f1\u6587\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6578\u4f4d\u3001\u7834\u6298\u865f\u3001\u9ede\u3001\u5192\u865f\u6216\u5e95\u7dda\u3002","Image is decorative":"\u9019\u662f\u88dd\u98fe\u5716\u50cf","Image list":"\u5716\u7247\u6e05\u55ae","Image title":"\u5716\u7247\u6a19\u984c","Image...":"\u5716\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u5716\u7247\u670d\u52d9\uff1a\u627e\u4e0d\u5230\u670d\u52d9","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u5716\u7247\u670d\u52d9\uff1a\u932f\u8aa4\u93c8\u7d50","ImageProxy HTTP error: Rejected request":"\u5716\u7247\u670d\u52d9\uff1a\u62d2\u7d55\u5b58\u53d6","ImageProxy HTTP error: Unknown ImageProxy error":"\u5716\u7247\u670d\u52d9\uff1a\u672a\u77e5\u932f\u8aa4","Increase indent":"\u589e\u52a0\u7e2e\u6392","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u7bc4\u672c","Insert accordion":"\u63d2\u5165\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868","Insert column after":"\u5728\u53f3\u5074\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u5074\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u6642\u9593","Insert image":"\u63d2\u5165\u5716\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u9023\u7d50 (\u5982\u679c\u9023\u7d50\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u7bc4\u672c...","Insert video":"\u63d2\u5165\u5f71\u7247","Insert/Edit code sample":"\u63d2\u5165/\u7de8\u8f2f \u7a0b\u5f0f\u78bc\u7bc4\u4f8b","Insert/edit image":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","Insert/edit link":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","Insert/edit media":"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","Insert/edit video":"\u63d2\u5165/\u7de8\u8f2f\u5f71\u7247","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u7121\u6548\u7684\u984f\u8272\u78bc\uff1a{0}","Invalid input":"\u7121\u6548\u8f38\u5165","Italic":"\u659c\u9ad4","Justify":"\u5de6\u53f3\u5c0d\u9f4a","Keyboard Navigation":"\u9375\u76e4\u6307\u5f15","Language":"\u8a9e\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6dfa\u85cd\u8272","Light Gray":"\u6dfa\u7070\u8272","Light Green":"\u6dfa\u7da0\u8272","Light Purple":"\u6dfa\u7d2b\u8272","Light Red":"\u6dfa\u7d05\u8272","Light Yellow":"\u6dfa\u9ec3\u8272","Line height":"\u884c\u9ad8","Link list":"\u9023\u7d50\u6e05\u55ae","Link...":"\u9023\u7d50...","List Properties":"\u6e05\u55ae\u5c6c\u6027","List properties...":"\u6a19\u984c\u5b57\u9ad4\u5c6c\u6027","Loading emojis...":"\u6b63\u5728\u8f09\u5165Emojis...","Loading...":"\u8f09\u5165\u4e2d...","Lower Alpha":"\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5beb\u5e0c\u81d8\u5b57\u6bcd","Lower Roman":"\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57","Match case":"\u5927\u5c0f\u5beb\u5339\u914d","Mathematical":"\u6578\u5b78","Media poster (Image URL)":"\u5c01\u9762(\u5716\u7247\u4f4d\u5740)","Media...":"\u591a\u5a92\u9ad4...","Medium Blue":"\u4e2d\u85cd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u4f75\u5132\u5b58\u683c","Middle":"\u7f6e\u4e2d\u5c0d\u9f4a","Midnight Blue":"\u6df1\u85cd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u7a31","Navy Blue":"\u6d77\u8ecd\u85cd","New document":"\u65b0\u589e\u6587\u4ef6","New window":"\u65b0\u8996\u7a97","Next":"\u4e0b\u4e00\u500b","No":"\u5426","No alignment":"\u4e0d\u5c0d\u9f4a","No color":"\u7121","Nonbreaking space":"\u4e0d\u5206\u884c\u7a7a\u683c","None":"\u7121","Numbered list":"\u6578\u5b57\u6e05\u55ae","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u78ba\u5b9a","Open help dialog":"\u6253\u958b\u5e6b\u52a9\u5c0d\u8a71\u65b9\u584a","Open link":"\u6253\u958b\u9023\u7d50","Open link in...":"\u9023\u7d50\u6253\u958b\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u958b\u5f48\u51fa\u5f0f\u529f\u80fd\u8868\uff0c\u7528\u65bc\u62c6\u5206\u6309\u9215","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9801\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u8cbc\u4e0a","Paste as text":"\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a","Paste column after":"\u8cbc\u4e0a\u5f8c\u9762\u7684\u5217","Paste column before":"\u8cbc\u4e0a\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u7576\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u6b21\u9ede\u64ca\u53ef\u4ee5\u56de\u5230\u666e\u901a\u8cbc\u4e0a\u6a21\u5f0f\u3002","Paste or type a link":"\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50","Paste row after":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","Paste row before":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u8acb\u5c07\u60a8\u7684\u5d4c\u5165\u5f0f\u7a0b\u5f0f\u78bc\u8cbc\u5728\u4e0b\u65b9\uff1a","People":"\u4eba\u985e","Plugins":"\u5916\u639b\u7a0b\u5f0f","Plugins installed ({0}):":"\u5df2\u5b89\u88dd\u5916\u639b\u7a0b\u5f0f ({0}):","Powered by {0}":"\u7531{0}\u9a45\u52d5","Pre":"\u524d\u8a00","Preferences":"\u9996\u9078\u9805","Preformatted":"\u9810\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4ed8\u8cbb\u5916\u639b\u7a0b\u5f0f\uff1a","Press the Up and Down arrow keys to resize the editor.":"\u6309\u5411\u4e0a\u548c\u5411\u4e0b\u65b9\u5411\u9375\u4ee5\u8abf\u6574\u7de8\u8f2f\u5668\u5927\u5c0f\u3002","Press the arrow keys to resize the editor.":"\u6309\u65b9\u5411\u9375\u4ee5\u8abf\u6574\u7de8\u8f2f\u5668\u5927\u5c0f\u3002","Press {0} for help":"\u6309 {0} \u6253\u958b\u8aaa\u660e\u8996\u7a97","Preview":"\u9810\u89bd","Previous":"\u4e0a\u4e00\u500b","Print":"\u5217\u5370","Print...":"\u5217\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"\u7d05","Range 0 to 255":"\u7bc4\u570d0\u81f3255","Red":"\u7d05\u8272","Red component":"\u7d05\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u984f\u8272","Remove link":"\u79fb\u9664\u9023\u7d50","Replace":"\u53d6\u4ee3","Replace all":"\u53d6\u4ee3\u5168\u90e8","Replace with":"\u53d6\u4ee3\u70ba","Resize":"\u8abf\u6574\u5927\u5c0f","Restore last draft":"\u6062\u5fa9\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"\u986f\u793a\u6216\u96b1\u85cf\u5176\u4ed6\u5de5\u5177\u5217\u9078\u9805","Rich Text Area":"\u5bcc\u6587\u672c\u5340\u57df","Rich Text Area. Press ALT-0 for help.":"\u7de8\u8f2f\u5340\u3002\u6309Alt+0\u9375\u6253\u958b\u8aaa\u660e\u8996\u7a97\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7de8\u8f2f\u5340\u3002\u6309ALT-F9\u6253\u958b\u529f\u80fd\u8868\uff0c\u6309ALT-F10\u6253\u958b\u5de5\u5177\u5217\uff0c\u6309ALT-0\u6253\u958b\u8aaa\u660e\u8996\u7a97","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8cbc\u677f\u64cd\u4f5c","Row group":"\u884c\u7d44","Row header":"\u884c\u982d","Row properties":"\u884c\u5c6c\u6027","Row type":"\u884c\u985e\u578b","Rows":"\u884c\u6578","Save":"\u5132\u5b58","Save (if save plugin activated)":"\u5132\u5b58(\u5982\u679c\u5132\u5b58\u5916\u639b\u7a0b\u5f0f\u5df2\u555f\u52d5)","Scope":"\u7bc4\u570d","Search":"\u641c\u7d22","Select all":"\u5168\u9078","Select...":"\u9078\u64c7...","Selection":"\u9078\u64c7","Shortcut":"\u6377\u5f91","Show blocks":"\u986f\u793a\u5340\u584a\u908a\u6846","Show caption":"\u986f\u793a\u6a19\u984c","Show invisible characters":"\u986f\u793a\u4e0d\u53ef\u898b\u5b57\u5143","Size":"\u5b57\u578b\u5927\u5c0f","Solid":"\u5be6\u7dda","Source":"\u6e90","Source code":"\u539f\u59cb\u7a0b\u5f0f\u78bc","Special Character":"\u7279\u6b8a\u5b57\u5143","Special character...":"\u7279\u6b8a\u5b57\u5143...","Split cell":"\u62c6\u5206\u5132\u5b58\u683c","Square":"\u5be6\u5fc3\u65b9\u584a","Start list at number":"\u4ee5\u6578\u5b57\u958b\u59cb\u6e05\u55ae","Strikethrough":"\u522a\u9664\u7dda","Style":"\u6a23\u5f0f","Subscript":"\u4e0b\u6a19","Superscript":"\u4e0a\u6a19","Switch to or from fullscreen mode":"\u5207\u63db\u5168\u87a2\u5e55\u6a21\u5f0f","Symbols":"\u7b26\u865f","System Font":"\u7cfb\u7d71\u5b57\u9ad4","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6a19\u984c","Table properties":"\u8868\u683c\u5c6c\u6027","Table styles":"\u8868\u683c\u6a23\u5f0f","Template":"\u7bc4\u672c","Templates":"\u7bc4\u672c","Text":"\u6587\u5b57","Text color":"\u6587\u5b57\u984f\u8272","Text color {0}":"\u6587\u5b57\u984f\u8272 {0}","Text to display":"\u8981\u986f\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u96fb\u90f5\u5730\u5740\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 mailto:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 http:// \u9996\u78bc\u55ce\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\u3002\u8981\u52a0\u4e0a\u6240\u9700\u7684 https:// \u9996\u78bc\u55ce\uff1f","Title":"\u6a19\u984c","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u9375\u6253\u958b\u5c0d\u8a71\u65b9\u584a","Toggle accordion":"\u5207\u63db\u624b\u98a8\u7434\u5f0f\u529f\u80fd\u8868","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5c0d\u9f4a","Travel and Places":"\u65c5\u904a\u548c\u5730\u9ede","Turquoise":"\u9752\u7da0\u8272","Underline":"\u5e95\u7dda","Undo":"\u5fa9\u539f","Upload":"\u4e0a\u50b3","Uploading image":"\u4e0a\u50b3\u5716\u7247","Upper Alpha":"\u5927\u5beb\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5beb\u7f85\u99ac\u6578\u5b57","Url":"\u7db2\u5740","User Defined":"\u81ea\u8a02","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5c0d\u9f4a","Vertical space":"\u5782\u76f4\u9593\u8ddd","View":"\u67e5\u770b","Visual aids":"\u683c\u7dda","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bec\u5ea6","Word count":"\u5b57\u6578","Words":"\u55ae\u8a5e","Words: {0}":"\u5b57\u6578\uff1a{0}","Yellow":"\u9ec3\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u9084\u6709\u6587\u4ef6\u5c1a\u672a\u5132\u5b58\uff0c\u78ba\u5b9a\u8981\u96e2\u958b\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u5b58\u53d6\u526a\u8cbc\u7c3f\uff0c\u8acb\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u9375\u3002","alignment":"\u5c0d\u9f4a","austral sign":"\u6fb3\u5143\u7b26\u865f","cedi sign":"\u585e\u5730\u7b26\u865f","colon sign":"\u5192\u865f","cruzeiro sign":"\u514b\u9b6f\u8cfd\u7f85\u5e63\u7b26\u865f","currency sign":"\u8ca8\u5e63\u7b26\u865f","dollar sign":"\u7f8e\u5143\u7b26\u865f","dong sign":"\u8d8a\u5357\u76fe\u7b26\u865f","drachma sign":"\u5e0c\u81d8\u8ca8\u5e63\u7b26\u865f-\u5fb7\u62c9\u514b\u99ac","euro-currency sign":"\u6b50\u5143\u7b26\u865f","example":"\u4f8b\u5b50","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u865f","german penny symbol":"\u5fb7\u570b\u4fbf\u58eb\u7b26\u865f","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u865f","history":"\u6b77\u53f2","hryvnia sign":"\u683c\u88e1\u592b\u5c3c\u4e9e\u7b26\u865f","indentation":"\u7e2e\u6392","indian rupee sign":"\u5370\u5ea6\u76e7\u6bd4","kip sign":"\u5bee\u570b\u8ca8\u5e63\u7b26\u865f-\u57fa\u666e","lira sign":"\u91cc\u62c9\u7b26\u865f","livre tournois sign":"\u88e1\u5f17\u5f17\u723e\u7b26\u865f","manat sign":"\u99ac\u7d0d\u7279\u7b26\u865f","mill sign":"\u5bc6\u723e\u7b26\u865f","naira sign":"\u5948\u62c9\u7b26\u865f","new sheqel sign":"\u65b0\u8b1d\u514b\u723e\u7b26\u865f","nordic mark sign":"\u5317\u6b50\u99ac\u514b","peseta sign":"\u6bd4\u85a9\u659c\u5854\u7b26\u865f","peso sign":"\u6bd4\u7d22\u7b26\u865f","ruble sign":"\u76e7\u5e03\u7b26\u865f","rupee sign":"\u76e7\u6bd4\u7b26\u865f","spesmilo sign":"spesmilo\u7b26\u865f","styles":"\u6a23\u5f0f","tenge sign":"\u5805\u6208\u7b26\u865f","tugrik sign":"\u8499\u53e4\u570b\u8ca8\u5e63\u7b26\u865f-\u5716\u683c\u91cc\u514b","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97d3\u5143\u7b26\u865f","yen character":"\u65e5\u5143\u5b57\u6a23","yen/yuan character variant one":"\u5143\u5b57\u6a23\uff08\u5927\u5beb\uff09","yuan character":"\u4eba\u6c11\u5e63\u5143\u5b57\u6a23","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6a23\uff08\u6e2f\u81fa\u5730\u5340\uff09","{0} characters":"{0} \u500b\u5b57\u5143","{0} columns, {1} rows":"{0} \u6b04\uff0c{1} \u5217","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/staticfiles/tinymce/license.md b/staticfiles/tinymce/license.md new file mode 100644 index 0000000..70454a6 --- /dev/null +++ b/staticfiles/tinymce/license.md @@ -0,0 +1,6 @@ +# Software License Agreement + +**TinyMCE** – [](https://github.com/tinymce/tinymce) +Copyright (c) 2024, Ephox Corporation DBA Tiny Technologies, Inc. + +Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). diff --git a/staticfiles/tinymce/models/dom/model.min.js b/staticfiles/tinymce/models/dom/model.min.js new file mode 100644 index 0000000..bce8e62 --- /dev/null +++ b/staticfiles/tinymce/models/dom/model.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.ModelManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(t)===e,o=e=>t=>typeof t===e,n=e=>t=>e===t,r=t("string"),s=t("object"),l=t("array"),a=n(null),c=o("boolean"),i=n(void 0),m=e=>!(e=>null==e)(e),d=o("function"),u=o("number"),f=()=>{},g=e=>()=>e,h=e=>e,p=(e,t)=>e===t;function b(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const w=e=>t=>!e(t),v=e=>e(),y=g(!1),x=g(!0);class C{constructor(e,t){this.tag=e,this.value=t}static some(e){return new C(!0,e)}static none(){return C.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?C.some(e(this.value)):C.none()}bind(e){return this.tag?e(this.value):C.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:C.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return m(e)?C.some(e):C.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}C.singletonNone=new C(!1);const S=Array.prototype.slice,T=Array.prototype.indexOf,R=Array.prototype.push,D=(e,t)=>{return o=e,n=t,T.call(o,n)>-1;var o,n},O=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;o{const o=[],n=[];for(let r=0,s=e.length;r{const o=[];for(let n=0,r=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),A=(e,t,o)=>(N(e,((e,n)=>{o=t(o,e,n)})),o),L=(e,t)=>((e,t,o)=>{for(let n=0,r=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oM(E(e,t)),P=(e,t)=>{for(let o=0,n=e.length;o{const o={};for(let n=0,r=e.length;nt>=0&&tF(e,0),$=e=>F(e,e.length-1),V=(e,t)=>{for(let o=0;o{const o=q(e);for(let n=0,r=o.length;nY(e,((e,o)=>({k:o,v:t(e,o)}))),Y=(e,t)=>{const o={};return G(e,((e,n)=>{const r=t(e,n);o[r.k]=r.v})),o},J=(e,t)=>{const o=[];return G(e,((e,n)=>{o.push(t(e,n))})),o},Q=e=>J(e,h),X=(e,t)=>U.call(e,t),Z="undefined"!=typeof window?window:Function("return this;")(),ee=(e,t)=>((e,t)=>{let o=null!=t?t:Z;for(let t=0;t{const t=ee("ownerDocument.defaultView",e);return s(e)&&((e=>((e,t)=>{const o=((e,t)=>ee(e,t))(e,t);if(null==o)throw new Error(e+" not available on this browser");return o})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(te(e).constructor.name))},ne=e=>e.dom.nodeName.toLowerCase(),re=e=>e.dom.nodeType,se=e=>t=>re(t)===e,le=e=>8===re(e)||"#comment"===ne(e),ae=e=>ce(e)&&oe(e.dom),ce=se(1),ie=se(3),me=se(9),de=se(11),ue=e=>t=>ce(t)&&ne(t)===e,fe=(e,t,o)=>{if(!(r(o)||c(o)||u(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},ge=(e,t,o)=>{fe(e.dom,t,o)},he=(e,t)=>{const o=e.dom;G(t,((e,t)=>{fe(o,t,e)}))},pe=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},be=(e,t)=>C.from(pe(e,t)),we=(e,t)=>{e.dom.removeAttribute(t)},ve=e=>A(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),ye=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},xe={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return ye(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return ye(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return ye(o)},fromDom:ye,fromPoint:(e,t,o)=>C.from(e.dom.elementFromPoint(t,o)).map(ye)},Ce=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},Se=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,Te=(e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?C.none():C.from(o.querySelector(e)).map(xe.fromDom)},Re=(e,t)=>e.dom===t.dom,De=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},Oe=Ce,ke=e=>xe.fromDom(e.dom.ownerDocument),Ee=e=>me(e)?e:ke(e),Ne=e=>C.from(e.dom.parentNode).map(xe.fromDom),_e=e=>C.from(e.dom.parentElement).map(xe.fromDom),Be=(e,t)=>{const o=d(t)?t:y;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=xe.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r},ze=e=>C.from(e.dom.previousSibling).map(xe.fromDom),Ae=e=>C.from(e.dom.nextSibling).map(xe.fromDom),Le=e=>E(e.dom.childNodes,xe.fromDom),We=(e,t)=>{const o=e.dom.childNodes;return C.from(o[t]).map(xe.fromDom)},Me=(e,t)=>{Ne(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},je=(e,t)=>{Ae(e).fold((()=>{Ne(e).each((e=>{Ie(e,t)}))}),(e=>{Me(e,t)}))},Pe=(e,t)=>{const o=(e=>We(e,0))(e);o.fold((()=>{Ie(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},Ie=(e,t)=>{e.dom.appendChild(t.dom)},Fe=(e,t)=>{Me(e,t),Ie(t,e)},He=(e,t)=>{N(t,((o,n)=>{const r=0===n?e:t[n-1];je(r,o)}))},$e=(e,t)=>{N(t,(t=>{Ie(e,t)}))},Ve=e=>{e.dom.textContent="",N(Le(e),(e=>{qe(e)}))},qe=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Ue=e=>{const t=Le(e);t.length>0&&He(e,t),qe(e)},Ge=(e,t)=>xe.fromDom(e.dom.cloneNode(t)),Ke=e=>Ge(e,!1),Ye=e=>Ge(e,!0),Je=(e,t)=>{const o=xe.fromTag(t),n=ve(e);return he(o,n),o},Qe=["tfoot","thead","tbody","colgroup"],Xe=(e,t,o)=>({element:e,rowspan:t,colspan:o}),Ze=(e,t,o)=>({element:e,cells:t,section:o}),et=(e,t,o)=>({element:e,isNew:t,isLocked:o}),tt=(e,t,o,n)=>({element:e,cells:t,section:o,isNew:n}),ot=e=>de(e)&&m(e.dom.host),nt=e=>xe.fromDom(e.dom.getRootNode()),rt=e=>xe.fromDom(e.dom.host),st=e=>{const t=ie(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=nt(e);return ot(t)?C.some(t):C.none()})(xe.fromDom(t)).fold((()=>o.body.contains(t)),(n=st,r=rt,e=>n(r(e))));var n,r},lt=()=>at(xe.fromDom(document)),at=e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return xe.fromDom(t)},ct=(e,t)=>{let o=[];return N(Le(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(ct(e,t))})),o},it=(e,t,o)=>((e,o,n)=>B(Be(e,n),(e=>Ce(e,t))))(e,0,o),mt=(e,t)=>(e=>B(Le(e),(e=>Ce(e,t))))(e),dt=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?[]:E(o.querySelectorAll(e),xe.fromDom)})(t,e);var ut=(e,t,o,n,r)=>e(o,n)?C.some(o):d(r)&&r(o)?C.none():t(o,n,r);const ft=(e,t,o)=>{let n=e.dom;const r=d(o)?o:y;for(;n.parentNode;){n=n.parentNode;const e=xe.fromDom(n);if(t(e))return C.some(e);if(r(e))break}return C.none()},gt=(e,t,o)=>ut(((e,t)=>t(e)),ft,e,t,o),ht=(e,t,o)=>ft(e,(e=>Ce(e,t)),o),pt=(e,t)=>(e=>L(e.dom.childNodes,(e=>{return o=xe.fromDom(e),Ce(o,t);var o})).map(xe.fromDom))(e),bt=(e,t)=>Te(t,e),wt=(e,t,o)=>ut(((e,t)=>Ce(e,t)),ht,e,t,o),vt=(e,t,o=p)=>e.exists((e=>o(e,t))),yt=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te?C.some(t):C.none(),Ct=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,St=(e,t,o=0,n)=>{const r=e.indexOf(t,o);return-1!==r&&(!!i(n)||r+t.length<=n)},Tt=(e,t)=>Ct(e,t,0),Rt=(e,t)=>Ct(e,t,e.length-t.length),Dt=(e=>t=>t.replace(e,""))(/^\s+|\s+$/g),Ot=e=>e.length>0,kt=e=>void 0!==e.style&&d(e.style.getPropertyValue),Et=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);kt(e)&&e.style.setProperty(t,o)},Nt=(e,t,o)=>{const n=e.dom;Et(n,t,o)},_t=(e,t)=>{const o=e.dom;G(t,((e,t)=>{Et(o,t,e)}))},Bt=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||st(e)?n:zt(o,t)},zt=(e,t)=>kt(e)?e.style.getPropertyValue(t):"",At=(e,t)=>{const o=e.dom,n=zt(o,t);return C.from(n).filter((e=>e.length>0))},Lt=(e,t)=>{((e,t)=>{kt(e)&&e.style.removeProperty(t)})(e.dom,t),vt(be(e,"style").map(Dt),"")&&we(e,"style")},Wt=(e,t,o=0)=>be(e,t).map((e=>parseInt(e,10))).getOr(o),Mt=(e,t)=>Wt(e,t,1),jt=e=>ue("col")(e)?Wt(e,"span",1)>1:Mt(e,"colspan")>1,Pt=(e,t)=>parseInt(Bt(e,t),10),It=g(10),Ft=g(10),Ht=(e,t)=>$t(e,t,x),$t=(e,t,o)=>j(Le(e),(e=>Ce(e,t)?o(e)?[e]:[]:$t(e,t,o))),Vt=(e,t)=>((e,t,o=y)=>o(t)?C.none():D(e,ne(t))?C.some(t):ht(t,e.join(","),(e=>Ce(e,"table")||o(e))))(["td","th"],e,t),qt=e=>Ht(e,"th,td"),Ut=e=>Ce(e,"colgroup")?mt(e,"col"):j(Yt(e),(e=>mt(e,"col"))),Gt=(e,t)=>wt(e,"table",t),Kt=e=>Ht(e,"tr"),Yt=e=>Gt(e).fold(g([]),(e=>mt(e,"colgroup"))),Jt=(e,t)=>E(e,(e=>{if("colgroup"===ne(e)){const t=E(Ut(e),(e=>{const t=Wt(e,"span",1);return Xe(e,1,t)}));return Ze(e,t,"colgroup")}{const o=E(qt(e),(e=>{const t=Wt(e,"rowspan",1),o=Wt(e,"colspan",1);return Xe(e,t,o)}));return Ze(e,o,t(e))}})),Qt=e=>Ne(e).map((e=>{const t=ne(e);return(e=>D(Qe,e))(t)?t:"tbody"})).getOr("tbody"),Xt=e=>{const t=Kt(e),o=[...Yt(e),...t];return Jt(o,Qt)},Zt=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},eo=()=>to(0,0),to=(e,t)=>({major:e,minor:t}),oo={nu:to,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?eo():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return to(n(1),n(2))})(e,o)},unknown:eo},no=(e,t)=>{const o=String(t).toLowerCase();return L(e,(e=>e.search(o)))},ro=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,so=e=>t=>St(t,e),lo=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>St(e,"edge/")&&St(e,"chrome")&&St(e,"safari")&&St(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ro],search:e=>St(e,"chrome")&&!St(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>St(e,"msie")||St(e,"trident")},{name:"Opera",versionRegexes:[ro,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:so("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:so("firefox")},{name:"Safari",versionRegexes:[ro,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(St(e,"safari")||St(e,"mobile/"))&&St(e,"applewebkit")}],ao=[{name:"Windows",search:so("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>St(e,"iphone")||St(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:so("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:so("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:so("linux"),versionRegexes:[]},{name:"Solaris",search:so("sunos"),versionRegexes:[]},{name:"FreeBSD",search:so("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:so("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],co={browsers:g(lo),oses:g(ao)},io="Edge",mo="Chromium",uo="Opera",fo="Firefox",go="Safari",ho=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(io),isChromium:n(mo),isIE:n("IE"),isOpera:n(uo),isFirefox:n(fo),isSafari:n(go)}},po=()=>ho({current:void 0,version:oo.unknown()}),bo=ho,wo=(g(io),g(mo),g("IE"),g(uo),g(fo),g(go),"Windows"),vo="Android",yo="Linux",xo="macOS",Co="Solaris",So="FreeBSD",To="ChromeOS",Ro=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(wo),isiOS:n("iOS"),isAndroid:n(vo),isMacOS:n(xo),isLinux:n(yo),isSolaris:n(Co),isFreeBSD:n(So),isChromeOS:n(To)}},Do=()=>Ro({current:void 0,version:oo.unknown()}),Oo=Ro,ko=(g(wo),g("iOS"),g(vo),g(yo),g(xo),g(Co),g(So),g(To),e=>window.matchMedia(e).matches);let Eo=Zt((()=>((e,t,o)=>{const n=co.browsers(),r=co.oses(),s=t.bind((e=>((e,t)=>V(t.brands,(t=>{const o=t.brand.toLowerCase();return L(e,(e=>{var t;return o===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:oo.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(po,bo),l=((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(r,e).fold(Do,Oo),a=((e,t,o,n)=>{const r=e.isiOS()&&!0===/ipad/i.test(o),s=e.isiOS()&&!r,l=e.isiOS()||e.isAndroid(),a=l||n("(pointer:coarse)"),c=r||!s&&l&&n("(min-device-width:768px)"),i=s||l&&!c,m=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),d=!i&&!c&&!m;return{isiPad:g(r),isiPhone:g(s),isTablet:g(c),isPhone:g(i),isTouch:g(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(m),isDesktop:g(d)}})(l,s,e,o);return{browser:s,os:l,deviceType:a}})(window.navigator.userAgent,C.from(window.navigator.userAgentData),ko)));const No=()=>Eo(),_o=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=Bt(o,e);return parseFloat(t)||0}return n},n=(e,t)=>A(t,((t,o)=>{const n=Bt(e,o),r=void 0===n?0:parseInt(n,10);return isNaN(r)?t:t+r}),0);return{set:(t,o)=>{if(!u(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;kt(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const r=n(e,o);return t>r?t-r:0}}},Bo=(e,t,o)=>((e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?C.none():C.some(t)})(e).getOr(t))(Bt(e,t),o),zo=_o("width",(e=>e.dom.offsetWidth)),Ao=e=>zo.get(e),Lo=e=>zo.getOuter(e),Wo=e=>((e,t)=>{const o=e.dom,n=o.getBoundingClientRect().width||o.offsetWidth;return"border-box"===t?n:((e,t,o,n)=>t-Bo(e,`padding-${o}`,0)-Bo(e,`padding-${n}`,0)-Bo(e,`border-${o}-width`,0)-Bo(e,`border-${n}-width`,0))(e,n,"left","right")})(e,"content-box"),Mo=(e,t,o)=>{const n=e.cells,r=n.slice(0,t),s=n.slice(t),l=r.concat(o).concat(s);return Io(e,l)},jo=(e,t,o)=>Mo(e,t,[o]),Po=(e,t,o)=>{e.cells[t]=o},Io=(e,t)=>tt(e.element,t,e.section,e.isNew),Fo=(e,t)=>e.cells[t],Ho=(e,t)=>Fo(e,t).element,$o=e=>e.cells.length,Vo=e=>{const t=_(e,(e=>"colgroup"===e.section));return{rows:t.fail,cols:t.pass}},qo=(e,t,o)=>{const n=E(e.cells,o);return tt(t(e.element),n,e.section,!0)},Uo="data-snooker-locked-cols",Go=e=>be(e,Uo).bind((e=>C.from(e.match(/\d+/g)))).map((e=>I(e,x))),Ko=e=>{const t=A(Vo(e).rows,((e,t)=>(N(t.cells,((t,o)=>{t.isLocked&&(e[o]=!0)})),e)),{}),o=J(t,((e,t)=>parseInt(t,10)));return(e=>{const t=S.call(e,0);return t.sort(void 0),t})(o)},Yo=(e,t)=>e+","+t,Jo=(e,t)=>{const o=j(e.all,(e=>e.cells));return B(o,t)},Qo=e=>{const t={},o=[],n=H(e).map((e=>e.element)).bind(Gt).bind(Go).getOr({});let r=0,s=0,l=0;const{pass:a,fail:c}=_(e,(e=>"colgroup"===e.section));N(c,(e=>{const a=[];N(e.cells,(e=>{let o=0;for(;void 0!==t[Yo(l,o)];)o++;const r=((e,t)=>X(e,t)&&void 0!==e[t]&&null!==e[t])(n,o.toString()),c=((e,t,o,n,r,s)=>({element:e,rowspan:t,colspan:o,row:n,column:r,isLocked:s}))(e.element,e.rowspan,e.colspan,l,o,r);for(let n=0;n{const t=(e=>{const t={};let o=0;return N(e.cells,(e=>{const n=e.colspan;k(n,(r=>{const s=o+r;t[s]=((e,t,o)=>({element:e,colspan:t,column:o}))(e.element,n,s)})),o+=n})),t})(e),o=((e,t)=>({element:e,columns:t}))(e.element,Q(t));return{colgroups:[o],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),d=((e,t)=>({rows:e,columns:t}))(r,s);return{grid:d,access:t,all:o,columns:i,colgroups:m}},Xo=e=>{const t=Xt(e);return Qo(t)},Zo=Qo,en=(e,t,o)=>C.from(e.access[Yo(t,o)]),tn=(e,t,o)=>{const n=Jo(e,(e=>o(t,e.element)));return n.length>0?C.some(n[0]):C.none()},on=Jo,nn=e=>j(e.all,(e=>e.cells)),rn=e=>Q(e.columns),sn=e=>q(e.columns).length>0,ln=(e,t)=>C.from(e.columns[t]),an=(e,t=x)=>{const o=e.grid,n=k(o.columns,h),r=k(o.rows,h);return E(n,(o=>cn((()=>j(r,(t=>en(e,t,o).filter((e=>e.column===o)).toArray()))),(e=>1===e.colspan&&t(e.element)),(()=>en(e,0,o)))))},cn=(e,t,o)=>{const n=e();return L(n,t).orThunk((()=>C.from(n[0]).orThunk(o))).map((e=>e.element))},mn=e=>{const t=e.grid,o=k(t.rows,h),n=k(t.columns,h);return E(o,(t=>cn((()=>j(n,(o=>en(e,t,o).filter((e=>e.row===t)).fold(g([]),(e=>[e]))))),(e=>1===e.rowspan),(()=>en(e,t,0)))))},dn=(e,t)=>o=>"rtl"===un(o)?t:e,un=e=>"rtl"===Bt(e,"direction")?"rtl":"ltr",fn=_o("height",(e=>{const t=e.dom;return st(e)?t.getBoundingClientRect().height:t.offsetHeight})),gn=e=>fn.get(e),hn=e=>fn.getOuter(e),pn=(e,t)=>({left:e,top:t,translate:(o,n)=>pn(e+o,t+n)}),bn=pn,wn=(e,t)=>void 0!==e?e:void 0!==t?t:0,vn=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,r=t.documentElement;if(o===e.dom)return bn(o.offsetLeft,o.offsetTop);const s=wn(null==n?void 0:n.pageYOffset,r.scrollTop),l=wn(null==n?void 0:n.pageXOffset,r.scrollLeft),a=wn(r.clientTop,o.clientTop),c=wn(r.clientLeft,o.clientLeft);return yn(e).translate(l-c,s-a)},yn=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?bn(o.offsetLeft,o.offsetTop):st(e)?(e=>{const t=e.getBoundingClientRect();return bn(t.left,t.top)})(t):bn(0,0)},xn=(e,t)=>({row:e,y:t}),Cn=(e,t)=>({col:e,x:t}),Sn=e=>vn(e).left+Lo(e),Tn=e=>vn(e).left,Rn=(e,t)=>Cn(e,Tn(t)),Dn=(e,t)=>Cn(e,Sn(t)),On=e=>vn(e).top,kn=(e,t)=>xn(e,On(t)),En=(e,t)=>xn(e,On(t)+hn(t)),Nn=(e,t,o)=>{if(0===o.length)return[];const n=E(o.slice(1),((t,o)=>t.map((t=>e(o,t))))),r=o[o.length-1].map((e=>t(o.length-1,e)));return n.concat([r])},_n={delta:h,positions:e=>Nn(kn,En,e),edge:On},Bn=dn({delta:h,edge:Tn,positions:e=>Nn(Rn,Dn,e)},{delta:e=>-e,edge:Sn,positions:e=>Nn(Dn,Rn,e)}),zn={delta:(e,t)=>Bn(t).delta(e,t),positions:(e,t)=>Bn(t).positions(e,t),edge:e=>Bn(e).edge(e)},An={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},Ln=(()=>{const e="[0-9]+",t="[eE][+-]?"+e,o=e=>`(?:${e})?`,n=["Infinity",e+"\\."+o(e)+o(t),"\\."+e+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),Wn=/(\d+(\.\d+)?)%/,Mn=/(\d+(\.\d+)?)px|em/,jn=ue("col"),Pn=ue("tr"),In=(e,t,o)=>{const n=_e(e).getOrThunk((()=>at(ke(e))));return t(e)/o(n)*100},Fn=(e,t)=>{Nt(e,"width",t+"px")},Hn=(e,t)=>{Nt(e,"width",t+"%")},$n=(e,t)=>{Nt(e,"height",t+"px")},Vn=e=>{const t=(e=>{return Bo(t=e,"height",t.dom.offsetHeight)+"px";var t})(e);return t?((e,t,o,n)=>{const r=parseFloat(e);return Rt(e,"%")&&"table"!==ne(t)?((e,t,o,n)=>{const r=Gt(e).map((e=>{const n=o(e);return Math.floor(t/100*n)})).getOr(t);return n(e,r),r})(t,r,o,n):r})(t,e,gn,$n):gn(e)},qn=(e,t)=>At(e,t).orThunk((()=>be(e,t).map((e=>e+"px")))),Un=e=>qn(e,"width"),Gn=e=>In(e,Ao,Wo),Kn=e=>{return jn(e)?Ao(e):Bo(t=e,"width",t.dom.offsetWidth);var t},Yn=e=>Pn(e)?gn(e):((e,t,o)=>o(e)/Mt(e,"rowspan"))(e,0,Vn),Jn=(e,t,o)=>{Nt(e,"width",t+o)},Qn=e=>In(e,Ao,Wo)+"%",Xn=g(Wn),Zn=ue("col"),er=e=>Un(e).getOrThunk((()=>Kn(e)+"px")),tr=e=>{return(t=e,qn(t,"height")).getOrThunk((()=>Yn(e)+"px"));var t},or=(e,t,o,n,r,s)=>e.filter(n).fold((()=>s(((e,t)=>{if(t<0||t>=e.length-1)return C.none();const o=e[t].fold((()=>{const o=(e=>{const t=S.call(e,0);return t.reverse(),t})(e.slice(0,t));return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:0}))),n=e[t+1].fold((()=>{const o=e.slice(t+1);return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:1})));return o.bind((e=>n.map((t=>{const o=t.delta+e.delta;return Math.abs(t.value-e.value)/o}))))})(o,t))),(e=>r(e))),nr=(e,t,o,n)=>{const r=an(e),s=sn(e)?(e=>E(rn(e),(e=>C.from(e.element))))(e):r,l=[C.some(zn.edge(t))].concat(E(zn.positions(r,t),(e=>e.map((e=>e.x))))),a=w(jt);return E(s,((e,t)=>or(e,t,l,a,(e=>{if((e=>{const t=No().browser,o=t.isChromium()||t.isFirefox();return!Zn(e)||o})(e))return o(e);{const e=null!=(s=r[t])?h(s):C.none();return or(e,t,l,a,(e=>n(C.some(Ao(e)))),n)}var s}),n)))},rr=e=>e.map((e=>e+"px")).getOr(""),sr=(e,t,o)=>nr(e,t,Kn,(e=>e.getOrThunk(o.minCellWidth))),lr=(e,t,o,n)=>{const r=mn(e),s=E(e.all,(e=>C.some(e.element))),l=[C.some(_n.edge(t))].concat(E(_n.positions(r,t),(e=>e.map((e=>e.y)))));return E(s,((e,t)=>or(e,t,l,x,o,n)))},ar=(e,t)=>()=>st(e)?t(e):parseFloat(At(e,"width").getOr("0")),cr=e=>{const t=ar(e,(e=>parseFloat(Qn(e)))),o=ar(e,Ao);return{width:t,pixelWidth:o,getWidths:(t,o)=>((e,t,o)=>nr(e,t,Gn,(e=>e.fold((()=>o.minCellWidth()),(e=>e/o.pixelWidth()*100)))))(t,e,o),getCellDelta:e=>e/o()*100,singleColumnWidth:(e,t)=>[100-e],minCellWidth:()=>It()/o()*100,setElementWidth:Hn,adjustTableWidth:o=>{const n=t();Hn(e,n+o/100*n)},isRelative:!0,label:"percent"}},ir=e=>{const t=ar(e,Ao);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:h,singleColumnWidth:(e,t)=>[Math.max(It(),e+t)-e],minCellWidth:It,setElementWidth:Fn,adjustTableWidth:o=>{const n=t()+o;Fn(e,n)},isRelative:!1,label:"pixel"}},mr=e=>Un(e).fold((()=>(e=>{const t=ar(e,Ao),o=g(0);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:o,singleColumnWidth:g([0]),minCellWidth:o,setElementWidth:f,adjustTableWidth:f,isRelative:!0,label:"none"}})(e)),(t=>((e,t)=>null!==Xn().exec(t)?cr(e):ir(e))(e,t))),dr=ir,ur=cr,fr=(e,t,o)=>{const n=e[o].element,r=xe.fromTag("td");Ie(r,xe.fromTag("br")),(t?Ie:Pe)(n,r)},gr=(e=>{const t=t=>e(t)?C.from(t.dom.nodeValue):C.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(ie),hr=e=>gr.get(e),pr=e=>gr.getOption(e),br=(e,t)=>gr.set(e,t),wr=e=>"img"===ne(e)?1:pr(e).fold((()=>Le(e).length),(e=>e.length)),vr=["img","br"],yr=e=>pr(e).filter((e=>0!==e.trim().length||e.indexOf("\xa0")>-1)).isSome()||D(vr,ne(e))||(e=>ae(e)&&"false"===pe(e,"contenteditable"))(e),xr=e=>((e,t)=>{const o=e=>{for(let n=0;nSr(e,yr),Sr=(e,t)=>{const o=e=>{const n=Le(e);for(let e=n.length-1;e>=0;e--){const r=n[e];if(t(r))return C.some(r);const s=o(r);if(s.isSome())return s}return C.none()};return o(e)},Tr={scope:["row","col"]},Rr=e=>()=>{const t=xe.fromTag("td",e.dom);return Ie(t,xe.fromTag("br",e.dom)),t},Dr=e=>()=>xe.fromTag("col",e.dom),Or=e=>()=>xe.fromTag("colgroup",e.dom),kr=e=>()=>xe.fromTag("tr",e.dom),Er=(e,t,o)=>{const n=((e,t)=>{const o=Je(e,t),n=Le(Ye(e));return $e(o,n),o})(e,t);return G(o,((e,t)=>{null===e?we(n,t):ge(n,t,e)})),n},Nr=e=>e,_r=(e,t,o)=>{const n=(e,t)=>{((e,t)=>{const o=e.dom,n=t.dom;kt(o)&&kt(n)&&(n.style.cssText=o.style.cssText)})(e.element,t),Lt(t,"height"),1!==e.colspan&&Lt(t,"width")};return{col:o=>{const r=xe.fromTag(ne(o.element),t.dom);return n(o,r),e(o.element,r),r},colgroup:Or(t),row:kr(t),cell:r=>{const s=xe.fromTag(ne(r.element),t.dom),l=o.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=l.length>0?((e,t,o)=>xr(e).map((n=>{const r=o.join(","),s=it(n,r,(t=>Re(t,e)));return z(s,((e,t)=>{const o=Ke(t);return Ie(e,o),o}),t)})).getOr(t))(r.element,s,l):s;return Ie(a,xe.fromTag("br")),n(r,s),((e,t)=>{G(Tr,((o,n)=>be(e,n).filter((e=>D(o,e))).each((e=>ge(t,n,e)))))})(r.element,s),e(r.element,s),s},replace:Er,colGap:Dr(t),gap:Rr(t)}},Br=e=>({col:Dr(e),colgroup:Or(e),row:kr(e),cell:Rr(e),replace:Nr,colGap:Dr(e),gap:Rr(e)}),zr=e=>t=>t.options.get(e),Ar="100%",Lr=e=>{var t;const o=e.dom,n=null!==(t=o.getParent(e.selection.getStart(),o.isBlock))&&void 0!==t?t:e.getBody();return Wo(xe.fromDom(n))+"px"},Wr=e=>C.from(e.options.get("table_clone_elements")),Mr=zr("table_header_type"),jr=zr("table_column_resizing"),Pr=e=>"preservetable"===jr(e),Ir=e=>"resizetable"===jr(e),Fr=zr("table_sizing_mode"),Hr=e=>"relative"===Fr(e),$r=e=>"fixed"===Fr(e),Vr=e=>"responsive"===Fr(e),qr=zr("table_resize_bars"),Ur=zr("table_style_by_css"),Gr=zr("table_merge_content_on_paste"),Kr=e=>{const t=e.options,o=t.get("table_default_attributes");return t.isSet("table_default_attributes")?o:((e,t)=>Vr(e)||Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)},Yr=zr("table_use_colgroups"),Jr=zr("fixed_toolbar_container"),Qr=zr("fixed_toolbar_container_target"),Xr=zr("ui_mode"),Zr=e=>wt(e,"[contenteditable]"),es=(e,t=!1)=>st(e)?e.dom.isContentEditable:Zr(e).fold(g(t),(e=>"true"===ts(e))),ts=e=>e.dom.contentEditable,os=e=>xe.fromDom(e.getBody()),ns=e=>t=>Re(t,os(e)),rs=e=>{we(e,"data-mce-style");const t=e=>we(e,"data-mce-style");N(qt(e),t),N(Ut(e),t),N(Kt(e),t)},ss=e=>xe.fromDom(e.selection.getStart()),ls=e=>e.getBoundingClientRect().width,as=e=>e.getBoundingClientRect().height,cs=e=>(t,o)=>{const n=t.dom.getStyle(o,e)||t.dom.getAttrib(o,e);return C.from(n).filter(Ot)},is=cs("width"),ms=cs("height"),ds=e=>gt(e,ue("table")).exists(es),us=(e,t)=>{const o=t.column,n=t.column+t.colspan-1,r=t.row,s=t.row+t.rowspan-1;return o<=e.finishCol&&n>=e.startCol&&r<=e.finishRow&&s>=e.startRow},fs=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,gs=(e,t,o)=>{const n=tn(e,t,Re),r=tn(e,o,Re);return n.bind((e=>r.map((t=>{return o=e,n=t,{startRow:Math.min(o.row,n.row),startCol:Math.min(o.column,n.column),finishRow:Math.max(o.row+o.rowspan-1,n.row+n.rowspan-1),finishCol:Math.max(o.column+o.colspan-1,n.column+n.colspan-1)};var o,n}))))},hs=(e,t,o)=>gs(e,t,o).map((t=>{const o=on(e,b(us,t));return E(o,(e=>e.element))})),ps=(e,t)=>tn(e,t,((e,t)=>De(t,e))).map((e=>e.element)),bs=(e,t,o)=>{const n=vs(e);return hs(n,t,o)},ws=(e,t,o,n,r)=>{const s=vs(e),l=Re(e,o)?C.some(t):ps(s,t),a=Re(e,r)?C.some(n):ps(s,n);return l.bind((e=>a.bind((t=>hs(s,e,t)))))},vs=Xo;var ys=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],xs=()=>({up:g({selector:ht,closest:wt,predicate:ft,all:Be}),down:g({selector:dt,predicate:ct}),styles:g({get:Bt,getRaw:At,set:Nt,remove:Lt}),attrs:g({get:pe,set:ge,remove:we,copyTo:(e,t)=>{const o=ve(e);he(t,o)}}),insert:g({before:Me,after:je,afterAll:He,append:Ie,appendAll:$e,prepend:Pe,wrap:Fe}),remove:g({unwrap:Ue,remove:qe}),create:g({nu:xe.fromTag,clone:e=>xe.fromDom(e.dom.cloneNode(!1)),text:xe.fromText}),query:g({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:ze,nextSibling:Ae}),property:g({children:Le,name:ne,parent:Ne,document:e=>Ee(e).dom,isText:ie,isComment:le,isElement:ce,isSpecial:e=>{const t=ne(e);return D(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>ce(e)?be(e,"lang"):C.none(),getText:hr,setText:br,isBoundary:e=>!!ce(e)&&("body"===ne(e)||D(ys,ne(e))),isEmptyTag:e=>!!ce(e)&&D(["br","img","hr","input"],ne(e)),isNonEditable:e=>ce(e)&&"false"===pe(e,"contenteditable")}),eq:Re,is:Oe});const Cs=(e,t,o,n)=>{const r=t(e,o);return z(n,((o,n)=>{const r=t(e,n);return Ss(e,o,r)}),r)},Ss=(e,t,o)=>t.bind((t=>o.filter(b(e.eq,t)))),Ts=xs(),Rs=(e,t)=>((e,t,o)=>o.length>0?((e,t,o,n)=>n(e,t,o[0],o.slice(1)))(e,t,o,Cs):C.none())(Ts,((t,o)=>e(o)),t),Ds=e=>ht(e,"table"),Os=(e,t,o)=>{const n=e=>t=>void 0!==o&&o(t)||Re(t,e);return Re(e,t)?C.some({boxes:C.some([e]),start:e,finish:t}):Ds(e).bind((r=>Ds(t).bind((s=>{if(Re(r,s))return C.some({boxes:bs(r,e,t),start:e,finish:t});if(De(r,s)){const o=it(t,"td,th",n(r)),l=o.length>0?o[o.length-1]:t;return C.some({boxes:ws(r,e,r,t,s),start:e,finish:l})}if(De(s,r)){const o=it(e,"td,th",n(s)),l=o.length>0?o[o.length-1]:e;return C.some({boxes:ws(s,e,r,t,s),start:e,finish:l})}return((e,t)=>((e,t,o,n=y)=>{const r=[t].concat(e.up().all(t)),s=[o].concat(e.up().all(o)),l=e=>W(e,n).fold((()=>e),(t=>e.slice(0,t+1))),a=l(r),c=l(s),i=L(a,(t=>O(c,((e,t)=>b(e.eq,t))(e,t))));return{firstpath:a,secondpath:c,shared:i}})(Ts,e,t,void 0))(e,t).shared.bind((l=>wt(l,"table",o).bind((o=>{const l=it(t,"td,th",n(o)),a=l.length>0?l[l.length-1]:t,c=it(e,"td,th",n(o)),i=c.length>0?c[c.length-1]:e;return C.some({boxes:ws(o,e,r,t,s),start:i,finish:a})}))))}))))},ks=(e,t)=>{const o=dt(e,t);return o.length>0?C.some(o):C.none()},Es=(e,t,o)=>bt(e,t).bind((t=>bt(e,o).bind((e=>Rs(Ds,[t,e]).map((o=>({first:t,last:e,table:o}))))))),Ns=(e,t,o,n,r)=>((e,t)=>L(e,(e=>Ce(e,t))))(e,r).bind((e=>((e,t,o)=>Gt(e).bind((n=>((e,t,o,n)=>tn(e,t,Re).bind((t=>{const r=o>0?t.row+t.rowspan-1:t.row,s=n>0?t.column+t.colspan-1:t.column;return en(e,r+o,s+n).map((e=>e.element))})))(vs(n),e,t,o))))(e,t,o).bind((e=>((e,t)=>ht(e,"table").bind((o=>bt(o,t).bind((t=>Os(t,e).bind((e=>e.boxes.map((t=>({boxes:t,start:e.start,finish:e.finish}))))))))))(e,n))))),_s=(e,t)=>ks(e,t),Bs=(e,t,o)=>Es(e,t,o).bind((t=>{const o=t=>Re(e,t),n="thead,tfoot,tbody,table",r=ht(t.first,n,o),s=ht(t.last,n,o);return r.bind((e=>s.bind((o=>Re(e,o)?((e,t,o)=>((e,t,o)=>gs(e,t,o).bind((t=>((e,t)=>{let o=!0;const n=b(fs,t);for(let r=t.startRow;r<=t.finishRow;r++)for(let s=t.startCol;s<=t.finishCol;s++)o=o&&en(e,r,s).exists(n);return o?C.some(t):C.none()})(e,t))))(vs(e),t,o))(t.table,t.first,t.last):C.none()))))})),zs=h,As=e=>{const t=(e,t)=>be(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&P(e,(e=>t(e,"rowspan")||t(e,"colspan")))?C.some(e):C.none()},Ls=(e,t,o)=>t.length<=1?C.none():Bs(e,o.firstSelectedSelector,o.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),Ws="data-mce-selected",Ms="data-mce-first-selected",js="data-mce-last-selected",Ps="["+Ws+"]",Is={selected:Ws,selectedSelector:"td["+Ws+"],th["+Ws+"]",firstSelected:Ms,firstSelectedSelector:"td["+Ms+"],th["+Ms+"]",lastSelected:js,lastSelectedSelector:"td["+js+"],th["+js+"]"},Fs=(e,t,o)=>({element:o,mergable:Ls(t,e,Is),unmergable:As(e),selection:zs(e)}),Hs=e=>(t,o)=>{const n=ne(t),r="col"===n||"colgroup"===n?Gt(s=t).bind((e=>_s(e,Is.firstSelectedSelector))).fold(g(s),(e=>e[0])):t;var s;return wt(r,e,o)},$s=Hs("th,td,caption"),Vs=Hs("th,td"),qs=e=>{return t=e.model.table.getSelectedCells(),E(t,xe.fromDom);var t},Us=(e,t)=>{e.on("BeforeGetContent",(t=>{const o=o=>{t.preventDefault(),(e=>Gt(e[0]).map((e=>{const t=((e,t)=>{const o=e=>Ce(e.element,t),n=Ye(e),r=Xt(n),s=mr(e),l=Zo(r),a=((e,t)=>{const o=e.grid.columns;let n=e.grid.rows,r=o,s=0,l=0;const a=[],c=[];return G(e.access,(e=>{if(a.push(e),t(e)){c.push(e);const t=e.row,o=t+e.rowspan-1,a=e.column,i=a+e.colspan-1;ts&&(s=o),al&&(l=i)}})),((e,t,o,n,r,s)=>({minRow:e,minCol:t,maxRow:o,maxCol:n,allCells:r,selectedCells:s}))(n,r,s,l,a,c)})(l,o),c="th:not("+t+"),td:not("+t+")",i=$t(n,"th,td",(e=>Ce(e,c)));N(i,qe),((e,t,o,n)=>{const r=B(e,(e=>"colgroup"!==e.section)),s=t.grid.columns,l=t.grid.rows;for(let e=0;eo.maxRow||ao.maxCol||(en(t,e,a).filter(n).isNone()?fr(r,l,e):l=!0)}})(r,l,a,o);const m=((e,t,o,n)=>{if(0===n.minCol&&t.grid.columns===n.maxCol+1)return 0;const r=sr(t,e,o),s=A(r,((e,t)=>e+t),0),l=A(r.slice(n.minCol,n.maxCol+1),((e,t)=>e+t),0),a=l/s*o.pixelWidth()-o.pixelWidth();return o.getCellDelta(a)})(e,Xo(e),s,a);return((e,t,o,n)=>{G(o.columns,(e=>{(e.columnt.maxCol)&&qe(e.element)}));const r=B(Ht(e,"tr"),(e=>0===e.dom.childElementCount));N(r,qe),t.minCol!==t.maxCol&&t.minRow!==t.maxRow||N(Ht(e,"th,td"),(e=>{we(e,"rowspan"),we(e,"colspan")})),we(e,Uo),we(e,"data-snooker-col-series"),mr(e).adjustTableWidth(n)})(n,a,l,m),n})(e,Ps);return rs(t),[t]})))(o).each((o=>{const n="text"===t.format?((e,t)=>{const o=e.getDoc(),n=nt(xe.fromDom(e.getBody())),r=xe.fromTag("div",o);ge(r,"data-mce-bogus","all"),_t(r,{position:"fixed",left:"-9999999px",top:"0",overflow:"hidden",opacity:"0"});const s=(e=>ot(e)?e:xe.fromDom(Ee(e).dom.body))(n);$e(r,t),Ie(s,r);const l=r.dom.innerText;return qe(r),l})(e,o):((e,t)=>E(t,(t=>e.selection.serializer.serialize(t.dom,{}))).join(""))(e,o);t.content=n}))};if(!0===t.selection){const t=(e=>B(qs(e),(e=>Ce(e,Is.selectedSelector))))(e);t.length>=1&&o(t)}})),e.on("BeforeSetContent",(o=>{if(!0===o.selection&&!0===o.paste){const n=qs(e);H(n).each((n=>{Gt(n).each((r=>{const s=B((e=>{const t=document.createElement("div");return t.innerHTML=e,Le(xe.fromDom(t))})(o.content),(e=>"meta"!==ne(e))),l=ue("table");if(Gr(e)&&1===s.length&&l(s[0])){o.preventDefault();const l=xe.fromDom(e.getDoc()),a=Br(l),c=((e,t,o)=>({element:e,clipboard:t,generators:o}))(n,s[0],a);t.pasteCells(r,c).each((()=>{e.focus()}))}}))}))}}))},Gs=(e,t)=>({element:e,offset:t}),Ks=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>Ks(e,t,o).orThunk((()=>C.some(t))))):C.none(),Ys=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,Js=(e,t)=>{const o=Ks(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return Gs(o,Ys(e,o));const n=e.property().children(o);return n.length>0?Js(e,n[n.length-1]):Gs(o,Ys(e,o))},Qs=Js,Xs=xs(),Zs=(e,t)=>{if(!jt(e)){const o=(e=>Un(e).bind((e=>{return t=e,o=["fixed","relative","empty"],C.from(Ln.exec(t)).bind((e=>{const t=Number(e[1]),n=e[2];return((e,t)=>O(t,(t=>O(An[t],(t=>e===t)))))(n,o)?C.some({value:t,unit:n}):C.none()}));var t,o})))(e);o.each((o=>{const n=o.value/2;Jn(e,n,o.unit),Jn(t,n,o.unit)}))}},el=e=>E(e,g(0)),tl=(e,t,o,n,r)=>r(e.slice(0,t)).concat(n).concat(r(e.slice(o))),ol=e=>(t,o,n,r)=>{if(e(n)){const e=Math.max(r,t[o]-Math.abs(n)),s=Math.abs(e-t[o]);return n>=0?s:-s}return n},nl=ol((e=>e<0)),rl=ol(x),sl=()=>{const e=(e,t,o,n)=>{const r=(100+o)/100,s=Math.max(n,(e[t]+o)/r);return E(e,((e,o)=>(o===t?s:e/r)-e))},t=(t,o,n,r,s,l)=>l?e(t,o,r,s):((e,t,o,n,r)=>{const s=nl(e,t,n,r);return tl(e,t,o+1,[s,0],el)})(t,o,n,r,s);return{resizeTable:(e,t)=>e(t),clampTableDelta:nl,calcLeftEdgeDeltas:t,calcMiddleDeltas:(e,o,n,r,s,l,a)=>t(e,n,r,s,l,a),calcRightEdgeDeltas:(t,o,n,r,s,l)=>{if(l)return e(t,n,r,s);{const e=nl(t,n,r,s);return el(t.slice(0,n)).concat([e])}},calcRedestributedWidths:(e,t,o,n)=>{if(n){const n=(t+o)/t,r=E(e,(e=>e/n));return{delta:100*n-100,newSizes:r}}return{delta:o,newSizes:e}}}},ll=()=>{const e=(e,t,o,n,r)=>{const s=rl(e,n>=0?o:t,n,r);return tl(e,t,o+1,[s,-s],el)};return{resizeTable:(e,t,o)=>{o&&e(t)},clampTableDelta:(e,t,o,n,r)=>{if(r){if(o>=0)return o;{const t=A(e,((e,t)=>e+t-n),0);return Math.max(-t,o)}}return nl(e,t,o,n)},calcLeftEdgeDeltas:e,calcMiddleDeltas:(t,o,n,r,s,l)=>e(t,n,r,s,l),calcRightEdgeDeltas:(e,t,o,n,r,s)=>{if(s)return el(e);{const t=n/e.length;return E(e,g(t))}},calcRedestributedWidths:(e,t,o,n)=>({delta:0,newSizes:e})}},al=e=>Xo(e).grid,cl=ue("th"),il=e=>P(e,(e=>cl(e.element))),ml=(e,t)=>e&&t?"sectionCells":e?"section":"cells",dl=e=>{const t="thead"===e.section,o=vt(ul(e.cells),"th");return"tfoot"===e.section?{type:"footer"}:t||o?{type:"header",subType:ml(t,o)}:{type:"body"}},ul=e=>{const t=B(e,(e=>cl(e.element)));return 0===t.length?C.some("td"):t.length===e.length?C.some("th"):C.none()},fl=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),gl=(e,t)=>e.section!==t?tt(e.element,e.cells,t,e.isNew):e,hl=()=>({transformRow:gl,transformCell:(e,t,o)=>{const n=o(e.element,t),r="td"!==ne(n)?(e=>{const t=Je(e,"td");je(e,t);const o=Le(e);return $e(t,o),qe(e),t})(n):n;return et(r,e.isNew,e.isLocked)}}),pl=()=>({transformRow:gl,transformCell:fl}),bl=()=>({transformRow:(e,t)=>gl(e,"thead"===t?"tbody":t),transformCell:fl}),wl=hl,vl=pl,yl=bl,xl=()=>({transformRow:h,transformCell:fl}),Cl=(e,t,o,n)=>{o===n?we(e,t):ge(e,t,o)},Sl=(e,t,o)=>{$(mt(e,t)).fold((()=>Pe(e,o)),(e=>je(e,o)))},Tl=(e,t)=>{const o=[],n=[],r=e=>E(e,(e=>{e.isNew&&o.push(e.element);const t=e.element;return Ve(t),N(e.cells,(e=>{e.isNew&&n.push(e.element),Cl(e.element,"colspan",e.colspan,1),Cl(e.element,"rowspan",e.rowspan,1),Ie(t,e.element)})),t})),s=e=>j(e,(e=>E(e.cells,(e=>(Cl(e.element,"span",e.colspan,1),e.element))))),l=(t,o)=>{const n=((e,t)=>{const o=pt(e,t).getOrThunk((()=>{const o=xe.fromTag(t,ke(e).dom);return"thead"===t?Sl(e,"caption,colgroup",o):"colgroup"===t?Sl(e,"caption",o):Ie(e,o),o}));return Ve(o),o})(e,o),l=("colgroup"===o?s:r)(t);$e(n,l)},a=(t,o)=>{t.length>0?l(t,o):(t=>{pt(e,t).each(qe)})(o)},c=[],i=[],m=[],d=[];return N(t,(e=>{switch(e.section){case"thead":c.push(e);break;case"tbody":i.push(e);break;case"tfoot":m.push(e);break;case"colgroup":d.push(e)}})),a(d,"colgroup"),a(c,"thead"),a(i,"tbody"),a(m,"tfoot"),{newRows:o,newCells:n}},Rl=(e,t)=>{if(0===e.length)return 0;const o=e[0];return W(e,(e=>!t(o.element,e.element))).getOr(e.length)},Dl=(e,t)=>{const o=E(e,(e=>E(e.cells,y)));return E(e,((n,r)=>{const s=j(n.cells,((n,s)=>{if(!1===o[r][s]){const m=((e,t,o,n)=>{const r=((e,t)=>e[t])(e,t),s="colgroup"===r.section,l=Rl(r.cells.slice(o),n),a=s?1:Rl(((e,t)=>E(e,(e=>Fo(e,t))))(e.slice(t),o),n);return{colspan:l,rowspan:a}})(e,r,s,t);return((e,t,n,r)=>{for(let s=e;s({element:e,cells:t,section:o,isNew:n}))(n.element,s,n.section,n.isNew)}))},Ol=(e,t,o)=>{const n=[];N(e.colgroups,(r=>{const s=[];for(let n=0;net(e.element,o,!1))).getOrThunk((()=>et(t.colGap(),!0,!1)));s.push(r)}n.push(tt(r.element,s,"colgroup",o))}));for(let r=0;ret(e.element,o,e.isLocked))).getOrThunk((()=>et(t.gap(),!0,!1)));s.push(l)}const l=e.all[r],a=tt(l.element,s,l.section,o);n.push(a)}return n},kl=e=>Dl(e,Re),El=(e,t)=>V(e.all,(e=>L(e.cells,(e=>Re(t,e.element))))),Nl=(e,t,o)=>{const n=E(t.selection,(t=>Vt(t).bind((t=>El(e,t))).filter(o))),r=yt(n);return xt(r.length>0,r)},_l=(e,t,o,n,r)=>(s,l,a,c)=>{const i=Xo(s),m=C.from(null==c?void 0:c.section).getOrThunk(xl);return t(i,l).map((t=>{const o=((e,t)=>Ol(e,t,!1))(i,a),n=e(o,t,Re,r(a),m),s=Ko(n.grid);return{info:t,grid:kl(n.grid),cursor:n.cursor,lockedColumns:s}})).bind((e=>{const t=Tl(s,e.grid),r=C.from(null==c?void 0:c.sizing).getOrThunk((()=>mr(s))),l=C.from(null==c?void 0:c.resize).getOrThunk(ll);return o(s,e.grid,e.info,{sizing:r,resize:l,section:m}),n(s),we(s,Uo),e.lockedColumns.length>0&&ge(s,Uo,e.lockedColumns.join(",")),C.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})}))},Bl=(e,t)=>Nl(e,t,x).map((e=>({cells:e,generators:t.generators,clipboard:t.clipboard}))),zl=(e,t)=>Nl(e,t,x),Al=(e,t)=>Nl(e,t,(e=>!e.isLocked)),Ll=(e,t)=>P(t,(t=>((e,t)=>El(e,t).exists((e=>!e.isLocked)))(e,t))),Wl=(e,t,o,n)=>{const r=Vo(e).rows;let s=!0;for(let e=0;e{const t=t=>t(e),o=g(e),n=()=>r,r={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:x,isError:y,map:t=>Pl.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>C.some(e)};return r},jl=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:y,isError:x,map:t,mapError:t=>Pl.error(t(e)),bind:t,exists:y,forall:x,getOr:h,or:h,getOrThunk:v,orThunk:v,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:f,toOptional:C.none};var n;return o},Pl={value:Ml,error:jl,fromOption:(e,t)=>e.fold((()=>jl(t)),Ml)},Il=(e,t)=>({rowDelta:0,colDelta:$o(e[0])-$o(t[0])}),Fl=(e,t)=>({rowDelta:e.length-t.length,colDelta:0}),Hl=(e,t,o,n)=>{const r="colgroup"===t.section?o.col:o.cell;return k(e,(e=>et(r(),!0,n(e))))},$l=(e,t,o,n)=>{const r=e[e.length-1];return e.concat(k(t,(()=>{const e="colgroup"===r.section?o.colgroup:o.row,t=qo(r,e,h),s=Hl(t.cells.length,t,o,(e=>X(n,e.toString())));return Io(t,s)})))},Vl=(e,t,o,n)=>E(e,(e=>{const r=Hl(t,e,o,y);return Mo(e,n,r)})),ql=(e,t,o)=>{const n=t.colDelta<0?Vl:h,r=t.rowDelta<0?$l:h,s=Ko(e),l=$o(e[0]),a=O(s,(e=>e===l-1)),c=n(e,Math.abs(t.colDelta),o,a?l-1:l),i=Ko(c);return r(c,Math.abs(t.rowDelta),o,I(i,x))},Ul=(e,t,o,n)=>{const r=b(n,Fo(e[t],o).element),s=e[t];return e.length>1&&$o(s)>1&&(o>0&&r(Ho(s,o-1))||o0&&r(Ho(e[t-1],o))||tB(o,(o=>o>=e.column&&o<=$o(t[0])+e.column)),Kl=(e,t,o,n,r)=>{((e,t,o,n)=>{t>0&&t{const r=e.cells[t-1];let s=0;const l=n();for(;e.cells.length>t+s&&o(r.element,e.cells[t+s].element);)Po(e,t+s,et(l,!0,e.cells[t+s].isLocked)),s++}))})(t,e,r,n.cell);const s=Fl(o,t),l=ql(o,s,n),a=Fl(t,l),c=ql(t,a,n);return E(c,((t,o)=>Mo(t,e,l[o].cells)))},Yl=(e,t,o,n,r)=>{((e,t,o,n)=>{const r=Vo(e).rows;if(t>0&&tA(e,((e,o)=>O(e,(e=>t(e.element,o.element)))?e:e.concat([o])),[]))(r[t-1].cells,o);N(e,(e=>{let s=C.none();for(let l=t;l{Po(a,t,et(e,!0,c.isLocked))})))}}))}})(t,e,r,n.cell);const s=Ko(t),l=Il(t,o),a={...l,colDelta:l.colDelta-s.length},c=ql(t,a,n),{cols:i,rows:m}=Vo(c),d=Ko(c),u=Il(o,t),f={...u,colDelta:u.colDelta+d.length},g=(p=n,b=d,E(o,(e=>A(b,((t,o)=>{const n=Hl(1,e,p,x)[0];return jo(t,o,n)}),e)))),h=ql(g,f,n);var p,b;return[...i,...m.slice(0,e),...h,...m.slice(e,m.length)]},Jl=(e,t,o,n,r)=>{const{rows:s,cols:l}=Vo(e),a=s.slice(0,t),c=s.slice(t);return[...l,...a,((e,t,o,n)=>qo(e,(e=>n(e,o)),t))(s[o],((e,o)=>t>0&&tE(e,(e=>{const s=t>0&&t<$o(e)&&n(Ho(e,t-1),Ho(e,t)),l=((e,t,o,n,r,s,l)=>{if("colgroup"!==o&&n)return Fo(e,t);{const t=Fo(e,r);return et(l(t.element,s),!0,!1)}})(e,t,e.section,s,o,n,r);return jo(e,t,l)})),Xl=(e,t,o,n)=>((e,t,o,n)=>void 0!==Ho(e[t],o)&&t>0&&n(Ho(e[t-1],o),Ho(e[t],o)))(e,t,o,n)||((e,t,o)=>t>0&&o(Ho(e,t-1),Ho(e,t)))(e[t],o,n),Zl=(e,t,o,n)=>{const r=e=>(e=>"row"===e?(e=>Mt(e,"rowspan")>1)(t):jt(t))(e)?`${e}group`:e;return e?cl(t)?r(o):null:n&&cl(t)?r("row"===o?"col":"row"):null},ea=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),ta=(e,t,o,n,r,s,l)=>E(e,((e,a)=>(e=>{const c=e.cells,i=E(c,((e,c)=>{if((e=>O(t,(t=>o(e.element,t.element))))(e)){const t=l(e,a,c)?r(e,o,n):e;return s(t,a,c).each((e=>{var o,n;o=t.element,n={scope:C.from(e)},G(n,((e,t)=>{e.fold((()=>{we(o,t)}),(e=>{fe(o.dom,t,e)}))}))})),t}return e}));return tt(e.element,i,e.section,e.isNew)})(e))),oa=(e,t,o)=>j(e,((n,r)=>Xl(e,r,t,o)?[]:[Fo(n,t)])),na=(e,t,o,n,r)=>{const s=Vo(e).rows,l=j(t,(e=>oa(s,e,n))),a=E(s,(e=>il(e.cells))),c=((e,t)=>P(t,h)&&il(e)?x:(e,o,n)=>!("th"===ne(e.element)&&t[o]))(l,a),i=((e,t)=>(o,n)=>C.some(Zl(e,o.element,"row",t[n])))(o,a);return ta(e,l,n,r,ea,i,c)},ra=(e,t,o,n)=>{const r=Vo(e).rows,s=E(t,(e=>Fo(r[e.row],e.column)));return ta(e,s,o,n,ea,C.none,x)},sa=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return N(e,((n,r)=>{const s=q(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],c=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(c))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==c.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+c.length+" ("+c+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[r].apply(null,o)},match:e=>{const n=q(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!P(t,(e=>D(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},la={...sa([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}])},aa=(e,t,o)=>{const n=((e,t)=>sn(e)?((e,t)=>{const o=rn(e);return E(o,((e,o)=>({element:e.element,width:t[o],colspan:e.colspan})))})(e,t):((e,t)=>{const o=nn(e);return E(o,(e=>{const o=((e,t,o)=>{let n=0;for(let r=e;r{o.setElementWidth(e.element,e.width)}))},ca=(e,t,o,n,r)=>{const s=Xo(e),l=r.getCellDelta(t),a=r.getWidths(s,r),c=o===s.grid.columns-1,i=n.clampTableDelta(a,o,l,r.minCellWidth(),c),m=((e,t,o,n,r)=>{const s=e.slice(0),l=((e,t)=>0===e.length?la.none():1===e.length?la.only(0):0===t?la.left(0,1):t===e.length-1?la.right(t-1,t):t>0&&tn.singleColumnWidth(s[e],o)),((e,t)=>r.calcLeftEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)),((e,t,l)=>r.calcMiddleDeltas(s,e,t,l,o,n.minCellWidth(),n.isRelative)),((e,t)=>r.calcRightEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)))})(a,o,i,r,n),d=E(m,((e,t)=>e+a[t]));aa(s,d,r),n.resizeTable(r.adjustTableWidth,i,c)},ia=(e,t,o)=>{const n=Xo(e),r=((e,t)=>lr(e,t,Yn,(e=>e.getOrThunk(Ft))))(n,e),s=E(r,((e,n)=>o===n?Math.max(t+e,Ft()):e)),l=((e,t)=>E(e.all,((e,o)=>({element:e.element,height:t[o]}))))(n,s);N(l,(e=>{$n(e.element,e.height)})),N(nn(n),(e=>{(e=>{Lt(e,"height")})(e.element)}));const a=z(s,((e,t)=>e+t),0);$n(e,a)},ma=e=>A(e,((e,t)=>O(e,(e=>e.column===t.column))?e:e.concat([t])),[]).sort(((e,t)=>e.column-t.column)),da=ue("col"),ua=ue("colgroup"),fa=e=>"tr"===ne(e)||ua(e),ga=e=>({element:e,colspan:Wt(e,"colspan",1),rowspan:Wt(e,"rowspan",1)}),ha=e=>be(e,"scope").map((e=>e.substr(0,3))),pa=(e,t=ga)=>{const o=o=>{if(fa(o))return ua((r={element:o}).element)?e.colgroup(r):e.row(r);{const r=o,s=(t=>da(t.element)?e.col(t):e.cell(t))(t(r));return n=C.some({item:r,replacement:s}),s}var r};let n=C.none();return{getOrInit:(e,t)=>n.fold((()=>o(e)),(n=>t(e,n.item)?n.replacement:o(e)))}},ba=e=>t=>{const o=[],n=n=>{const r="td"===e?{scope:null}:{},s=t.replace(n,e,r);return o.push({item:n,sub:s}),s};return{replaceOrInit:(e,t)=>{if(fa(e)||da(e))return e;{const r=e;return((e,t)=>L(o,(o=>t(o.item,e))))(r,t).fold((()=>n(r)),(o=>t(e,o.item)?o.sub:n(r)))}}}},wa=e=>({unmerge:t=>{const o=ha(t);return o.each((e=>ge(t,"scope",e))),()=>{const n=e.cell({element:t,colspan:1,rowspan:1});return Lt(n,"width"),Lt(t,"width"),o.each((e=>ge(n,"scope",e))),n}},merge:e=>(Lt(e[0],"width"),(()=>{const t=yt(E(e,ha));if(0===t.length)return C.none();{const e=t[0],o=["row","col"];return O(t,(t=>t!==e&&D(o,t)))?C.none():C.from(e)}})().fold((()=>we(e[0],"scope")),(t=>ge(e[0],"scope",t+"group"))),g(e[0]))}),va=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],ya=xs(),xa=e=>((e,t)=>{const o=e.property().name(t);return D(va,o)})(ya,e),Ca=e=>((e,t)=>{const o=e.property().name(t);return D(["ol","ul"],o)})(ya,e),Sa=e=>{const t=ue("br"),o=e=>Cr(e).bind((o=>{const n=Ae(o).map((e=>!!xa(e)||!!((e,t)=>D(["br","img","hr","input"],e.property().name(t)))(ya,e)&&"img"!==ne(e))).getOr(!1);return Ne(o).map((r=>{return!0===n||("li"===ne(s=r)||ft(s,Ca).isSome())||t(o)||xa(r)&&!Re(e,r)?[]:[xe.fromTag("br")];var s}))})).getOr([]),n=(()=>{const n=j(e,(e=>{const n=Le(e);return(e=>P(e,(e=>t(e)||ie(e)&&0===hr(e).trim().length)))(n)?[]:n.concat(o(e))}));return 0===n.length?[xe.fromTag("br")]:n})();Ve(e[0]),$e(e[0],n)},Ta=e=>es(e,!0),Ra=e=>{0===qt(e).length&&qe(e)},Da=(e,t)=>({grid:e,cursor:t}),Oa=(e,t,o)=>{const n=((e,t,o)=>{var n,r;const s=Vo(e).rows;return C.from(null===(r=null===(n=s[t])||void 0===n?void 0:n.cells[o])||void 0===r?void 0:r.element).filter(Ta).orThunk((()=>(e=>V(e,(e=>V(e.cells,(e=>{const t=e.element;return xt(Ta(t),t)})))))(s)))})(e,t,o);return Da(e,n)},ka=e=>A(e,((e,t)=>O(e,(e=>e.row===t.row))?e:e.concat([t])),[]).sort(((e,t)=>e.row-t.row)),Ea=(e,t)=>(o,n,r,s,l)=>{const a=ka(n),c=E(a,(e=>e.row)),i=((e,t,o,n,r,s,l)=>{const{cols:a,rows:c}=Vo(e),i=c[t[0]],m=j(t,(e=>((e,t,o)=>{const n=e[t];return j(n.cells,((n,r)=>Xl(e,t,r,o)?[]:[n]))})(c,e,r))),d=E(i.cells,((e,t)=>il(oa(c,t,r)))),u=[...c];N(t,(e=>{u[e]=l.transformRow(c[e],o)}));const f=[...a,...u],g=((e,t)=>P(t,h)&&il(e.cells)?x:(e,o,n)=>!("th"===ne(e.element)&&t[n]))(i,d),p=((e,t)=>(o,n,r)=>C.some(Zl(e,o.element,"col",t[r])))(n,d);return ta(f,m,r,s,l.transformCell,p,g)})(o,c,e,t,r,s.replaceOrInit,l);return Oa(i,n[0].row,n[0].column)},Na=Ea("thead",!0),_a=Ea("tbody",!1),Ba=Ea("tfoot",!1),za=(e,t,o)=>{const n=((e,t)=>Jt(e,(()=>t)))(e,o.section),r=Zo(n);return Ol(r,t,!0)},Aa=(e,t,o,n)=>((e,t,o,n)=>{const r=Zo(t),s=n.getWidths(r,n);aa(r,s,n)})(0,t,0,n.sizing),La=(e,t,o,n)=>((e,t,o,n,r)=>{const s=Zo(t),l=n.getWidths(s,n),a=n.pixelWidth(),{newSizes:c,delta:i}=r.calcRedestributedWidths(l,a,o.pixelDelta,n.isRelative);aa(s,c,n),n.adjustTableWidth(i)})(0,t,o,n.sizing,n.resize),Wa=(e,t)=>O(t,(e=>0===e.column&&e.isLocked)),Ma=(e,t)=>O(t,(t=>t.column+t.colspan>=e.grid.columns&&t.isLocked)),ja=(e,t)=>{const o=an(e),n=ma(t);return A(n,((e,t)=>e+o[t.column].map(Lo).getOr(0)),0)},Pa=e=>(t,o)=>zl(t,o).filter((o=>!(e?Wa:Ma)(t,o))).map((e=>({details:e,pixelDelta:ja(t,e)}))),Ia=e=>(t,o)=>Bl(t,o).filter((o=>!(e?Wa:Ma)(t,o.cells))),Fa=ba("th"),Ha=ba("td"),$a=_l(((e,t,o,n)=>{const r=t[0].row,s=ka(t),l=z(s,((e,t)=>({grid:Jl(e.grid,r,t.row+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(l,r,t[0].column)}),zl,f,f,pa),Va=_l(((e,t,o,n)=>{const r=ka(t),s=r[r.length-1],l=s.row+s.rowspan,a=z(r,((e,t)=>Jl(e,l,t.row,o,n.getOrInit)),e);return Oa(a,l,t[0].column)}),zl,f,f,pa),qa=_l(((e,t,o,n)=>{const r=t.details,s=ma(r),l=s[0].column,a=z(s,((e,t)=>({grid:Ql(e.grid,l,t.column+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(a,r[0].row,l)}),Pa(!0),La,f,pa),Ua=_l(((e,t,o,n)=>{const r=t.details,s=r[r.length-1],l=s.column+s.colspan,a=ma(r),c=z(a,((e,t)=>Ql(e,l,t.column,o,n.getOrInit)),e);return Oa(c,r[0].row,l)}),Pa(!1),La,f,pa),Ga=_l(((e,t,o,n)=>{const r=ma(t.details),s=((e,t)=>j(e,(e=>{const o=e.cells,n=z(t,((e,t)=>t>=0&&t0?[tt(e.element,n,e.section,e.isNew)]:[]})))(e,E(r,(e=>e.column))),l=s.length>0?s[0].cells.length-1:0;return Oa(s,r[0].row,Math.min(r[0].column,l))}),((e,t)=>Al(e,t).map((t=>({details:t,pixelDelta:-ja(e,t)})))),La,Ra,pa),Ka=_l(((e,t,o,n)=>{const r=ka(t),s=((e,t,o)=>{const{rows:n,cols:r}=Vo(e);return[...r,...n.slice(0,t),...n.slice(o+1)]})(e,r[0].row,r[r.length-1].row),l=Math.max(Vo(s).rows.length-1,0);return Oa(s,Math.min(t[0].row,l),t[0].column)}),zl,f,Ra,pa),Ya=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!0,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Fa),Ja=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!1,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Ha),Qa=_l(Na,zl,f,f,Fa),Xa=_l(_a,zl,f,f,Ha),Za=_l(Ba,zl,f,f,Ha),ec=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Fa),tc=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Ha),oc=_l(((e,t,o,n)=>{const r=t.cells;Sa(r);const s=((e,t,o,n)=>{const r=Vo(e).rows;if(0===r.length)return e;for(let e=t.startRow;e<=t.finishRow;e++)for(let o=t.startCol;o<=t.finishCol;o++){const t=r[e],s=Fo(t,o).isLocked;Po(t,o,et(n(),!1,s))}return e})(e,t.bounds,0,n.merge(r));return Da(s,C.from(r[0]))}),((e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>Ll(e,t.cells)))),Aa,f,wa),nc=_l(((e,t,o,n)=>{const r=z(t,((e,t)=>Wl(e,t,o,n.unmerge(t))),e);return Da(r,C.from(t[0]))}),((e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>Ll(e,t)))),Aa,f,wa),rc=_l(((e,t,o,n)=>{const r=((e,t)=>{const o=Xo(e);return Ol(o,t,!0)})(t.clipboard,t.generators);var s,l;return((e,t,o,n,r)=>{const s=Ko(t),l=((e,t,o)=>{const n=$o(t[0]),r=Vo(t).cols.length+e.row,s=k(n-e.column,(t=>t+e.column));return{row:r,column:L(s,(e=>P(o,(t=>t!==e)))).getOr(n-1)}})(e,t,s),a=Vo(o).rows,c=Gl(l,a,s),i=((e,t,o)=>{if(e.row>=t.length||e.column>$o(t[0]))return Pl.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);const n=t.slice(e.row),r=n[0].cells.slice(e.column),s=$o(o[0]),l=o.length;return Pl.value({rowDelta:n.length-l,colDelta:r.length-s})})(l,t,a);return i.map((e=>{const o={...e,colDelta:e.colDelta-c.length},s=ql(t,o,n),i=Ko(s),m=Gl(l,a,i);return((e,t,o,n,r,s)=>{const l=e.row,a=e.column,c=l+o.length,i=a+$o(o[0])+s.length,m=I(s,x);for(let e=l;eDa(e,C.some(t.element))),(e=>Oa(e,t.row,t.column)))}),((e,t)=>Vt(t.element).bind((o=>El(e,o).map((e=>({...e,generators:t.generators,clipboard:t.clipboard})))))),Aa,f,pa),sc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].column,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Ia(!0),f,f,pa),lc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].column+t.cells[t.cells.length-1].colspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,s)}),Ia(!1),f,f,pa),ac=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].row,l=r[s],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Bl,f,f,pa),cc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].row+t.cells[t.cells.length-1].rowspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,s,t.cells[0].column)}),Bl,f,f,pa),ic=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=M(E(o.all,(e=>B(e.cells,(e=>e.column>=n&&e.column{const o=Xo(e);return zl(o,t).bind(ul).getOr("")},dc=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].row,r=t.row+t.rowspan;return(e=>{const t=E(e,(e=>dl(e).type)),o=D(t,"header"),n=D(t,"footer");if(o||n){const e=D(t,"body");return!o||e||n?o||e||!n?C.none():C.some("footer"):C.some("header")}return C.some("body")})(o.all.slice(n,r))})).getOr("")},uc=(e,t)=>e.dispatch("NewRow",{node:t}),fc=(e,t)=>e.dispatch("NewCell",{node:t}),gc=(e,t,o)=>{e.dispatch("TableModified",{...o,table:t})},hc={structure:!1,style:!0},pc={structure:!0,style:!1},bc={structure:!0,style:!0},wc=(e,t)=>Hr(e)?ur(t):$r(e)?dr(t):mr(t),vc=(e,t,o)=>{const n=e=>"table"===ne(os(e)),r=Wr(e),s=Ir(e)?f:Zs,l=t=>{switch(Mr(e)){case"section":return wl();case"sectionCells":return vl();case"cells":return yl();default:return((e,t)=>{var o;switch((o=Xo(e),V(o.all,(e=>{const t=dl(e);return"header"===t.type?C.from(t.subType):C.none()}))).getOr(t)){case"section":return hl();case"sectionCells":return pl();case"cells":return bl()}})(t,"section")}},a=(n,s,a,c)=>(i,m,d=!1)=>{rs(i);const u=xe.fromDom(e.getDoc()),f=_r(a,u,r),g={sizing:wc(e,i),resize:Ir(e)?sl():ll(),section:l(i)};return s(i)?n(i,m,f,g).bind((n=>{t.refresh(i.dom),N(n.newRows,(t=>{uc(e,t.dom)})),N(n.newCells,(t=>{fc(e,t.dom)}));const r=((t,n)=>n.cursor.fold((()=>{const n=qt(t);return H(n).filter(st).map((n=>{o.clearSelectedCells(t.dom);const r=e.dom.createRng();return r.selectNode(n.dom),e.selection.setRng(r),ge(n,"data-mce-selected","1"),r}))}),(n=>{const r=Qs(Xs,n),s=e.dom.createRng();return s.setStart(r.element.dom,r.offset),s.setEnd(r.element.dom,r.offset),e.selection.setRng(s),o.clearSelectedCells(t.dom),C.some(s)})))(i,n);return st(i)&&(rs(i),d||gc(e,i.dom,c)),r.map((e=>({rng:e,effect:c})))})):C.none()},c=a(Ka,(t=>!n(e)||al(t).rows>1),f,pc),i=a(Ga,(t=>!n(e)||al(t).columns>1),f,pc);return{deleteRow:c,deleteColumn:i,insertRowsBefore:a($a,x,f,pc),insertRowsAfter:a(Va,x,f,pc),insertColumnsBefore:a(qa,x,s,pc),insertColumnsAfter:a(Ua,x,s,pc),mergeCells:a(oc,x,f,pc),unmergeCells:a(nc,x,f,pc),pasteColsBefore:a(sc,x,f,pc),pasteColsAfter:a(lc,x,f,pc),pasteRowsBefore:a(ac,x,f,pc),pasteRowsAfter:a(cc,x,f,pc),pasteCells:a(rc,x,f,bc),makeCellsHeader:a(ec,x,f,pc),unmakeCellsHeader:a(tc,x,f,pc),makeColumnsHeader:a(Ya,x,f,pc),unmakeColumnsHeader:a(Ja,x,f,pc),makeRowsHeader:a(Qa,x,f,pc),makeRowsBody:a(Xa,x,f,pc),makeRowsFooter:a(Za,x,f,pc),getTableRowType:dc,getTableCellType:mc,getTableColType:ic}},yc=(e,t,o)=>{const n=Wt(e,t,1);1===o||n<=1?we(e,t):ge(e,t,Math.min(o,n))},xc=(e,t)=>o=>{const n=o.column+o.colspan-1,r=o.column;return n>=e&&r{const n=o.substring(0,o.length-e.length),r=parseFloat(n);return n===r.toString()?t(r):Cc.invalid(o)},Tc={...Cc,from:e=>Rt(e,"%")?Sc("%",Cc.percent,e):Rt(e,"px")?Sc("px",Cc.pixels,e):Cc.invalid(e)},Rc=(e,t,o)=>{const n=Tc.from(o),r=P(e,(e=>"0px"===e))?((e,t)=>{const o=e.fold((()=>g("")),(e=>g(e/t+"px")),(()=>g(100/t+"%")));return k(t,o)})(n,e.length):((e,t,o)=>e.fold((()=>t),(e=>((e,t,o)=>{const n=o/t;return E(e,(e=>Tc.from(e).fold((()=>e),(e=>e*n+"px"),(e=>e/100*o+"px"))))})(t,o,e)),(e=>((e,t)=>E(e,(e=>Tc.from(e).fold((()=>e),(e=>e/t*100+"%"),(e=>e+"%")))))(t,o))))(n,e,t);return kc(r)},Dc=(e,t)=>0===e.length?t:z(e,((e,t)=>Tc.from(t).fold(g(0),h,h)+e),0),Oc=(e,t)=>Tc.from(e).fold(g(e),(e=>e+t+"px"),(e=>e+t+"%")),kc=e=>{if(0===e.length)return e;const t=z(e,((e,t)=>{const o=Tc.from(t).fold((()=>({value:t,remainder:0})),(e=>(e=>{const t=Math.floor(e);return{value:t+"px",remainder:e-t}})(e)),(e=>({value:e+"%",remainder:0})));return{output:[o.value].concat(e.output),remainder:e.remainder+o.remainder}}),{output:[],remainder:0}),o=t.output;return o.slice(0,o.length-1).concat([Oc(o[o.length-1],Math.round(t.remainder))])},Ec=Tc.from,Nc=(e,t,o)=>{const n=Xo(e),r=n.all,s=nn(n),l=rn(n);t.each((t=>{const o=Ec(t).fold(g("px"),g("px"),g("%")),r=Ao(e),a=((e,t)=>nr(e,t,er,rr))(n,e),c=Rc(a,r,t);sn(n)?((e,t,o)=>{N(t,((t,n)=>{const r=Dc([e[n]],It());Nt(t.element,"width",r+o)}))})(c,l,o):((e,t,o)=>{N(t,(t=>{const n=e.slice(t.column,t.colspan+t.column),r=Dc(n,It());Nt(t.element,"width",r+o)}))})(c,s,o),Nt(e,"width",t)})),o.each((t=>{const o=gn(e),l=((e,t)=>lr(e,t,tr,rr))(n,e);((e,t,o)=>{N(o,(e=>{Lt(e.element,"height")})),N(t,((t,o)=>{Nt(t.element,"height",e[o])}))})(Rc(l,o,t),r,s),Nt(e,"height",t)}))},_c=e=>Un(e).exists((e=>Wn.test(e))),Bc=e=>Un(e).exists((e=>Mn.test(e))),zc=e=>Un(e).isNone(),Ac=e=>{we(e,"width"),we(e,"height")},Lc=e=>{const t=Qn(e);Nc(e,C.some(t),C.none()),Ac(e)},Wc=e=>{const t=(e=>Ao(e)+"px")(e);Nc(e,C.some(t),C.none()),Ac(e)},Mc=e=>{Lt(e,"width");const t=Ut(e),o=t.length>0?t:qt(e);N(o,(e=>{Lt(e,"width"),Ac(e)})),Ac(e)},jc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},Pc=(e,t,o,n)=>k(e,(e=>((e,t,o,n)=>{const r=xe.fromTag("tr");for(let s=0;s{e.selection.select(t.dom,!0),e.selection.collapse(!0)},Fc=(e,t,o,n,s)=>{const l=(e=>{const t=e.options,o=t.get("table_default_styles");return t.isSet("table_default_styles")?o:((e,t)=>Vr(e)||!Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)})(e),a={styles:l,attributes:Kr(e),colGroups:Yr(e)};return e.undoManager.ignore((()=>{const r=((e,t,o,n,r,s=jc)=>{const l=xe.fromTag("table"),a="cells"!==r;_t(l,s.styles),he(l,s.attributes),s.colGroups&&Ie(l,(e=>{const t=xe.fromTag("colgroup");return k(e,(()=>Ie(t,xe.fromTag("col")))),t})(t));const c=Math.min(e,o);if(a&&o>0){const e=xe.fromTag("thead");Ie(l,e);const s=Pc(o,t,"sectionCells"===r?c:0,n);$e(e,s)}const i=xe.fromTag("tbody");Ie(l,i);const m=Pc(a?e-c:e,t,a?0:o,n);return $e(i,m),l})(o,t,s,n,Mr(e),a);ge(r,"data-mce-id","__mce");const l=(e=>{const t=xe.fromTag("div"),o=xe.fromDom(e.dom.cloneNode(!0));return Ie(t,o),(e=>e.dom.innerHTML)(t)})(r);e.insertContent(l),e.addVisual()})),bt(os(e),'table[data-mce-id="__mce"]').map((t=>($r(e)?Wc(t):Vr(e)?Mc(t):(Hr(e)||(e=>r(e)&&-1!==e.indexOf("%"))(l.width))&&Lc(t),rs(t),we(t,"data-mce-id"),((e,t)=>{N(dt(t,"tr"),(t=>{uc(e,t.dom),N(dt(t,"th,td"),(t=>{fc(e,t.dom)}))}))})(e,t),((e,t)=>{bt(t,"td,th").each(b(Ic,e))})(e,t),t.dom))).getOrNull()};var Hc=tinymce.util.Tools.resolve("tinymce.FakeClipboard");const $c="x-tinymce/dom-table-",Vc=$c+"rows",qc=$c+"columns",Uc=e=>{const t=Hc.FakeClipboardItem(e);Hc.write([t])},Gc=e=>{var t;const o=null!==(t=Hc.read())&&void 0!==t?t:[];return V(o,(t=>C.from(t.getType(e))))},Kc=e=>{Gc(e).isSome()&&Hc.clear()},Yc=e=>{e.fold(Qc,(e=>Uc({[Vc]:e})))},Jc=()=>Gc(Vc),Qc=()=>Kc(Vc),Xc=e=>{e.fold(ei,(e=>Uc({[qc]:e})))},Zc=()=>Gc(qc),ei=()=>Kc(qc),ti=e=>$s(ss(e),ns(e)).filter(ds),oi=(e,t)=>{const o=ns(e),n=e=>Gt(e,o),l=t=>(e=>Vs(ss(e),ns(e)).filter(ds))(e).bind((e=>n(e).map((o=>t(o,e))))),a=t=>{e.focus()},c=(t,o=!1)=>l(((n,r)=>{const s=Fs(qs(e),n,r);t(n,s,o).each(a)})),i=()=>l(((t,o)=>((e,t,o)=>{const n=Xo(e);return zl(n,t).bind((e=>{const t=Ol(n,o,!1),r=Vo(t).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),s=j(r,(e=>{const t=B(e.cells,(e=>!e.isLocked));return t.length>0?[{...e,cells:t}]:[]})),l=kl(s);return xt(l.length>0,l)})).map((e=>E(e,(e=>{const t=Ke(e.element);return N(e.cells,(e=>{const o=Ye(e.element);Cl(o,"colspan",e.colspan,1),Cl(o,"rowspan",e.rowspan,1),Ie(t,o)})),t}))))})(t,Fs(qs(e),t,o),_r(f,xe.fromDom(e.getDoc()),C.none())))),m=()=>l(((t,o)=>((e,t)=>{const o=Xo(e);return Al(o,t).map((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=((e,t,o)=>{if(sn(e)){const n=B(rn(e),xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"span",o-t),n})),s=xe.fromTag("colgroup");return $e(s,r),[s]}return[]})(o,n,r),l=((e,t,o)=>E(e.all,(e=>{const n=B(e.cells,xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"colspan",o-t),n})),s=xe.fromTag("tr");return $e(s,r),s})))(o,n,r);return[...s,...l]}))})(t,Fs(qs(e),t,o)))),d=(t,o)=>o().each((o=>{const n=E(o,(e=>Ye(e)));l(((o,r)=>{const s=Br(xe.fromDom(e.getDoc())),l=((e,t,o,n)=>({selection:zs(e),clipboard:o,generators:n}))(qs(e),0,n,s);t(o,l).each(a)}))})),g=e=>(t,o)=>((e,t)=>X(e,t)?C.from(e[t]):C.none())(o,"type").each((t=>{c(e(t),o.no_events)}));G({mceTableSplitCells:()=>c(t.unmergeCells),mceTableMergeCells:()=>c(t.mergeCells),mceTableInsertRowBefore:()=>c(t.insertRowsBefore),mceTableInsertRowAfter:()=>c(t.insertRowsAfter),mceTableInsertColBefore:()=>c(t.insertColumnsBefore),mceTableInsertColAfter:()=>c(t.insertColumnsAfter),mceTableDeleteCol:()=>c(t.deleteColumn),mceTableDeleteRow:()=>c(t.deleteRow),mceTableCutCol:()=>m().each((e=>{Xc(e),c(t.deleteColumn)})),mceTableCutRow:()=>i().each((e=>{Yc(e),c(t.deleteRow)})),mceTableCopyCol:()=>m().each((e=>Xc(e))),mceTableCopyRow:()=>i().each((e=>Yc(e))),mceTablePasteColBefore:()=>d(t.pasteColsBefore,Zc),mceTablePasteColAfter:()=>d(t.pasteColsAfter,Zc),mceTablePasteRowBefore:()=>d(t.pasteRowsBefore,Jc),mceTablePasteRowAfter:()=>d(t.pasteRowsAfter,Jc),mceTableDelete:()=>ti(e).each((t=>{Gt(t,o).filter(w(o)).each((t=>{const o=xe.fromText("");if(je(t,o),qe(t),e.dom.isEmpty(e.getBody()))e.setContent(""),e.selection.setCursorLocation();else{const t=e.dom.createRng();t.setStart(o.dom,0),t.setEnd(o.dom,0),e.selection.setRng(t),e.nodeChanged()}}))})),mceTableCellToggleClass:(t,o)=>{l((t=>{const n=qs(e),r=P(n,(t=>e.formatter.match("tablecellclass",{value:o},t.dom))),s=r?e.formatter.remove:e.formatter.apply;N(n,(e=>s("tablecellclass",{value:o},e.dom))),gc(e,t.dom,hc)}))},mceTableToggleClass:(t,o)=>{l((t=>{e.formatter.toggle("tableclass",{value:o},t.dom),gc(e,t.dom,hc)}))},mceTableToggleCaption:()=>{ti(e).each((t=>{Gt(t,o).each((o=>{pt(o,"caption").fold((()=>{const t=xe.fromTag("caption");Ie(t,xe.fromText("Caption")),((e,t)=>{We(e,0).fold((()=>{Ie(e,t)}),(e=>{Me(e,t)}))})(o,t),e.selection.setCursorLocation(t.dom,0)}),(n=>{ue("caption")(t)&&Te("td",o).each((t=>e.selection.setCursorLocation(t.dom,0))),qe(n)})),gc(e,o.dom,pc)}))}))},mceTableSizingMode:(t,n)=>(t=>ti(e).each((n=>{Vr(e)||$r(e)||Hr(e)||Gt(n,o).each((o=>{"relative"!==t||_c(o)?"fixed"!==t||Bc(o)?"responsive"!==t||zc(o)||Mc(o):Wc(o):Lc(o),rs(o),gc(e,o.dom,pc)}))})))(n),mceTableCellType:g((e=>"th"===e?t.makeCellsHeader:t.unmakeCellsHeader)),mceTableColType:g((e=>"th"===e?t.makeColumnsHeader:t.unmakeColumnsHeader)),mceTableRowType:g((e=>{switch(e){case"header":return t.makeRowsHeader;case"footer":return t.makeRowsFooter;default:return t.makeRowsBody}}))},((t,o)=>e.addCommand(o,t))),e.addCommand("mceInsertTable",((t,o)=>{((e,t,o,n={})=>{const r=e=>u(e)&&e>0;if(r(t)&&r(o)){const r=n.headerRows||0,s=n.headerColumns||0;return Fc(e,o,t,s,r)}console.error("Invalid values for mceInsertTable - rows and columns values are required to insert a table.")})(e,o.rows,o.columns,o.options)})),e.addCommand("mceTableApplyCellStyle",((t,o)=>{const l=e=>"tablecell"+e.toLowerCase().replace("-","");if(!s(o))return;const a=B(qs(e),ds);if(0===a.length)return;const c=((e,t)=>{const o={};return((e,t,o,n)=>{G(e,((e,r)=>{(t(e,r)?o:n)(e,r)}))})(e,t,(e=>(t,o)=>{e[o]=t})(o),f),o})(o,((t,o)=>e.formatter.has(l(o))&&r(t)));(e=>{for(const t in e)if(U.call(e,t))return!1;return!0})(c)||(G(c,((t,o)=>{const n=l(o);N(a,(o=>{""===t?e.formatter.remove(n,{value:null},o.dom,!0):e.formatter.apply(n,{value:t},o.dom)}))})),n(a[0]).each((t=>gc(e,t.dom,hc))))}))},ni=sa([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),ri={before:ni.before,on:ni.on,after:ni.after,cata:(e,t,o,n)=>e.fold(t,o,n),getStart:e=>e.fold(h,h,h)},si=(e,t)=>({selection:e,kill:t}),li=(e,t)=>{const o=e.document.createRange();return o.selectNode(t.dom),o},ai=(e,t)=>{const o=e.document.createRange();return ci(o,t),o},ci=(e,t)=>e.selectNodeContents(t.dom),ii=(e,t,o)=>{const n=e.document.createRange();var r;return r=n,t.fold((e=>{r.setStartBefore(e.dom)}),((e,t)=>{r.setStart(e.dom,t)}),(e=>{r.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},mi=(e,t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},di=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),ui=sa([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),fi=(e,t,o)=>t(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset),gi=(e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:g(e),rtl:C.none}),relative:(t,o)=>({ltr:Zt((()=>ii(e,t,o))),rtl:Zt((()=>C.some(ii(e,o,t))))}),exact:(t,o,n,r)=>({ltr:Zt((()=>mi(e,t,o,n,r))),rtl:Zt((()=>C.some(mi(e,n,r,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>ui.rtl(xe.fromDom(e.endContainer),e.endOffset,xe.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>fi(0,ui.ltr,o))):fi(0,ui.ltr,o)})(0,o)},hi=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},rtl:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(n.dom,r),s.setEnd(t.dom,o),s}});ui.ltr,ui.rtl;const pi=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),bi=(e,t,o,n)=>({start:ri.on(e,t),finish:ri.on(o,n)}),wi=(e,t)=>{const o=hi(e,t);return pi(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset)},vi=bi,yi=(e,t,o,n,r)=>Re(o,n)?C.none():Os(o,n,t).bind((t=>{const n=t.boxes.getOr([]);return n.length>1?(r(e,n,t.start,t.finish),C.some(si(C.some(vi(o,0,o,wr(o))),!0))):C.none()})),xi=(e,t)=>({item:e,mode:t}),Ci=(e,t,o,n=Si)=>e.property().parent(t).map((e=>xi(e,n))),Si=(e,t,o,n=Ti)=>o.sibling(e,t).map((e=>xi(e,n))),Ti=(e,t,o,n=Ti)=>{const r=e.property().children(t);return o.first(r).map((e=>xi(e,n)))},Ri=[{current:Ci,next:Si,fallback:C.none()},{current:Si,next:Ti,fallback:C.some(Ci)},{current:Ti,next:Ti,fallback:C.some(Si)}],Di=(e,t,o,n,r=Ri)=>L(r,(e=>e.current===o)).bind((o=>o.current(e,t,n,o.next).orThunk((()=>o.fallback.bind((o=>Di(e,t,o,n))))))),Oi=(e,t,o,n,r,s)=>Di(e,t,n,r).bind((t=>s(t.item)?C.none():o(t.item)?C.some(t.item):Oi(e,t.item,o,t.mode,r,s))),ki=e=>t=>0===e.property().children(t).length,Ei=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().prevSibling(t),first:e=>e.length>0?C.some(e[e.length-1]):C.none()},n),Ni=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().nextSibling(t),first:e=>e.length>0?C.some(e[0]):C.none()},n),_i=xs(),Bi=(e,t)=>((e,t,o)=>Ei(e,t,ki(e),o))(_i,e,t),zi=(e,t)=>((e,t,o)=>Ni(e,t,ki(e),o))(_i,e,t),Ai=sa([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),Li=e=>wt(e,"tr"),Wi={...Ai,verify:(e,t,o,n,r,s,l)=>wt(n,"td,th",l).bind((o=>wt(t,"td,th",l).map((t=>Re(o,t)?Re(n,o)&&wr(o)===r?s(t):Ai.none("in same cell"):Rs(Li,[o,t]).fold((()=>((e,t,o)=>{const n=e.getRect(t),r=e.getRect(o);return r.right>n.left&&r.lefts(t))))))).getOr(Ai.none("default")),cata:(e,t,o,n,r)=>e.fold(t,o,n,r)},Mi=ue("br"),ji=(e,t,o)=>t(e,o).bind((e=>ie(e)&&0===hr(e).trim().length?ji(e,t,o):C.some(e))),Pi=(e,t,o,n)=>((e,t)=>We(e,t).filter(Mi).orThunk((()=>We(e,t-1).filter(Mi))))(t,o).bind((t=>n.traverse(t).fold((()=>ji(t,n.gather,e).map(n.relative)),(e=>(e=>Ne(e).bind((t=>{const o=Le(t);return((e,t)=>W(e,b(Re,t)))(o,e).map((n=>((e,t,o,n)=>({parent:e,children:t,element:o,index:n}))(t,o,e,n)))})))(e).map((e=>ri.on(e.parent,e.index))))))),Ii=(e,t)=>({left:e.left,top:e.top+t,right:e.right,bottom:e.bottom+t}),Fi=(e,t)=>({left:e.left,top:e.top-t,right:e.right,bottom:e.bottom-t}),Hi=(e,t,o)=>({left:e.left+t,top:e.top+o,right:e.right+t,bottom:e.bottom+o}),$i=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),Vi=(e,t)=>C.some(e.getRect(t)),qi=(e,t,o)=>ce(t)?Vi(e,t).map($i):ie(t)?((e,t,o)=>o>=0&&o0?e.getRangedRect(t,o-1,t,o):C.none())(e,t,o).map($i):C.none(),Ui=(e,t)=>ce(t)?Vi(e,t).map($i):ie(t)?e.getRangedRect(t,0,t,wr(t)).map($i):C.none(),Gi=sa([{none:[]},{retry:["caret"]}]),Ki=(e,t,o)=>gt(t,xa).fold(y,(t=>Ui(e,t).exists((e=>((e,t)=>e.leftt.right)(o,e))))),Yi={point:e=>e.bottom,adjuster:(e,t,o,n,r)=>{const s=Ii(r,5);return Math.abs(o.bottom-n.bottom)<1||o.top>r.bottom?Gi.retry(s):o.top===r.bottom?Gi.retry(Ii(r,1)):Ki(e,t,r)?Gi.retry(Hi(s,5,0)):Gi.none()},move:Ii,gather:zi},Ji=(e,t,o,n,r)=>0===r?C.some(n):((e,t,o)=>e.elementFromPoint(t,o).filter((e=>"table"===ne(e))).isSome())(e,n.left,t.point(n))?((e,t,o,n,r)=>Ji(e,t,o,t.move(n,5),r))(e,t,o,n,r-1):e.situsFromPoint(n.left,t.point(n)).bind((s=>s.start.fold(C.none,(s=>Ui(e,s).bind((l=>t.adjuster(e,s,l,o,n).fold(C.none,(n=>Ji(e,t,o,n,r-1))))).orThunk((()=>C.some(n)))),C.none))),Qi=(e,t,o)=>{const n=e.move(o,5),r=Ji(t,e,o,n,100).getOr(n);return((e,t,o)=>e.point(t)>o.getInnerHeight()?C.some(e.point(t)-o.getInnerHeight()):e.point(t)<0?C.some(-e.point(t)):C.none())(e,r,t).fold((()=>t.situsFromPoint(r.left,e.point(r))),(o=>(t.scrollBy(0,o),t.situsFromPoint(r.left,e.point(r)-o))))},Xi={tryUp:b(Qi,{point:e=>e.top,adjuster:(e,t,o,n,r)=>{const s=Fi(r,5);return Math.abs(o.top-n.top)<1||o.bottome.getSelection().bind((n=>((e,t,o,n)=>{const r=Mi(t)?((e,t,o)=>o.traverse(t).orThunk((()=>ji(t,o.gather,e))).map(o.relative))(e,t,n):Pi(e,t,o,n);return r.map((e=>({start:e,finish:e})))})(t,n.finish,n.foffset,o).fold((()=>C.some(Gs(n.finish,n.foffset))),(r=>{const s=e.fromSitus(r);return l=Wi.verify(e,n.finish,n.foffset,s.finish,s.foffset,o.failure,t),Wi.cata(l,(e=>C.none()),(()=>C.none()),(e=>C.some(Gs(e,0))),(e=>C.some(Gs(e,wr(e)))));var l})))),em=(e,t,o,n,r,s)=>0===s?C.none():nm(e,t,o,n,r).bind((l=>{const a=e.fromSitus(l),c=Wi.verify(e,o,n,a.finish,a.foffset,r.failure,t);return Wi.cata(c,(()=>C.none()),(()=>C.some(l)),(l=>Re(o,l)&&0===n?tm(e,o,n,Fi,r):em(e,t,l,0,r,s-1)),(l=>Re(o,l)&&n===wr(l)?tm(e,o,n,Ii,r):em(e,t,l,wr(l),r,s-1)))})),tm=(e,t,o,n,r)=>qi(e,t,o).bind((t=>om(e,r,n(t,Xi.getJumpSize())))),om=(e,t,o)=>{const n=No().browser;return n.isChromium()||n.isSafari()||n.isFirefox()?t.retry(e,o):C.none()},nm=(e,t,o,n,r)=>qi(e,o,n).bind((t=>om(e,r,t))),rm=(e,t,o,n,r)=>wt(n,"td,th",t).bind((n=>wt(n,"table",t).bind((s=>((e,t)=>ft(e,(e=>Ne(e).exists((e=>Re(e,t)))),void 0).isSome())(r,s)?((e,t,o)=>Zi(e,t,o).bind((n=>em(e,t,n.element,n.offset,o,20).map(e.fromSitus))))(e,t,o).bind((e=>wt(e.finish,"td,th",t).map((t=>({start:n,finish:t,range:e}))))):C.none())))),sm=(e,t,o,n,r,s)=>s(n,t).orThunk((()=>rm(e,t,o,n,r).map((e=>{const t=e.range;return si(C.some(vi(t.start,t.soffset,t.finish,t.foffset)),!0)})))),lm=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[0])?((e,t,o)=>Ei(_i,e,(e=>Cr(e).isSome()),o))(o,0,t).map((e=>{const t=wr(e);return si(C.some(vi(e,t,e,t)),!0)})):C.none()})))),am=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[n.length-1])?((e,t,o)=>Ni(_i,e,(e=>xr(e).isSome()),o))(o,0,t).map((e=>si(C.some(vi(e,0,e,0)),!0))):C.none()})))),cm=(e,t,o,n,r,s,l)=>rm(e,o,n,r,s).bind((e=>yi(t,o,e.start,e.finish,l))),im=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},mm=()=>{const e=(e=>{const t=im(C.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(C.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(C.some(e))}}})(f);return{...e,on:t=>e.get().each(t)}},dm=(e,t)=>wt(e,"td,th",t),um=e=>_e(e).exists(es),fm={traverse:Ae,gather:zi,relative:ri.before,retry:Xi.tryDown,failure:Wi.failedDown},gm={traverse:ze,gather:Bi,relative:ri.before,retry:Xi.tryUp,failure:Wi.failedUp},hm=e=>t=>t===e,pm=hm(38),bm=hm(40),wm=e=>e>=37&&e<=40,vm={isBackward:hm(37),isForward:hm(39)},ym={isBackward:hm(39),isForward:hm(37)},xm=sa([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Cm={domRange:xm.domRange,relative:xm.relative,exact:xm.exact,exactFromRange:e=>xm.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>xe.fromDom(e.startContainer),relative:(e,t)=>ri.getStart(e),exact:(e,t,o,n)=>e}))(e);return xe.fromDom(Ee(t).dom.defaultView)},range:pi},Sm=(e,t)=>{const o=ne(e);return"input"===o?ri.after(e):D(["br","img"],o)?0===t?ri.before(e):ri.after(e):ri.on(e,t)},Tm=e=>C.from(e.getSelection()),Rm=(e,t)=>{Tm(e).each((e=>{e.removeAllRanges(),e.addRange(t)}))},Dm=(e,t,o,n,r)=>{const s=mi(e,t,o,n,r);Rm(e,s)},Om=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{Dm(e,t,o,n,r)},rtl:(t,o,n,r)=>{Tm(e).each((s=>{if(s.setBaseAndExtent)s.setBaseAndExtent(t.dom,o,n.dom,r);else if(s.extend)try{((e,t,o,n,r,s)=>{t.collapse(o.dom,n),t.extend(r.dom,s)})(0,s,t,o,n,r)}catch(s){Dm(e,n,r,t,o)}else Dm(e,n,r,t,o)}))}}),km=(e,t,o,n,r)=>{const s=((e,t,o,n)=>{const r=Sm(e,t),s=Sm(o,n);return Cm.relative(r,s)})(t,o,n,r);Om(e,s)},Em=(e,t,o)=>{const n=((e,t)=>{const o=e.fold(ri.before,Sm,ri.after),n=t.fold(ri.before,Sm,ri.after);return Cm.relative(o,n)})(t,o);Om(e,n)},Nm=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return C.some(pi(xe.fromDom(t.startContainer),t.startOffset,xe.fromDom(o.endContainer),o.endOffset))}return C.none()},_m=e=>{if(null===e.anchorNode||null===e.focusNode)return Nm(e);{const t=xe.fromDom(e.anchorNode),o=xe.fromDom(e.focusNode);return((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=ke(e).dom.createRange();return r.setStart(e.dom,t),r.setEnd(o.dom,n),r})(e,t,o,n),s=Re(e,o)&&t===n;return r.collapsed&&!s})(t,e.anchorOffset,o,e.focusOffset)?C.some(pi(t,e.anchorOffset,o,e.focusOffset)):Nm(e)}},Bm=(e,t,o=!0)=>{const n=(o?ai:li)(e,t);Rm(e,n)},zm=e=>(e=>Tm(e).filter((e=>e.rangeCount>0)).bind(_m))(e).map((e=>Cm.exact(e.start,e.soffset,e.finish,e.foffset))),Am=(e,t,o)=>((e,t,o)=>((e,t,o)=>e.caretPositionFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretPositionFromPoint)||void 0===n?void 0:n.call(e,t,o)).bind((t=>{if(null===t.offsetNode)return C.none();const o=e.createRange();return o.setStart(t.offsetNode,t.offset),o.collapse(),C.some(o)}))})(e,t,o):e.caretRangeFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretRangeFromPoint)||void 0===n?void 0:n.call(e,t,o))})(e,t,o):C.none())(e.document,t,o).map((e=>pi(xe.fromDom(e.startContainer),e.startOffset,xe.fromDom(e.endContainer),e.endOffset))))(e,t,o),Lm=e=>({elementFromPoint:(t,o)=>xe.fromPoint(xe.fromDom(e.document),t,o),getRect:e=>e.dom.getBoundingClientRect(),getRangedRect:(t,o,n,r)=>{const s=Cm.exact(t,o,n,r);return((e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?C.some(o).map(di):C.none()})(hi(e,t)))(e,s)},getSelection:()=>zm(e).map((t=>wi(e,t))),fromSitus:t=>{const o=Cm.relative(t.start,t.finish);return wi(e,o)},situsFromPoint:(t,o)=>Am(e,t,o).map((e=>bi(e.start,e.soffset,e.finish,e.foffset))),clearSelection:()=>{(e=>{Tm(e).each((e=>e.removeAllRanges()))})(e)},collapseSelection:(t=!1)=>{zm(e).each((o=>o.fold((e=>e.collapse(t)),((o,n)=>{const r=t?o:n;Em(e,r,r)}),((o,n,r,s)=>{const l=t?o:r,a=t?n:s;km(e,l,a,l,a)}))))},setSelection:t=>{km(e,t.start,t.soffset,t.finish,t.foffset)},setRelativeSelection:(t,o)=>{Em(e,t,o)},selectNode:t=>{Bm(e,t,!1)},selectContents:t=>{Bm(e,t)},getInnerHeight:()=>e.innerHeight,getScrollY:()=>(e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return bn(o,n)})(xe.fromDom(e.document)).top,scrollBy:(t,o)=>{((e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollBy(e,t)})(t,o,xe.fromDom(e.document))}}),Wm=(e,t)=>({rows:e,cols:t}),Mm=e=>gt(e,ae).exists(es),jm=(e,t)=>Mm(e)||Mm(t),Pm=e=>void 0!==e.dom.classList,Im=(e,t)=>((e,t,o)=>{const n=((e,t)=>{const o=pe(e,t);return void 0===o||""===o?[]:o.split(" ")})(e,t).concat([o]);return ge(e,t,n.join(" ")),!0})(e,"class",t),Fm=(e,t)=>{Pm(e)?e.dom.classList.add(t):Im(e,t)},Hm=(e,t)=>Pm(e)&&e.dom.classList.contains(t),$m=()=>({tag:"none"}),Vm=e=>({tag:"multiple",elements:e}),qm=e=>({tag:"single",element:e}),Um=e=>{const t=xe.fromDom((e=>{if(m(e.target)){const t=xe.fromDom(e.target);if(ce(t)&&m(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return H(t)}}return C.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),r=(s=n,l=o,(...e)=>s(l.apply(null,e)));var s,l;return((e,t,o,n,r,s,l)=>({target:e,x:t,y:o,stop:n,prevent:r,kill:s,raw:l}))(t,e.clientX,e.clientY,o,n,r,e)},Gm=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},Km=x,Ym=(e,t,o)=>((e,t,o,n)=>((e,t,o,n,r)=>{const s=((e,t)=>o=>{e(o)&&t(Um(o))})(o,n);return e.dom.addEventListener(t,s,r),{unbind:b(Gm,e,t,s,r)}})(e,t,o,n,!1))(e,t,Km,o),Jm=Um,Qm=e=>!Hm(xe.fromDom(e.target),"ephox-snooker-resizer-bar"),Xm=(e,t)=>{const o=(r=Is.selectedSelector,{get:()=>_s(xe.fromDom(e.getBody()),r).fold((()=>Vs(ss(e),ns(e)).fold($m,qm)),Vm)}),n=((e,t,o)=>{const n=t=>{we(t,e.selected),we(t,e.firstSelected),we(t,e.lastSelected)},r=t=>{ge(t,e.selected,"1")},s=e=>{l(e),o()},l=t=>{const o=dt(t,`${e.selectedSelector},${e.firstSelectedSelector},${e.lastSelectedSelector}`);N(o,n)};return{clearBeforeUpdate:l,clear:s,selectRange:(o,n,l,a)=>{s(o),N(n,r),ge(l,e.firstSelected,"1"),ge(a,e.lastSelected,"1"),t(n,l,a)},selectedSelector:e.selectedSelector,firstSelectedSelector:e.firstSelectedSelector,lastSelectedSelector:e.lastSelectedSelector}})(Is,((t,o,n)=>{Gt(o).each((r=>{const s=E(t,(e=>e.dom)),l=Wr(e),a=_r(f,xe.fromDom(e.getDoc()),l),c=((e,t,o)=>{const n=Xo(e);return zl(n,t).map((e=>{const t=Ol(n,o,!1),{rows:r}=Vo(t),s=((e,t)=>{const o=e.slice(0,t[t.length-1].row+1),n=kl(o);return j(n,(e=>{const o=e.cells.slice(0,t[t.length-1].column+1);return E(o,(e=>e.element))}))})(r,e),l=((e,t)=>{const o=e.slice(t[0].row+t[0].rowspan-1,e.length),n=kl(o);return j(n,(e=>{const o=e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length);return E(o,(e=>e.element))}))})(r,e);return{upOrLeftCells:s,downOrRightCells:l}}))})(r,{selection:qs(e)},a).map((e=>K(e,(e=>E(e,(e=>e.dom)))))).getOrUndefined();((e,t,o,n,r)=>{e.dispatch("TableSelectionChange",{cells:t,start:o,finish:n,otherCells:r})})(e,s,o.dom,n.dom,c)}))}),(()=>(e=>{e.dispatch("TableSelectionClear")})(e)));var r;return e.on("init",(o=>{const r=e.getWin(),s=os(e),l=ns(e),a=((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=mm(),s=r.clear,l=s=>{r.on((r=>{n.clearBeforeUpdate(t),dm(s.target,o).each((l=>{Os(r,l,o).each((o=>{const r=o.boxes.getOr([]);if(1===r.length){const e=r[0],o="false"===ts(e),l=vt(Zr(s.target),e,Re);o&&l&&n.selectRange(t,r,e,e)}else r.length>1&&(n.selectRange(t,r,o.start,o.finish),e.selectContents(l))}))}))}))};return{clearstate:s,mousedown:e=>{n.clear(t),dm(e.target,o).filter(um).each(r.set)},mouseover:e=>{l(e)},mouseup:e=>{l(e),s()}}})(Lm(e),t,o,n);return{clearstate:r.clearstate,mousedown:r.mousedown,mouseover:r.mouseover,mouseup:r.mouseup}})(r,s,l,n),c=((e,t,o,n)=>{const r=Lm(e),s=()=>(n.clear(t),C.none());return{keydown:(e,l,a,c,i,m)=>{const d=e.raw,u=d.which,f=!0===d.shiftKey,g=ks(t,n.selectedSelector).fold((()=>(wm(u)&&!f&&n.clearBeforeUpdate(t),wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?b(cm,r,t,o,fm,c,l,n.selectRange):pm(u)&&f?b(cm,r,t,o,gm,c,l,n.selectRange):bm(u)?b(sm,r,o,fm,c,l,am):pm(u)?b(sm,r,o,gm,c,l,lm):C.none)),(e=>{const o=o=>()=>{const s=V(o,(o=>((e,t,o,n,r)=>Ns(n,e,t,r.firstSelectedSelector,r.lastSelectedSelector).map((e=>(r.clearBeforeUpdate(o),r.selectRange(o,e.boxes,e.start,e.finish),e.boxes))))(o.rows,o.cols,t,e,n)));return s.fold((()=>Es(t,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>{const o=bm(u)||m.isForward(u)?ri.after:ri.before;return r.setRelativeSelection(ri.on(e.first,0),o(e.table)),n.clear(t),si(C.none(),!0)}))),(e=>C.some(si(C.none(),!0))))};return wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?o([Wm(1,0)]):pm(u)&&f?o([Wm(-1,0)]):m.isBackward(u)&&f?o([Wm(0,-1),Wm(-1,0)]):m.isForward(u)&&f?o([Wm(0,1),Wm(1,0)]):wm(u)&&!f?s:C.none}));return g()},keyup:(e,r,s,l,a)=>ks(t,n.selectedSelector).fold((()=>{const c=e.raw,i=c.which;return!0===c.shiftKey&&wm(i)&&jm(r,l)?((e,t,o,n,r,s,l)=>Re(o,r)&&n===s?C.none():wt(o,"td,th",t).bind((o=>wt(r,"td,th",t).bind((n=>yi(e,t,o,n,l))))))(t,o,r,s,l,a,n.selectRange):C.none()}),C.none)}})(r,s,l,n),i=((e,t,o,n)=>{const r=Lm(e);return(e,s)=>{n.clearBeforeUpdate(t),Os(e,s,o).each((e=>{const o=e.boxes.getOr([]);n.selectRange(t,o,e.start,e.finish),r.selectContents(s),r.collapseSelection()}))}})(r,s,l,n);e.on("TableSelectorChange",(e=>i(e.start,e.finish)));const m=(t,o)=>{(e=>!0===e.raw.shiftKey)(t)&&(o.kill&&t.kill(),o.selection.each((t=>{const o=Cm.relative(t.start,t.finish),n=hi(r,o);e.selection.setRng(n)})))},d=e=>0===e.button,u=(()=>{const e=im(xe.fromDom(s)),t=im(0);return{touchEnd:o=>{const n=xe.fromDom(o.target);if(ue("td")(n)||ue("th")(n)){const r=e.get(),s=t.get();Re(r,n)&&o.timeStamp-s<300&&(o.preventDefault(),i(n,n))}e.set(n),t.set(o.timeStamp)}}})();e.on("dragstart",(e=>{a.clearstate()})),e.on("mousedown",(e=>{d(e)&&Qm(e)&&a.mousedown(Jm(e))})),e.on("mouseover",(e=>{var t;(void 0===(t=e).buttons||1&t.buttons)&&Qm(e)&&a.mouseover(Jm(e))})),e.on("mouseup",(e=>{d(e)&&Qm(e)&&a.mouseup(Jm(e))})),e.on("touchend",u.touchEnd),e.on("keyup",(t=>{const o=Jm(t);if(o.raw.shiftKey&&wm(o.raw.which)){const t=e.selection.getRng(),n=xe.fromDom(t.startContainer),r=xe.fromDom(t.endContainer);c.keyup(o,n,t.startOffset,r,t.endOffset).each((e=>{m(o,e)}))}})),e.on("keydown",(o=>{const n=Jm(o);t.hide();const r=e.selection.getRng(),s=xe.fromDom(r.startContainer),l=xe.fromDom(r.endContainer),a=dn(vm,ym)(xe.fromDom(e.selection.getStart()));c.keydown(n,s,r.startOffset,l,r.endOffset,a).each((e=>{m(n,e)})),t.show()})),e.on("NodeChange",(()=>{const t=e.selection,o=xe.fromDom(t.getStart()),r=xe.fromDom(t.getEnd());Rs(Gt,[o,r]).fold((()=>n.clear(s)),f)}))})),e.on("PreInit",(()=>{e.serializer.addTempAttr(Is.firstSelected),e.serializer.addTempAttr(Is.lastSelected)})),{getSelectedCells:()=>((e,t)=>{switch(e.tag){case"none":return t();case"single":return(e=>[e.dom])(e.element);case"multiple":return(e=>E(e,(e=>e.dom)))(e.elements)}})(o.get(),g([])),clearSelectedCells:e=>n.clear(xe.fromDom(e))}},Zm=e=>{let t=[];return{bind:e=>{if(void 0===e)throw new Error("Event bind error: undefined handler");t.push(e)},unbind:e=>{t=B(t,(t=>t!==e))},trigger:(...o)=>{const n={};N(e,((e,t)=>{n[e]=o[t]})),N(t,(e=>{e(n)}))}}},ed=e=>({registry:K(e,(e=>({bind:e.bind,unbind:e.unbind}))),trigger:K(e,(e=>e.trigger))}),td=e=>e.slice(0).sort(),od=(e,t)=>{const o=B(t,(t=>!D(e,t)));o.length>0&&(e=>{throw new Error("Unsupported keys for object: "+td(e).join(", "))})(o)},nd=e=>((e,t)=>((e,t,o)=>{if(0===t.length)throw new Error("You must specify at least one required field.");return((e,t)=>{if(!l(t))throw new Error("The "+e+" fields must be an array. Was: "+t+".");N(t,(t=>{if(!r(t))throw new Error("The value "+t+" in the "+e+" fields was not a string.")}))})("required",t),(e=>{const t=td(e);L(t,((e,o)=>o{throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}))})(t),n=>{const r=q(n);P(t,(e=>D(r,e)))||((e,t)=>{throw new Error("All required keys ("+td(e).join(", ")+") were not specified. Specified keys were: "+td(t).join(", ")+".")})(t,r),e(t,r);const s=B(t,(e=>!o.validate(n[e],e)));return s.length>0&&((e,t)=>{throw new Error("All values need to be of type: "+t+". Keys ("+td(e).join(", ")+") were not.")})(s,o.label),n}})(e,t,{validate:d,label:"function"}))(od,e),rd=nd(["compare","extract","mutate","sink"]),sd=nd(["element","start","stop","destroy"]),ld=nd(["forceDrop","drop","move","delayDrop"]),ad=()=>{const e=(()=>{const e=ed({move:Zm(["info"])});return{onEvent:f,reset:f,events:e.registry}})(),t=(()=>{let e=C.none();const t=ed({move:Zm(["info"])});return{onEvent:(o,n)=>{n.extract(o).each((o=>{const r=((t,o)=>{const n=e.map((e=>t.compare(e,o)));return e=C.some(o),n})(n,o);r.each((e=>{t.trigger.move(e)}))}))},reset:()=>{e=C.none()},events:t.registry}})();let o=e;return{on:()=>{o.reset(),o=t},off:()=>{o.reset(),o=e},isOn:()=>o===t,onEvent:(e,t)=>{o.onEvent(e,t)},events:t.events}},cd=e=>{const t=e.replace(/\./g,"-");return{resolve:e=>t+"-"+e}},id=cd("ephox-dragster").resolve;var md=rd({compare:(e,t)=>bn(t.left-e.left,t.top-e.top),extract:e=>C.some(bn(e.x,e.y)),sink:(e,t)=>{const o=(e=>{const t={layerClass:id("blocker"),...e},o=xe.fromTag("div");return ge(o,"role","presentation"),_t(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Fm(o,id("blocker")),Fm(o,t.layerClass),{element:g(o),destroy:()=>{qe(o)}}})(t),n=Ym(o.element(),"mousedown",e.forceDrop),r=Ym(o.element(),"mouseup",e.drop),s=Ym(o.element(),"mousemove",e.move),l=Ym(o.element(),"mouseout",e.delayDrop);return sd({element:o.element,start:e=>{Ie(e,o.element())},stop:()=>{qe(o.element())},destroy:()=>{o.destroy(),r.unbind(),s.unbind(),l.unbind(),n.unbind()}})},mutate:(e,t)=>{e.mutate(t.left,t.top)}});const dd=cd("ephox-snooker").resolve,ud=dd("resizer-bar"),fd=dd("resizer-rows"),gd=dd("resizer-cols"),hd=e=>{const t=dt(e.parent(),"."+ud);N(t,qe)},pd=(e,t,o)=>{const n=e.origin();N(t,(t=>{t.each((t=>{const r=o(n,t);Fm(r,ud),Ie(e.parent(),r)}))}))},bd=(e,t,o,n,r)=>{const s=vn(o),l=t.isResizable,a=n.length>0?_n.positions(n,o):[],c=a.length>0?((e,t)=>j(e.all,((e,o)=>t(e.element)?[o]:[])))(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n)=>{const r=xe.fromTag("div");return _t(r,{position:"absolute",left:t+"px",top:o-3.5+"px",height:"7px",width:n+"px"}),he(r,{"data-row":e,role:"presentation"}),r})(t.row,o.left-e.left,t.y-e.top,n);return Fm(r,fd),r}))})(t,B(a,((e,t)=>O(c,(e=>t===e)))),s,Lo(o));const i=r.length>0?zn.positions(r,o):[],m=i.length>0?((e,t)=>{const o=[];return k(e.grid.columns,(n=>{ln(e,n).map((e=>e.element)).forall(t)&&o.push(n)})),B(o,(o=>{const n=on(e,(e=>e.column===o));return P(n,(e=>t(e.element)))}))})(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=xe.fromTag("div");return _t(s,{position:"absolute",left:t-3.5+"px",top:o+"px",height:r+"px",width:"7px"}),he(s,{"data-column":e,role:"presentation"}),s})(t.col,t.x-e.left,o.top-e.top,0,n);return Fm(r,gd),r}))})(t,B(i,((e,t)=>O(m,(e=>t===e)))),s,hn(o))},wd=(e,t)=>{if(hd(e),e.isResizable(t)){const o=Xo(t),n=mn(o),r=an(o);bd(o,e,t,n,r)}},vd=(e,t)=>{const o=dt(e.parent(),"."+ud);N(o,t)},yd=e=>{vd(e,(e=>{Nt(e,"display","none")}))},xd=e=>{vd(e,(e=>{Nt(e,"display","block")}))},Cd=dd("resizer-bar-dragging"),Sd=e=>{const t=(()=>{const e=ed({drag:Zm(["xDelta","yDelta","target"])});let t=C.none();const o=(()=>{const e=ed({drag:Zm(["xDelta","yDelta"])});return{mutate:(t,o)=>{e.trigger.drag(t,o)},events:e.registry}})();return o.events.drag.bind((o=>{t.each((t=>{e.trigger.drag(o.xDelta,o.yDelta,t)}))})),{assign:e=>{t=C.some(e)},get:()=>t,mutate:o.mutate,events:e.registry}})(),o=((e,t={})=>{var o;return((e,t,o)=>{let n=!1;const r=ed({start:Zm([]),stop:Zm([])}),s=ad(),l=()=>{m.stop(),s.isOn()&&(s.off(),r.trigger.stop())},c=(e=>{let t=null;const o=()=>{a(t)||(clearTimeout(t),t=null)};return{cancel:o,throttle:(...n)=>{o(),t=setTimeout((()=>{t=null,e.apply(null,n)}),200)}}})(l);s.events.move.bind((o=>{t.mutate(e,o.info)}));const i=e=>(...t)=>{n&&e.apply(null,t)},m=t.sink(ld({forceDrop:l,drop:i(l),move:i((e=>{c.cancel(),s.onEvent(e,t)})),delayDrop:i(c.throttle)}),o);return{element:m.element,go:e=>{m.start(e),s.on(),r.trigger.start()},on:()=>{n=!0},off:()=>{n=!1},isActive:()=>n,destroy:()=>{m.destroy()},events:r.registry}})(e,null!==(o=t.mode)&&void 0!==o?o:md,t)})(t,{});let n=C.none();const r=(e,t)=>C.from(pe(e,t));t.events.drag.bind((e=>{r(e.target,"data-row").each((t=>{const o=Pt(e.target,"top");Nt(e.target,"top",o+e.yDelta+"px")})),r(e.target,"data-column").each((t=>{const o=Pt(e.target,"left");Nt(e.target,"left",o+e.xDelta+"px")}))}));const s=(e,t)=>Pt(e,t)-Wt(e,"data-initial-"+t,0);o.events.stop.bind((()=>{t.get().each((t=>{n.each((o=>{r(t,"data-row").each((e=>{const n=s(t,"top");we(t,"data-initial-top"),d.trigger.adjustHeight(o,n,parseInt(e,10))})),r(t,"data-column").each((e=>{const n=s(t,"left");we(t,"data-initial-left"),d.trigger.adjustWidth(o,n,parseInt(e,10))})),wd(e,o)}))}))}));const l=(n,r)=>{d.trigger.startAdjust(),t.assign(n),ge(n,"data-initial-"+r,Pt(n,r)),Fm(n,Cd),Nt(n,"opacity","0.2"),o.go(e.dragContainer())},c=Ym(e.parent(),"mousedown",(e=>{var t;t=e.target,Hm(t,fd)&&l(e.target,"top"),(e=>Hm(e,gd))(e.target)&&l(e.target,"left")})),i=t=>Re(t,e.view()),m=Ym(e.view(),"mouseover",(t=>{var r;(r=t.target,wt(r,"table",i).filter(es)).fold((()=>{st(t.target)&&hd(e)}),(t=>{o.isActive()&&(n=C.some(t),wd(e,t))}))})),d=ed({adjustHeight:Zm(["table","delta","row"]),adjustWidth:Zm(["table","delta","column"]),startAdjust:Zm([])});return{destroy:()=>{c.unbind(),m.unbind(),o.destroy(),hd(e)},refresh:t=>{wd(e,t)},on:o.on,off:o.off,hideBars:b(yd,e),showBars:b(xd,e),events:d.registry}};let Td=0;const Rd=(e,t)=>{const o=(e=>!(e=>e.inline&&(e=>{var t;if(!e.inline)return C.none();const o=null!==(t=Jr(e))&&void 0!==t?t:"";if(o.length>0)return bt(lt(),o);const n=Qr(e);return m(n)?C.some(xe.fromDom(n)):C.none()})(e).isSome())(e)&&"split"===Xr(e))(e),n=xe.fromDom(e.getBody()),r=(e=>{const t=(e=>{const t=(new Date).getTime(),o=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return Td++,e+"_"+o+Td+String(t)})("resizer-container"),o=xe.fromTag("div");return ge(o,"id",t),_t(o,{position:e,height:"0",width:"0",padding:"0",margin:"0",border:"0"}),o})(o?"relative":"static"),s=lt();return o?(je(n,r),((e,t,o,n)=>({parent:g(t),view:g(e),dragContainer:g(o),origin:()=>vn(t),isResizable:n}))(n,r,s,t)):(Ie(s,r),((e,t,o)=>({parent:g(t),view:g(e),dragContainer:g(t),origin:g(bn(0,0)),isResizable:o}))(n,r,t))},Dd=e=>m(e)&&"TABLE"===e.nodeName,Od="bar-",kd=e=>"false"!==pe(e,"data-mce-resize"),Ed=e=>{const t=mm(),o=mm(),n=mm();let r,s,l,a;const c=t=>wc(e,t),i=()=>Pr(e)?ll():sl(),m=(t,o,n,m)=>{const d=(e=>{return Tt(t=e,"corner-")?(e=>e.substring(7))(t):t;var t})(o),u=Rt(d,"e"),f=Tt(d,"n");if(""===s&&Lc(t),""===a&&(e=>{const t=(e=>gn(e)+"px")(e);Nc(e,C.none(),C.some(t)),Ac(e)})(t),n!==r&&""!==s){Nt(t,"width",s);const o=i(),l=c(t),a=Pr(e)||u?(e=>al(e).columns)(t)-1:0;ca(t,n-r,a,o,l)}else if((e=>/^(\d+(\.\d+)?)%$/.test(e))(s)){const e=parseFloat(s.replace("%",""));Nt(t,"width",n*e/r+"%")}if((e=>/^(\d+(\.\d+)?)px$/.test(e))(s)&&(e=>{const t=Xo(e);sn(t)||N(qt(e),(e=>{const t=Bt(e,"width");Nt(e,"width",t),we(e,"width")}))})(t),m!==l&&""!==a){Nt(t,"height",a);const e=f?0:(e=>al(e).rows)(t)-1;ia(t,m-l,e)}};e.on("init",(()=>{const r=((e,t)=>e.inline?Rd(e,t):((e,t)=>{const o=me(e)?(e=>xe.fromDom(Ee(e).dom.documentElement))(e):e;return{parent:g(o),view:g(e),dragContainer:g(o),origin:g(bn(0,0)),isResizable:t}})(xe.fromDom(e.getDoc()),t))(e,kd);if(n.set(r),(e=>{const t=e.options.get("object_resizing");return D(t.split(","),"table")})(e)&&qr(e)){const n=((e,t,o)=>{const n=_n,r=zn,s=Sd(e),l=ed({beforeResize:Zm(["table","type"]),afterResize:Zm(["table","type"]),startDrag:Zm([])});return s.events.adjustHeight.bind((e=>{const t=e.table;l.trigger.beforeResize(t,"row");const o=n.delta(e.delta,t);ia(t,o,e.row),l.trigger.afterResize(t,"row")})),s.events.startAdjust.bind((e=>{l.trigger.startDrag()})),s.events.adjustWidth.bind((e=>{const n=e.table;l.trigger.beforeResize(n,"col");const s=r.delta(e.delta,n),a=o(n);ca(n,s,e.column,t,a),l.trigger.afterResize(n,"col")})),{on:s.on,off:s.off,refreshBars:s.refresh,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:l.registry}})(r,i(),c);e.mode.isReadOnly()||n.on(),n.events.startDrag.bind((o=>{t.set(e.selection.getRng())})),n.events.beforeResize.bind((t=>{const o=t.table.dom;((e,t,o,n,r)=>{e.dispatch("ObjectResizeStart",{target:t,width:o,height:n,origin:r})})(e,o,ls(o),as(o),Od+t.type)})),n.events.afterResize.bind((o=>{const n=o.table,r=n.dom;rs(n),t.on((t=>{e.selection.setRng(t),e.focus()})),((e,t,o,n,r)=>{e.dispatch("ObjectResized",{target:t,width:o,height:n,origin:r})})(e,r,ls(r),as(r),Od+o.type),e.undoManager.add()})),o.set(n)}})),e.on("ObjectResizeStart",(t=>{const o=t.target;if(Dd(o)&&!e.mode.isReadOnly()){const n=xe.fromDom(o);N(e.dom.select(".mce-clonedresizable"),(t=>{e.dom.addClass(t,"mce-"+jr(e)+"-columns")})),!Bc(n)&&$r(e)?Wc(n):!_c(n)&&Hr(e)&&Lc(n),zc(n)&&Tt(t.origin,Od)&&Lc(n),r=t.width,s=Vr(e)?"":is(e,o).getOr(""),l=t.height,a=ms(e,o).getOr("")}})),e.on("ObjectResized",(t=>{const o=t.target;if(Dd(o)){const n=xe.fromDom(o),r=t.origin;(e=>Tt(e,"corner-"))(r)&&m(n,r,t.width,t.height),rs(n),gc(e,n.dom,hc)}}));const d=()=>{o.on((e=>{e.on(),e.showBars()}))},u=()=>{o.on((e=>{e.off(),e.hideBars()}))};return e.on("DisabledStateChange",(e=>{e.state?u():d()})),e.on("SwitchMode",(()=>{e.mode.isReadOnly()?u():d()})),e.on("dragstart dragend",(e=>{"dragstart"===e.type?u():d()})),e.on("remove",(()=>{o.on((e=>{e.destroy()})),n.on((t=>{((e,t)=>{e.inline&&qe(t.parent())})(e,t)}))})),{refresh:e=>{o.on((t=>t.refreshBars(xe.fromDom(e))))},hide:()=>{o.on((e=>e.hideBars()))},show:()=>{o.on((e=>e.showBars()))}}},Nd=e=>{(e=>{const t=e.options.register;t("table_clone_elements",{processor:"string[]"}),t("table_use_colgroups",{processor:"boolean",default:!0}),t("table_header_type",{processor:e=>{const t=D(["section","cells","sectionCells","auto"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be one of: section, cells, sectionCells or auto."}},default:"section"}),t("table_sizing_mode",{processor:"string",default:"auto"}),t("table_default_attributes",{processor:"object",default:{border:"1"}}),t("table_default_styles",{processor:"object",default:{"border-collapse":"collapse"}}),t("table_column_resizing",{processor:e=>{const t=D(["preservetable","resizetable"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be preservetable, or resizetable."}},default:"preservetable"}),t("table_resize_bars",{processor:"boolean",default:!0}),t("table_style_by_css",{processor:"boolean",default:!0}),t("table_merge_content_on_paste",{processor:"boolean",default:!0})})(e);const t=Ed(e),o=Xm(e,t),n=vc(e,t,o);return oi(e,n),((e,t)=>{const o=ns(e),n=t=>Vs(ss(e)).bind((n=>Gt(n,o).map((o=>{const r=Fs(qs(e),o,n);return t(o,r)})))).getOr("");G({mceTableRowType:()=>n(t.getTableRowType),mceTableCellType:()=>n(t.getTableCellType),mceTableColType:()=>n(t.getTableColType)},((t,o)=>e.addQueryValueHandler(o,t)))})(e,n),Us(e,n),{getSelectedCells:o.getSelectedCells,clearSelectedCells:o.clearSelectedCells}};e.add("dom",(e=>({table:Nd(e)})))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/accordion/plugin.min.js b/staticfiles/tinymce/plugins/accordion/plugin.min.js new file mode 100644 index 0000000..3c88604 --- /dev/null +++ b/staticfiles/tinymce/plugins/accordion/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const o=e=>t=>typeof t===e,n=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(e),r=o("boolean"),s=e=>null==e,i=e=>!s(e),a=o("function"),d=o("number"),l=e=>()=>e,c=(e,t)=>e===t,m=l(!1);class u{constructor(e,t){this.tag=e,this.value=t}static some(e){return new u(!0,e)}static none(){return u.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?u.some(e(this.value)):u.none()}bind(e){return this.tag?e(this.value):u.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:u.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return i(e)?u.some(e):u.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}u.singletonNone=new u(!1);const g=Array.prototype.indexOf,p=(e,t)=>{return o=e,n=t,g.call(o,n)>-1;var o,n},h=(e,t)=>{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;oe.dom.nodeName.toLowerCase(),w=e=>e.dom.nodeType,b=e=>t=>w(t)===e,N=b(1),T=b(3),A=b(9),C=b(11),S=(e,t,o)=>{if(!(n(o)||r(o)||d(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},x=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},D=(e,t)=>u.from(x(e,t)),E=(e,t)=>{e.dom.removeAttribute(t)},O=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},M={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return O(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return O(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return O(o)},fromDom:O,fromPoint:(e,t,o)=>u.from(e.dom.elementFromPoint(t,o)).map(O)},P=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},R=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,k=P,B=(L=/^\s+|\s+$/g,e=>e.replace(L,""));var L;const $=e=>void 0!==e.style&&a(e.style.getPropertyValue),V=e=>u.from(e.dom.parentNode).map(M.fromDom),I=e=>u.from(e.dom.nextSibling).map(M.fromDom),j=e=>h(e.dom.childNodes,M.fromDom),q=e=>M.fromDom(e.dom.host),F=e=>{const t=T(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=(e=>M.fromDom(e.dom.getRootNode()))(e);return C(o=t)&&i(o.dom.host)?u.some(t):u.none();var o})(M.fromDom(t)).fold((()=>o.body.contains(t)),(n=F,r=q,e=>n(r(e))));var n,r},H=(e,t)=>$(e)?e.style.getPropertyValue(t):"",z=(e,t)=>{V(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},K=(e,t)=>{I(e).fold((()=>{V(e).each((e=>{U(e,t)}))}),(e=>{z(e,t)}))},U=(e,t)=>{e.dom.appendChild(t.dom)},Y=(e,t)=>{f(t,((o,n)=>{const r=0===n?e:t[n-1];K(r,o)}))},_=(e,t)=>{let o=[];return f(j(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(_(e,t))})),o},G=(e,t,o)=>{let n=e.dom;const r=a(o)?o:m;for(;n.parentNode;){n=n.parentNode;const e=M.fromDom(n);if(t(e))return u.some(e);if(r(e))break}return u.none()},J=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Q=(e,t,o)=>G(e,(e=>P(e,t)),o),W=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?u.none():u.from(o.querySelector(e)).map(M.fromDom)})(t,e),X=(e=>{const t=t=>e(t)?u.from(t.dom.nodeValue):u.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(T);var Z=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];const ee=(e,t)=>({element:e,offset:t}),te=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>te(e,t,o).orThunk((()=>u.some(t))))):u.none(),oe=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,ne=(e,t)=>{const o=te(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return ee(o,oe(e,o));const n=e.property().children(o);return n.length>0?ne(e,n[n.length-1]):ee(o,oe(e,o))},re=ne,se={up:l({selector:Q,closest:(e,t,o)=>((e,t,o,n,r)=>((e,t)=>P(e,t))(o,n)?u.some(o):a(r)&&r(o)?u.none():t(o,n,r))(0,Q,e,t,o),predicate:G,all:(e,t)=>{const o=a(t)?t:m;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=M.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r}}),down:l({selector:(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?[]:h(o.querySelectorAll(e),M.fromDom)})(t,e),predicate:_}),styles:l({get:(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||F(e)?n:H(o,t)},getRaw:(e,t)=>{const o=e.dom,n=H(o,t);return u.from(n).filter((e=>e.length>0))},set:(e,t,o)=>{((e,t,o)=>{if(!n(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);$(e)&&e.style.setProperty(t,o)})(e.dom,t,o)},remove:(e,t)=>{((e,t)=>{$(e)&&e.style.removeProperty(t)})(e.dom,t),((e,t,o=c)=>e.exists((e=>o(e,t))))(D(e,"style").map(B),"")&&E(e,"style")}}),attrs:l({get:x,set:(e,t,o)=>{S(e.dom,t,o)},remove:E,copyTo:(e,t)=>{const o=(n=e.dom.attributes,r=(e,t)=>(e[t.name]=t.value,e),s={},f(n,((e,t)=>{s=r(s,e)})),s);var n,r,s;((e,t)=>{const o=e.dom;((e,t)=>{const o=y(e);for(let n=0,r=o.length;n{S(o,t,e)}))})(t,o)}}),insert:l({before:z,after:K,afterAll:Y,append:U,appendAll:(e,t)=>{f(t,(t=>{U(e,t)}))},prepend:(e,t)=>{(e=>(e=>{const t=e.dom.childNodes;return u.from(t[0]).map(M.fromDom)})(e))(e).fold((()=>{U(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},wrap:(e,t)=>{z(e,t),U(t,e)}}),remove:l({unwrap:e=>{const t=j(e);t.length>0&&Y(e,t),J(e)},remove:J}),create:l({nu:M.fromTag,clone:e=>M.fromDom(e.dom.cloneNode(!1)),text:M.fromText}),query:l({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:e=>u.from(e.dom.previousSibling).map(M.fromDom),nextSibling:I}),property:l({children:j,name:v,parent:V,document:e=>{return(t=e,A(t)?t:M.fromDom(t.dom.ownerDocument)).dom;var t},isText:T,isComment:e=>8===w(e)||"#comment"===v(e),isElement:N,isSpecial:e=>{const t=v(e);return p(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>N(e)?D(e,"lang"):u.none(),getText:e=>X.get(e),setText:(e,t)=>X.set(e,t),isBoundary:e=>!!N(e)&&("body"===v(e)||p(Z,v(e))),isEmptyTag:e=>!!N(e)&&p(["br","img","hr","input"],v(e)),isNonEditable:e=>N(e)&&"false"===x(e,"contenteditable")}),eq:(e,t)=>e.dom===t.dom,is:k},ie="details",ae="mce-accordion",de="mce-accordion-summary",le="mce-accordion-body",ce="div";var me=tinymce.util.Tools.resolve("tinymce.util.Tools");const ue=e=>"SUMMARY"===(null==e?void 0:e.nodeName),ge=e=>"DETAILS"===(null==e?void 0:e.nodeName),pe=e=>e.hasAttribute("open"),he=e=>{const t=e.selection.getNode();return ue(t)||Boolean(e.dom.getParent(t,ue))},fe=e=>!he(e)&&e.dom.isEditable(e.selection.getNode())&&!e.mode.isReadOnly(),ye=e=>u.from(e.dom.getParent(e.selection.getNode(),ge)),ve=e=>(e.innerHTML='
          ',e),we=e=>ve(e.dom.create("p")),be=e=>t=>{((e,t)=>{if(ue(null==t?void 0:t.lastChild)){const o=we(e);t.appendChild(o),e.selection.setCursorLocation(o,0)}})(e,t),((e,t)=>{if(!ue(null==t?void 0:t.firstChild)){const o=(e=>ve(e.dom.create("summary")))(e);t.prepend(o),e.selection.setCursorLocation(o,0)}})(e,t)},Ne=e=>{if(!fe(e))return;const o=M.fromDom(e.getBody()),n=(e=>{const o=(new Date).getTime(),n=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+n+t+String(o)})("acc"),r=e.dom.encode(e.selection.getRng().toString()||e.translate("Accordion summary...")),s=e.dom.encode(e.translate("Accordion body...")),i=`${r}`,a=`<${ce} class="${le}">

          ${s}

          `;e.undoManager.transact((()=>{e.insertContent([`
          `,i,a,"
          "].join("")),W(o,`[data-mce-id="${n}"]`).each((t=>{E(t,"data-mce-id"),W(t,"summary").each((t=>{const o=e.dom.createRng(),n=re(se,t);o.setStart(n.element.dom,n.offset),o.setEnd(n.element.dom,n.offset),e.selection.setRng(o)}))}))}))},Te=(e,t)=>{const o=null!=t?t:!pe(e);return o?e.setAttribute("open","open"):e.removeAttribute("open"),o},Ae=e=>{e.addCommand("InsertAccordion",(()=>Ne(e))),e.addCommand("ToggleAccordion",((t,o)=>((e,t)=>{ye(e).each((o=>{((e,t,o)=>{e.dispatch("ToggledAccordion",{element:t,state:o})})(e,o,Te(o,t))}))})(e,o))),e.addCommand("ToggleAllAccordions",((t,o)=>((e,t)=>{const o=Array.from(e.getBody().querySelectorAll("details"));0!==o.length&&(f(o,(e=>Te(e,null!=t?t:!pe(e)))),((e,t,o)=>{e.dispatch("ToggledAllAccordions",{elements:t,state:o})})(e,o,t))})(e,o))),e.addCommand("RemoveAccordion",(()=>(e=>{e.mode.isReadOnly()||ye(e).each((t=>{const{nextSibling:o}=t;o?(e.selection.select(o,!0),e.selection.collapse(!0)):((e,t)=>{const o=we(e);t.insertAdjacentElement("afterend",o),e.selection.setCursorLocation(o,0)})(e,t),t.remove()}))})(e)))};var Ce=tinymce.util.Tools.resolve("tinymce.html.Node");const Se=e=>{var t,o;return null!==(o=null===(t=e.attr("class"))||void 0===t?void 0:t.split(" "))&&void 0!==o?o:[]},xe=(e,t)=>{const o=new Set([...Se(e),...t]),n=Array.from(o);n.length>0&&e.attr("class",n.join(" "))},De=(e,t)=>{const o=(e=>{const o=[];for(let r=0,s=e.length;r0?o.join(" "):null)},Ee=e=>e.name===ie&&p(Se(e),ae),Oe=e=>{const t=e.children();let o,n;const r=[];for(let e=0;e{const t=new Ce("br",1);t.attr("data-mce-bogus","1"),e.empty(),e.append(t)};var Pe=tinymce.util.Tools.resolve("tinymce.util.VK");const Re=e=>{(e=>{e.on("keydown",(t=>{(!t.shiftKey&&t.keyCode===Pe.ENTER&&he(e)||(e=>{const t=e.selection.getRng();return ge(t.startContainer)&&t.collapsed&&0===t.startOffset})(e))&&(t.preventDefault(),e.execCommand("ToggleAccordion"))}))})(e),e.on("ExecCommand",(t=>{const o=t.command.toLowerCase();"delete"!==o&&"forwarddelete"!==o||!(e=>ye(e).isSome())(e)||(e=>{me.each(me.grep(e.dom.select("details",e.getBody())),be(e))})(e)}))};var ke=tinymce.util.Tools.resolve("tinymce.Env");const Be=e=>t=>{const o=()=>t.setEnabled(fe(e));return e.on("NodeChange",o),()=>e.off("NodeChange",o)};e.add("accordion",(e=>{(e=>{const t=()=>e.execCommand("InsertAccordion");e.ui.registry.addButton("accordion",{icon:"accordion",tooltip:"Insert accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addMenuItem("accordion",{icon:"accordion",text:"Accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addToggleButton("accordiontoggle",{icon:"accordion-toggle",tooltip:"Toggle accordion",onAction:()=>e.execCommand("ToggleAccordion")}),e.ui.registry.addToggleButton("accordionremove",{icon:"remove",tooltip:"Delete accordion",onAction:()=>e.execCommand("RemoveAccordion")}),e.ui.registry.addContextToolbar("accordion",{predicate:t=>e.dom.is(t,"details")&&e.getBody().contains(t)&&e.dom.isEditable(t.parentNode),items:"accordiontoggle accordionremove",scope:"node",position:"node"})})(e),Ae(e),Re(e),(e=>{e.on("PreInit",(()=>{const{serializer:t,parser:o}=e;o.addNodeFilter(ie,(e=>{for(let t=0;t0)for(let e=0;e{const t=new Set([de]);for(let o=0;o{ke.browser.isSafari()&&e.on("click",(t=>{if(ue(t.target)){const o=t.target,n=e.selection.getRng();n.collapsed&&n.startContainer===o.parentNode&&0===n.startOffset&&e.selection.setCursorLocation(o,0)}}))})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/advlist/plugin.min.js b/staticfiles/tinymce/plugins/advlist/plugin.min.js new file mode 100644 index 0000000..781711d --- /dev/null +++ b/staticfiles/tinymce/plugins/advlist/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);class o{constructor(t,e){this.tag=t,this.value=e}static some(t){return new o(!0,t)}static none(){return o.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?o.some(t(this.value)):o.none()}bind(t){return this.tag?t(this.value):o.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:o.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?o.some(t):o.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}o.singletonNone=new o(!1);const a=Array.prototype.indexOf,u=Object.keys;var d=tinymce.util.Tools.resolve("tinymce.util.Tools");const c=t=>e=>i(e)&&t.test(e.nodeName),h=c(/^(OL|UL|DL)$/),g=c(/^(TH|TD)$/),p=t=>l(t)||"default"===t?"":t,m=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;ee.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)||!t.selection.isEditable()})(t,n))})(t,r.parents))),v=(t,s,r,n,l,i)=>{const c={"lower-latin":"lower-alpha","upper-latin":"upper-alpha","lower-alpha":"lower-latin","upper-alpha":"upper-latin"},h=(g=t=>{return e=i,s=t,a.call(e,s)>-1;var e,s},((t,e)=>{const s={};return((t,e)=>{const s=u(t);for(let r=0,n=s.length;r{const n=e(t,r);s[n.k]=n.v})),s})(c,((t,e)=>({k:e,v:g(t)}))));var g;t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(d.map(i,(t=>{const e="OL"===l?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=p(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,l,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return o.from(s)})(t);return s.exists((t=>e===t||c[t]===e&&!h[e]))},onSetup:m(t,l)})},y=(t,s,r,n,l,i)=>{i.length>1?v(t,s,r,n,l,i):((t,s,r,n,l,i)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:m(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,s,r,n,l,p(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{y(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),y(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the List Styles plugin.")}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/anchor/plugin.min.js b/staticfiles/tinymce/plugins/anchor/plugin.min.js new file mode 100644 index 0000000..3c944ed --- /dev/null +++ b/staticfiles/tinymce/plugins/anchor/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>e.options.get("allow_html_in_named_anchor");const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;ot=>{const o=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",o),o(),()=>{e.off("NodeChange",o)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>{const o=e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind,n=u(e)(t);return()=>{o(),n()}}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t,onSetup:u(e)})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/autolink/plugin.min.js b/staticfiles/tinymce/plugins/autolink/plugin.min.js new file mode 100644 index 0000000..ba87c86 --- /dev/null +++ b/staticfiles/tinymce/plugins/autolink/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e);const l=e=>undefined===e;const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]")||e.mode.isReadOnly())return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/autoresize/plugin.min.js b/staticfiles/tinymce/plugins/autoresize/plugin.min.js new file mode 100644 index 0000000..1f5e37f --- /dev/null +++ b/staticfiles/tinymce/plugins/autoresize/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),n=o("min_height"),s=o("max_height"),i=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),g=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},l=(e,t,o,n)=>{var s;const i=parseInt(null!==(s=e.getStyle(t,o,n))&&void 0!==s?s:"",10);return isNaN(i)?0:i},a=(e,o,r,c)=>{var d;const u=e.dom,h=e.getDoc();if(!h)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void g(e,!0);const m=h.documentElement,f=c?c():i(e),p=null!==(d=n(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=l(u,m,"margin-top",!0),v=l(u,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+f;C<0&&(C=0);const H=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+H>p&&(y=C+H);const b=s(e);b&&y>b?(y=b,g(e,!0)):g(e,!1);const w=o.get();if(w.set&&(e.dom.setStyles(e.getDoc().documentElement,{"min-height":0}),e.dom.setStyles(e.getBody(),{"min-height":"inherit"})),y!==w.totalHeight&&(C-f!==w.contentHeight||!w.set)){const n=y-w.totalHeight;if(u.setStyle(e.getContainer(),"height",y+"px"),o.set({totalHeight:y,contentHeight:C,set:!0}),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&n<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(()=>{let e={totalHeight:0,contentHeight:0,set:!1};return{get:()=>e,set:t=>{e=t}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{const n=()=>r(e);e.on("init",(s=>{const r=i(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,s,n)})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{a(e,o,t,n)}))})(e,o)}}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/autosave/plugin.min.js b/staticfiles/tinymce/plugins/autosave/plugin.min.js new file mode 100644 index 0000000..354d42e --- /dev/null +++ b/staticfiles/tinymce/plugins/autosave/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t);const r=t=>undefined===t;var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},y=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},g=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{const r=()=>f(t)&&!t.mode.isReadOnly();e.setEnabled(r());const o=()=>e.setEnabled(r());return t.on("StoreDraft RestoreDraft RemoveDraft",o),()=>t.off("StoreDraft RestoreDraft RemoveDraft",o)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{y(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{g(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&g(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>y(t),restoreDraft:()=>g(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/charmap/plugin.min.js b/staticfiles/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 0000000..cd905e6 --- /dev/null +++ b/staticfiles/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=(e,t)=>{const r=((e,t)=>e.dispatch("insertCustomChar",{chr:t}))(e,t).chr;e.execCommand("mceInsertContent",!1,r)},r=e=>t=>e===t,a=e=>"array"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(n=String).prototype.isPrototypeOf(r)||(null===(i=a.constructor)||void 0===i?void 0:i.name)===n.name)?"string":t;var r,a,n,i})(e);const n=r(null),i=r(void 0),o=e=>"function"==typeof e,s=()=>false;class l{constructor(e,t){this.tag=e,this.value=t}static some(e){return new l(!0,e)}static none(){return l.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?l.some(e(this.value)):l.none()}bind(e){return this.tag?e(this.value):l.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:l.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?l.none():l.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}l.singletonNone=new l(!1);const c=Array.prototype.push,u=(e,t)=>{const r=e.length,a=new Array(r);for(let n=0;nt=>t.options.get(e),m=h("charmap"),p=h("charmap_append"),d=g.isArray,f="User Defined",y=e=>{return d(e)?(t=e,g.grep(t,(e=>d(e)&&2===e.length))):"function"==typeof e?e():[];var t},b=e=>{const t=((e,t)=>{const r=m(e);r&&(t=[{name:f,characters:y(r)}]);const a=p(e);if(a){const e=g.grep(t,(e=>e.name===f));return e.length?(e[0].characters=[...e[0].characters,...y(a)],t):t.concat({name:f,characters:y(a)})}return t})(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return t.length>1?[{name:"All",characters:(r=t,n=e=>e.characters,(e=>{const t=[];for(let r=0,n=e.length;r{let t=e;return{get:()=>t,set:e=>{t=e}}},v=(e,t,r=0,a)=>{const n=e.indexOf(t,r);return-1!==n&&(!!i(a)||n+t.length<=a)},k=String.fromCodePoint,C=(e,t)=>{const r=[],a=t.toLowerCase();return(e=>{for(let n=0,i=e.length;n!!v(k(e).toLowerCase(),r)||v(t.toLowerCase(),r)||v(t.toLowerCase().replace(/\s+/g,""),r))((t=e[n])[0],t[1],a)&&r.push(t);var t})(e.characters),u(r,(e=>({text:e[1],value:k(e[0]),icon:k(e[0])})))},x="pattern",A=(e,r)=>{const a=()=>[{label:"Search",type:"input",name:x},{type:"collection",name:"results"}],i=1===r.length?w(f):w("All"),o=(e=>{let t=null;const r=()=>{n(t)||(clearTimeout(t),t=null)};return{cancel:r,throttle:(...a)=>{r(),t=setTimeout((()=>{t=null,e.apply(null,a)}),40)}}})((e=>{const t=e.getData().pattern;((e,t)=>{var a,n;(a=r,n=e=>e.name===i.get(),((e,t,r)=>{for(let a=0,n=e.length;a{const a=C(r,t);e.setData({results:a})}))})(e,t)})),c={title:"Special Character",size:"normal",body:1===r.length?{type:"panel",items:a()}:{type:"tabpanel",tabs:u(r,(e=>({title:e.name,name:e.name,items:a()})))},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:C(r[0],"")},onAction:(r,a)=>{"results"===a.name&&(t(e,a.value),r.close())},onTabChange:(e,t)=>{i.set(t.newTabName),o.throttle(e)},onChange:(e,t)=>{t.name===x&&o.throttle(e)}};e.windowManager.open(c).focus(x)},q=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("charmap",(e=>{(e=>{const t=e.options.register,r=e=>o(e)||a(e);t("charmap",{processor:r}),t("charmap_append",{processor:r})})(e);const r=b(e);return((e,t)=>{e.addCommand("mceShowCharmap",(()=>{A(e,t)}))})(e,r),(e=>{const t=()=>e.execCommand("mceShowCharmap");e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:t,onSetup:q(e)}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:t,onSetup:q(e)})})(e),((e,t)=>{e.ui.registry.addAutocompleter("charmap",{trigger:":",columns:"auto",minChars:2,fetch:(e,r)=>new Promise(((r,a)=>{r(C(t,e))})),onAction:(t,r,a)=>{e.selection.setRng(r),e.insertContent(a),t.hide()}})})(e,r[0]),(e=>({getCharMap:()=>b(e),insertChar:r=>{t(e,r)}}))(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/code/plugin.min.js b/staticfiles/tinymce/plugins/code/plugin.min.js new file mode 100644 index 0000000..54a780c --- /dev/null +++ b/staticfiles/tinymce/plugins/code/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/codesample/plugin.min.js b/staticfiles/tinymce/plugins/codesample/plugin.min.js new file mode 100644 index 0000000..2283bb9 --- /dev/null +++ b/staticfiles/tinymce/plugins/codesample/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>!(e=>null==e)(e),n=()=>{};class a{constructor(e,t){this.tag=e,this.value=t}static some(e){return new a(!0,e)}static none(){return a.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?a.some(e(this.value)):a.none()}bind(e){return this.tag?e(this.value):a.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:a.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return t(e)?a.some(e):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);var s=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");const r="undefined"!=typeof window?window:Function("return this;")(),i=function(){const e=window.Prism;window.Prism={manual:!0};var t=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},s={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=_.value.length,_=_.next){var F=_.value;if(t.length>e.length)return;if(!(F instanceof r)){var A,S=1;if(y){if(!(A=i(v,x,e,m))||A.index>=e.length)break;var $=A.index,z=A.index+A[0].length,E=x;for(E+=_.value.length;$>=E;)E+=(_=_.next).value.length;if(x=E-=_.value.length,_.value instanceof r)continue;for(var C=_;C!==t.tail&&(Ed.reach&&(d.reach=O);var P=_.prev;if(B&&(P=u(t,P,B),x+=B.length),c(t,P,S),_=u(t,P,new r(g,f?s.tokenize(j,f):j,w,j)),T&&u(t,_,T),S>1){var N={cause:g+","+b,reach:O};o(e,t,n,_.prev,x,N),d&&N.reach>d.reach&&(d.reach=N.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){var a=t.next,s={value:n,prev:t,next:a};return t.next=s,a.prev=s,e.length++,s}function c(e,t,n){for(var a=t.next,s=0;s"+r.content+""},!e.document)return e.addEventListener?(s.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,r=n.code,i=n.immediateClose;e.postMessage(s.highlight(r,s.languages[a],a)),i&&e.close()}),!1),s):s;var d=s.util.currentScript();function g(){s.manual||s.highlightAll()}if(d&&(s.filename=d.src,d.hasAttribute("data-manual")&&(s.manual=!0)),!s.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});return t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,(function(e){if("function"==typeof r&&!r(e))return e;for(var s,o=i.length;-1!==n.code.indexOf(s=t(a,o));)++o;return i[o]=e,s})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);!function i(o){for(var l=0;l=r.length);l++){var u=o[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=r[s],d=n.tokenStack[c],g="string"==typeof u?u:u.content,p=t(a,c),b=g.indexOf(p);if(b>-1){++s;var h=g.substring(0,b),f=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),m=g.substring(b+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(f),m&&y.push.apply(y,i([m])),"string"==typeof u?o.splice.apply(o,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return o}(n.tokens)}}}})}(t),t.languages.c=t.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),t.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),t.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},t.languages.c.string],char:t.languages.c.char,comment:t.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:t.languages.c}}}}),t.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete t.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(t),function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var s="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(r),c=RegExp(l(s+" "+r+" "+i+" "+o)),d=l(r+" "+i+" "+o),g=l(s+" "+r+" "+o),p=a(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),b=a(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,f=t(/<<0>>(?:\s*<<1>>)?/.source,[h,p]),m=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[m,y]),k=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,b,y]),v=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),_=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,m,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,A=/"(?:\\.|[^\\"\r\n])*"/.source,S=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:x},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,g,h]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,m]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,p]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(p),alias:"class-name",inside:x}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,h,_,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var $=A+"|"+F,z=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[$]),E=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),C=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,j=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[m,E]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[C,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[C]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[E]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var B=/:[^}\r\n]+/.source,T=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),O=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,B]),P=a(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[$]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[P,B]);function R(t,a){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[a,B]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,T)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:R(N,P)}],char:{pattern:RegExp(F),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(t),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(t),function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(t),t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(e,n){var a={};a["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[n]},a.cdata=/^$/i;var s={"included-cdata":{pattern://i,inside:a}};s["language-"+n]={pattern:/[\s\S]+/,inside:t.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:s},t.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(e,n){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:t.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(t),t.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.python["string-interpolation"].inside.interpolation.inside.rest=t.languages.python,t.languages.py=t.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(t),window.Prism=e,t}(),o=e=>t=>t.options.get(e),l=o("codesample_languages"),u=o("codesample_global_prismjs"),c=e=>r.Prism&&u(e)?r.Prism:i,d=e=>t(e)&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-"),g=e=>{const t=e.selection?e.selection.getNode():null;return d(t)?a.some(t):a.none()},p=e=>{const t=(e=>l(e)||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}])(e),n=(r=t,(e=>0""),(e=>e.value));var r;const i=((e,t)=>g(e).fold((()=>t),(e=>{const n=e.className.match(/language-(\w+)/);return n?n[1]:t})))(e,n),o=(e=>g(e).bind((e=>a.from(e.textContent))).getOr(""))(e);e.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"listbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:i,code:o},onSubmit:t=>{const n=t.getData();((e,t,n)=>{const a=e.dom;e.undoManager.transact((()=>{const r=g(e);return n=s.DOM.encode(n),r.fold((()=>{e.insertContent('
          '+n+"
          ");const s=a.select("#__new")[0];a.setAttrib(s,"id",null),e.selection.select(s)}),(s=>{a.setAttrib(s,"class","language-"+t),s.innerHTML=n,c(e).highlightElement(s),e.selection.select(s)}))}))})(e,n.language,n.code),t.close()}})},b=(h=/^\s+|\s+$/g,e=>e.replace(h,""));var h,f=tinymce.util.Tools.resolve("tinymce.util.Tools");const m=(e,t=n)=>n=>{const a=()=>{n.setEnabled(e.selection.isEditable()),t(n)};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("codesample",(e=>{(e=>{const t=e.options.register;t("codesample_languages",{processor:"object[]"}),t("codesample_global_prismjs",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreProcess",(t=>{const n=e.dom,a=n.select("pre[contenteditable=false]",t.node);f.each(f.grep(a,d),(e=>{const t=e.textContent;let a;for(n.setAttrib(e,"class",b(n.getAttrib(e,"class"))),n.setAttrib(e,"contentEditable",null),n.setAttrib(e,"data-mce-highlighted",null);a=e.firstChild;)e.removeChild(a);n.add(e,"code").textContent=t}))})),e.on("SetContent",(()=>{const t=e.dom,n=f.grep(t.select("pre"),(e=>d(e)&&"true"!==t.getAttrib(e,"data-mce-highlighted")));n.length&&e.undoManager.transact((()=>{f.each(n,(n=>{var a;f.each(t.select("br",n),(n=>{t.replace(e.getDoc().createTextNode("\n"),n)})),n.innerHTML=t.encode(null!==(a=n.textContent)&&void 0!==a?a:""),c(e).highlightElement(n),t.setAttrib(n,"data-mce-highlighted",!0),n.className=b(n.className)}))}))})),e.on("PreInit",(()=>{e.parser.addNodeFilter("pre",(e=>{var t;for(let n=0,a=e.length;n{const t=()=>e.execCommand("codesample");e.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:t,onSetup:m(e,(t=>{t.setActive((e=>{const t=e.selection.getStart();return e.dom.is(t,'pre[class*="language-"]')})(e))}))}),e.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:t,onSetup:m(e)})})(e),(e=>{e.addCommand("codesample",(()=>{const t=e.selection.getNode();e.selection.isCollapsed()||d(t)?p(e):e.formatter.toggle("code")}))})(e),e.on("dblclick",(t=>{d(t.target)&&p(e)}))}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/directionality/plugin.min.js b/staticfiles/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 0000000..a4f3780 --- /dev/null +++ b/staticfiles/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=()=>false;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},p=t=>d(t.dom.host),w=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=(t=>d(t.dom.getRootNode()))(t);return v(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=w,i=p,t=>r(i(t))));var r,i},b=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||w(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",S=(t,e)=>(t=>((t,e)=>{const o=[];for(let r=0,n=t.length;r{const o=t.length,r=new Array(o);for(let n=0;nh(t,e))))(t),N=t=>g(t)&&"li"===t.dom.nodeName.toLowerCase();const A=(t,e,n)=>{u(e,(e=>{const c=d(e),m=N(c),f=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(c,m);var v;(v=f,(t=>a.from(t.dom.parentNode).map(d))(v).filter(g)).each((e=>{if(t.setStyle(f.dom,"direction",null),b(e)===n?y(f,"dir"):((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(f,"dir",n),b(f)!==n&&t.setStyle(f.dom,"direction",n),m){const e=S(f,"li[dir],li[style]");u(e,(e=>{y(e,"dir"),t.setStyle(e.dom,"direction",null)}))}}))}))},T=(t,e)=>{t.selection.isEditable()&&(A(t.dom,t.selection.getSelectedBlocks(),e),t.nodeChanged())},C=(t,e)=>o=>{const r=r=>{const n=d(r.element);o.setActive(b(n)===e),o.setEnabled(t.selection.isEditable())};return t.on("NodeChange",r),o.setEnabled(t.selection.isEditable()),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{T(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{T(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:C(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:C(t,"rtl")})})(t)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/emoticons/js/emojiimages.js b/staticfiles/tinymce/plugins/emoticons/js/emojiimages.js new file mode 100644 index 0000000..6fcec71 --- /dev/null +++ b/staticfiles/tinymce/plugins/emoticons/js/emojiimages.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'💯',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'🔢',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'😀',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'😬',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'😁',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'😂',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'🤣',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'🥳',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'😃',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'😄',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'😅',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'😆',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'😇',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'😉',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'😊',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'🙂',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'🙃',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'☺️',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'😋',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'😌',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'😍',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'🥰',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😘',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'😗',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'😙',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😚',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'😜',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'🤪',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'🤨',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'🧐',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'😝',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'😛',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'🤑',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'🤓',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'😎',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'🤩',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'🤡',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'🤠',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'🤗',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'😏',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'😶',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'😐',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'😑',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'😒',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'🙄',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'🤔',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'🤥',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'🤭',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'🤫',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'🤬',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'🤯',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'😳',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'😞',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'😟',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'😠',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'😡',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'😔',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'😕',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'🙁',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'☹',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'😣',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'😖',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'😫',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'😩',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'🥺',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'😤',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'😮',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'😱',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'😨',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'😰',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'😯',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'😦',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'😧',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'😢',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'😥',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'🤤',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'😪',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'😓',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'🥵',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'🥶',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'😭',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'😵',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'😲',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'🤐',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'🤢',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'🤧',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'🤮',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'😷',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'🤒',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'🤕',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'🥴',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'😴',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'💤',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'💩',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'😈',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'👿',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'👹',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'👺',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'💀',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'👻',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'👽',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'🤖',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'😺',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'😸',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'😹',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'😻',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'😼',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'😽',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'🙀',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'😿',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'😾',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'🤲',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'🙌',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'👏',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'👋',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'🤙',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'👍',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'👎',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'👊',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'✊',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'🤛',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'🤜',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'✌',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'👌',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'✋',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'🤚',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'👐',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'💪',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'🙏',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'🦶',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'🦵',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'🤝',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'☝',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'👆',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'👇',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'👈',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'👉',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'🖕',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'🖐',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'🤟',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'🤘',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'🤞',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'🖖',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'✍',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'🤳',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'💅',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'👄',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'🦷',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'👅',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'👂',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'👃',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'👁',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'👀',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'🧠',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'👤',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'👥',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'🗣',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'👶',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'🧒',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'👦',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'👧',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'🧑',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'👨',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'👩',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'👱‍♀️',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'👱',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'🧔',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'🧓',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'👴',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'👵',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'👲',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'🧕',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'👳‍♀️',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'👳',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'👮‍♀️',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'👮',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'👷‍♀️',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'👷',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'💂‍♀️',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'💂',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'🕵️‍♀️',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'🕵',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'👩‍⚕️',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'👨‍⚕️',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'👩‍🌾',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'👨‍🌾',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'👩‍🍳',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'👨‍🍳',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'👩‍🎓',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'👨‍🎓',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'👩‍🎤',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'👨‍🎤',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'👩‍🏫',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'👨‍🏫',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'👩‍🏭',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'👨‍🏭',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'👩‍💻',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'👨‍💻',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'👩‍💼',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'👨‍💼',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'👩‍🔧',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'👨‍🔧',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'👩‍🔬',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'👨‍🔬',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'👩‍🎨',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'👨‍🎨',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'👩‍🚒',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'👨‍🚒',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'👩‍✈️',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'👨‍✈️',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'👩‍🚀',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'👨‍🚀',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'👩‍⚖️',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'👨‍⚖️',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'🦸‍♀️',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'🦸‍♂️',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'🦹‍♀️',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'🦹‍♂️',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'🤶',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'🎅',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'🧙‍♀️',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'🧙‍♂️',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'🧝‍♀️',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'🧝‍♂️',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'🧛‍♀️',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'🧛‍♂️',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'🧟‍♀️',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'🧟‍♂️',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'🧞‍♀️',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'🧞‍♂️',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'🧜‍♀️',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'🧜‍♂️',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'🧚‍♀️',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'🧚‍♂️',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'👼',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'🤰',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'🤱',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'👸',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'🤴',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'👰',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'🤵',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'🏃‍♀️',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'🏃',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'🚶‍♀️',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'🚶',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'💃',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'🕺',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'👯',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'👯‍♂️',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'👫',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'👬',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'👭',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'🙇‍♀️',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'🙇',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'🤦‍♂️',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'🤦‍♀️',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'🤷',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'🤷‍♂️',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'💁',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'💁‍♂️',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'🙅',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'🙅‍♂️',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'🙆',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'🙆‍♂️',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'🙋',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'🙋‍♂️',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'🙎',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'🙎‍♂️',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'🙍',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'🙍‍♂️',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'💇',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'💇‍♂️',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'💆',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'💆‍♂️',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'🧖‍♀️',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'🧖‍♂️',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'💑',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👩‍❤️‍👩',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👨‍❤️‍👨',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'💏',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👩‍❤️‍💋‍👩',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👨‍❤️‍💋‍👨',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'👪',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'👨‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'🧶',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'🧵',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'🧥',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'🥼',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'👚',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'👕',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'👖',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'👔',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'👗',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'👙',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'👘',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'💄',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'💋',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'👣',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'🥿',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'👠',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'👡',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'👢',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'👞',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'👟',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'🥾',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'🧦',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'🧤',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'🧣',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'👒',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'🎩',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'🧢',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'⛑',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'🎓',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'👑',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'🎒',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'🧳',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'👝',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'👛',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'👜',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'💼',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'👓',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'🕶',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'🥽',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'💍',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'🌂',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'🐶',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'🐱',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'🐭',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'🐹',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'🐰',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'🦊',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'🐻',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'🐼',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'🐨',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'🐯',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'🦁',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐮',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'🐷',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'🐽',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'🐸',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'🦑',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'🐙',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'🦐',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'🐵',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'🦍',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'🙈',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'🙉',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'🙊',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'🐒',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'🐔',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'🐧',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'🐦',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'🐤',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'🐣',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'🐥',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'🦆',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'🦅',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'🦉',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'🦇',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'🐺',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'🐗',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'🐴',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'🦄',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'🐝',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'🐛',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'🦋',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'🐌',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'🐞',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'🐜',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'🦗',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'🕷',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'🦂',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'🦀',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'🐍',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'🦎',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'🦖',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'🦕',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'🐢',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'🐠',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'🐟',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'🐡',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'🐬',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'🦈',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'🐳',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'🐋',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'🐊',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'🐆',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'🦓',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'🐅',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'🐃',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'🐂',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐄',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'🦌',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'🐪',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'🐫',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'🦒',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'🐘',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'🦏',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'🐐',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'🐏',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'🐑',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'🐎',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'🐖',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'🐀',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'🐁',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'🐓',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'🦃',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'🕊',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'🐕',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'🐩',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'🐈',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'🐇',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'🐿',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'🦔',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'🦝',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'🦙',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'🦛',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'🦘',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'🦡',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'🦢',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'🦚',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'🦜',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'🦞',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'🦟',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'🐾',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'🐉',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'🐲',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'🌵',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'🎄',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'🌲',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'🌳',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'🌴',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'🌱',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'🌿',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'☘',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'🍀',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'🎍',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'🎋',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'🍃',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'🍂',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'🍁',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'🌾',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'🌺',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'🌻',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'🌹',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'🥀',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'🌷',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'🌼',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'🌸',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'💐',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'🍄',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'🌰',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'🎃',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'🐚',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'🕸',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'🌎',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'🌍',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'🌏',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'🌕',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'🌖',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌗',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌘',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌑',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌒',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌓',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'🌔',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌚',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌝',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌛',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌜',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'🌞',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'🌙',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'⭐',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'🌟',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'💫',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'✨',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'☄',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'☀️',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'🌤',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'⛅',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'🌥',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'🌦',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'☁️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'🌧',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'⛈',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'🌩',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'⚡',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'🔥',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'💥',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'❄️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'🌨',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'⛄',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'☃',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'🌬',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'💨',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'🌪',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'🌫',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'☂',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'☔',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'💧',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'💦',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'🌊',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'🍏',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'🍎',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'🍐',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'🍊',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'🍋',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'🍌',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'🍉',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'🍇',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'🍓',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'🍈',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'🍒',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'🍑',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'🍍',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'🥥',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'🥝',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'🥭',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'🥑',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'🥦',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'🍅',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'🍆',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'🥒',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'🥕',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'🌶',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'🥔',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'🌽',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'🥬',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'🍠',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'🥜',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'🍯',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'🥐',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'🍞',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'🥖',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'🥯',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'🥨',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'🧀',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'🥚',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'🥓',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'🥩',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'🥞',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'🍗',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'🍖',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'🦴',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'🍤',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'🍳',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'🍔',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'🍟',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'🥙',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'🌭',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'🍕',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'🥪',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'🥫',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'🍝',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'🌮',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'🌯',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'🥗',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'🥘',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'🍜',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'🍲',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'🍥',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'🥠',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'🍣',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'🍱',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'🍛',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'🍙',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'🍚',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'🍘',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'🍢',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'🍡',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'🍧',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'🍨',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'🍦',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'🥧',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'🍰',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'🧁',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'🥮',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'🎂',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'🍮',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'🍬',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'🍭',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'🍫',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'🍿',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'🥟',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'🍩',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'🍪',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'🥛',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍺',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍻',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'🥂',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'🍷',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'🥃',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'🍸',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'🍹',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'🍾',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'🍶',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'🍵',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'🥤',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'☕',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'🍼',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'🧂',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'🥄',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'🍴',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'🍽',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'🥣',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'🥡',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'🥢',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'⚽',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'🏀',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'🏈',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'⚾',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'🥎',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'🎾',fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:'🏐',fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:'🏉',fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'🥏',fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'🎱',fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'⛳',fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'🏌️‍♀️',fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:'🏌',fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'🏓',fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:'🏸',fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:'🥅',fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:'🏒',fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:'🏑',fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'🥍',fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:'🏏',fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'🎿',fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'⛷',fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'🏂',fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'🤺',fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♀️',fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♂️',fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♀️',fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♂️',fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'🤾‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:'🤾‍♂️',fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:'⛸',fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:'🥌',fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:'🛹',fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'🛷',fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'🏹',fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'🎣',fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'🥊',fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'🥋',fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'🚣‍♀️',fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'🚣',fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'🧗‍♀️',fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'🧗‍♂️',fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'🏊‍♀️',fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'🏊',fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♂️',fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♀️',fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♂️',fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'🏄‍♀️',fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'🏄',fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'🛀',fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'⛹️‍♀️',fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:'⛹',fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'🏋️‍♀️',fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'🏋',fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'🚴‍♀️',fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'🚴',fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'🚵‍♀️',fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'🚵',fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'🏇',fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'🕴',fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'🏆',fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'🎽',fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:'🏅',fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'🎖',fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'🥇',fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'🥈',fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'🥉',fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'🎗',fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'🏵',fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'🎫',fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'🎟',fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'🎭',fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'🎨',fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'🎪',fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♀️',fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♂️',fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'🎤',fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'🎧',fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'🎼',fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'🎹',fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'🥁',fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'🎷',fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:'🎺',fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:'🎸',fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'🎻',fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:'🎬',fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'🎮',fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'👾',fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'🎯',fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'🎲',fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'🎰',fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'🧩',fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'🎳',fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'🚗',fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'🚕',fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'🚙',fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'🚌',fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'🚎',fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'🏎',fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'🚓',fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'🚑',fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'🚒',fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'🚐',fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'🚚',fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'🚛',fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'🚜',fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'🛴',fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'🏍',fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'🚲',fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'🛵',fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'🚨',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'🚔',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'🚍',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'🚘',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'🚖',fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'🚡',fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'🚠',fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'🚟',fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'🚃',fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'🚋',fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'🚝',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'🚄',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'🚅',fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'🚈',fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'🚞',fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'🚂',fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'🚆',fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'🚇',fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'🚊',fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'🚉',fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'🛸',fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'🚁',fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'🛩',fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'✈️',fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'🛫',fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'🛬',fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'⛵',fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'🛥',fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'🚤',fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'⛴',fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'🛳',fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'🚀',fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'🛰',fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'💺',fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'🛶',fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'⚓',fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'🚧',fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'⛽',fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'🚏',fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'🚦',fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'🚥',fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'🏁',fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'🚢',fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'🎡',fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'🎢',fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'🎠',fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'🏗',fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'🌁',fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'🗼',fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'🏭',fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'⛲',fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'🎑',fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'⛰',fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'🏔',fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'🗻',fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'🌋',fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'🗾',fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'🏕',fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'⛺',fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'🏞',fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'🛣',fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'🛤',fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'🌅',fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'🌄',fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'🏜',fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'🏖',fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'🏝',fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'🌇',fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'🌆',fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'🏙',fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'🌃',fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'🌉',fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'🌌',fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'🌠',fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'🎇',fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'🎆',fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'🌈',fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'🏘',fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'🏰',fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'🏯',fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'🏟',fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'🗽',fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:'🏠',fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'🏡',fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'🏚',fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'🏢',fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'🏬',fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'🏣',fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'🏤',fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'🏥',fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'🏦',fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'🏨',fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'🏪',fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'🏫',fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'🏩',fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'💒',fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'🏛',fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'⛪',fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'🕌',fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'🕍',fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'🕋',fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'⛩',fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'⌚',fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'📱',fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:'📲',fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'💻',fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'⌨',fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'🖥',fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:'🖨',fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:'🖱',fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'🖲',fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:'🕹',fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:'🗜',fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'💽',fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'💾',fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'💿',fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'📀',fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'📼',fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:'📷',fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'📸',fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:'📹',fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:'🎥',fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'📽',fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:'🎞',fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'📞',fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'☎️',fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'📟',fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:'📠',fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'📺',fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'📻',fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'🎙',fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:'🎚',fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:'🎛',fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'🧭',fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'⏱',fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:'⏲',fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'⏰',fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'🕰',fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'⏳',fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'⌛',fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'📡',fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'🔋',fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:'🔌',fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'💡',fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'🔦',fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:'🕯',fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'🧯',fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'🗑',fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:'🛢',fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'💸',fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'💵',fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'💴',fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'💶',fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'💷',fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'💰',fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'💳',fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'💎',fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'⚖',fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'🧰',fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'🔧',fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:'🔨',fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'⚒',fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'🛠',fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:'⛏',fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'🔩',fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:'⚙',fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:'🧱',fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:'⛓',fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'🧲',fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'🔫',fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'💣',fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'🧨',fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'🔪',fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:'🗡',fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:'⚔',fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:'🛡',fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'🚬',fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'☠',fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'⚰',fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'⚱',fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:'🏺',fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'🔮',fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'📿',fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'🧿',fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:'💈',fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'⚗',fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'🔭',fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'🔬',fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:'🕳',fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'💊',fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'💉',fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'🧬',fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'🦠',fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'🧫',fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'🧪',fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'🌡',fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'🧹',fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:'🧺',fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:'🧻',fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:'🏷',fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'🔖',fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'🚽',fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'🚿',fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'🛁',fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'🧼',fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'🧽',fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'🧴',fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:'🔑',fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:'🗝',fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'🛋',fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'🛌',fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:'🛏',fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:'🚪',fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:'🛎',fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'🧸',fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:'🖼',fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:'🗺',fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'⛱',fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'🗿',fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'🛍',fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:'🛒',fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'🎈',fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'🎏',fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'🎀',fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'🎁',fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'🎊',fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'🎉',fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'🎎',fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'🎐',fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'🎌',fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'🏮',fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:'🧧',fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'✉️',fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'📩',fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'📨',fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'📧',fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'💌',fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'📮',fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'📪',fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'📫',fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'📬',fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'📭',fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'📦',fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'📯',fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'📥',fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'📤',fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'📜',fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'📃',fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'📑',fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'🧾',fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'📊',fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'📈',fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'📉',fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'📄',fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:'📅',fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'📆',fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'🗓',fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:'📇',fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'🗃',fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:'🗳',fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'🗄',fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'📋',fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'🗒',fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'📁',fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'📂',fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'🗂',fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'🗞',fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:'📰',fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'📓',fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'📕',fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'📗',fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'📘',fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'📙',fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'📔',fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:'📒',fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:'📚',fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'📖',fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:'🧷',fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:'🔗',fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'📎',fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'🖇',fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:'✂️',fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'📐',fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'📏',fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:'🧮',fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'📌',fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'📍',fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'🚩',fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'🏳',fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:'🏴',fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'🏳️‍🌈',fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'🔐',fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:'🔒',fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:'🔓',fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'🔏',fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'🖊',fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'🖋',fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'✒️',fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'📝',fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'✏️',fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'🖍',fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'🖌',fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'🔍',fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'🔎',fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:'❤️',fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'🧡',fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'💛',fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'💚',fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'💙',fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'💜',fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:'🖤',fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'💔',fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'❣',fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'💕',fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'💞',fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'💓',fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'💗',fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'💖',fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'💘',fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'💝',fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'💟',fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'☮',fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:'✝',fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'☪',fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'🕉',fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'☸',fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:'✡',fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'🔯',fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'🕎',fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:'☯',fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'☦',fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'🛐',fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'⛎',fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'♈',fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'♉',fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'♊',fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'♋',fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'♌',fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'♍',fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'♎',fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'♏',fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'♐',fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'♑',fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'♒',fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'♓',fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:'🆔',fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'⚛',fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'🈳',fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'🈹',fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'☢',fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:'☣',fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'📴',fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'📳',fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'🈶',fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'🈚',fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'🈸',fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'🈺',fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'🈷️',fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'✴️',fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:'🆚',fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'🉑',fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'💮',fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'🉐',fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'㊙️',fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'㊗️',fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'🈴',fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'🈵',fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'🈲',fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'🅰️',fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'🅱️',fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'🆎',fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'🆑',fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'🅾️',fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'🆘',fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'⛔',fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'📛',fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'🚫',fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'❌',fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:'⭕',fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:'🛑',fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:'💢',fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'♨️',fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'🚷',fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'🚯',fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'🚳',fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'🚱',fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'🔞',fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'📵',fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'❗',fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'❕',fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:'❓',fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'❔',fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'‼️',fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'⁉️',fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'🔅',fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'🔆',fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:'🔱',fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'⚜',fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'〽️',fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'⚠️',fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'🚸',fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:'🔰',fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'♻️',fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'🈯',fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'💹',fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'❇️',fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'✳️',fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'❎',fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'✅',fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'💠',fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'🌀',fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:'➿',fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'🌐',fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'Ⓜ️',fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'🏧',fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'🈂️',fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'🛂',fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'🛃',fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'🛄',fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'🛅',fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'♿',fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'🚭',fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'🚾',fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'🅿️',fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'🚰',fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'🚹',fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'🚺',fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'🚼',fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'🚻',fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'🚮',fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'🎦',fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'📶',fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'🈁',fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'🆖',fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'🆗',fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'🆙',fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:'🆒',fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'🆕',fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:'🆓',fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0️⃣',fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1️⃣',fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2️⃣',fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3️⃣',fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4️⃣',fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5️⃣',fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6️⃣',fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7️⃣',fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8️⃣',fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9️⃣',fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'🔟',fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*⃣',fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:'⏏️',fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'▶️',fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'⏸',fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'⏭',fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:'⏹',fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:'⏺',fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'⏯',fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:'⏮',fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'⏩',fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'⏪',fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'🔀',fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:'🔁',fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'🔂',fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'◀️',fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'🔼',fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'🔽',fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'⏫',fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'⏬',fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'➡️',fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'⬅️',fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'⬆️',fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'⬇️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'↗️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'↘️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'↙️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'↖️',fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'↕️',fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'↔️',fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'🔄',fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'↪️',fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'↩️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'⤴️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'⤵️',fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#️⃣',fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'ℹ️',fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'🔤',fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'🔡',fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'🔠',fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'🔣',fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'🎵',fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:'🎶',fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'〰️',fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'➰',fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'✔️',fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'🔃',fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'➕',fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'➖',fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'➗',fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'✖️',fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:'♾',fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'💲',fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'💱',fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'©️',fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'®️',fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'™️',fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:'🔚',fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:'🔙',fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:'🔛',fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:'🔝',fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:'🔜',fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'☑️',fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'🔘',fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:'⚪',fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'⚫',fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'🔴',fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'🔵',fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔸',fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔹',fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔶',fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔷',fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'🔺',fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'▪️',fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'▫️',fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'⬛',fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'⬜',fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'🔻',fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'◼️',fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'◻️',fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'◾',fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'◽',fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'🔲',fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'🔳',fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'🔈',fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'🔉',fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'🔊',fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'🔇',fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'📣',fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'📢',fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'🔔',fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'🔕',fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'🃏',fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'🀄',fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'♠️',fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'♣️',fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'♥️',fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'♦️',fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'🎴',fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'💭',fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'🗯',fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'💬',fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'🗨',fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'🕐',fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'🕑',fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'🕒',fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'🕓',fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'🕔',fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'🕕',fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'🕖',fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'🕗',fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'🕘',fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'🕙',fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'🕚',fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'🕛',fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'🕜',fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'🕝',fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'🕞',fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'🕟',fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'🕠',fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'🕡',fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'🕢',fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'🕣',fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'🕤',fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'🕥',fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'🕦',fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'🕧',fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'🇦🇫',fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:'🇦🇽',fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'🇦🇱',fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'🇩🇿',fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'🇦🇸',fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'🇦🇩',fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'🇦🇴',fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'🇦🇮',fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'🇦🇶',fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'🇦🇬',fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'🇦🇷',fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'🇦🇲',fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'🇦🇼',fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'🇦🇺',fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'🇦🇹',fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'🇦🇿',fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'🇧🇸',fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'🇧🇭',fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'🇧🇩',fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'🇧🇧',fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'🇧🇾',fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'🇧🇪',fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'🇧🇿',fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'🇧🇯',fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'🇧🇲',fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'🇧🇹',fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'🇧🇴',fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'🇧🇶',fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'🇧🇦',fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'🇧🇼',fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'🇧🇷',fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'🇮🇴',fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'🇻🇬',fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'🇧🇳',fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'🇧🇬',fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'🇧🇫',fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'🇧🇮',fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'🇨🇻',fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'🇰🇭',fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'🇨🇲',fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'🇨🇦',fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'🇮🇨',fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'🇰🇾',fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'🇨🇫',fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'🇹🇩',fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'🇨🇱',fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'🇨🇳',fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'🇨🇽',fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'🇨🇨',fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'🇨🇴',fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'🇰🇲',fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'🇨🇬',fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'🇨🇩',fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'🇨🇰',fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'🇨🇷',fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'🇭🇷',fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'🇨🇺',fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:'🇨🇼',fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'🇨🇾',fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'🇨🇿',fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'🇩🇰',fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'🇩🇯',fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'🇩🇲',fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'🇩🇴',fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'🇪🇨',fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'🇪🇬',fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'🇸🇻',fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'🇬🇶',fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'🇪🇷',fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'🇪🇪',fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'🇪🇹',fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'🇪🇺',fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'🇫🇰',fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'🇫🇴',fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'🇫🇯',fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'🇫🇮',fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'🇫🇷',fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'🇬🇫',fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'🇵🇫',fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'🇹🇫',fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'🇬🇦',fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'🇬🇲',fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'🇬🇪',fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'🇩🇪',fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'🇬🇭',fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'🇬🇮',fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'🇬🇷',fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'🇬🇱',fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'🇬🇩',fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'🇬🇵',fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'🇬🇺',fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'🇬🇹',fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'🇬🇬',fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'🇬🇳',fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'🇬🇼',fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'🇬🇾',fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'🇭🇹',fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'🇭🇳',fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'🇭🇰',fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'🇭🇺',fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'🇮🇸',fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'🇮🇳',fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'🇮🇩',fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'🇮🇷',fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'🇮🇶',fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'🇮🇪',fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'🇮🇲',fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'🇮🇱',fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'🇮🇹',fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'🇨🇮',fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'🇯🇲',fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'🇯🇵',fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'🇯🇪',fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'🇯🇴',fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'🇰🇿',fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'🇰🇪',fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'🇰🇮',fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'🇽🇰',fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'🇰🇼',fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'🇰🇬',fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'🇱🇦',fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'🇱🇻',fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'🇱🇧',fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'🇱🇸',fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'🇱🇷',fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'🇱🇾',fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'🇱🇮',fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'🇱🇹',fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'🇱🇺',fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'🇲🇴',fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'🇲🇰',fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'🇲🇬',fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'🇲🇼',fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'🇲🇾',fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'🇲🇻',fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'🇲🇱',fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'🇲🇹',fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'🇲🇭',fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'🇲🇶',fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'🇲🇷',fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'🇲🇺',fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'🇾🇹',fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'🇲🇽',fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'🇫🇲',fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'🇲🇩',fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'🇲🇨',fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'🇲🇳',fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'🇲🇪',fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'🇲🇸',fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'🇲🇦',fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'🇲🇿',fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'🇲🇲',fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'🇳🇦',fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'🇳🇷',fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'🇳🇵',fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'🇳🇱',fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'🇳🇨',fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'🇳🇿',fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'🇳🇮',fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'🇳🇪',fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'🇳🇬',fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'🇳🇺',fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'🇳🇫',fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'🇲🇵',fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'🇰🇵',fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'🇳🇴',fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'🇴🇲',fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'🇵🇰',fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'🇵🇼',fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'🇵🇸',fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'🇵🇦',fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'🇵🇬',fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'🇵🇾',fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'🇵🇪',fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'🇵🇭',fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'🇵🇳',fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'🇵🇱',fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'🇵🇹',fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'🇵🇷',fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'🇶🇦',fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:'🇷🇪',fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'🇷🇴',fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'🇷🇺',fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'🇷🇼',fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:'🇧🇱',fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'🇸🇭',fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'🇰🇳',fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'🇱🇨',fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'🇵🇲',fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'🇻🇨',fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'🇼🇸',fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'🇸🇲',fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'🇸🇹',fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'🇸🇦',fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'🇸🇳',fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'🇷🇸',fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'🇸🇨',fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'🇸🇱',fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'🇸🇬',fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'🇸🇽',fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'🇸🇰',fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'🇸🇮',fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'🇸🇧',fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'🇸🇴',fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'🇿🇦',fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'🇬🇸',fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'🇰🇷',fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'🇸🇸',fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'🇪🇸',fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'🇱🇰',fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'🇸🇩',fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'🇸🇷',fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'🇸🇿',fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'🇸🇪',fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'🇨🇭',fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'🇸🇾',fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'🇹🇼',fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'🇹🇯',fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'🇹🇿',fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'🇹🇭',fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'🇹🇱',fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'🇹🇬',fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'🇹🇰',fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'🇹🇴',fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'🇹🇹',fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'🇹🇳',fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'🇹🇷',fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'🇹🇲',fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'🇹🇨',fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'🇹🇻',fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'🇺🇬',fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'🇺🇦',fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'🇦🇪',fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'🇬🇧',fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:'🏴󠁧󠁢󠁥󠁮󠁧󠁿',fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:'🏴󠁧󠁢󠁳󠁣󠁴󠁿',fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:'🏴󠁧󠁢󠁷󠁬󠁳󠁿',fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'🇺🇸',fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'🇻🇮',fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'🇺🇾',fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'🇺🇿',fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'🇻🇺',fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'🇻🇦',fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'🇻🇪',fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'🇻🇳',fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'🇼🇫',fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'🇪🇭',fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'🇾🇪',fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'🇿🇲',fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'🇿🇼',fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'🇺🇳',fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'🏴‍☠️',fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/emoticons/js/emojiimages.min.js b/staticfiles/tinymce/plugins/emoticons/js/emojiimages.min.js new file mode 100644 index 0000000..37f3bcf --- /dev/null +++ b/staticfiles/tinymce/plugins/emoticons/js/emojiimages.min.js @@ -0,0 +1,3 @@ +// Source: npm package: emojilib +// Images provided by twemoji: https://github.com/twitter/twemoji +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'\u{1f4af}',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'\u{1f522}',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'\u{1f600}',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'\u{1f62c}',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'\u{1f601}',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'\u{1f602}',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'\u{1f923}',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'\u{1f973}',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'\u{1f603}',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'\u{1f604}',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'\u{1f605}',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'\u{1f606}',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'\u{1f607}',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'\u{1f609}',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'\u{1f60a}',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'\u{1f642}',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'\u{1f643}',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'\u{1f60b}',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'\u{1f60c}',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'\u{1f60d}',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'\u{1f970}',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f618}',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'\u{1f617}',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'\u{1f619}',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f61a}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'\u{1f61c}',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'\u{1f92a}',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'\u{1f928}',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'\u{1f9d0}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'\u{1f61d}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'\u{1f61b}',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'\u{1f911}',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'\u{1f913}',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'\u{1f60e}',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'\u{1f929}',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'\u{1f921}',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'\u{1f920}',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'\u{1f917}',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'\u{1f60f}',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'\u{1f636}',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'\u{1f610}',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'\u{1f611}',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'\u{1f612}',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'\u{1f644}',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'\u{1f914}',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'\u{1f925}',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'\u{1f92d}',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'\u{1f92b}',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'\u{1f92c}',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'\u{1f92f}',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'\u{1f633}',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'\u{1f61e}',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'\u{1f61f}',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'\u{1f620}',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'\u{1f621}',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'\u{1f614}',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'\u{1f615}',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'\u{1f641}',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'\u{1f623}',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'\u{1f616}',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'\u{1f62b}',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'\u{1f629}',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'\u{1f97a}',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'\u{1f624}',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'\u{1f62e}',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'\u{1f631}',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'\u{1f628}',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'\u{1f630}',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'\u{1f62f}',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'\u{1f626}',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'\u{1f627}',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'\u{1f622}',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'\u{1f625}',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'\u{1f924}',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'\u{1f62a}',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'\u{1f613}',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'\u{1f975}',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'\u{1f976}',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'\u{1f62d}',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'\u{1f635}',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'\u{1f632}',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'\u{1f910}',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'\u{1f922}',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'\u{1f927}',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'\u{1f92e}',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'\u{1f637}',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'\u{1f912}',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'\u{1f915}',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'\u{1f974}',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'\u{1f634}',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'\u{1f4a4}',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'\u{1f4a9}',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'\u{1f608}',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'\u{1f47f}',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'\u{1f479}',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'\u{1f47a}',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'\u{1f480}',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'\u{1f47b}',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'\u{1f47d}',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'\u{1f916}',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'\u{1f63a}',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'\u{1f638}',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'\u{1f639}',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'\u{1f63b}',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'\u{1f63c}',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'\u{1f63d}',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'\u{1f640}',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'\u{1f63f}',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'\u{1f63e}',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'\u{1f932}',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'\u{1f64c}',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'\u{1f44f}',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'\u{1f44b}',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'\u{1f919}',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'\u{1f44d}',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'\u{1f44e}',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'\u{1f44a}',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'\u{1f91b}',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'\u{1f91c}',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'\u{1f44c}',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'\u{1f91a}',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'\u{1f450}',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'\u{1f4aa}',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'\u{1f64f}',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'\u{1f9b6}',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'\u{1f9b5}',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'\u{1f91d}',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'\u{1f446}',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'\u{1f447}',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'\u{1f448}',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'\u{1f449}',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'\u{1f595}',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'\u{1f590}',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'\u{1f91f}',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'\u{1f918}',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'\u{1f91e}',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'\u{1f596}',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'\u{1f933}',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'\u{1f485}',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'\u{1f444}',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'\u{1f9b7}',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'\u{1f445}',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'\u{1f442}',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'\u{1f443}',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'\u{1f441}',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'\u{1f440}',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'\u{1f9e0}',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'\u{1f464}',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'\u{1f465}',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'\u{1f5e3}',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'\u{1f476}',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'\u{1f9d2}',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'\u{1f466}',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'\u{1f467}',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'\u{1f9d1}',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'\u{1f468}',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'\u{1f469}',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'\u{1f471}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'\u{1f471}',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'\u{1f9d4}',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'\u{1f9d3}',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'\u{1f474}',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'\u{1f475}',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'\u{1f472}',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'\u{1f9d5}',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'\u{1f473}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'\u{1f473}',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'\u{1f46e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'\u{1f46e}',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'\u{1f477}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'\u{1f477}',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'\u{1f482}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'\u{1f482}',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'\u{1f575}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'\u{1f575}',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'\u{1f469}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'\u{1f468}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'\u{1f469}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'\u{1f468}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'\u{1f469}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'\u{1f468}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'\u{1f469}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'\u{1f468}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'\u{1f469}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'\u{1f468}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'\u{1f469}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'\u{1f468}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'\u{1f469}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'\u{1f468}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'\u{1f469}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'\u{1f468}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'\u{1f469}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'\u{1f468}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'\u{1f469}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'\u{1f468}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'\u{1f469}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'\u{1f468}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'\u{1f469}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'\u{1f468}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'\u{1f469}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'\u{1f468}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'\u{1f469}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'\u{1f468}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'\u{1f469}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'\u{1f468}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'\u{1f469}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'\u{1f468}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'\u{1f9b8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'\u{1f9b8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'\u{1f9b9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'\u{1f9b9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'\u{1f936}',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'\u{1f385}',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'\u{1f9d9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'\u{1f9d9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'\u{1f9dd}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'\u{1f9dd}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'\u{1f9db}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'\u{1f9db}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'\u{1f9df}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'\u{1f9df}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'\u{1f9de}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'\u{1f9de}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'\u{1f9dc}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'\u{1f9dc}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'\u{1f9da}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'\u{1f9da}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'\u{1f47c}',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'\u{1f930}',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'\u{1f931}',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'\u{1f478}',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'\u{1f934}',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'\u{1f470}',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'\u{1f935}',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'\u{1f3c3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'\u{1f3c3}',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'\u{1f6b6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'\u{1f6b6}',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'\u{1f483}',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'\u{1f57a}',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'\u{1f46f}',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'\u{1f46f}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'\u{1f46b}',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'\u{1f46c}',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'\u{1f46d}',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'\u{1f647}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'\u{1f647}',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'\u{1f926}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'\u{1f926}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'\u{1f937}',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'\u{1f937}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'\u{1f481}',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'\u{1f481}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'\u{1f645}',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'\u{1f645}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'\u{1f646}',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'\u{1f646}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'\u{1f64b}',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'\u{1f64b}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'\u{1f64e}',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'\u{1f64e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'\u{1f487}',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'\u{1f487}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'\u{1f486}',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'\u{1f486}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f491}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f48f}',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'\u{1f46a}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'\u{1f9f6}',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'\u{1f9f5}',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'\u{1f9e5}',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'\u{1f97c}',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'\u{1f45a}',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'\u{1f455}',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'\u{1f456}',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'\u{1f454}',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'\u{1f457}',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'\u{1f459}',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'\u{1f458}',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'\u{1f484}',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'\u{1f48b}',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'\u{1f463}',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'\u{1f97f}',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'\u{1f460}',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'\u{1f461}',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'\u{1f462}',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'\u{1f45e}',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'\u{1f45f}',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'\u{1f97e}',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'\u{1f9e6}',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'\u{1f9e4}',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'\u{1f9e3}',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'\u{1f452}',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'\u{1f3a9}',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'\u{1f9e2}',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'\u{1f393}',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'\u{1f451}',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'\u{1f392}',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'\u{1f9f3}',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'\u{1f45d}',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'\u{1f45b}',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'\u{1f45c}',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'\u{1f4bc}',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'\u{1f453}',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'\u{1f576}',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'\u{1f97d}',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'\u{1f48d}',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'\u{1f302}',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'\u{1f436}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'\u{1f431}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'\u{1f42d}',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'\u{1f439}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'\u{1f430}',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'\u{1f98a}',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'\u{1f43b}',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'\u{1f43c}',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'\u{1f428}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'\u{1f42f}',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'\u{1f981}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f42e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'\u{1f437}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'\u{1f43d}',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'\u{1f438}',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'\u{1f991}',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'\u{1f419}',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'\u{1f990}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'\u{1f435}',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'\u{1f98d}',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'\u{1f648}',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'\u{1f649}',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'\u{1f64a}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'\u{1f412}',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'\u{1f414}',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'\u{1f427}',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'\u{1f426}',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'\u{1f424}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'\u{1f423}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'\u{1f425}',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'\u{1f986}',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'\u{1f985}',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'\u{1f989}',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'\u{1f987}',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'\u{1f43a}',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'\u{1f417}',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'\u{1f434}',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'\u{1f984}',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'\u{1f41d}',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'\u{1f41b}',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'\u{1f98b}',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'\u{1f40c}',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'\u{1f41e}',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'\u{1f41c}',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'\u{1f997}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'\u{1f577}',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'\u{1f982}',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'\u{1f980}',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'\u{1f40d}',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'\u{1f98e}',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'\u{1f996}',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'\u{1f995}',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'\u{1f422}',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'\u{1f420}',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'\u{1f41f}',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'\u{1f421}',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'\u{1f42c}',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'\u{1f988}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'\u{1f433}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'\u{1f40b}',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'\u{1f40a}',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'\u{1f406}',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'\u{1f993}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'\u{1f405}',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'\u{1f403}',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'\u{1f402}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f404}',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'\u{1f98c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'\u{1f42a}',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'\u{1f42b}',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'\u{1f992}',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'\u{1f418}',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'\u{1f98f}',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'\u{1f410}',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'\u{1f40f}',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'\u{1f411}',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'\u{1f40e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'\u{1f416}',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'\u{1f400}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'\u{1f401}',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'\u{1f413}',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'\u{1f983}',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'\u{1f54a}',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'\u{1f415}',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'\u{1f429}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'\u{1f408}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'\u{1f407}',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'\u{1f43f}',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'\u{1f994}',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'\u{1f99d}',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'\u{1f999}',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'\u{1f99b}',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'\u{1f998}',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'\u{1f9a1}',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'\u{1f9a2}',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'\u{1f99a}',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'\u{1f99c}',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'\u{1f99e}',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'\u{1f99f}',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'\u{1f43e}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f409}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f432}',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'\u{1f335}',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'\u{1f384}',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'\u{1f332}',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'\u{1f333}',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'\u{1f334}',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'\u{1f331}',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'\u{1f33f}',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'\u{1f340}',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'\u{1f38d}',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'\u{1f38b}',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'\u{1f343}',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'\u{1f342}',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'\u{1f341}',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'\u{1f33e}',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'\u{1f33a}',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'\u{1f33b}',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'\u{1f339}',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'\u{1f940}',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'\u{1f337}',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'\u{1f33c}',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'\u{1f338}',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'\u{1f490}',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'\u{1f344}',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'\u{1f330}',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'\u{1f383}',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'\u{1f41a}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'\u{1f578}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'\u{1f30e}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'\u{1f30d}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'\u{1f30f}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'\u{1f315}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'\u{1f316}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f317}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f318}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f311}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f312}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f313}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'\u{1f314}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31a}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31d}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31b}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31c}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'\u{1f31e}',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'\u{1f319}',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'\u{1f31f}',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'\u{1f4ab}',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'\u{1f324}',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'\u{1f325}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'\u{1f326}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'\u{1f327}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'\u{1f329}',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'\u{1f525}',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'\u{1f4a5}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'\u{1f328}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'\u{1f32c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'\u{1f4a8}',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'\u{1f32a}',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'\u{1f32b}',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'\u{1f4a7}',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'\u{1f4a6}',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'\u{1f30a}',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'\u{1f34f}',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'\u{1f34e}',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'\u{1f350}',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'\u{1f34a}',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'\u{1f34b}',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'\u{1f34c}',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'\u{1f349}',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'\u{1f347}',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'\u{1f353}',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'\u{1f348}',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'\u{1f352}',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'\u{1f351}',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'\u{1f34d}',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'\u{1f965}',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'\u{1f95d}',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'\u{1f96d}',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'\u{1f951}',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'\u{1f966}',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'\u{1f345}',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'\u{1f346}',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'\u{1f952}',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'\u{1f955}',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'\u{1f336}',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'\u{1f954}',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'\u{1f33d}',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'\u{1f96c}',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'\u{1f360}',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'\u{1f95c}',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'\u{1f36f}',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'\u{1f950}',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'\u{1f35e}',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'\u{1f956}',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'\u{1f96f}',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'\u{1f968}',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'\u{1f9c0}',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'\u{1f95a}',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'\u{1f953}',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'\u{1f969}',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'\u{1f95e}',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'\u{1f357}',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'\u{1f356}',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'\u{1f9b4}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'\u{1f364}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'\u{1f373}',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'\u{1f354}',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'\u{1f35f}',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'\u{1f959}',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'\u{1f32d}',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'\u{1f355}',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'\u{1f96a}',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'\u{1f96b}',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'\u{1f35d}',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'\u{1f32e}',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'\u{1f32f}',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'\u{1f957}',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'\u{1f958}',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'\u{1f35c}',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'\u{1f372}',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'\u{1f365}',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'\u{1f960}',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'\u{1f363}',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'\u{1f371}',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'\u{1f35b}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'\u{1f359}',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'\u{1f35a}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'\u{1f358}',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'\u{1f362}',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'\u{1f361}',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'\u{1f367}',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'\u{1f368}',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'\u{1f366}',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'\u{1f967}',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'\u{1f370}',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'\u{1f9c1}',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'\u{1f96e}',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'\u{1f382}',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'\u{1f36e}',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'\u{1f36c}',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'\u{1f36d}',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'\u{1f36b}',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'\u{1f37f}',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'\u{1f95f}',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'\u{1f369}',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'\u{1f36a}',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'\u{1f95b}',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37a}',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37b}',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'\u{1f942}',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'\u{1f377}',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'\u{1f943}',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'\u{1f378}',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'\u{1f379}',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'\u{1f37e}',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'\u{1f376}',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'\u{1f375}',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'\u{1f964}',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'\u{1f37c}',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'\u{1f9c2}',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'\u{1f944}',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'\u{1f374}',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'\u{1f37d}',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'\u{1f963}',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'\u{1f961}',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'\u{1f962}',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'\u{1f3c0}',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'\u{1f3c8}',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'\u{1f94e}',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'\u{1f3be}',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'\u{1f3d0}',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'\u{1f3c9}',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'\u{1f94f}',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'\u{1f3b1}',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'\u{1f3cc}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'\u{1f3cc}',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'\u{1f3d3}',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'\u{1f3f8}',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'\u{1f945}',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'\u{1f3d2}',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'\u{1f3d1}',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'\u{1f94d}',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'\u{1f3cf}',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'\u{1f3bf}',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'\u{1f3c2}',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'\u{1f93a}',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'\u{1f94c}',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'\u{1f6f9}',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'\u{1f6f7}',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'\u{1f3f9}',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'\u{1f3a3}',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'\u{1f94a}',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'\u{1f94b}',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'\u{1f6a3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'\u{1f6a3}',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'\u{1f9d7}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'\u{1f9d7}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'\u{1f3ca}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'\u{1f3ca}',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'\u{1f3c4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'\u{1f3c4}',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'\u{1f6c0}',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'\u{1f3cb}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'\u{1f3cb}',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'\u{1f6b4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'\u{1f6b4}',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'\u{1f6b5}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'\u{1f6b5}',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'\u{1f3c7}',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'\u{1f574}',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'\u{1f3c6}',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'\u{1f3bd}',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'\u{1f3c5}',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'\u{1f396}',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'\u{1f947}',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'\u{1f948}',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'\u{1f949}',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'\u{1f397}',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'\u{1f3f5}',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'\u{1f3ab}',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'\u{1f39f}',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'\u{1f3ad}',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'\u{1f3a8}',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'\u{1f3aa}',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'\u{1f3a4}',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'\u{1f3a7}',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'\u{1f3bc}',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'\u{1f3b9}',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'\u{1f941}',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'\u{1f3b7}',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'\u{1f3ba}',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'\u{1f3b8}',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'\u{1f3bb}',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'\u{1f3ac}',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'\u{1f3ae}',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'\u{1f47e}',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'\u{1f3af}',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'\u{1f3b2}',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'\u{1f3b0}',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'\u{1f9e9}',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'\u{1f3b3}',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'\u{1f697}',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'\u{1f695}',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'\u{1f699}',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'\u{1f68c}',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'\u{1f68e}',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'\u{1f3ce}',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'\u{1f693}',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'\u{1f691}',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'\u{1f692}',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'\u{1f690}',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'\u{1f69a}',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'\u{1f69b}',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'\u{1f69c}',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'\u{1f6f4}',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'\u{1f3cd}',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'\u{1f6b2}',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'\u{1f6f5}',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'\u{1f6a8}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'\u{1f694}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'\u{1f68d}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'\u{1f698}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'\u{1f696}',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a1}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a0}',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'\u{1f69f}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'\u{1f683}',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'\u{1f68b}',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'\u{1f69d}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'\u{1f684}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'\u{1f685}',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'\u{1f688}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'\u{1f69e}',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'\u{1f682}',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'\u{1f686}',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'\u{1f687}',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'\u{1f68a}',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'\u{1f689}',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'\u{1f6f8}',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'\u{1f681}',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'\u{1f6e9}',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'\u{1f6eb}',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'\u{1f6ec}',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'\u{1f6e5}',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'\u{1f6a4}',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'\u{1f6f3}',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'\u{1f680}',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'\u{1f6f0}',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'\u{1f4ba}',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'\u{1f6f6}',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'\u{1f6a7}',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'\u{1f68f}',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'\u{1f6a6}',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'\u{1f6a5}',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'\u{1f3c1}',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'\u{1f6a2}',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'\u{1f3a1}',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'\u{1f3a2}',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'\u{1f3a0}',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'\u{1f3d7}',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'\u{1f301}',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'\u{1f5fc}',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'\u{1f3ed}',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'\u{1f391}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'\u{1f3d4}',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'\u{1f5fb}',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'\u{1f30b}',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'\u{1f5fe}',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'\u{1f3d5}',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'\u{1f3de}',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'\u{1f6e3}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'\u{1f6e4}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'\u{1f305}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'\u{1f304}',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'\u{1f3dc}',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'\u{1f3d6}',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'\u{1f3dd}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'\u{1f307}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'\u{1f306}',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'\u{1f3d9}',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'\u{1f303}',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'\u{1f309}',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'\u{1f30c}',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'\u{1f320}',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'\u{1f387}',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'\u{1f386}',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'\u{1f308}',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'\u{1f3d8}',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'\u{1f3f0}',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'\u{1f3ef}',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'\u{1f3df}',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'\u{1f5fd}',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'\u{1f3e0}',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'\u{1f3e1}',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'\u{1f3da}',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'\u{1f3e2}',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'\u{1f3ec}',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'\u{1f3e3}',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'\u{1f3e4}',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'\u{1f3e5}',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'\u{1f3e6}',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'\u{1f3e8}',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'\u{1f3ea}',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'\u{1f3eb}',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'\u{1f3e9}',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'\u{1f492}',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'\u{1f3db}',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'\u{1f54c}',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'\u{1f54d}',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'\u{1f54b}',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'\u{1f4f1}',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'\u{1f4f2}',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'\u{1f4bb}',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'\u{1f5a5}',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'\u{1f5a8}',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'\u{1f5b1}',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'\u{1f5b2}',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'\u{1f579}',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'\u{1f5dc}',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'\u{1f4bd}',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'\u{1f4be}',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'\u{1f4bf}',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'\u{1f4c0}',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'\u{1f4fc}',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'\u{1f4f7}',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'\u{1f4f8}',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'\u{1f4f9}',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'\u{1f3a5}',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'\u{1f4fd}',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'\u{1f39e}',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'\u{1f4de}',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'\u{1f4df}',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'\u{1f4e0}',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'\u{1f4fa}',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'\u{1f4fb}',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'\u{1f399}',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'\u{1f39a}',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'\u{1f39b}',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'\u{1f9ed}',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'\u{1f570}',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'\u{1f4e1}',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'\u{1f50b}',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'\u{1f50c}',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'\u{1f4a1}',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'\u{1f526}',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'\u{1f56f}',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'\u{1f9ef}',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'\u{1f5d1}',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'\u{1f6e2}',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'\u{1f4b8}',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'\u{1f4b5}',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'\u{1f4b4}',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'\u{1f4b6}',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'\u{1f4b7}',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'\u{1f4b0}',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'\u{1f4b3}',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'\u{1f48e}',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'\u{1f9f0}',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'\u{1f527}',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'\u{1f528}',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'\u{1f6e0}',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'\u{1f529}',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'\u{1f9f1}',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'\u{1f9f2}',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'\u{1f52b}',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'\u{1f4a3}',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'\u{1f9e8}',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'\u{1f52a}',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'\u{1f5e1}',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'\u{1f6e1}',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'\u{1f6ac}',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'\u{1f3fa}',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'\u{1f52e}',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'\u{1f4ff}',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'\u{1f9ff}',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'\u{1f488}',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'\u{1f52d}',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'\u{1f52c}',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'\u{1f573}',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'\u{1f48a}',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'\u{1f489}',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'\u{1f9ec}',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'\u{1f9a0}',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'\u{1f9eb}',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'\u{1f9ea}',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'\u{1f321}',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'\u{1f9f9}',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'\u{1f9fa}',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'\u{1f9fb}',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'\u{1f3f7}',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'\u{1f516}',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'\u{1f6bd}',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'\u{1f6bf}',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'\u{1f6c1}',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'\u{1f9fc}',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'\u{1f9fd}',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'\u{1f9f4}',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'\u{1f511}',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'\u{1f5dd}',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'\u{1f6cb}',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'\u{1f6cc}',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'\u{1f6cf}',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'\u{1f6aa}',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'\u{1f6ce}',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'\u{1f9f8}',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'\u{1f5bc}',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'\u{1f5fa}',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'\u{1f5ff}',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'\u{1f6cd}',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'\u{1f6d2}',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'\u{1f388}',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'\u{1f38f}',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'\u{1f380}',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'\u{1f381}',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'\u{1f38a}',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'\u{1f389}',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'\u{1f38e}',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'\u{1f390}',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'\u{1f38c}',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'\u{1f3ee}',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'\u{1f9e7}',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'\u{1f4e9}',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'\u{1f4e8}',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'\u{1f4e7}',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'\u{1f48c}',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'\u{1f4ee}',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'\u{1f4ea}',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'\u{1f4eb}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'\u{1f4ec}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'\u{1f4ed}',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'\u{1f4e6}',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'\u{1f4ef}',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'\u{1f4e5}',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'\u{1f4e4}',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'\u{1f4dc}',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'\u{1f4c3}',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'\u{1f4d1}',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'\u{1f9fe}',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'\u{1f4ca}',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'\u{1f4c8}',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'\u{1f4c9}',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'\u{1f4c4}',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'\u{1f4c5}',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'\u{1f4c6}',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'\u{1f5d3}',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'\u{1f4c7}',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'\u{1f5c3}',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'\u{1f5f3}',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'\u{1f5c4}',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'\u{1f4cb}',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'\u{1f5d2}',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'\u{1f4c1}',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'\u{1f4c2}',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'\u{1f5c2}',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'\u{1f5de}',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'\u{1f4f0}',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'\u{1f4d3}',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'\u{1f4d5}',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'\u{1f4d7}',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'\u{1f4d8}',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'\u{1f4d9}',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'\u{1f4d4}',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'\u{1f4d2}',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'\u{1f4da}',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'\u{1f4d6}',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'\u{1f9f7}',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'\u{1f517}',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'\u{1f4ce}',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'\u{1f587}',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'\u{1f4d0}',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'\u{1f4cf}',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'\u{1f9ee}',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'\u{1f4cc}',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'\u{1f4cd}',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'\u{1f6a9}',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'\u{1f3f3}',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'\u{1f3f4}',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'\u{1f3f3}\ufe0f\u200d\u{1f308}',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'\u{1f510}',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'\u{1f512}',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'\u{1f513}',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'\u{1f50f}',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'\u{1f58a}',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'\u{1f58b}',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'\u{1f4dd}',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'\u{1f58d}',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'\u{1f58c}',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'\u{1f50d}',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'\u{1f50e}',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f9e1}',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49b}',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49a}',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f499}',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49c}',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'\u{1f5a4}',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'\u{1f494}',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'\u{1f495}',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'\u{1f49e}',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'\u{1f493}',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'\u{1f497}',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f496}',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'\u{1f498}',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'\u{1f49d}',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'\u{1f49f}',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u{1f549}',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'\u{1f52f}',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'\u{1f54e}',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'\u{1f6d0}',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'\u{1f194}',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'\u{1f233}',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'\u{1f239}',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'\u{1f4f4}',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'\u{1f4f3}',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'\u{1f236}',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'\u{1f21a}',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'\u{1f238}',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'\u{1f23a}',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'\u{1f237}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'\u{1f19a}',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'\u{1f251}',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'\u{1f4ae}',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'\u{1f250}',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'\u{1f234}',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'\u{1f235}',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'\u{1f232}',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'\u{1f170}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'\u{1f171}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'\u{1f18e}',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'\u{1f191}',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'\u{1f17e}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'\u{1f198}',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'\u{1f4db}',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'\u{1f6ab}',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'\u{1f6d1}',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'\u{1f4a2}',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'\u{1f6b7}',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'\u{1f6af}',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'\u{1f6b3}',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'\u{1f6b1}',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'\u{1f51e}',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'\u{1f4f5}',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'\u{1f505}',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'\u{1f506}',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'\u{1f531}',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'\u{1f6b8}',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'\u{1f530}',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'\u{1f22f}',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'\u{1f4b9}',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'\u{1f4a0}',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'\u{1f300}',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'\u{1f310}',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'\u{1f3e7}',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'\u{1f202}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'\u{1f6c2}',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'\u{1f6c3}',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'\u{1f6c4}',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'\u{1f6c5}',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'\u{1f6ad}',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'\u{1f6be}',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'\u{1f17f}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'\u{1f6b0}',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'\u{1f6b9}',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'\u{1f6ba}',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'\u{1f6bc}',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'\u{1f6bb}',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'\u{1f6ae}',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'\u{1f3a6}',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'\u{1f4f6}',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'\u{1f201}',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'\u{1f196}',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'\u{1f197}',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'\u{1f199}',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'\u{1f192}',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'\u{1f195}',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'\u{1f193}',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'\u{1f51f}',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'\u{1f500}',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'\u{1f501}',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'\u{1f502}',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'\u{1f53c}',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'\u{1f53d}',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'\u{1f504}',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'\u{1f524}',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'\u{1f521}',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'\u{1f520}',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'\u{1f523}',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'\u{1f3b5}',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'\u{1f3b6}',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'\u{1f503}',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'\u{1f4b2}',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'\u{1f4b1}',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'\u{1f51a}',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'\u{1f519}',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'\u{1f51b}',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'\u{1f51d}',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'\u{1f51c}',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'\u{1f518}',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'\u{1f534}',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'\u{1f535}',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f538}',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f539}',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f536}',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f537}',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'\u{1f53a}',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'\u{1f53b}',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'\u{1f532}',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'\u{1f533}',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'\u{1f508}',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'\u{1f509}',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'\u{1f50a}',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'\u{1f507}',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'\u{1f4e3}',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'\u{1f4e2}',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'\u{1f514}',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'\u{1f515}',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'\u{1f0cf}',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'\u{1f004}',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'\u{1f3b4}',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'\u{1f4ad}',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'\u{1f5ef}',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'\u{1f4ac}',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'\u{1f5e8}',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'\u{1f550}',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'\u{1f551}',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'\u{1f552}',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'\u{1f553}',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'\u{1f554}',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'\u{1f555}',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'\u{1f556}',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'\u{1f557}',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'\u{1f558}',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'\u{1f559}',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'\u{1f55a}',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'\u{1f55b}',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'\u{1f55c}',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'\u{1f55d}',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'\u{1f55e}',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'\u{1f55f}',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'\u{1f560}',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'\u{1f561}',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'\u{1f562}',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'\u{1f563}',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'\u{1f564}',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'\u{1f565}',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'\u{1f566}',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'\u{1f567}',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'\u{1f1e8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'\u{1f1ea}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'\u{1f1eb}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'\u{1f1e9}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'\u{1f1ef}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'\u{1f1fd}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'\u{1f1f4}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'\u{1f1f6}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'\u{1f1ec}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'\u{1f1fa}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'\u{1f3f4}\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/emoticons/js/emojis.js b/staticfiles/tinymce/plugins/emoticons/js/emojis.js new file mode 100644 index 0000000..88455e9 --- /dev/null +++ b/staticfiles/tinymce/plugins/emoticons/js/emojis.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"😀",fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"😬",fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"😁",fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"😂",fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"🤣",fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"🥳",fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"😃",fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"😄",fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"😅",fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"😆",fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"😇",fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"😉",fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"😊",fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"🙂",fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"🙃",fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"☺️",fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"😋",fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"😌",fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"😍",fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"🥰",fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😘",fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"😗",fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"😙",fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😚",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"😜",fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"🤪",fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"🤨",fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"🧐",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"😝",fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"😛",fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"🤑",fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"🤓",fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"😎",fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"🤩",fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:"🤡",fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"🤠",fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:"🤗",fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"😏",fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"😶",fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"😐",fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"😑",fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"😒",fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"🙄",fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"🤔",fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"🤥",fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"🤭",fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"🤫",fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"🤬",fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"🤯",fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"😳",fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"😞",fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"😟",fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"😠",fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"😡",fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"😔",fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"😕",fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"🙁",fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"☹",fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"😣",fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"😖",fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"😫",fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"😩",fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"🥺",fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"😤",fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"😮",fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"😱",fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"😨",fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"😰",fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:"😯",fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:"😦",fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"😧",fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"😢",fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"😥",fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:"🤤",fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"😪",fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"😓",fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"🥵",fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"🥶",fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"😭",fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"😵",fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"😲",fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"🤐",fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"🤢",fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"🤧",fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:"🤮",fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"😷",fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"🤒",fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"🤕",fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"🥴",fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"😴",fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"💤",fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"💩",fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"😈",fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:"👿",fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"👹",fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"👺",fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"💀",fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"👻",fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"👽",fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:"🤖",fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"😺",fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"😸",fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"😹",fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"😻",fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"😼",fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"😽",fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"🙀",fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"😿",fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"😾",fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"🤲",fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"🙌",fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"👏",fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"👋",fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"🤙",fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"👍",fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"👎",fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"👊",fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"✊",fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"🤛",fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"🤜",fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"✌",fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"👌",fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"✋",fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"🤚",fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"👐",fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"💪",fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"🙏",fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:"🦶",fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:"🦵",fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:"🤝",fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"☝",fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"👆",fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"👇",fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"👈",fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"👉",fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"🖕",fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"🖐",fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"🤟",fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"🤘",fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"🤞",fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"🖖",fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"✍",fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:"🤳",fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"💅",fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:"👄",fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:"🦷",fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:"👅",fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"👂",fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:"👃",fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"👁",fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"👀",fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:"🧠",fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"👤",fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"👥",fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"🗣",fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"👶",fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:"🧒",fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"👦",fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:"👧",fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:"🧑",fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"👨",fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:"👩",fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"👱‍♀️",fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"👱",fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"🧔",fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"🧓",fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"👴",fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"👵",fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"👲",fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"🧕",fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"👳‍♀️",fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"👳",fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"👮‍♀️",fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"👮",fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"👷‍♀️",fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"👷",fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"💂‍♀️",fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"💂",fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"🕵️‍♀️",fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"🕵",fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"👩‍⚕️",fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"👨‍⚕️",fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"👩‍🌾",fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"👨‍🌾",fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"👩‍🍳",fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:"👨‍🍳",fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"👩‍🎓",fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:"👨‍🎓",fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"👩‍🎤",fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"👨‍🎤",fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"👩‍🏫",fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"👨‍🏫",fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"👩‍🏭",fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"👨‍🏭",fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"👩‍💻",fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"👨‍💻",fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"👩‍💼",fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"👨‍💼",fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"👩‍🔧",fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"👨‍🔧",fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"👩‍🔬",fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"👨‍🔬",fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"👩‍🎨",fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:"👨‍🎨",fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"👩‍🚒",fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"👨‍🚒",fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"👩‍✈️",fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"👨‍✈️",fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"👩‍🚀",fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"👨‍🚀",fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"👩‍⚖️",fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"👨‍⚖️",fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"🦸‍♀️",fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"🦸‍♂️",fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"🦹‍♀️",fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"🦹‍♂️",fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"🤶",fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"🎅",fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"🧙‍♀️",fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"🧙‍♂️",fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:"🧝‍♀️",fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:"🧝‍♂️",fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:"🧛‍♀️",fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"🧛‍♂️",fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"🧟‍♀️",fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"🧟‍♂️",fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:"🧞‍♀️",fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:"🧞‍♂️",fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"🧜‍♀️",fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:"🧜‍♂️",fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:"🧚‍♀️",fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:"🧚‍♂️",fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"👼",fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:"🤰",fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"🤱",fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"👸",fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"🤴",fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"👰",fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"🤵",fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"🏃‍♀️",fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"🏃",fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"🚶‍♀️",fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"🚶",fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"💃",fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"🕺",fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"👯",fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"👯‍♂️",fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"👫",fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"👬",fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"👭",fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"🙇‍♀️",fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"🙇",fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"🤦‍♂️",fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"🤦‍♀️",fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"🤷",fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"🤷‍♂️",fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"💁",fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"💁‍♂️",fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"🙅",fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"🙅‍♂️",fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"🙆",fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"🙆‍♂️",fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"🙋",fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"🙋‍♂️",fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"🙎",fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"🙎‍♂️",fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"🙍",fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"🙍‍♂️",fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"💇",fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"💇‍♂️",fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"💆",fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"💆‍♂️",fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"🧖‍♀️",fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"🧖‍♂️",fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"💑",fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👩‍❤️‍👩",fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👨‍❤️‍👨",fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"💏",fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👩‍❤️‍💋‍👩",fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👨‍❤️‍💋‍👨",fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"👪",fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"👨‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"🧶",fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"🧵",fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:"🧥",fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"🥼",fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"👚",fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"👕",fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:"👖",fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"👔",fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"👗",fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"👙",fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"👘",fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"💄",fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"💋",fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"👣",fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"🥿",fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"👠",fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"👡",fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:"👢",fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"👞",fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"👟",fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"🥾",fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:"🧦",fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"🧤",fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"🧣",fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"👒",fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"🎩",fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"🧢",fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"⛑",fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"🎓",fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"👑",fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"🎒",fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:"🧳",fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"👝",fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"👛",fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"👜",fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"💼",fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"👓",fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"🕶",fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"🥽",fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"💍",fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"🌂",fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"🐶",fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"🐱",fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"🐭",fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"🐹",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"🐰",fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"🦊",fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"🐻",fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"🐼",fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"🐨",fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"🐯",fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"🦁",fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐮",fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"🐷",fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"🐽",fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"🐸",fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"🦑",fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"🐙",fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"🦐",fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"🐵",fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"🦍",fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"🙈",fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"🙉",fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"🙊",fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"🐒",fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"🐔",fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"🐧",fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"🐦",fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"🐤",fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"🐣",fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"🐥",fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"🦆",fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"🦅",fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"🦉",fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"🦇",fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"🐺",fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"🐗",fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"🐴",fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"🦄",fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"🐝",fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"🐛",fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"🦋",fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"🐌",fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"🐞",fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"🐜",fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"🦗",fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"🕷",fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"🦂",fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"🦀",fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"🐍",fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"🦎",fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"🦖",fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"🦕",fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"🐢",fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"🐠",fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"🐟",fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"🐡",fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"🐬",fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"🦈",fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"🐳",fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"🐋",fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"🐊",fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"🐆",fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"🦓",fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"🐅",fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"🐃",fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"🐂",fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐄",fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"🦌",fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"🐪",fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"🐫",fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"🦒",fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"🐘",fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"🦏",fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"🐐",fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"🐏",fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"🐑",fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"🐎",fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"🐖",fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"🐀",fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"🐁",fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"🐓",fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"🦃",fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"🕊",fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"🐕",fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"🐩",fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"🐈",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"🐇",fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"🐿",fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"🦔",fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"🦝",fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"🦙",fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"🦛",fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"🦘",fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"🦡",fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"🦢",fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"🦚",fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"🦜",fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"🦞",fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"🦟",fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"🐾",fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"🐉",fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"🐲",fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"🌵",fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"🎄",fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"🌲",fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"🌳",fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"🌴",fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"🌱",fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"🌿",fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"☘",fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"🍀",fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"🎍",fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"🎋",fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"🍃",fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"🍂",fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"🍁",fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"🌾",fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"🌺",fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"🌻",fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"🌹",fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"🥀",fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"🌷",fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"🌼",fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"🌸",fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"💐",fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"🍄",fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"🌰",fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"🎃",fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"🐚",fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"🕸",fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"🌎",fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"🌍",fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"🌏",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"🌕",fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"🌖",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌗",fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌘",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌑",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌒",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌓",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"🌔",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌚",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌝",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌛",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌜",fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"🌞",fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"🌙",fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"⭐",fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"🌟",fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"💫",fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"✨",fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:"☄",fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"☀️",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"🌤",fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"⛅",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"🌥",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"🌦",fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"☁️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"🌧",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"⛈",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"🌩",fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"⚡",fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"🔥",fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"💥",fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"❄️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"🌨",fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"⛄",fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"☃",fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"🌬",fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"💨",fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"🌪",fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:"🌫",fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"☂",fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"☔",fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"💧",fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"💦",fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"🌊",fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"🍏",fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"🍎",fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"🍐",fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"🍊",fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"🍋",fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"🍌",fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"🍉",fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"🍇",fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"🍓",fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"🍈",fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"🍒",fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"🍑",fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"🍍",fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"🥥",fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"🥝",fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"🥭",fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"🥑",fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"🥦",fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"🍅",fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"🍆",fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"🥒",fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"🥕",fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"🌶",fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"🥔",fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"🌽",fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"🥬",fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"🍠",fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"🥜",fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"🍯",fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"🥐",fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"🍞",fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"🥖",fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"🥯",fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"🥨",fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"🧀",fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"🥚",fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"🥓",fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"🥩",fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"🥞",fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"🍗",fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"🍖",fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"🦴",fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"🍤",fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"🍳",fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"🍔",fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"🍟",fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"🥙",fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"🌭",fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"🍕",fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"🥪",fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"🥫",fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"🍝",fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"🌮",fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"🌯",fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"🥗",fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"🥘",fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"🍜",fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"🍲",fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"🍥",fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"🥠",fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"🍣",fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"🍱",fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"🍛",fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"🍙",fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"🍚",fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"🍘",fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"🍢",fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"🍡",fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"🍧",fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"🍨",fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"🍦",fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"🥧",fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"🍰",fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"🧁",fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"🥮",fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"🎂",fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"🍮",fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"🍬",fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"🍭",fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"🍫",fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"🍿",fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"🥟",fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"🍩",fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"🍪",fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"🥛",fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍺",fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍻",fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"🥂",fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"🍷",fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"🥃",fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"🍸",fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"🍹",fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"🍾",fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"🍶",fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"🍵",fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"🥤",fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"☕",fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"🍼",fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"🧂",fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"🥄",fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"🍴",fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"🍽",fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"🥣",fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"🥡",fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"🥢",fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"⚽",fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"🏀",fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"🏈",fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:"⚾",fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:"🥎",fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"🎾",fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:"🏐",fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:"🏉",fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"🥏",fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"🎱",fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"⛳",fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"🏌️‍♀️",fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:"🏌",fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"🏓",fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:"🏸",fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:"🥅",fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:"🏒",fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:"🏑",fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"🥍",fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:"🏏",fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"🎿",fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"⛷",fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"🏂",fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"🤺",fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♀️",fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♂️",fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♀️",fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♂️",fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"🤾‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:"🤾‍♂️",fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:"⛸",fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:"🥌",fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:"🛹",fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"🛷",fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"🏹",fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"🎣",fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"🥊",fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"🥋",fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"🚣‍♀️",fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"🚣",fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"🧗‍♀️",fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"🧗‍♂️",fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"🏊‍♀️",fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"🏊",fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♂️",fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♀️",fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♂️",fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"🏄‍♀️",fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"🏄",fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"🛀",fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"⛹️‍♀️",fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:"⛹",fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"🏋️‍♀️",fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"🏋",fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"🚴‍♀️",fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"🚴",fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"🚵‍♀️",fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"🚵",fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"🏇",fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"🕴",fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"🏆",fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"🎽",fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:"🏅",fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"🎖",fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"🥇",fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"🥈",fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"🥉",fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"🎗",fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"🏵",fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"🎫",fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"🎟",fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"🎭",fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"🎨",fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"🎪",fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♀️",fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♂️",fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"🎤",fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"🎧",fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"🎼",fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"🎹",fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"🥁",fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"🎷",fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:"🎺",fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:"🎸",fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"🎻",fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:"🎬",fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"🎮",fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"👾",fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"🎯",fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"🎲",fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"🎰",fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"🧩",fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"🎳",fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"🚗",fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"🚕",fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"🚙",fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"🚌",fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"🚎",fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"🏎",fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"🚓",fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"🚑",fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"🚒",fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"🚐",fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"🚚",fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"🚛",fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"🚜",fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"🛴",fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"🏍",fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"🚲",fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"🛵",fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"🚨",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"🚔",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"🚍",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"🚘",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"🚖",fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"🚡",fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"🚠",fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"🚟",fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"🚃",fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"🚋",fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"🚝",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"🚄",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"🚅",fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"🚈",fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"🚞",fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"🚂",fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"🚆",fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"🚇",fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"🚊",fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"🚉",fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"🛸",fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"🚁",fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"🛩",fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"✈️",fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"🛫",fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"🛬",fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"⛵",fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"🛥",fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"🚤",fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"⛴",fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"🛳",fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"🚀",fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"🛰",fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"💺",fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"🛶",fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"⚓",fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"🚧",fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"⛽",fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"🚏",fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"🚦",fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"🚥",fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"🏁",fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"🚢",fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"🎡",fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"🎢",fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"🎠",fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"🏗",fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"🌁",fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"🗼",fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"🏭",fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"⛲",fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"🎑",fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"⛰",fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"🏔",fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"🗻",fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"🌋",fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"🗾",fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"🏕",fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"⛺",fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"🏞",fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"🛣",fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"🛤",fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"🌅",fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"🌄",fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"🏜",fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"🏖",fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"🏝",fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"🌇",fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"🌆",fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"🏙",fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"🌃",fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"🌉",fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"🌌",fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"🌠",fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"🎇",fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"🎆",fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"🌈",fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"🏘",fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"🏰",fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"🏯",fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"🏟",fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"🗽",fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:"🏠",fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"🏡",fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"🏚",fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"🏢",fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"🏬",fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"🏣",fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"🏤",fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"🏥",fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"🏦",fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"🏨",fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"🏪",fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"🏫",fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"🏩",fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"💒",fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"🏛",fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"⛪",fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"🕌",fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"🕍",fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"🕋",fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"⛩",fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"⌚",fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"📱",fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:"📲",fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"💻",fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"⌨",fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"🖥",fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:"🖨",fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:"🖱",fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"🖲",fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:"🕹",fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:"🗜",fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"💽",fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"💾",fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"💿",fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"📀",fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"📼",fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:"📷",fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"📸",fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:"📹",fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:"🎥",fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"📽",fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:"🎞",fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"📞",fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"☎️",fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"📟",fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:"📠",fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"📺",fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"📻",fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"🎙",fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:"🎚",fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:"🎛",fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"🧭",fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"⏱",fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:"⏲",fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"⏰",fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"🕰",fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"⏳",fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"⌛",fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"📡",fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"🔋",fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:"🔌",fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"💡",fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"🔦",fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:"🕯",fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"🧯",fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"🗑",fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:"🛢",fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"💸",fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"💵",fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"💴",fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"💶",fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"💷",fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"💰",fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"💳",fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"💎",fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"⚖",fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"🧰",fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"🔧",fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:"🔨",fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"⚒",fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"🛠",fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:"⛏",fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"🔩",fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:"⚙",fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:"🧱",fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:"⛓",fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"🧲",fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"🔫",fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"💣",fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"🧨",fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"🔪",fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:"🗡",fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:"⚔",fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:"🛡",fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"🚬",fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"☠",fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"⚰",fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"⚱",fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:"🏺",fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"🔮",fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"📿",fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"🧿",fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:"💈",fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"⚗",fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"🔭",fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"🔬",fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:"🕳",fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"💊",fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"💉",fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"🧬",fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"🦠",fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"🧫",fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"🧪",fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"🌡",fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"🧹",fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:"🧺",fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:"🧻",fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:"🏷",fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"🔖",fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"🚽",fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"🚿",fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"🛁",fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"🧼",fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"🧽",fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"🧴",fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:"🔑",fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:"🗝",fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"🛋",fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"🛌",fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:"🛏",fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:"🚪",fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:"🛎",fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"🧸",fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:"🖼",fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:"🗺",fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"⛱",fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"🗿",fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"🛍",fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:"🛒",fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"🎈",fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"🎏",fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"🎀",fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"🎁",fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"🎊",fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"🎉",fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"🎎",fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"🎐",fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"🎌",fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"🏮",fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:"🧧",fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"✉️",fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"📩",fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"📨",fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"📧",fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"💌",fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"📮",fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"📪",fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"📫",fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"📬",fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"📭",fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"📦",fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"📯",fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"📥",fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"📤",fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"📜",fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"📃",fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"📑",fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"🧾",fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"📊",fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"📈",fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"📉",fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"📄",fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:"📅",fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"📆",fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"🗓",fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:"📇",fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"🗃",fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:"🗳",fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"🗄",fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"📋",fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"🗒",fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"📁",fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"📂",fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"🗂",fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"🗞",fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:"📰",fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"📓",fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"📕",fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"📗",fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"📘",fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"📙",fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"📔",fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:"📒",fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:"📚",fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"📖",fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:"🧷",fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:"🔗",fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"📎",fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"🖇",fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:"✂️",fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"📐",fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"📏",fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:"🧮",fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"📌",fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"📍",fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"🚩",fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"🏳",fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:"🏴",fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"🏳️‍🌈",fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"🔐",fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:"🔒",fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:"🔓",fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"🔏",fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"🖊",fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"🖋",fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"✒️",fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"📝",fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"✏️",fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"🖍",fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"🖌",fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"🔍",fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"🔎",fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:"❤️",fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"🧡",fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"💛",fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"💚",fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"💙",fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"💜",fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:"🖤",fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"💔",fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"❣",fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"💕",fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"💞",fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"💓",fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"💗",fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"💖",fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"💘",fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"💝",fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"💟",fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"☮",fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:"✝",fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"☪",fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"🕉",fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"☸",fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:"✡",fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"🔯",fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"🕎",fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:"☯",fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"☦",fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"🛐",fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"⛎",fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"♈",fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"♉",fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"♊",fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"♋",fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"♌",fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"♍",fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"♎",fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"♏",fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"♐",fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"♑",fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"♒",fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"♓",fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:"🆔",fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"⚛",fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"🈳",fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"🈹",fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"☢",fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:"☣",fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"📴",fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"📳",fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"🈶",fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"🈚",fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"🈸",fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"🈺",fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"🈷️",fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"✴️",fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:"🆚",fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"🉑",fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"💮",fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"🉐",fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"㊙️",fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"㊗️",fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"🈴",fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"🈵",fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"🈲",fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"🅰️",fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"🅱️",fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"🆎",fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"🆑",fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"🅾️",fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"🆘",fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"⛔",fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"📛",fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"🚫",fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"❌",fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:"⭕",fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:"🛑",fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:"💢",fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"♨️",fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"🚷",fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"🚯",fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"🚳",fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"🚱",fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"🔞",fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"📵",fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"❗",fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"❕",fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:"❓",fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"❔",fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"‼️",fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"⁉️",fitzpatrick_scale:false,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"💯",fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"🔅",fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"🔆",fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:"🔱",fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"⚜",fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"〽️",fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"⚠️",fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"🚸",fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:"🔰",fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"♻️",fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"🈯",fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"💹",fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"❇️",fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"✳️",fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"❎",fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"✅",fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"💠",fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"🌀",fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:"➿",fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"🌐",fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"Ⓜ️",fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"🏧",fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"🈂️",fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"🛂",fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"🛃",fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"🛄",fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"🛅",fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"♿",fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"🚭",fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"🚾",fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"🅿️",fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"🚰",fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"🚹",fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"🚺",fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"🚼",fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"🚻",fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"🚮",fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"🎦",fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"📶",fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"🈁",fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"🆖",fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"🆗",fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"🆙",fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:"🆒",fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"🆕",fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:"🆓",fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0️⃣",fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1️⃣",fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2️⃣",fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3️⃣",fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4️⃣",fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5️⃣",fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6️⃣",fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7️⃣",fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8️⃣",fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9️⃣",fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"🔟",fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*⃣",fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"🔢",fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:"⏏️",fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"▶️",fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"⏸",fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"⏭",fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:"⏹",fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:"⏺",fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"⏯",fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:"⏮",fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"⏩",fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"⏪",fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"🔀",fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:"🔁",fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"🔂",fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"◀️",fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"🔼",fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"🔽",fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"⏫",fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"⏬",fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"➡️",fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"⬅️",fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"⬆️",fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"⬇️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"↗️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"↘️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"↙️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"↖️",fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"↕️",fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"↔️",fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"🔄",fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"↪️",fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"↩️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"⤴️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"⤵️",fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#️⃣",fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"ℹ️",fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"🔤",fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"🔡",fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"🔠",fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"🔣",fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"🎵",fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:"🎶",fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"〰️",fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"➰",fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"✔️",fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"🔃",fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"➕",fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"➖",fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"➗",fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"✖️",fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:"♾",fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"💲",fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"💱",fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"©️",fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"®️",fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"™️",fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:"🔚",fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:"🔙",fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:"🔛",fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:"🔝",fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:"🔜",fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"☑️",fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"🔘",fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:"⚪",fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"⚫",fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"🔴",fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"🔵",fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔸",fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔹",fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔶",fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔷",fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"🔺",fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"▪️",fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"▫️",fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"⬛",fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"⬜",fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"🔻",fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"◼️",fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"◻️",fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"◾",fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"◽",fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"🔲",fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"🔳",fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"🔈",fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"🔉",fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"🔊",fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"🔇",fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"📣",fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"📢",fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"🔔",fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"🔕",fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"🃏",fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"🀄",fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"♠️",fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"♣️",fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"♥️",fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"♦️",fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"🎴",fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"💭",fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"🗯",fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"💬",fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"🗨",fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"🕐",fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"🕑",fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"🕒",fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"🕓",fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"🕔",fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"🕕",fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"🕖",fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"🕗",fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"🕘",fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"🕙",fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"🕚",fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"🕛",fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"🕜",fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"🕝",fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"🕞",fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"🕟",fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"🕠",fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"🕡",fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"🕢",fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"🕣",fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"🕤",fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"🕥",fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"🕦",fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"🕧",fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"🇦🇫",fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:"🇦🇽",fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"🇦🇱",fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"🇩🇿",fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"🇦🇸",fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"🇦🇩",fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"🇦🇴",fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"🇦🇮",fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"🇦🇶",fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"🇦🇬",fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"🇦🇷",fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"🇦🇲",fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"🇦🇼",fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"🇦🇺",fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"🇦🇹",fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"🇦🇿",fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"🇧🇸",fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"🇧🇭",fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"🇧🇩",fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"🇧🇧",fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"🇧🇾",fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"🇧🇪",fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"🇧🇿",fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"🇧🇯",fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"🇧🇲",fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"🇧🇹",fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"🇧🇴",fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"🇧🇶",fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"🇧🇦",fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"🇧🇼",fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"🇧🇷",fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"🇮🇴",fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"🇻🇬",fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"🇧🇳",fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"🇧🇬",fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"🇧🇫",fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"🇧🇮",fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"🇨🇻",fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"🇰🇭",fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"🇨🇲",fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"🇨🇦",fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"🇮🇨",fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"🇰🇾",fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"🇨🇫",fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"🇹🇩",fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"🇨🇱",fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"🇨🇳",fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"🇨🇽",fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"🇨🇨",fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"🇨🇴",fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"🇰🇲",fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"🇨🇬",fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"🇨🇩",fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"🇨🇰",fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"🇨🇷",fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"🇭🇷",fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"🇨🇺",fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:"🇨🇼",fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"🇨🇾",fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"🇨🇿",fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"🇩🇰",fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"🇩🇯",fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"🇩🇲",fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"🇩🇴",fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"🇪🇨",fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"🇪🇬",fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"🇸🇻",fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"🇬🇶",fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"🇪🇷",fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"🇪🇪",fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"🇪🇹",fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"🇪🇺",fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"🇫🇰",fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"🇫🇴",fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"🇫🇯",fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"🇫🇮",fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"🇫🇷",fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"🇬🇫",fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"🇵🇫",fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"🇹🇫",fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"🇬🇦",fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"🇬🇲",fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"🇬🇪",fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"🇩🇪",fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"🇬🇭",fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"🇬🇮",fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"🇬🇷",fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"🇬🇱",fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"🇬🇩",fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"🇬🇵",fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"🇬🇺",fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"🇬🇹",fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"🇬🇬",fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"🇬🇳",fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"🇬🇼",fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"🇬🇾",fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"🇭🇹",fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"🇭🇳",fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"🇭🇰",fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"🇭🇺",fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"🇮🇸",fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"🇮🇳",fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"🇮🇩",fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"🇮🇷",fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"🇮🇶",fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"🇮🇪",fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"🇮🇲",fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"🇮🇱",fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"🇮🇹",fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"🇨🇮",fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"🇯🇲",fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"🇯🇵",fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"🇯🇪",fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"🇯🇴",fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"🇰🇿",fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"🇰🇪",fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"🇰🇮",fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"🇽🇰",fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"🇰🇼",fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"🇰🇬",fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"🇱🇦",fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"🇱🇻",fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"🇱🇧",fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"🇱🇸",fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"🇱🇷",fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"🇱🇾",fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"🇱🇮",fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"🇱🇹",fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"🇱🇺",fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"🇲🇴",fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"🇲🇰",fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"🇲🇬",fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"🇲🇼",fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"🇲🇾",fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"🇲🇻",fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"🇲🇱",fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"🇲🇹",fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"🇲🇭",fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"🇲🇶",fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"🇲🇷",fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"🇲🇺",fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"🇾🇹",fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"🇲🇽",fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"🇫🇲",fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"🇲🇩",fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"🇲🇨",fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"🇲🇳",fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"🇲🇪",fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"🇲🇸",fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"🇲🇦",fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"🇲🇿",fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"🇲🇲",fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"🇳🇦",fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"🇳🇷",fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"🇳🇵",fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"🇳🇱",fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"🇳🇨",fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"🇳🇿",fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"🇳🇮",fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"🇳🇪",fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"🇳🇬",fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"🇳🇺",fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"🇳🇫",fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"🇲🇵",fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"🇰🇵",fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"🇳🇴",fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"🇴🇲",fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"🇵🇰",fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"🇵🇼",fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"🇵🇸",fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"🇵🇦",fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"🇵🇬",fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"🇵🇾",fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"🇵🇪",fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"🇵🇭",fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"🇵🇳",fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"🇵🇱",fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"🇵🇹",fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"🇵🇷",fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"🇶🇦",fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:"🇷🇪",fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"🇷🇴",fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"🇷🇺",fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"🇷🇼",fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:"🇧🇱",fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"🇸🇭",fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"🇰🇳",fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"🇱🇨",fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"🇵🇲",fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"🇻🇨",fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"🇼🇸",fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"🇸🇲",fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"🇸🇹",fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"🇸🇦",fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"🇸🇳",fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"🇷🇸",fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"🇸🇨",fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"🇸🇱",fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"🇸🇬",fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"🇸🇽",fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"🇸🇰",fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"🇸🇮",fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"🇸🇧",fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"🇸🇴",fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"🇿🇦",fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"🇬🇸",fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"🇰🇷",fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"🇸🇸",fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"🇪🇸",fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"🇱🇰",fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"🇸🇩",fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"🇸🇷",fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"🇸🇿",fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"🇸🇪",fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"🇨🇭",fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"🇸🇾",fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"🇹🇼",fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"🇹🇯",fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"🇹🇿",fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"🇹🇭",fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"🇹🇱",fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"🇹🇬",fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"🇹🇰",fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"🇹🇴",fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"🇹🇹",fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"🇹🇳",fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"🇹🇷",fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"🇹🇲",fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"🇹🇨",fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"🇹🇻",fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"🇺🇬",fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"🇺🇦",fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"🇦🇪",fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"🇬🇧",fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:"🏴󠁧󠁢󠁥󠁮󠁧󠁿",fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:"🏴󠁧󠁢󠁳󠁣󠁴󠁿",fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:"🏴󠁧󠁢󠁷󠁬󠁳󠁿",fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"🇺🇸",fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"🇻🇮",fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"🇺🇾",fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"🇺🇿",fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"🇻🇺",fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"🇻🇦",fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"🇻🇪",fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"🇻🇳",fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"🇼🇫",fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"🇪🇭",fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"🇾🇪",fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"🇿🇲",fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"🇿🇼",fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"🇺🇳",fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"🏴‍☠️",fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/emoticons/js/emojis.min.js b/staticfiles/tinymce/plugins/emoticons/js/emojis.min.js new file mode 100644 index 0000000..5a1c491 --- /dev/null +++ b/staticfiles/tinymce/plugins/emoticons/js/emojis.min.js @@ -0,0 +1,2 @@ +// Source: npm package: emojilib, file:emojis.json +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\u{1f600}",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\u{1f62c}",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\u{1f601}",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\u{1f602}",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\u{1f923}",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\u{1f973}",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\u{1f603}",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\u{1f604}",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\u{1f605}",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\u{1f606}",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\u{1f607}",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\u{1f609}",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\u{1f60a}",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\u{1f642}",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\u{1f643}",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\u{1f60b}",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\u{1f60c}",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\u{1f60d}",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\u{1f970}",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f618}",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\u{1f617}",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\u{1f619}",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f61a}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\u{1f61c}",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\u{1f92a}",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\u{1f928}",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\u{1f9d0}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\u{1f61d}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\u{1f61b}",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\u{1f911}",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\u{1f913}",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\u{1f60e}",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\u{1f929}",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\u{1f921}",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\u{1f920}",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\u{1f917}",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\u{1f60f}",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\u{1f636}",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\u{1f610}",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\u{1f611}",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\u{1f612}",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\u{1f644}",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\u{1f914}",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\u{1f925}",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\u{1f92d}",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\u{1f92b}",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\u{1f92c}",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\u{1f92f}",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\u{1f633}",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\u{1f61e}",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\u{1f61f}",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\u{1f620}",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\u{1f621}",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\u{1f614}",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\u{1f615}",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\u{1f641}",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\u{1f623}",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\u{1f616}",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\u{1f62b}",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\u{1f629}",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\u{1f97a}",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\u{1f624}",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\u{1f62e}",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\u{1f631}",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\u{1f628}",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\u{1f630}",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\u{1f62f}",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\u{1f626}",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\u{1f627}",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\u{1f622}",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\u{1f625}",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\u{1f924}",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\u{1f62a}",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\u{1f613}",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\u{1f975}",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\u{1f976}",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\u{1f62d}",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\u{1f635}",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\u{1f632}",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\u{1f910}",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\u{1f922}",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\u{1f927}",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\u{1f92e}",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\u{1f637}",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\u{1f912}",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\u{1f915}",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\u{1f974}",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\u{1f634}",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\u{1f4a4}",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\u{1f4a9}",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\u{1f608}",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\u{1f47f}",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\u{1f479}",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\u{1f47a}",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\u{1f480}",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\u{1f47b}",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\u{1f47d}",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\u{1f916}",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\u{1f63a}",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\u{1f638}",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\u{1f639}",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\u{1f63b}",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\u{1f63c}",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\u{1f63d}",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\u{1f640}",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\u{1f63f}",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\u{1f63e}",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\u{1f932}",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\u{1f64c}",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\u{1f44f}",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\u{1f44b}",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\u{1f919}",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\u{1f44d}",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\u{1f44e}",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\u{1f44a}",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\u{1f91b}",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\u{1f91c}",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\u{1f44c}",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\u{1f91a}",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\u{1f450}",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\u{1f4aa}",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\u{1f64f}",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\u{1f9b6}",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\u{1f9b5}",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\u{1f91d}",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\u{1f446}",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\u{1f447}",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\u{1f448}",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\u{1f449}",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\u{1f595}",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\u{1f590}",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\u{1f91f}",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\u{1f918}",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\u{1f91e}",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\u{1f596}",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\u{1f933}",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\u{1f485}",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\u{1f444}",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\u{1f9b7}",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\u{1f445}",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\u{1f442}",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\u{1f443}",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\u{1f441}",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\u{1f440}",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\u{1f9e0}",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\u{1f464}",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\u{1f465}",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\u{1f5e3}",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\u{1f476}",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\u{1f9d2}",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\u{1f466}",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\u{1f467}",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\u{1f9d1}",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\u{1f468}",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\u{1f469}",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\u{1f471}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\u{1f471}",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\u{1f9d4}",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\u{1f9d3}",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\u{1f474}",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\u{1f475}",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\u{1f472}",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\u{1f9d5}",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\u{1f473}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\u{1f473}",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\u{1f46e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\u{1f46e}",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\u{1f477}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\u{1f477}",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\u{1f482}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\u{1f482}",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\u{1f575}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\u{1f575}",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\u{1f469}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\u{1f468}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\u{1f469}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\u{1f468}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\u{1f469}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\u{1f468}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\u{1f469}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\u{1f468}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\u{1f469}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\u{1f468}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\u{1f469}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\u{1f468}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\u{1f469}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\u{1f468}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\u{1f469}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\u{1f468}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\u{1f469}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\u{1f468}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\u{1f469}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\u{1f468}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\u{1f469}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\u{1f468}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\u{1f469}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\u{1f468}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\u{1f469}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\u{1f468}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\u{1f469}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\u{1f468}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\u{1f469}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\u{1f468}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\u{1f469}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\u{1f468}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\u{1f9b8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\u{1f9b8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\u{1f9b9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\u{1f9b9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\u{1f936}",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\u{1f385}",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\u{1f9d9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\u{1f9d9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\u{1f9dd}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\u{1f9dd}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\u{1f9db}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\u{1f9db}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\u{1f9df}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\u{1f9df}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\u{1f9de}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\u{1f9de}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\u{1f9dc}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\u{1f9dc}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\u{1f9da}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\u{1f9da}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\u{1f47c}",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\u{1f930}",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\u{1f931}",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\u{1f478}",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\u{1f934}",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\u{1f470}",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\u{1f935}",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\u{1f3c3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\u{1f3c3}",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\u{1f6b6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\u{1f6b6}",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\u{1f483}",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\u{1f57a}",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\u{1f46f}",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\u{1f46f}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\u{1f46b}",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\u{1f46c}",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\u{1f46d}",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\u{1f647}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\u{1f647}",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\u{1f926}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\u{1f926}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\u{1f937}",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\u{1f937}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\u{1f481}",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\u{1f481}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\u{1f645}",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\u{1f645}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\u{1f646}",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\u{1f646}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\u{1f64b}",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\u{1f64b}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\u{1f64e}",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\u{1f64e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\u{1f487}",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\u{1f487}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\u{1f486}",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\u{1f486}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f491}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f48f}",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\u{1f46a}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\u{1f9f6}",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\u{1f9f5}",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\u{1f9e5}",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\u{1f97c}",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\u{1f45a}",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\u{1f455}",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\u{1f456}",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\u{1f454}",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\u{1f457}",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\u{1f459}",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\u{1f458}",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\u{1f484}",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\u{1f48b}",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\u{1f463}",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\u{1f97f}",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\u{1f460}",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\u{1f461}",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\u{1f462}",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\u{1f45e}",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\u{1f45f}",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\u{1f97e}",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\u{1f9e6}",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\u{1f9e4}",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\u{1f9e3}",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\u{1f452}",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\u{1f3a9}",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\u{1f9e2}",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\u{1f393}",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\u{1f451}",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\u{1f392}",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\u{1f9f3}",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\u{1f45d}",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\u{1f45b}",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\u{1f45c}",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\u{1f4bc}",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\u{1f453}",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\u{1f576}",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\u{1f97d}",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\u{1f48d}",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\u{1f302}",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\u{1f436}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\u{1f431}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\u{1f42d}",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\u{1f439}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\u{1f430}",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\u{1f98a}",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\u{1f43b}",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\u{1f43c}",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\u{1f428}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\u{1f42f}",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\u{1f981}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f42e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\u{1f437}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\u{1f43d}",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\u{1f438}",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\u{1f991}",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\u{1f419}",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\u{1f990}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\u{1f435}",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\u{1f98d}",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\u{1f648}",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\u{1f649}",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\u{1f64a}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\u{1f412}",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\u{1f414}",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\u{1f427}",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\u{1f426}",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\u{1f424}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\u{1f423}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\u{1f425}",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\u{1f986}",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\u{1f985}",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\u{1f989}",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\u{1f987}",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\u{1f43a}",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\u{1f417}",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\u{1f434}",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\u{1f984}",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\u{1f41d}",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\u{1f41b}",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\u{1f98b}",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\u{1f40c}",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\u{1f41e}",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\u{1f41c}",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\u{1f997}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\u{1f577}",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\u{1f982}",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\u{1f980}",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\u{1f40d}",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\u{1f98e}",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\u{1f996}",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\u{1f995}",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\u{1f422}",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\u{1f420}",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\u{1f41f}",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\u{1f421}",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\u{1f42c}",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\u{1f988}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\u{1f433}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\u{1f40b}",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\u{1f40a}",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\u{1f406}",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\u{1f993}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\u{1f405}",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\u{1f403}",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\u{1f402}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f404}",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\u{1f98c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\u{1f42a}",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\u{1f42b}",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\u{1f992}",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\u{1f418}",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\u{1f98f}",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\u{1f410}",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\u{1f40f}",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\u{1f411}",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\u{1f40e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\u{1f416}",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\u{1f400}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\u{1f401}",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\u{1f413}",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\u{1f983}",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\u{1f54a}",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\u{1f415}",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\u{1f429}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\u{1f408}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\u{1f407}",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\u{1f43f}",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\u{1f994}",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\u{1f99d}",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\u{1f999}",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\u{1f99b}",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\u{1f998}",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\u{1f9a1}",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\u{1f9a2}",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\u{1f99a}",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\u{1f99c}",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\u{1f99e}",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\u{1f99f}",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\u{1f43e}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f409}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f432}",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\u{1f335}",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\u{1f384}",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\u{1f332}",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\u{1f333}",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\u{1f334}",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\u{1f331}",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\u{1f33f}",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\u{1f340}",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\u{1f38d}",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\u{1f38b}",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\u{1f343}",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\u{1f342}",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\u{1f341}",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\u{1f33e}",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\u{1f33a}",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\u{1f33b}",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\u{1f339}",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\u{1f940}",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\u{1f337}",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\u{1f33c}",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\u{1f338}",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\u{1f490}",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\u{1f344}",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\u{1f330}",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\u{1f383}",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\u{1f41a}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\u{1f578}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\u{1f30e}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\u{1f30d}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\u{1f30f}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\u{1f315}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\u{1f316}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f317}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f318}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f311}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f312}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f313}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\u{1f314}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31a}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31d}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31b}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31c}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\u{1f31e}",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\u{1f319}",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\u{1f31f}",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\u{1f4ab}",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\u{1f324}",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\u{1f325}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\u{1f326}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\u{1f327}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\u{1f329}",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\u{1f525}",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\u{1f4a5}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\u{1f328}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\u{1f32c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\u{1f4a8}",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\u{1f32a}",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\u{1f32b}",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\u{1f4a7}",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\u{1f4a6}",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\u{1f30a}",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\u{1f34f}",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\u{1f34e}",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\u{1f350}",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\u{1f34a}",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\u{1f34b}",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\u{1f34c}",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\u{1f349}",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\u{1f347}",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\u{1f353}",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\u{1f348}",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\u{1f352}",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\u{1f351}",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\u{1f34d}",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\u{1f965}",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\u{1f95d}",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\u{1f96d}",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\u{1f951}",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\u{1f966}",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\u{1f345}",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\u{1f346}",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\u{1f952}",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\u{1f955}",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\u{1f336}",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\u{1f954}",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\u{1f33d}",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\u{1f96c}",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\u{1f360}",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\u{1f95c}",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\u{1f36f}",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\u{1f950}",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\u{1f35e}",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\u{1f956}",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\u{1f96f}",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\u{1f968}",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\u{1f9c0}",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\u{1f95a}",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\u{1f953}",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\u{1f969}",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\u{1f95e}",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\u{1f357}",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\u{1f356}",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\u{1f9b4}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\u{1f364}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\u{1f373}",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\u{1f354}",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\u{1f35f}",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\u{1f959}",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\u{1f32d}",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\u{1f355}",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\u{1f96a}",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\u{1f96b}",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\u{1f35d}",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\u{1f32e}",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\u{1f32f}",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\u{1f957}",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\u{1f958}",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\u{1f35c}",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\u{1f372}",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\u{1f365}",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\u{1f960}",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\u{1f363}",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\u{1f371}",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\u{1f35b}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\u{1f359}",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\u{1f35a}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\u{1f358}",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\u{1f362}",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\u{1f361}",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\u{1f367}",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\u{1f368}",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\u{1f366}",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\u{1f967}",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\u{1f370}",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\u{1f9c1}",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\u{1f96e}",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\u{1f382}",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\u{1f36e}",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\u{1f36c}",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\u{1f36d}",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\u{1f36b}",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\u{1f37f}",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\u{1f95f}",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\u{1f369}",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\u{1f36a}",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\u{1f95b}",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37a}",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37b}",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\u{1f942}",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\u{1f377}",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\u{1f943}",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\u{1f378}",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\u{1f379}",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\u{1f37e}",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\u{1f376}",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\u{1f375}",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\u{1f964}",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\u{1f37c}",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\u{1f9c2}",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\u{1f944}",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\u{1f374}",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\u{1f37d}",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\u{1f963}",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\u{1f961}",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\u{1f962}",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\u{1f3c0}",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\u{1f3c8}",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\u{1f94e}",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\u{1f3be}",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\u{1f3d0}",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\u{1f3c9}",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\u{1f94f}",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\u{1f3b1}",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\u{1f3cc}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\u{1f3cc}",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\u{1f3d3}",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\u{1f3f8}",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\u{1f945}",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\u{1f3d2}",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\u{1f3d1}",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\u{1f94d}",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\u{1f3cf}",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\u{1f3bf}",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\u{1f3c2}",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\u{1f93a}",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\u{1f94c}",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\u{1f6f9}",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\u{1f6f7}",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\u{1f3f9}",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\u{1f3a3}",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\u{1f94a}",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\u{1f94b}",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\u{1f6a3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\u{1f6a3}",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\u{1f9d7}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\u{1f9d7}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\u{1f3ca}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\u{1f3ca}",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\u{1f3c4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\u{1f3c4}",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\u{1f6c0}",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\u{1f3cb}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\u{1f3cb}",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\u{1f6b4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\u{1f6b4}",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\u{1f6b5}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\u{1f6b5}",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\u{1f3c7}",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\u{1f574}",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\u{1f3c6}",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\u{1f3bd}",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\u{1f3c5}",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\u{1f396}",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\u{1f947}",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\u{1f948}",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\u{1f949}",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\u{1f397}",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\u{1f3f5}",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\u{1f3ab}",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\u{1f39f}",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\u{1f3ad}",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\u{1f3a8}",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\u{1f3aa}",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\u{1f3a4}",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\u{1f3a7}",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\u{1f3bc}",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\u{1f3b9}",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\u{1f941}",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\u{1f3b7}",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\u{1f3ba}",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\u{1f3b8}",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\u{1f3bb}",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\u{1f3ac}",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\u{1f3ae}",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\u{1f47e}",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\u{1f3af}",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\u{1f3b2}",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\u{1f3b0}",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\u{1f9e9}",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\u{1f3b3}",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\u{1f697}",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\u{1f695}",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\u{1f699}",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\u{1f68c}",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\u{1f68e}",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\u{1f3ce}",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\u{1f693}",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\u{1f691}",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\u{1f692}",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\u{1f690}",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\u{1f69a}",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\u{1f69b}",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\u{1f69c}",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\u{1f6f4}",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\u{1f3cd}",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\u{1f6b2}",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\u{1f6f5}",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\u{1f6a8}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\u{1f694}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\u{1f68d}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\u{1f698}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\u{1f696}",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a1}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a0}",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\u{1f69f}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\u{1f683}",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\u{1f68b}",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\u{1f69d}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\u{1f684}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\u{1f685}",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\u{1f688}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\u{1f69e}",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\u{1f682}",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\u{1f686}",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\u{1f687}",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\u{1f68a}",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\u{1f689}",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\u{1f6f8}",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\u{1f681}",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\u{1f6e9}",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\u{1f6eb}",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\u{1f6ec}",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\u{1f6e5}",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\u{1f6a4}",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\u{1f6f3}",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\u{1f680}",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\u{1f6f0}",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\u{1f4ba}",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\u{1f6f6}",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\u{1f6a7}",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\u{1f68f}",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\u{1f6a6}",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\u{1f6a5}",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\u{1f3c1}",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\u{1f6a2}",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\u{1f3a1}",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\u{1f3a2}",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\u{1f3a0}",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\u{1f3d7}",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\u{1f301}",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\u{1f5fc}",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\u{1f3ed}",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\u{1f391}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\u{1f3d4}",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\u{1f5fb}",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\u{1f30b}",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\u{1f5fe}",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\u{1f3d5}",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\u{1f3de}",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\u{1f6e3}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\u{1f6e4}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\u{1f305}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\u{1f304}",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\u{1f3dc}",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\u{1f3d6}",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\u{1f3dd}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\u{1f307}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\u{1f306}",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\u{1f3d9}",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\u{1f303}",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\u{1f309}",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\u{1f30c}",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\u{1f320}",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\u{1f387}",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\u{1f386}",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\u{1f308}",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\u{1f3d8}",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\u{1f3f0}",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\u{1f3ef}",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\u{1f3df}",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\u{1f5fd}",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\u{1f3e0}",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\u{1f3e1}",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\u{1f3da}",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\u{1f3e2}",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\u{1f3ec}",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\u{1f3e3}",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\u{1f3e4}",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\u{1f3e5}",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\u{1f3e6}",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\u{1f3e8}",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\u{1f3ea}",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\u{1f3eb}",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\u{1f3e9}",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\u{1f492}",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\u{1f3db}",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\u{1f54c}",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\u{1f54d}",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\u{1f54b}",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\u{1f4f1}",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\u{1f4f2}",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\u{1f4bb}",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\u{1f5a5}",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\u{1f5a8}",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\u{1f5b1}",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\u{1f5b2}",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\u{1f579}",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\u{1f5dc}",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\u{1f4bd}",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\u{1f4be}",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\u{1f4bf}",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\u{1f4c0}",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\u{1f4fc}",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\u{1f4f7}",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\u{1f4f8}",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\u{1f4f9}",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\u{1f3a5}",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\u{1f4fd}",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\u{1f39e}",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\u{1f4de}",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\u{1f4df}",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\u{1f4e0}",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\u{1f4fa}",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\u{1f4fb}",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\u{1f399}",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\u{1f39a}",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\u{1f39b}",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\u{1f9ed}",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\u{1f570}",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\u{1f4e1}",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\u{1f50b}",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\u{1f50c}",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\u{1f4a1}",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\u{1f526}",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\u{1f56f}",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\u{1f9ef}",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\u{1f5d1}",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\u{1f6e2}",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\u{1f4b8}",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\u{1f4b5}",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\u{1f4b4}",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\u{1f4b6}",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\u{1f4b7}",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\u{1f4b0}",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\u{1f4b3}",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\u{1f48e}",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\u{1f9f0}",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\u{1f527}",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\u{1f528}",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\u{1f6e0}",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\u{1f529}",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\u{1f9f1}",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\u{1f9f2}",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\u{1f52b}",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\u{1f4a3}",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\u{1f9e8}",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\u{1f52a}",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\u{1f5e1}",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\u{1f6e1}",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\u{1f6ac}",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\u{1f3fa}",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\u{1f52e}",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\u{1f4ff}",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\u{1f9ff}",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\u{1f488}",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\u{1f52d}",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\u{1f52c}",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\u{1f573}",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\u{1f48a}",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\u{1f489}",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\u{1f9ec}",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\u{1f9a0}",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\u{1f9eb}",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\u{1f9ea}",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\u{1f321}",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\u{1f9f9}",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\u{1f9fa}",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\u{1f9fb}",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\u{1f3f7}",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\u{1f516}",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\u{1f6bd}",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\u{1f6bf}",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\u{1f6c1}",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\u{1f9fc}",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\u{1f9fd}",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\u{1f9f4}",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\u{1f511}",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\u{1f5dd}",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\u{1f6cb}",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\u{1f6cc}",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\u{1f6cf}",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\u{1f6aa}",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\u{1f6ce}",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\u{1f9f8}",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\u{1f5bc}",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\u{1f5fa}",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\u{1f5ff}",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\u{1f6cd}",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\u{1f6d2}",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\u{1f388}",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\u{1f38f}",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\u{1f380}",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\u{1f381}",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\u{1f38a}",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\u{1f389}",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\u{1f38e}",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\u{1f390}",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\u{1f38c}",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\u{1f3ee}",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\u{1f9e7}",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\u{1f4e9}",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\u{1f4e8}",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\u{1f4e7}",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\u{1f48c}",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\u{1f4ee}",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\u{1f4ea}",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\u{1f4eb}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\u{1f4ec}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\u{1f4ed}",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\u{1f4e6}",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\u{1f4ef}",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\u{1f4e5}",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\u{1f4e4}",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\u{1f4dc}",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\u{1f4c3}",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\u{1f4d1}",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\u{1f9fe}",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\u{1f4ca}",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\u{1f4c8}",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\u{1f4c9}",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\u{1f4c4}",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\u{1f4c5}",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\u{1f4c6}",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\u{1f5d3}",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\u{1f4c7}",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\u{1f5c3}",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\u{1f5f3}",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\u{1f5c4}",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\u{1f4cb}",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\u{1f5d2}",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\u{1f4c1}",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\u{1f4c2}",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\u{1f5c2}",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\u{1f5de}",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\u{1f4f0}",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\u{1f4d3}",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\u{1f4d5}",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\u{1f4d7}",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\u{1f4d8}",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\u{1f4d9}",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\u{1f4d4}",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\u{1f4d2}",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\u{1f4da}",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\u{1f4d6}",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\u{1f9f7}",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\u{1f517}",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\u{1f4ce}",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\u{1f587}",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\u{1f4d0}",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\u{1f4cf}",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\u{1f9ee}",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\u{1f4cc}",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\u{1f4cd}",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\u{1f6a9}",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\u{1f3f3}",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\u{1f3f4}",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\u{1f3f3}\ufe0f\u200d\u{1f308}",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\u{1f510}",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\u{1f512}",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\u{1f513}",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\u{1f50f}",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\u{1f58a}",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\u{1f58b}",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\u{1f4dd}",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\u{1f58d}",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\u{1f58c}",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\u{1f50d}",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\u{1f50e}",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f9e1}",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49b}",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49a}",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f499}",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49c}",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\u{1f5a4}",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\u{1f494}",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\u{1f495}",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\u{1f49e}",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\u{1f493}",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\u{1f497}",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f496}",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\u{1f498}",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\u{1f49d}",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\u{1f49f}",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u{1f549}",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\u{1f52f}",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\u{1f54e}",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\u{1f6d0}",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\u{1f194}",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\u{1f233}",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\u{1f239}",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\u{1f4f4}",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\u{1f4f3}",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\u{1f236}",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\u{1f21a}",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\u{1f238}",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\u{1f23a}",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\u{1f237}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\u{1f19a}",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\u{1f251}",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\u{1f4ae}",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\u{1f250}",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\u{1f234}",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\u{1f235}",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\u{1f232}",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\u{1f170}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\u{1f171}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\u{1f18e}",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\u{1f191}",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\u{1f17e}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\u{1f198}",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\u{1f4db}",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\u{1f6ab}",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\u{1f6d1}",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\u{1f4a2}",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\u{1f6b7}",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\u{1f6af}",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\u{1f6b3}",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\u{1f6b1}",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\u{1f51e}",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\u{1f4f5}",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\u{1f4af}",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\u{1f505}",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\u{1f506}",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\u{1f531}",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\u{1f6b8}",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\u{1f530}",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\u{1f22f}",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\u{1f4b9}",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\u{1f4a0}",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\u{1f300}",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\u{1f310}",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\u{1f3e7}",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\u{1f202}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\u{1f6c2}",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\u{1f6c3}",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\u{1f6c4}",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\u{1f6c5}",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\u{1f6ad}",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\u{1f6be}",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\u{1f17f}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\u{1f6b0}",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\u{1f6b9}",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\u{1f6ba}",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\u{1f6bc}",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\u{1f6bb}",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\u{1f6ae}",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\u{1f3a6}",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\u{1f4f6}",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\u{1f201}",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\u{1f196}",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\u{1f197}",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\u{1f199}",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\u{1f192}",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\u{1f195}",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\u{1f193}",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\u{1f51f}",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\u{1f522}",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\u{1f500}",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\u{1f501}",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\u{1f502}",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\u{1f53c}",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\u{1f53d}",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\u{1f504}",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\u{1f524}",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\u{1f521}",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\u{1f520}",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\u{1f523}",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\u{1f3b5}",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\u{1f3b6}",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\u{1f503}",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\u{1f4b2}",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\u{1f4b1}",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\u{1f51a}",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\u{1f519}",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\u{1f51b}",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\u{1f51d}",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\u{1f51c}",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\u{1f518}",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\u{1f534}",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\u{1f535}",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f538}",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f539}",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f536}",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f537}",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\u{1f53a}",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\u{1f53b}",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\u{1f532}",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\u{1f533}",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\u{1f508}",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\u{1f509}",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\u{1f50a}",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\u{1f507}",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\u{1f4e3}",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\u{1f4e2}",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\u{1f514}",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\u{1f515}",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\u{1f0cf}",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\u{1f004}",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\u{1f3b4}",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\u{1f4ad}",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\u{1f5ef}",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\u{1f4ac}",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\u{1f5e8}",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\u{1f550}",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\u{1f551}",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\u{1f552}",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\u{1f553}",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\u{1f554}",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\u{1f555}",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\u{1f556}",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\u{1f557}",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\u{1f558}",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\u{1f559}",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\u{1f55a}",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\u{1f55b}",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\u{1f55c}",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\u{1f55d}",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\u{1f55e}",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\u{1f55f}",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\u{1f560}",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\u{1f561}",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\u{1f562}",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\u{1f563}",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\u{1f564}",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\u{1f565}",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\u{1f566}",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\u{1f567}",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\u{1f1e8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\u{1f1ea}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\u{1f1eb}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\u{1f1e9}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\u{1f1ef}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\u{1f1fd}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\u{1f1f4}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\u{1f1f6}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\u{1f1ec}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\u{1f1fa}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\u{1f3f4}\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/emoticons/plugin.min.js b/staticfiles/tinymce/plugins/emoticons/plugin.min.js new file mode 100644 index 0000000..23fa192 --- /dev/null +++ b/staticfiles/tinymce/plugins/emoticons/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>t===e,o=e(null),n=e(void 0),s=()=>{},r=()=>!1;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return null==t?a.none():a.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const i=(t,e)=>{const o=t.length,n=new Array(o);for(let s=0;s{let e=t;return{get:()=>e,set:t=>{e=t}}},c=Object.keys,u=Object.hasOwnProperty,g=(t,e)=>{const o=c(t);for(let n=0,s=o.length;nu.call(t,e),m=(h=(t,e)=>e,(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const e={};for(let o=0;o{const t=(t=>{const e=l(a.none()),o=()=>e.get().each(t);return{clear:()=>{o(),e.set(a.none())},isSet:()=>e.get().isSome(),get:()=>e.get(),set:t=>{o(),e.set(a.some(t))}}})(s);return{...t,on:e=>t.get().each(e)}},y=(t,e,o=0,s)=>{const r=t.indexOf(e,o);return-1!==r&&(!!n(s)||r+e.length<=s)};var v=tinymce.util.Tools.resolve("tinymce.Resource");const f=t=>e=>e.options.get(t),b=f("emoticons_database"),w=f("emoticons_database_url"),j=f("emoticons_database_id"),C=f("emoticons_append"),_=f("emoticons_images_url"),A="All",k={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},O=(t,e)=>d(t,e)?t[e]:e,x=t=>{const e=C(t);return o=t=>({keywords:[],category:"user",...t}),((t,e)=>{const o={};return g(t,((t,n)=>{const s=e(t,n);o[s.k]=s.v})),o})(e,((t,e)=>({k:e,v:o(t)})));var o},E=(t,e)=>y(t.title.toLowerCase(),e)||(t=>{for(let n=0,s=t.length;n{const n=[],s=e.toLowerCase(),a=o.fold((()=>r),(t=>e=>e>=t));for(let o=0;o{const n={pattern:"",results:L(e.listAll(),"",a.some(300))},s=l(A),r=(t=>{let e=null;const n=()=>{o(e)||(clearTimeout(e),e=null)};return{cancel:n,throttle:(...o)=>{n(),e=setTimeout((()=>{e=null,t.apply(null,o)}),200)}}})((t=>{(t=>{const o=t.getData(),n=s.get(),r=e.listCategory(n),i=L(r,o[S],n===A?a.some(300):a.none());t.setData({results:i})})(t)})),c={label:"Search",type:"input",name:S},u={type:"collection",name:"results"},g=()=>({title:"Emojis",size:"normal",body:{type:"tabpanel",tabs:i(e.listCategories(),(t=>({title:t,name:t,items:[c,u]})))},initialData:n,onTabChange:(t,e)=>{s.set(e.newTabName),r.throttle(t)},onChange:r.throttle,onAction:(e,o)=>{"results"===o.name&&(((t,e)=>{t.insertContent(e)})(t,o.value),e.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}),d=t.windowManager.open(g());d.focus(S),e.hasLoaded()||(d.block("Loading emojis..."),e.waitForLoad().then((()=>{d.redial(g()),r.throttle(d),d.focus(S),d.unblock()})).catch((t=>{d.redial({title:"Emojis",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"Could not load emojis"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),d.focus(S),d.unblock()})))},T=t=>e=>{const o=()=>{e.setEnabled(t.selection.isEditable())};return t.on("NodeChange",o),o(),()=>{t.off("NodeChange",o)}};t.add("emoticons",((t,e)=>{((t,e)=>{const o=t.options.register;o("emoticons_database",{processor:"string",default:"emojis"}),o("emoticons_database_url",{processor:"string",default:`${e}/js/${b(t)}${t.suffix}.js`}),o("emoticons_database_id",{processor:"string",default:"tinymce.plugins.emoticons"}),o("emoticons_append",{processor:"object",default:{}}),o("emoticons_images_url",{processor:"string",default:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/15.1.0/72x72/"})})(t,e);const o=((t,e,o)=>{const n=p(),s=p(),r=_(t),i=t=>{return o="=4&&e.substr(0,4)===o?t.char.replace(/src="([^"]+)"/,((t,e)=>`src="${r}${e}"`)):t.char;var e,o};t.on("init",(()=>{v.load(o,e).then((e=>{const o=x(t);(t=>{const e={},o=[];g(t,((t,n)=>{const s={title:n,keywords:t.keywords,char:i(t),category:O(k,t.category)},r=void 0!==e[s.category]?e[s.category]:[];e[s.category]=r.concat([s]),o.push(s)})),n.set(e),s.set(o)})(m(e,o))}),(t=>{console.log(`Failed to load emojis: ${t}`),n.set({}),s.set([])}))}));const l=()=>s.get().getOr([]),u=()=>n.isSet()&&s.isSet();return{listCategories:()=>[A].concat(c(n.get().getOr({}))),hasLoaded:u,waitForLoad:()=>u()?Promise.resolve(!0):new Promise(((t,o)=>{let n=15;const s=setInterval((()=>{u()?(clearInterval(s),t(!0)):(n--,n<0&&(console.log("Could not load emojis from url: "+e),clearInterval(s),o(!1)))}),100)})),listAll:l,listCategory:t=>t===A?l():n.get().bind((e=>a.from(e[t]))).getOr([])}})(t,w(t),j(t));return((t,e)=>{t.addCommand("mceEmoticons",(()=>N(t,e)))})(t,o),(t=>{const e=()=>t.execCommand("mceEmoticons");t.ui.registry.addButton("emoticons",{tooltip:"Emojis",icon:"emoji",onAction:e,onSetup:T(t)}),t.ui.registry.addMenuItem("emoticons",{text:"Emojis...",icon:"emoji",onAction:e,onSetup:T(t)})})(t),((t,e)=>{t.ui.registry.addAutocompleter("emoticons",{trigger:":",columns:"auto",minChars:2,fetch:(t,o)=>e.waitForLoad().then((()=>{const n=e.listAll();return L(n,t,a.some(o))})),onAction:(e,o,n)=>{t.selection.setRng(o),t.insertContent(n),e.hide()}})})(t,o),(t=>{t.on("PreInit",(()=>{t.parser.addAttributeFilter("data-emoticon",(t=>{(t=>{for(let o=0,n=t.length;oo.waitForLoad().then((()=>o.listAll()))}}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/fullscreen/plugin.min.js b/staticfiles/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 0000000..37f4522 --- /dev/null +++ b/staticfiles/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";const e=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}};var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,s=n("string"),i=n("object"),l=n("array"),a=o(null),c=r("boolean"),u=o(void 0),d=e=>!(e=>null==e)(e),m=r("function"),h=r("number"),g=()=>{},p=e=>()=>e;function f(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const v=p(!1),w=p(!0);class y{constructor(e,t){this.tag=e,this.value=t}static some(e){return new y(!0,e)}static none(){return y.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?y.some(e(this.value)):y.none()}bind(e){return this.tag?e(this.value):y.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:y.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?y.some(e):y.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}y.singletonNone=new y(!1);const b=Array.prototype.push,S=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r((e,t,n)=>{for(let r=0,o=e.length;r{const n=e(y.none()),r=()=>n.get().each(t);return{clear:()=>{r(),n.set(y.none())},isSet:()=>n.get().isSome(),get:()=>n.get(),set:e=>{r(),n.set(y.some(e))}}},k=()=>O((e=>e.unbind())),T=Object.keys,C="undefined"!=typeof window?window:Function("return this;")(),A=(e,t)=>((e,t)=>{let n=null!=t?t:C;for(let t=0;t{const t=A("ownerDocument.defaultView",e);return i(e)&&((e=>((e,t)=>{const n=((e,t)=>A(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(R(e).constructor.name))},M=e=>t=>(e=>e.dom.nodeType)(t)===e,P=M(1),D=M(3),N=M(11),H=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},V=(e,t)=>{e.dom.removeAttribute(t)},W=(e,t,n=0,r)=>{const o=e.indexOf(t,n);return-1!==o&&(!!u(r)||o+t.length<=r)},q=e=>void 0!==e.style&&m(e.style.getPropertyValue),B=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},I=B,j=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},_=e=>I(e.dom.ownerDocument),z=e=>S(e.dom.childNodes,I),K=e=>{const t=(e=>I(e.dom.getRootNode()))(e);return N(n=t)&&d(n.dom.host)?y.some(t):y.none();var n},$=e=>I(e.dom.host),U=e=>{const t=D(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return K(I(t)).fold((()=>n.body.contains(t)),(r=U,o=$,e=>r(o(e))));var r,o},X=(e,t,n)=>{if(!s(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);q(e)&&e.style.setProperty(t,n)},Y=(e,t,n)=>{const r=e.dom;X(r,t,n)},G=(e,t)=>{const n=e.dom;((e,t)=>{const n=T(e);for(let r=0,o=n.length;r{X(n,t,e)}))},J=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||U(e)?r:Q(n,t)},Q=(e,t)=>q(e)?e.style.getPropertyValue(t):"",Z=e=>{const t=I((e=>{if(d(e.target)){const t=I(e.target);if(P(t)&&d(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return(e=>0e.stopPropagation(),r=()=>e.preventDefault(),o=(s=r,i=n,(...e)=>s(i.apply(null,e)));var s,i;return((e,t,n,r,o,s,i)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:s,raw:i}))(t,e.clientX,e.clientY,n,r,o,e)},ee=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},te=w,ne=(e,t,n)=>((e,t,n,r)=>((e,t,n,r,o)=>{const s=((e,t)=>n=>{e(n)&&t(Z(n))})(n,r);return e.dom.addEventListener(t,s,o),{unbind:f(ee,e,t,s,o)}})(e,t,n,r,!1))(e,t,te,n),re=()=>oe(0,0),oe=(e,t)=>({major:e,minor:t}),se={nu:oe,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?re():((e,t)=>{const n=((e,t)=>{for(let n=0;nNumber(t.replace(n,"$"+e));return oe(r(1),r(2))})(e,n)},unknown:re},ie=(e,t)=>{const n=String(t).toLowerCase();return F(e,(e=>e.search(n)))},le=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ae=e=>t=>W(t,e),ce=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>W(e,"edge/")&&W(e,"chrome")&&W(e,"safari")&&W(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,le],search:e=>W(e,"chrome")&&!W(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>W(e,"msie")||W(e,"trident")},{name:"Opera",versionRegexes:[le,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:ae("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:ae("firefox")},{name:"Safari",versionRegexes:[le,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(W(e,"safari")||W(e,"mobile/"))&&W(e,"applewebkit")}],ue=[{name:"Windows",search:ae("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>W(e,"iphone")||W(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:ae("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:ae("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:ae("linux"),versionRegexes:[]},{name:"Solaris",search:ae("sunos"),versionRegexes:[]},{name:"FreeBSD",search:ae("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:ae("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],de={browsers:p(ce),oses:p(ue)},me="Edge",he="Chromium",ge="Opera",pe="Firefox",fe="Safari",ve=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(me),isChromium:r(he),isIE:r("IE"),isOpera:r(ge),isFirefox:r(pe),isSafari:r(fe)}},we=()=>ve({current:void 0,version:se.unknown()}),ye=ve,be=(p(me),p(he),p("IE"),p(ge),p(pe),p(fe),"Windows"),Se="Android",xe="Linux",Ee="macOS",Fe="Solaris",Oe="FreeBSD",ke="ChromeOS",Te=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(be),isiOS:r("iOS"),isAndroid:r(Se),isMacOS:r(Ee),isLinux:r(xe),isSolaris:r(Fe),isFreeBSD:r(Oe),isChromeOS:r(ke)}},Ce=()=>Te({current:void 0,version:se.unknown()}),Ae=Te,Re=(p(be),p("iOS"),p(Se),p(xe),p(Ee),p(Fe),p(Oe),p(ke),(e,t,n)=>{const r=de.browsers(),o=de.oses(),s=t.bind((e=>((e,t)=>((e,t)=>{for(let n=0;n{const n=t.brand.toLowerCase();return F(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:se.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(we,ye),i=((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(Ce,Ae),l=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),s=e.isiOS()&&!o,i=e.isiOS()||e.isAndroid(),l=i||r("(pointer:coarse)"),a=o||!s&&i&&r("(min-device-width:768px)"),c=s||i&&!a,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!a&&!u;return{isiPad:p(o),isiPhone:p(s),isTablet:p(a),isPhone:p(c),isTouch:p(l),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:p(u),isDesktop:p(d)}})(i,s,e,n);return{browser:s,os:i,deviceType:l}}),Le=e=>window.matchMedia(e).matches;let Me=(e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})((()=>Re(window.navigator.userAgent,y.from(window.navigator.userAgentData),Le)));const Pe=(e,t)=>({left:e,top:t,translate:(n,r)=>Pe(e+n,t+r)}),De=Pe,Ne=e=>{const t=void 0===e?window:e;return Me().browser.isFirefox()?y.none():y.from(t.visualViewport)},He=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Ve=e=>{const t=void 0===e?window:e,n=t.document,r=(e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return De(n,r)})(I(n));return Ne(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return He(r.left,r.top,n,o)}),(e=>He(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},We=(e,t,n)=>Ne(n).map((n=>{const r=e=>t(Z(e));return n.addEventListener(e,r),{unbind:()=>n.removeEventListener(e,r)}})).getOrThunk((()=>({unbind:g})));var qe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Be=tinymce.util.Tools.resolve("tinymce.Env");const Ie=(e,t)=>{e.dispatch("FullscreenStateChanged",{state:t}),e.dispatch("ResizeEditor")},je=e=>e.options.get("fullscreen_native");const _e=e=>{return e.dom===(void 0!==(t=_(e).dom).fullscreenElement?t.fullscreenElement:void 0!==t.msFullscreenElement?t.msFullscreenElement:void 0!==t.webkitFullscreenElement?t.webkitFullscreenElement:null);var t},ze=(e,t,n)=>((e,t,n)=>E(((e,t)=>{const n=m(t)?t:v;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=I(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,n),t))(e,(e=>j(e,t)),n),Ke=(e,t)=>(e=>{return E((e=>y.from(e.dom.parentNode).map(I))(n=e).map(z).map((e=>E(e,(e=>{return t=e,!(n.dom===t.dom);var t})))).getOr([]),(e=>j(e,t)));var n})(e),$e="data-ephox-mobile-fullscreen-style",Ue="position:absolute!important;",Xe="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",Ye=Be.os.isAndroid(),Ge=(e,t,n)=>{const r=t=>n=>{const r=H(n,"style"),o=void 0===r?"no-styles":r.trim();o!==t&&(((e,t,n)=>{((e,t,n)=>{if(!(s(n)||c(n)||h(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(e.dom,t,n)})(n,$e,o),G(n,e.parseStyle(t)))},o=ze(t,"*"),i=(e=>{const t=[];for(let n=0,r=e.length;nKe(e,"*:not(.tox-silver-sink)")))),a=(e=>{const t=J(e,"background-color");return void 0!==t&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;"})(n);x(i,r("display:none!important;")),x(o,r(Ue+Xe+a)),r((!0===Ye?"":Ue)+Xe+a)(t)},Je=qe.DOM,Qe=Ne().fold((()=>({bind:g,unbind:g})),(e=>{const t=(()=>{const e=O(g);return{...e,on:t=>e.get().each(t)}})(),n=k(),r=k(),o=(e=>{let t=null;return{cancel:()=>{a(t)||(clearTimeout(t),t=null)},throttle:(...n)=>{a(t)&&(t=setTimeout((()=>{t=null,e.apply(null,n)}),50))}}})((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame((()=>{t.on((t=>G(t,{top:e.offsetTop+"px",left:e.offsetLeft+"px",height:e.height+"px",width:e.width+"px"})))}))}));return{bind:e=>{t.set(e),o.throttle(),n.set(We("resize",o.throttle)),r.set(We("scroll",o.throttle))},unbind:()=>{t.on((()=>{n.clear(),r.clear()})),t.clear()}}})),Ze=(e,t)=>{const n=document.body,r=document.documentElement,o=e.getContainer(),s=I(o),i=(l=s,y.from(l.dom.nextSibling).map(I)).filter((e=>(e=>P(e)&&L(e.dom))(e)&&(e=>(e=>void 0!==e.dom.classList)(e)&&e.dom.classList.contains("tox-silver-sink"))(e)));var l;const a=(e=>{const t=I(e.getElement());return K(t).map($).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return I(t)})(_(t))))})(e),c=t.get(),u=I(e.getBody()),d=Be.deviceType.isTouch(),m=o.style,h=e.iframeElement,g=null==h?void 0:h.style,p=e=>{e(n,"tox-fullscreen"),e(r,"tox-fullscreen"),e(o,"tox-fullscreen"),K(s).map((e=>$(e).dom)).each((t=>{e(t,"tox-fullscreen"),e(t,"tox-shadowhost")}))},f=()=>{d&&(e=>{const t=(e=>{const t=document;return 1!==(n=t).nodeType&&9!==n.nodeType&&11!==n.nodeType||0===n.childElementCount?[]:S(t.querySelectorAll(e),I);var n})("["+$e+"]");x(t,(t=>{const n=H(t,$e);n&&"no-styles"!==n?G(t,e.parseStyle(n)):V(t,"style"),V(t,$e)}))})(e.dom),p(Je.removeClass),Qe.unbind(),y.from(t.get()).each((e=>e.fullscreenChangeHandler.unbind()))};if(c)c.fullscreenChangeHandler.unbind(),je(e)&&_e(a)&&(e=>{const t=e.dom;t.exitFullscreen?t.exitFullscreen():t.msExitFullscreen?t.msExitFullscreen():t.webkitCancelFullScreen&&t.webkitCancelFullScreen()})(_(a)),g.width=c.iframeWidth,g.height=c.iframeHeight,m.width=c.containerWidth,m.height=c.containerHeight,m.top=c.containerTop,m.left=c.containerLeft,w=i,b=c.sinkCssPosition,E=(e,t)=>{Y(e,"position",t)},w.isSome()&&b.isSome()?y.some(E(w.getOrDie(),b.getOrDie())):y.none(),f(),v=c.scrollPos,window.scrollTo(v.x,v.y),t.set(null),Ie(e,!1),e.off("remove",f);else{const n=ne(_(a),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",(n=>{je(e)&&(_e(a)||null===t.get()||Ze(e,t))})),r={scrollPos:Ve(window),containerWidth:m.width,containerHeight:m.height,containerTop:m.top,containerLeft:m.left,iframeWidth:g.width,iframeHeight:g.height,fullscreenChangeHandler:n,sinkCssPosition:i.map((e=>J(e,"position")))};d&&Ge(e.dom,s,u),g.width=g.height="100%",m.width=m.height="",p(Je.addClass),i.each((e=>{Y(e,"position","fixed")})),Qe.bind(s),e.on("remove",f),t.set(r),je(e)&&(e=>{const t=e.dom;t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitRequestFullScreen&&t.webkitRequestFullScreen()})(a),Ie(e,!0)}var v,w,b,E};var et=tinymce.util.Tools.resolve("tinymce.util.VK");const tt=(e,t)=>n=>{n.setActive(null!==t.get());const r=e=>n.setActive(e.state);return e.on("FullscreenStateChanged",r),()=>e.off("FullscreenStateChanged",r)};t.add("fullscreen",(t=>{const n=e(null);return t.inline||((e=>{(0,e.options.register)("fullscreen_native",{processor:"boolean",default:!1})})(t),((e,t)=>{e.addCommand("mceFullScreen",(()=>{Ze(e,t)}))})(t,n),((e,t)=>{const n=()=>e.execCommand("mceFullScreen");e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:n,onSetup:tt(e,t),context:"any"}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:n,onSetup:tt(e,t),shortcut:"Meta+Shift+F",context:"any"})})(t,n),((e,t)=>{e.on("init",(()=>{e.on("keydown",(e=>{e.keyCode!==et.TAB||e.metaKey||e.ctrlKey||!t.get()||e.preventDefault()}))}))})(t,n),t.addShortcut("Meta+Shift+F","","mceFullScreen")),(e=>({isFullscreen:()=>null!==e.get()}))(n)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ar.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ar.js new file mode 100644 index 0000000..e2cf02f --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ar.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar', +'

          بدء التنقل بواسطة لوحة المفاتيح

          \n' + + '\n' + + '
          \n' + + '
          التركيز على شريط القوائم
          \n' + + '
          نظاما التشغيل Windows أو Linux: Alt + F9
          \n' + + '
          نظام التشغيل macOS: ⌥F9
          \n' + + '
          التركيز على شريط الأدوات
          \n' + + '
          نظاما التشغيل Windows أو Linux: Alt + F10
          \n' + + '
          نظام التشغيل macOS: ⌥F10
          \n' + + '
          التركيز على التذييل
          \n' + + '
          نظاما التشغيل Windows أو Linux: Alt + F11
          \n' + + '
          نظام التشغيل macOS: ⌥F11
          \n' + + '
          تركيز الإشعارات
          \n' + + '
          نظاما التشغيل Windows أو Linux: Alt + F12
          \n' + + '
          نظام التشغيل macOS: ⌥F12
          \n' + + '
          التركيز على شريط أدوات السياق
          \n' + + '
          أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\n' + + ' مسار عنصر التذييل.

          \n' + + '\n' + + '

          التنقل بين أقسام واجهة المستخدم

          \n' + + '\n' + + '

          للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على Tab.

          \n' + + '\n' + + '

          للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على Shift+Tab.

          \n' + + '\n' + + '

          ترتيب علامات Tab لأقسام واجهة المستخدم هذه هو:

          \n' + + '\n' + + '
            \n' + + '
          1. شريط القوائم
          2. \n' + + '
          3. كل مجموعة شريط الأدوات
          4. \n' + + '
          5. الشريط الجانبي
          6. \n' + + '
          7. مسار العنصر في التذييل
          8. \n' + + '
          9. زر تبديل عدد الكلمات في التذييل
          10. \n' + + '
          11. رابط إدراج العلامة التجارية في التذييل
          12. \n' + + '
          13. مؤشر تغيير حجم المحرر في التذييل
          14. \n' + + '
          \n' + + '\n' + + '

          إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.

          \n' + + '\n' + + '

          إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على Shift+Tab\n' + + ' ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.

          \n' + + '\n' + + '

          التنقل بين أقسام واجهة المستخدم

          \n' + + '\n' + + '

          للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح السهم المناسب.

          \n' + + '\n' + + '

          مفتاحا السهمين اليسار‎ واليمين‎

          \n' + + '\n' + + '
            \n' + + '
          • التنقل بين القوائم في شريط القوائم.
          • \n' + + '
          • فتح قائمة فرعية في القائمة.
          • \n' + + '
          • التنقل بين الأزرار في مجموعة شريط الأدوات.
          • \n' + + '
          • التنقل بين العناصر في مسار عنصر التذييل.
          • \n' + + '
          \n' + + '\n' + + '

          مفتاحا السهمين لأسفل‎ ولأعلى‎

          \n' + + '\n' + + '
            \n' + + '
          • التنقل بين عناصر القائمة في القائمة.
          • \n' + + '
          • التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.
          • \n' + + '
          \n' + + '\n' + + '

          دورة مفاتيح الأسهم‎ داخل قسم واجهة المستخدم التي تم التركيز عليها.

          \n' + + '\n' + + '

          لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح Esc.

          \n' + + '\n' + + '

          إذا كان التركيز الحالي على "الجزء العلوي" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح Esc يؤدي أيضًا إلى الخروج\n' + + ' من التنقل بواسطة لوحة المفاتيح بالكامل.

          \n' + + '\n' + + '

          تنفيذ عنصر قائمة أو زر شريط أدوات

          \n' + + '\n' + + '

          عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر Return، أو Enter،\n' + + ' أو مفتاح المسافة لتنفيذ العنصر.

          \n' + + '\n' + + '

          التنقل في مربعات الحوار غير المبوبة

          \n' + + '\n' + + '

          في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.

          \n' + + '\n' + + '

          التنقل بين مكونات الحوار التفاعلي بالضغط على زر Tab أو Shift+Tab.

          \n' + + '\n' + + '

          التنقل في مربعات الحوار المبوبة

          \n' + + '\n' + + '

          في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.

          \n' + + '\n' + + '

          التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر Tab أو\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر السهم المناسب\n' + + ' مفتاح للتنقل بين علامات التبويب المتاحة.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/bg_BG.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/bg_BG.js new file mode 100644 index 0000000..09eacf3 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/bg_BG.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG', +'

          Начало на навигацията с клавиатурата

          \n' + + '\n' + + '
          \n' + + '
          Фокусиране върху лентата с менюта
          \n' + + '
          Windows или Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Фокусиране върху лентата с инструменти
          \n' + + '
          Windows или Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Фокусиране върху долния колонтитул
          \n' + + '
          Windows или Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Фокусиране на известието
          \n' + + '
          Windows или Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Фокусиране върху контекстуалната лента с инструменти
          \n' + + '
          Windows, Linux или macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\n' + + ' пътя до елемента в долния колонтитул.

          \n' + + '\n' + + '

          Навигиране между раздели на ПИ

          \n' + + '\n' + + '

          За да преминете от един раздел на ПИ към следващия, натиснете Tab.

          \n' + + '\n' + + '

          За да преминете от един раздел на ПИ към предишния, натиснете Shift+Tab.

          \n' + + '\n' + + '

          Редът за обхождане с табулация на тези раздели на ПИ е:

          \n' + + '\n' + + '
            \n' + + '
          1. Лентата с менюта
          2. \n' + + '
          3. Всяка група на лентата с инструменти
          4. \n' + + '
          5. Страничната лента
          6. \n' + + '
          7. Пътят до елемента в долния колонтитул
          8. \n' + + '
          9. Бутонът за превключване на броя на думите в долния колонтитул
          10. \n' + + '
          11. Връзката за търговска марка в долния колонтитул
          12. \n' + + '
          13. Манипулаторът за преоразмеряване на редактора в долния колонтитул
          14. \n' + + '
          \n' + + '\n' + + '

          Ако някой раздел на ПИ липсва, той се пропуска.

          \n' + + '\n' + + '

          Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на Shift+Tab\n' + + ' премества фокуса към първата група на лентата с инструменти, а не към последната.

          \n' + + '\n' + + '

          Навигиране в разделите на ПИ

          \n' + + '\n' + + '

          За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със стрелка.

          \n' + + '\n' + + '

          С клавишите със стрелка наляво и надясно

          \n' + + '\n' + + '
            \n' + + '
          • се придвижвате между менютата в лентата с менюто;
          • \n' + + '
          • отваряте подменю в меню;
          • \n' + + '
          • се придвижвате между бутоните в група на лентата с инструменти;
          • \n' + + '
          • се придвижвате между елементи в пътя до елемент в долния колонтитул.
          • \n' + + '
          \n' + + '\n' + + '

          С клавишите със стрелка надолу и нагоре

          \n' + + '\n' + + '
            \n' + + '
          • се придвижвате между елементите от менюто в дадено меню;
          • \n' + + '
          • се придвижвате между елементите в изскачащо меню на лентата с инструменти.
          • \n' + + '
          \n' + + '\n' + + '

          Клавишите със стрелки се придвижват в рамките на фокусирания раздел на ПИ.

          \n' + + '\n' + + '

          За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша Esc.

          \n' + + '\n' + + '

          Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша Esc също излиза\n' + + ' напълно от навигацията с клавиатурата.

          \n' + + '\n' + + '

          Изпълнение на елемент от менюто или бутон от лентата с инструменти

          \n' + + '\n' + + '

          Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете Return, Enter\n' + + ' или клавиша за интервал, за да изпълните елемента.

          \n' + + '\n' + + '

          Навигиране в диалогови прозорци без раздели

          \n' + + '\n' + + '

          В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.

          \n' + + '\n' + + '

          Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете Tab или Shift+Tab.

          \n' + + '\n' + + '

          Навигиране в диалогови прозорци с раздели

          \n' + + '\n' + + '

          В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.

          \n' + + '\n' + + '

          Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете Tab или\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със стрелка,\n' + + ' за да преминете през наличните раздели.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ca.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ca.js new file mode 100644 index 0000000..996e29c --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ca.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca', +'

          Inici de la navegació amb el teclat

          \n' + + '\n' + + '
          \n' + + '
          Enfocar la barra de menús
          \n' + + '
          Windows o Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + "
          Enfocar la barra d'eines
          \n" + + '
          Windows o Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Enfocar el peu de pàgina
          \n' + + '
          Windows o Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Enfocar la notificació
          \n' + + '
          Windows o Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + "
          Enfocar una barra d'eines contextual
          \n" + + '
          Windows, Linux o macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + "

          La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\n" + + " la ruta de l'element de peu de pàgina.

          \n" + + '\n' + + "

          Navegació entre seccions de la interfície d'usuari

          \n" + + '\n' + + "

          Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla Tab.

          \n" + + '\n' + + "

          Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles Maj+Tab.

          \n" + + '\n' + + "

          L'ordre en prémer la tecla Tab d'aquestes secciones de la interfície d'usuari és:

          \n" + + '\n' + + '
            \n' + + '
          1. Barra de menús
          2. \n' + + "
          3. Cada grup de la barra d'eines
          4. \n" + + '
          5. Barra lateral
          6. \n' + + "
          7. Ruta de l'element del peu de pàgina
          8. \n" + + '
          9. Botó de commutació de recompte de paraules al peu de pàgina
          10. \n' + + '
          11. Enllaç de marca del peu de pàgina
          12. \n' + + "
          13. Control de canvi de mida de l'editor al peu de pàgina
          14. \n" + + '
          \n' + + '\n' + + "

          Si no hi ha una secció de la interfície d'usuari, s'ometrà.

          \n" + + '\n' + + '

          Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer Maj+Tab\n' + + " el focus es mou al primer grup de la barra d'eines, no l'últim.

          \n" + + '\n' + + "

          Navegació dins de les seccions de la interfície d'usuari

          \n" + + '\n' + + "

          Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de Fletxa adequada.

          \n" + + '\n' + + '

          Les tecles de fletxa Esquerra i Dreta

          \n' + + '\n' + + '
            \n' + + '
          • us permeten desplaçar-vos entre menús de la barra de menús.
          • \n' + + '
          • obren un submenú en un menú.
          • \n' + + "
          • us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.
          • \n" + + "
          • us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.
          • \n" + + '
          \n' + + '\n' + + '

          Les tecles de fletxa Avall i Amunt

          \n' + + '\n' + + '
            \n' + + "
          • us permeten desplaçar-vos entre elements de menú d'un menú.
          • \n" + + "
          • us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.
          • \n" + + '
          \n' + + '\n' + + "

          Les tecles de Fletxa us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.

          \n" + + '\n' + + '

          Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla Esc.

          \n' + + '\n' + + "

          Si el focus actual es troba a la ‘part superior’ d'una secció específica de la interfície d'usuari, en prémer la tecla Esc també es tanca\n" + + ' completament la navegació amb el teclat.

          \n' + + '\n' + + "

          Execució d'un element de menú o d'un botó de la barra d'eines

          \n" + + '\n' + + "

          Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu Retorn, Intro\n" + + " o la barra d'espai per executar l'element.

          \n" + + '\n' + + '

          Navegació per quadres de diàleg sense pestanyes

          \n' + + '\n' + + "

          En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.

          \n" + + '\n' + + '

          Premeu la tecla Tab o les tecles Maj+Tab per desplaçar-vos entre components interactius del quadre de diàleg.

          \n' + + '\n' + + '

          Navegació per quadres de diàleg amb pestanyes

          \n' + + '\n' + + "

          En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.

          \n" + + '\n' + + "

          Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla Tab o\n" + + ' les tecles Maj+Tab.

          \n' + + '\n' + + "

          Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla Fletxa adequada\n" + + ' per canviar entre les pestanyes disponibles.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/cs.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/cs.js new file mode 100644 index 0000000..4a5a902 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/cs.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs', +'

          Začínáme navigovat pomocí klávesnice

          \n' + + '\n' + + '
          \n' + + '
          Přejít na řádek nabídek
          \n' + + '
          Windows nebo Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Přejít na panel nástrojů
          \n' + + '
          Windows nebo Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Přejít na zápatí
          \n' + + '
          Windows nebo Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Přejít na oznámení
          \n' + + '
          Windows nebo Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Přejít na kontextový panel nástrojů
          \n' + + '
          Windows, Linux nebo macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\n' + + ' cesty k prvku zápatí podtržena.

          \n' + + '\n' + + '

          Navigace mezi oddíly uživatelského rozhraní

          \n' + + '\n' + + '

          Stisknutím klávesy Tab se posunete z jednoho oddílu uživatelského rozhraní na další.

          \n' + + '\n' + + '

          Stisknutím kláves Shift+Tab se posunete z jednoho oddílu uživatelského rozhraní na předchozí.

          \n' + + '\n' + + '

          Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy Tab:

          \n' + + '\n' + + '
            \n' + + '
          1. Řádek nabídek
          2. \n' + + '
          3. Každá skupina panelu nástrojů
          4. \n' + + '
          5. Boční panel
          6. \n' + + '
          7. Cesta k prvku v zápatí.
          8. \n' + + '
          9. Tlačítko přepínače počtu slov v zápatí
          10. \n' + + '
          11. Odkaz na informace o značce v zápatí
          12. \n' + + '
          13. Úchyt pro změnu velikosti editoru v zápatí
          14. \n' + + '
          \n' + + '\n' + + '

          Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.

          \n' + + '\n' + + '

          Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves Shift+Tab\n' + + ' přejdete na první skupinu panelu nástrojů, nikoli na poslední.

          \n' + + '\n' + + '

          Navigace v rámci oddílů uživatelského rozhraní

          \n' + + '\n' + + '

          Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s šipkou.

          \n' + + '\n' + + '

          Klávesy s šipkou vlevovpravo

          \n' + + '\n' + + '
            \n' + + '
          • umožňují přesun mezi nabídkami na řádku nabídek;
          • \n' + + '
          • otevírají podnabídku nabídky;
          • \n' + + '
          • umožňují přesun mezi tlačítky ve skupině panelu nástrojů;
          • \n' + + '
          • umožňují přesun mezi položkami cesty prvku v zápatí.
          • \n' + + '
          \n' + + '\n' + + '

          Klávesy se šipkou dolůnahoru

          \n' + + '\n' + + '
            \n' + + '
          • umožňují přesun mezi položkami nabídky;
          • \n' + + '
          • umožňují přesun mezi položkami místní nabídky panelu nástrojů.
          • \n' + + '
          \n' + + '\n' + + '

          Šipky provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.

          \n' + + '\n' + + '

          Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu Esc.

          \n' + + '\n' + + '

          Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy Esc zcela ukončíte také\n' + + ' navigaci pomocí klávesnice.

          \n' + + '\n' + + '

          Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů

          \n' + + '\n' + + '

          Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy Return, Enter\n' + + ' nebo mezerníku provedete příslušný příkaz.

          \n' + + '\n' + + '

          Navigace v dialogových oknech bez záložek

          \n' + + '\n' + + '

          Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.

          \n' + + '\n' + + '

          Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy Tab nebo kombinace Shift+Tab.

          \n' + + '\n' + + '

          Navigace v dialogových oknech se záložkami

          \n' + + '\n' + + '

          Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.

          \n' + + '\n' + + '

          Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy Tab nebo\n' + + ' kombinace Shift+Tab.

          \n' + + '\n' + + '

          Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované šipky\n' + + ' přepínat mezi dostupnými záložkami.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/da.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/da.js new file mode 100644 index 0000000..4d1e1d4 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/da.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.da', +'

          Start tastaturnavigation

          \n' + + '\n' + + '
          \n' + + '
          Fokuser på menulinjen
          \n' + + '
          Windows eller Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokuser på værktøjslinjen
          \n' + + '
          Windows eller Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokuser på sidefoden
          \n' + + '
          Windows eller Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokuser på meddelelsen
          \n' + + '
          Windows eller Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokuser på kontekstuel værktøjslinje
          \n' + + '
          Windows, Linux eller macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\n' + + ' sidefodens sti til elementet.

          \n' + + '\n' + + '

          Naviger mellem UI-sektioner

          \n' + + '\n' + + '

          Gå fra én UI-sektion til den næste ved at trykke på Tab.

          \n' + + '\n' + + '

          Gå fra én UI-sektion til den forrige ved at trykke på Shift+Tab.

          \n' + + '\n' + + '

          Tab-rækkefølgen af disse UI-sektioner er:

          \n' + + '\n' + + '
            \n' + + '
          1. Menulinje
          2. \n' + + '
          3. Hver værktøjsgruppe
          4. \n' + + '
          5. Sidepanel
          6. \n' + + '
          7. Sti til elementet i sidefoden
          8. \n' + + '
          9. Til/fra-knap for ordoptælling i sidefoden
          10. \n' + + '
          11. Brandinglink i sidefoden
          12. \n' + + '
          13. Tilpasningshåndtag for editor i sidefoden
          14. \n' + + '
          \n' + + '\n' + + '

          Hvis en UI-sektion ikke er til stede, springes den over.

          \n' + + '\n' + + '

          Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på Shift+Tab\n' + + ' for at flytte fokus til den første værktøjsgruppe, ikke den sidste.

          \n' + + '\n' + + '

          Naviger inden for UI-sektioner

          \n' + + '\n' + + '

          Gå fra ét UI-element til det næste ved at trykke på den relevante piletast.

          \n' + + '\n' + + '

          Venstre og højre piletast

          \n' + + '\n' + + '
            \n' + + '
          • flytter mellem menuerne i menulinjen.
          • \n' + + '
          • åbner en undermenu i en menu.
          • \n' + + '
          • flytter mellem knapperne i en værktøjsgruppe.
          • \n' + + '
          • flytter mellem elementer i sidefodens sti til elementet.
          • \n' + + '
          \n' + + '\n' + + '

          Pil ned og op

          \n' + + '\n' + + '
            \n' + + '
          • flytter mellem menupunkterne i en menu.
          • \n' + + '
          • flytter mellem punkterne i en genvejsmenu i værktøjslinjen.
          • \n' + + '
          \n' + + '\n' + + '

          Piletasterne kører rundt inden for UI-sektionen, der fokuseres på.

          \n' + + '\n' + + '

          For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på Esc-tasten.

          \n' + + '\n' + + "

          Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på Esc-tasten også afslutte\n" + + ' tastaturnavigationen helt.

          \n' + + '\n' + + '

          Udfør et menupunkt eller en værktøjslinjeknap

          \n' + + '\n' + + '

          Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på Retur, Enter\n' + + ' eller mellemrumstasten for at udføre elementet.

          \n' + + '\n' + + '

          Naviger i ikke-faneopdelte dialogbokse

          \n' + + '\n' + + '

          I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.

          \n' + + '\n' + + '

          Naviger mellem interaktive dialogbokskomponenter ved at trykke på Tab eller Shift+Tab.

          \n' + + '\n' + + '

          Naviger i faneopdelte dialogbokse

          \n' + + '\n' + + '

          I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.

          \n' + + '\n' + + '

          Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på Tab eller\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante piletast\n' + + ' for at køre igennem de tilgængelige faner.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/de.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/de.js new file mode 100644 index 0000000..b8711ed --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/de.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.de', +'

          Grundlagen der Tastaturnavigation

          \n' + + '\n' + + '
          \n' + + '
          Fokus auf Menüleiste
          \n' + + '
          Windows oder Linux: ALT+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokus auf Symbolleiste
          \n' + + '
          Windows oder Linux: ALT+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokus auf Fußzeile
          \n' + + '
          Windows oder Linux: ALT+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Benachrichtigung fokussieren
          \n' + + '
          Windows oder Linux: ALT+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokus auf kontextbezogene Symbolleiste
          \n' + + '
          Windows, Linux oder macOS: STRG+F9
          \n' + + '
          \n' + + '\n' + + '

          Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' + + ' ist es unterstrichen.

          \n' + + '\n' + + '

          Zwischen Abschnitten der Benutzeroberfläche navigieren

          \n' + + '\n' + + '

          Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie TAB.

          \n' + + '\n' + + '

          Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie UMSCHALT+TAB.

          \n' + + '\n' + + '

          Die Abschnitte der Benutzeroberfläche haben folgende TAB-Reihenfolge:

          \n' + + '\n' + + '
            \n' + + '
          1. Menüleiste
          2. \n' + + '
          3. Einzelne Gruppen der Symbolleiste
          4. \n' + + '
          5. Randleiste
          6. \n' + + '
          7. Elementpfad in der Fußzeile
          8. \n' + + '
          9. Umschaltfläche „Wörter zählen“ in der Fußzeile
          10. \n' + + '
          11. Branding-Link in der Fußzeile
          12. \n' + + '
          13. Editor-Ziehpunkt zur Größenänderung in der Fußzeile
          14. \n' + + '
          \n' + + '\n' + + '

          Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.

          \n' + + '\n' + + '

          Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von UMSCHALT+TAB\n' + + ' zur ersten Gruppe der Symbolleiste, nicht zur letzten.

          \n' + + '\n' + + '

          Innerhalb von Abschnitten der Benutzeroberfläche navigieren

          \n' + + '\n' + + '

          Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende Pfeiltaste.

          \n' + + '\n' + + '

          Die Pfeiltasten Links und Rechts

          \n' + + '\n' + + '
            \n' + + '
          • wechseln zwischen Menüs in der Menüleiste.
          • \n' + + '
          • öffnen das Untermenü eines Menüs.
          • \n' + + '
          • wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.
          • \n' + + '
          • wechseln zwischen Elementen im Elementpfad der Fußzeile.
          • \n' + + '
          \n' + + '\n' + + '

          Die Pfeiltasten Abwärts und Aufwärts

          \n' + + '\n' + + '
            \n' + + '
          • wechseln zwischen Menüelementen in einem Menü.
          • \n' + + '
          • wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.
          • \n' + + '
          \n' + + '\n' + + '

          Die Pfeiltasten rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.

          \n' + + '\n' + + '

          Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die ESC-Taste.

          \n' + + '\n' + + '

          Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der ESC-Taste auch\n' + + ' die Tastaturnavigation beendet.

          \n' + + '\n' + + '

          Ein Menüelement oder eine Symbolleistenschaltfläche ausführen

          \n' + + '\n' + + '

          Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie Zurück, Eingabe\n' + + ' oder die Leertaste, um das Element auszuführen.

          \n' + + '\n' + + '

          In Dialogfeldern ohne Registerkarten navigieren

          \n' + + '\n' + + '

          In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.

          \n' + + '\n' + + '

          Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie TAB oder UMSCHALT+TAB drücken.

          \n' + + '\n' + + '

          In Dialogfeldern mit Registerkarten navigieren

          \n' + + '\n' + + '

          In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.

          \n' + + '\n' + + '

          Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie TAB oder\n' + + ' UMSCHALT+TAB drücken.

          \n' + + '\n' + + '

          Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende Pfeiltaste\n' + + ' drücken, um durch die verfügbaren Registerkarten zu rotieren.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/el.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/el.js new file mode 100644 index 0000000..98afabe --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/el.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.el', +'

          Έναρξη πλοήγησης μέσω πληκτρολογίου

          \n' + + '\n' + + '
          \n' + + '
          Εστίαση στη γραμμή μενού
          \n' + + '
          Windows ή Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Εστίαση στη γραμμή εργαλείων
          \n' + + '
          Windows ή Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Εστίαση στο υποσέλιδο
          \n' + + '
          Windows ή Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Εστίαση στην ειδοποίηση
          \n' + + '
          Windows ή Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου
          \n' + + '
          Windows, Linux ή macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\n' + + ' όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.

          \n' + + '\n' + + '

          Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη

          \n' + + '\n' + + '

          Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο Tab.

          \n' + + '\n' + + '

          Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα Shift+Tab.

          \n' + + '\n' + + '

          Η σειρά Tab αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:

          \n' + + '\n' + + '
            \n' + + '
          1. Γραμμή μενού
          2. \n' + + '
          3. Κάθε ομάδα γραμμής εργαλείων
          4. \n' + + '
          5. Πλαϊνή γραμμή
          6. \n' + + '
          7. Διαδρομή στοιχείου στο υποσέλιδο
          8. \n' + + '
          9. Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο
          10. \n' + + '
          11. Σύνδεσμος επωνυμίας στο υποσέλιδο
          12. \n' + + '
          13. Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο
          14. \n' + + '
          \n' + + '\n' + + '

          Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.

          \n' + + '\n' + + '

          Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε Shift+Tab\n' + + ' η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.

          \n' + + '\n' + + '

          Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη

          \n' + + '\n' + + '

          Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο βέλους.

          \n' + + '\n' + + '

          Με τα πλήκτρα αριστερού και δεξιού βέλους

          \n' + + '\n' + + '
            \n' + + '
          • γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.
          • \n' + + '
          • ανοίγει ένα υπομενού σε ένα μενού.
          • \n' + + '
          • γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.
          • \n' + + '
          • γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.
          • \n' + + '
          \n' + + '\n' + + '

          Με τα πλήκτρα επάνω και κάτω βέλους

          \n' + + '\n' + + '
            \n' + + '
          • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.
          • \n' + + '
          • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.
          • \n' + + '
          \n' + + '\n' + + '

          Με τα πλήκτρα βέλους γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.

          \n' + + '\n' + + '

          Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο Esc.

          \n' + + '\n' + + '

          Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο Esc,\n' + + ' γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.

          \n' + + '\n' + + '

          Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων

          \n' + + '\n' + + '

          Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα Return, Enter,\n' + + ' ή το πλήκτρο διαστήματος για να εκτελέσετε το στοιχείο.

          \n' + + '\n' + + '

          Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες

          \n' + + '\n' + + '

          Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

          \n' + + '\n' + + '

          Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα Tab ή Shift+Tab.

          \n' + + '\n' + + '

          Πλοήγηση σε παράθυρα διαλόγου με καρτέλες

          \n' + + '\n' + + '

          Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

          \n' + + '\n' + + '

          Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα Tab ή\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο βέλους\n' + + ' για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/en.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/en.js new file mode 100644 index 0000000..5dd753e --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/en.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.en', +'

          Begin keyboard navigation

          \n' + + '\n' + + '
          \n' + + '
          Focus the Menu bar
          \n' + + '
          Windows or Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Focus the Toolbar
          \n' + + '
          Windows or Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Focus the footer
          \n' + + '
          Windows or Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Focus the notification
          \n' + + '
          Windows or Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Focus a contextual toolbar
          \n' + + '
          Windows, Linux or macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' + + ' the Footer element path.

          \n' + + '\n' + + '

          Navigate between UI sections

          \n' + + '\n' + + '

          To move from one UI section to the next, press Tab.

          \n' + + '\n' + + '

          To move from one UI section to the previous, press Shift+Tab.

          \n' + + '\n' + + '

          The Tab order of these UI sections is:

          \n' + + '\n' + + '
            \n' + + '
          1. Menu bar
          2. \n' + + '
          3. Each toolbar group
          4. \n' + + '
          5. Sidebar
          6. \n' + + '
          7. Element path in the footer
          8. \n' + + '
          9. Word count toggle button in the footer
          10. \n' + + '
          11. Branding link in the footer
          12. \n' + + '
          13. Editor resize handle in the footer
          14. \n' + + '
          \n' + + '\n' + + '

          If a UI section is not present, it is skipped.

          \n' + + '\n' + + '

          If the footer has keyboard navigation focus, and there is no visible sidebar, pressing Shift+Tab\n' + + ' moves focus to the first toolbar group, not the last.

          \n' + + '\n' + + '

          Navigate within UI sections

          \n' + + '\n' + + '

          To move from one UI element to the next, press the appropriate Arrow key.

          \n' + + '\n' + + '

          The Left and Right arrow keys

          \n' + + '\n' + + '
            \n' + + '
          • move between menus in the menu bar.
          • \n' + + '
          • open a sub-menu in a menu.
          • \n' + + '
          • move between buttons in a toolbar group.
          • \n' + + '
          • move between items in the footer’s element path.
          • \n' + + '
          \n' + + '\n' + + '

          The Down and Up arrow keys

          \n' + + '\n' + + '
            \n' + + '
          • move between menu items in a menu.
          • \n' + + '
          • move between items in a toolbar pop-up menu.
          • \n' + + '
          \n' + + '\n' + + '

          Arrow keys cycle within the focused UI section.

          \n' + + '\n' + + '

          To close an open menu, an open sub-menu, or an open pop-up menu, press the Esc key.

          \n' + + '\n' + + '

          If the current focus is at the ‘top’ of a particular UI section, pressing the Esc key also exits\n' + + ' keyboard navigation entirely.

          \n' + + '\n' + + '

          Execute a menu item or toolbar button

          \n' + + '\n' + + '

          When the desired menu item or toolbar button is highlighted, press Return, Enter,\n' + + ' or the Space bar to execute the item.

          \n' + + '\n' + + '

          Navigate non-tabbed dialogs

          \n' + + '\n' + + '

          In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.

          \n' + + '\n' + + '

          Navigate between interactive dialog components by pressing Tab or Shift+Tab.

          \n' + + '\n' + + '

          Navigate tabbed dialogs

          \n' + + '\n' + + '

          In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.

          \n' + + '\n' + + '

          Navigate between interactive components of this dialog tab by pressing Tab or\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate Arrow\n' + + ' key to cycle through the available tabs.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/es.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/es.js new file mode 100644 index 0000000..e426c2e --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/es.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.es', +'

          Iniciar la navegación con el teclado

          \n' + + '\n' + + '
          \n' + + '
          Enfocar la barra de menús
          \n' + + '
          Windows o Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Enfocar la barra de herramientas
          \n' + + '
          Windows o Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Enfocar el pie de página
          \n' + + '
          Windows o Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Enfocar la notificación
          \n' + + '
          Windows o Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Enfocar una barra de herramientas contextual
          \n' + + '
          Windows, Linux o macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\n' + + ' la ruta de elemento del pie de página.

          \n' + + '\n' + + '

          Navegar entre las secciones de la IU

          \n' + + '\n' + + '

          Para pasar de una sección de la IU a la siguiente, pulse la tecla Tab.

          \n' + + '\n' + + '

          Para pasar de una sección de la IU a la anterior, pulse Mayús+Tab.

          \n' + + '\n' + + '

          El orden de tabulación de estas secciones de la IU es:

          \n' + + '\n' + + '
            \n' + + '
          1. Barra de menús
          2. \n' + + '
          3. Cada grupo de barra de herramientas
          4. \n' + + '
          5. Barra lateral
          6. \n' + + '
          7. Ruta del elemento en el pie de página
          8. \n' + + '
          9. Botón de alternancia de recuento de palabras en el pie de página
          10. \n' + + '
          11. Enlace de personalización de marca en el pie de página
          12. \n' + + '
          13. Controlador de cambio de tamaño en el pie de página
          14. \n' + + '
          \n' + + '\n' + + '

          Si una sección de la IU no está presente, esta se omite.

          \n' + + '\n' + + '

          Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar Mayús+Tab,\n' + + ' el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.

          \n' + + '\n' + + '

          Navegar dentro de las secciones de la IU

          \n' + + '\n' + + '

          Para pasar de un elemento de la IU al siguiente, pulse la tecla de flecha correspondiente.

          \n' + + '\n' + + '

          Las teclas de flecha izquierda y derecha permiten

          \n' + + '\n' + + '
            \n' + + '
          • desplazarse entre los menús de la barra de menús.
          • \n' + + '
          • abrir el submenú de un menú.
          • \n' + + '
          • desplazarse entre los botones de un grupo de barra de herramientas.
          • \n' + + '
          • desplazarse entre los elementos de la ruta de elemento del pie de página.
          • \n' + + '
          \n' + + '\n' + + '

          Las teclas de flecha abajo y arriba permiten

          \n' + + '\n' + + '
            \n' + + '
          • desplazarse entre los elementos de menú de un menú.
          • \n' + + '
          • desplazarse entre los elementos de un menú emergente de una barra de herramientas.
          • \n' + + '
          \n' + + '\n' + + '

          Las teclas de flecha van cambiando dentro de la sección de la IU enfocada.

          \n' + + '\n' + + '

          Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla Esc.

          \n' + + '\n' + + '

          Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla Esc saldrá\n' + + ' de la navegación con el teclado por completo.

          \n' + + '\n' + + '

          Ejecutar un elemento de menú o un botón de barra de herramientas

          \n' + + '\n' + + '

          Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla Retorno o Entrar,\n' + + ' o la barra espaciadora para ejecutar el elemento.

          \n' + + '\n' + + '

          Navegar por cuadros de diálogo sin pestañas

          \n' + + '\n' + + '

          En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.

          \n' + + '\n' + + '

          Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas Tab o Mayús+Tab.

          \n' + + '\n' + + '

          Navegar por cuadros de diálogo con pestañas

          \n' + + '\n' + + '

          En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.

          \n' + + '\n' + + '

          Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas Tab o\n' + + ' Mayús+Tab.

          \n' + + '\n' + + '

          Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de flecha\n' + + ' correspondiente para moverse por las pestañas disponibles.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/eu.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/eu.js new file mode 100644 index 0000000..c18b940 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/eu.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu', +'

          Hasi teklatuaren nabigazioa

          \n' + + '\n' + + '
          \n' + + '
          Fokuratu menu-barra
          \n' + + '
          Windows edo Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokuratu tresna-barra
          \n' + + '
          Windows edo Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokuratu orri-oina
          \n' + + '
          Windows edo Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokuratu jakinarazpena
          \n' + + '
          Windows edo Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokuratu testuinguruaren tresna-barra
          \n' + + '
          Windows, Linux edo macOS: Ktrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\n' + + ' orri-oineko elementuaren bidea.

          \n' + + '\n' + + '

          Nabigatu EIko atalen artean

          \n' + + '\n' + + '

          EIko atal batetik hurrengora mugitzeko, sakatu Tabuladorea.

          \n' + + '\n' + + '

          EIko atal batetik aurrekora mugitzeko, sakatu Maius+Tabuladorea.

          \n' + + '\n' + + '

          EIko atal hauen Tabuladorea da:

          \n' + + '\n' + + '
            \n' + + '
          1. Menu-barra
          2. \n' + + '
          3. Tresna-barraren talde bakoitza
          4. \n' + + '
          5. Alboko barra
          6. \n' + + '
          7. Orri-oineko elementuaren bidea
          8. \n' + + '
          9. Orri-oneko urrats-kontaketa txandakatzeko botoia
          10. \n' + + '
          11. Orri-oineko marken esteka
          12. \n' + + '
          13. Orri-oineko editorearen tamaina aldatzeko heldulekua
          14. \n' + + '
          \n' + + '\n' + + '

          EIko atal bat ez badago, saltatu egin da.

          \n' + + '\n' + + '

          Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, Maius+Tabuladorea sakatuz gero,\n' + + ' fokua tresna-barrako lehen taldera eramaten da, ez azkenera.

          \n' + + '\n' + + '

          Nabigatu EIko atalen barruan

          \n' + + '\n' + + '

          EIko elementu batetik hurrengora mugitzeko, sakatu dagokion Gezia tekla.

          \n' + + '\n' + + '

          Ezkerrera eta Eskuinera gezi-teklak

          \n' + + '\n' + + '
            \n' + + '
          • menu-barrako menuen artean mugitzen da.
          • \n' + + '
          • ireki azpimenu bat menuan.
          • \n' + + '
          • mugitu botoi batetik bestera tresna-barren talde batean.
          • \n' + + '
          • mugitu orri-oineko elementuaren bideko elementu batetik bestera.
          • \n' + + '
          \n' + + '\n' + + '

          Gora eta Behera gezi-teklak

          \n' + + '\n' + + '
            \n' + + '
          • mugitu menu bateko menu-elementuen artean.
          • \n' + + '
          • mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.
          • \n' + + '
          \n' + + '\n' + + '

          Gezia teklen zikloa nabarmendutako EI atalen barruan.

          \n' + + '\n' + + '

          Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu Ihes tekla.

          \n' + + '\n' + + '

          Une horretan fokuratzea EIko atal jakin baten "goialdean" badago, Ihes tekla sakatuz gero\n' + + ' teklatuaren nabigaziotik irtengo zara.

          \n' + + '\n' + + '

          Exekutatu menuko elementu bat edo tresna-barrako botoi bat

          \n' + + '\n' + + '

          Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu Itzuli, Sartu\n' + + ' edo Zuriune-barra elementua exekutatzeko.

          \n' + + '\n' + + '

          Nabigatu fitxarik gabeko elkarrizketak

          \n' + + '\n' + + '

          Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.

          \n' + + '\n' + + '

          Nabigatu elkarrizketa interaktiboko osagai batetik bestera Tabuladorea edo Maius+Tabuladorea sakatuta.

          \n' + + '\n' + + '

          Nabigatu fitxadun elkarrizketak

          \n' + + '\n' + + '

          Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.

          \n' + + '\n' + + '

          Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera Tabuladorea edo\n' + + ' Maius+Tabuladorea sakatuta.

          \n' + + '\n' + + '

          Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion Gezia\n' + + ' tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/fa.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fa.js new file mode 100644 index 0000000..2a55012 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fa.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa', +'

          شروع پیمایش صفحه‌کلید

          \n' + + '\n' + + '
          \n' + + '
          تمرکز بر نوار منو
          \n' + + '
          Windows یا Linux:‎‏: Alt+F9
          \n' + + '
          ‎‏macOS: ⌥F9‎‏
          \n' + + '
          تمرکز بر نوار ابزار
          \n' + + '
          Windows یا Linux‎‏: Alt+F10
          \n' + + '
          ‎‏macOS: ⌥F10‎‏
          \n' + + '
          تمرکز بر پانویس
          \n' + + '
          Windows یا Linux‎‏: Alt+F11
          \n' + + '
          ‎‏macOS: ⌥F11‎‏
          \n' + + '
          تمرکز اعلان
          \n' + + '
          ویندوز یا لینوکس: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          تمرکز بر نوار ابزار بافتاری
          \n' + + '
          Windows ،Linux یا macOS:‏ Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\n' + + ' مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.

          \n' + + '\n' + + '

          پیمایش بین بخش‌های رابط کاربری

          \n' + + '\n' + + '

          برای جابجایی از یک بخش رابط کاربری به بخش بعدی، Tab را فشار دهید.

          \n' + + '\n' + + '

          برای جابجایی از یک بخش رابط کاربری به بخش قبلی، Shift+Tab را فشار دهید.

          \n' + + '\n' + + '

          ترتیب Tab این بخش‌های رابط کاربری عبارتند از:

          \n' + + '\n' + + '
            \n' + + '
          1. نوار منو
          2. \n' + + '
          3. هر گروه نوار ابزار
          4. \n' + + '
          5. نوار کناری
          6. \n' + + '
          7. مسیر عنصر در پانویس
          8. \n' + + '
          9. دکمه تغییر وضعیت تعداد کلمات در پانویس
          10. \n' + + '
          11. پیوند نمانام‌سازی در پانویس
          12. \n' + + '
          13. دسته تغییر اندازه ویرایشگر در پانویس
          14. \n' + + '
          \n' + + '\n' + + '

          اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.

          \n' + + '\n' + + '

          اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن Shift+Tab\n' + + ' تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.

          \n' + + '\n' + + '

          پیمایش در بخش‌های رابط کاربری

          \n' + + '\n' + + '

          برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید جهت‌نمای مناسب را فشار دهید.

          \n' + + '\n' + + '

          کلیدهای جهت‌نمای چپ و راست

          \n' + + '\n' + + '
            \n' + + '
          • جابجایی بین منوها در نوار منو.
          • \n' + + '
          • باز کردن منوی فرعی در یک منو.
          • \n' + + '
          • جابجایی بین دکمه‌ها در یک گروه نوار ابزار.
          • \n' + + '
          • جابجایی بین موارد در مسیر عنصر پانویس.
          • \n' + + '
          \n' + + '\n' + + '

          کلیدهای جهت‌نمای پایین و بالا

          \n' + + '\n' + + '
            \n' + + '
          • جابجایی بین موارد منو در یک منو.
          • \n' + + '
          • جابجایی بین موارد در یک منوی بازشوی نوار ابزار.
          • \n' + + '
          \n' + + '\n' + + '

          کلیدهایجهت‌نما در بخش رابط کاربری متمرکز می‌چرخند.

          \n' + + '\n' + + '

          برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید Esc را فشار دهید.

          \n' + + '\n' + + '

          اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید Esc نیز موجب\n' + + ' خروج کامل از پیمایش صفحه‌کلید می‌شود.

          \n' + + '\n' + + '

          اجرای یک مورد منو یا دکمه نوار ابزار

          \n' + + '\n' + + '

          وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه بازگشت، Enter،\n' + + ' یا نوار Space را فشار دهید تا مورد را اجرا کنید.

          \n' + + '\n' + + '

          پیمایش در کادرهای گفتگوی بدون زبانه

          \n' + + '\n' + + '

          در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.

          \n' + + '\n' + + '

          با فشردن Tab یا Shift+Tab، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.

          \n' + + '\n' + + '

          پیمایش کادرهای گفتگوی زبانه‌دار

          \n' + + '\n' + + '

          در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.

          \n' + + '\n' + + '

          با فشردن Tab یا\n' + + ' Shift+Tab، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.

          \n' + + '\n' + + '

          با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید جهت‌نمای\n' + + ' مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/fi.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fi.js new file mode 100644 index 0000000..f01dc91 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi', +'

          Näppäimistönavigoinnin aloittaminen

          \n' + + '\n' + + '
          \n' + + '
          Siirrä kohdistus valikkopalkkiin
          \n' + + '
          Windows tai Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Siirrä kohdistus työkalupalkkiin
          \n' + + '
          Windows tai Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Siirrä kohdistus alatunnisteeseen
          \n' + + '
          Windows tai Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Keskitä ilmoitukseen
          \n' + + '
          Windows ja Linux: Alt + F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Siirrä kohdistus kontekstuaaliseen työkalupalkkiin
          \n' + + '
          Windows, Linux tai macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\n' + + ' kyseessä on Alatunniste-elementin polun ensimmäinen kohde.

          \n' + + '\n' + + '

          Käyttöliittymän eri osien välillä navigointi

          \n' + + '\n' + + '

          Paina sarkainnäppäintä siirtyäksesi käyttöliittymän osasta seuraavaan.

          \n' + + '\n' + + '

          Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina Shift+sarkainnäppäin.

          \n' + + '\n' + + '

          Sarkainnäppäin siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:

          \n' + + '\n' + + '
            \n' + + '
          1. Valikkopalkki
          2. \n' + + '
          3. Työkalupalkin ryhmät
          4. \n' + + '
          5. Sivupalkki
          6. \n' + + '
          7. Elementin polku alatunnisteessa
          8. \n' + + '
          9. Sanalaskurin vaihtopainike alatunnisteessa
          10. \n' + + '
          11. Brändäyslinkki alatunnisteessa
          12. \n' + + '
          13. Editorin koon muuttamisen kahva alatunnisteessa
          14. \n' + + '
          \n' + + '\n' + + '

          Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.

          \n' + + '\n' + + '

          Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, Shift+sarkainnäppäin\n' + + ' siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.

          \n' + + '\n' + + '

          Käyttöliittymän eri osien sisällä navigointi

          \n' + + '\n' + + '

          Paina nuolinäppäimiä siirtyäksesi käyttöliittymäelementistä seuraavaan.

          \n' + + '\n' + + '

          Vasen- ja Oikea-nuolinäppäimet

          \n' + + '\n' + + '
            \n' + + '
          • siirtävät sinua valikkopalkin valikoiden välillä.
          • \n' + + '
          • avaavat valikon alavalikon.
          • \n' + + '
          • siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.
          • \n' + + '
          • siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.
          • \n' + + '
          \n' + + '\n' + + '

          Alas- ja Ylös-nuolinäppäimet

          \n' + + '\n' + + '
            \n' + + '
          • siirtävät sinua valikon valikkokohteiden välillä.
          • \n' + + '
          • siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.
          • \n' + + '
          \n' + + '\n' + + '

          Nuolinäppäimet siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.

          \n' + + '\n' + + '

          Paina Esc-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.

          \n' + + '\n' + + '

          Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, Esc-näppäimen painaminen\n' + + ' poistuu myös näppäimistönavigoinnista kokonaan.

          \n' + + '\n' + + '

          Suorita valikkokohde tai työkalupalkin painike

          \n' + + '\n' + + '

          Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina Return-, Enter-\n' + + ' tai välilyöntinäppäintä suorittaaksesi kohteen.

          \n' + + '\n' + + '

          Välilehdittömissä valintaikkunoissa navigointi

          \n' + + '\n' + + '

          Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.

          \n' + + '\n' + + '

          Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla sarkainnäppäintä tai Shift+sarkainnäppäin.

          \n' + + '\n' + + '

          Välilehdellisissä valintaikkunoissa navigointi

          \n' + + '\n' + + '

          Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.

          \n' + + '\n' + + '

          Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla sarkainnäppäintä tai\n' + + ' Shift+sarkainnäppäin.

          \n' + + '\n' + + '

          Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa nuolinäppäintä\n' + + ' siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/fr_FR.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fr_FR.js new file mode 100644 index 0000000..3f611e8 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/fr_FR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR', +'

          Débuter la navigation au clavier

          \n' + + '\n' + + '
          \n' + + '
          Cibler la barre du menu
          \n' + + '
          Windows ou Linux : Alt+F9
          \n' + + '
          macOS : ⌥F9
          \n' + + "
          Cibler la barre d'outils
          \n" + + '
          Windows ou Linux : Alt+F10
          \n' + + '
          macOS : ⌥F10
          \n' + + '
          Cibler le pied de page
          \n' + + '
          Windows ou Linux : Alt+F11
          \n' + + '
          macOS : ⌥F11
          \n' + + '
          Cibler la notification
          \n' + + '
          Windows ou Linux : Alt+F12
          \n' + + '
          macOS : ⌥F12
          \n' + + "
          Cibler une barre d'outils contextuelle
          \n" + + '
          Windows, Linux ou macOS : Ctrl+F9
          \n' + + '
          \n' + + '\n' + + "

          La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\n" + + " chemin d'éléments du pied de page.

          \n" + + '\n' + + "

          Naviguer entre les sections de l'interface utilisateur

          \n" + + '\n' + + "

          Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur Tabulation.

          \n" + + '\n' + + "

          Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur Maj+Tabulation.

          \n" + + '\n' + + "

          L'ordre de Tabulation de ces sections de l'interface utilisateur est le suivant :

          \n" + + '\n' + + '
            \n' + + '
          1. Barre du menu
          2. \n' + + "
          3. Chaque groupe de barres d'outils
          4. \n" + + '
          5. Barre latérale
          6. \n' + + "
          7. Chemin d'éléments du pied de page
          8. \n" + + "
          9. Bouton d'activation du compteur de mots dans le pied de page
          10. \n" + + '
          11. Lien de marque dans le pied de page
          12. \n' + + "
          13. Poignée de redimensionnement de l'éditeur dans le pied de page
          14. \n" + + '
          \n' + + '\n' + + "

          Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.

          \n" + + '\n' + + "

          Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur Maj+Tabulation\n" + + " déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.

          \n" + + '\n' + + "

          Naviguer au sein des sections de l'interface utilisateur

          \n" + + '\n' + + "

          Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la Flèche appropriée.

          \n" + + '\n' + + '

          Les touches fléchées Gauche et Droite

          \n' + + '\n' + + '
            \n' + + '
          • se déplacent entre les menus de la barre des menus.
          • \n' + + "
          • ouvrent un sous-menu au sein d'un menu.
          • \n" + + "
          • se déplacent entre les boutons d'un groupe de barres d'outils.
          • \n" + + "
          • se déplacent entre les éléments du chemin d'éléments du pied de page.
          • \n" + + '
          \n' + + '\n' + + '

          Les touches fléchées Bas et Haut

          \n' + + '\n' + + '
            \n' + + "
          • se déplacent entre les éléments de menu au sein d'un menu.
          • \n" + + "
          • se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.
          • \n" + + '
          \n' + + '\n' + + "

          Les Flèches parcourent la section de l'interface utilisateur ciblée.

          \n" + + '\n' + + '

          Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur Echap.

          \n' + + '\n' + + "

          Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur Echap permet également de quitter\n" + + ' entièrement la navigation au clavier.

          \n' + + '\n' + + "

          Exécuter un élément de menu ou un bouton de barre d'outils

          \n" + + '\n' + + "

          Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche Retour arrière, Entrée\n" + + " ou la Barre d'espace pour exécuter l'élément.

          \n" + + '\n' + + '

          Naviguer au sein de dialogues sans onglets

          \n' + + '\n' + + "

          Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.

          \n" + + '\n' + + '

          Naviguez entre les composants du dialogue interactif en appuyant sur Tabulation ou Maj+Tabulation.

          \n' + + '\n' + + '

          Naviguer au sein de dialogues avec onglets

          \n' + + '\n' + + "

          Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.

          \n" + + '\n' + + '

          Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur Tabulation ou\n' + + ' Maj+Tabulation.

          \n' + + '\n' + + "

          Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la Flèche\n" + + ' appropriée pour parcourir les onglets disponibles.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/he_IL.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/he_IL.js new file mode 100644 index 0000000..7d6513a --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/he_IL.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL', +'

          התחל ניווט במקלדת

          \n' + + '\n' + + '
          \n' + + '
          התמקד בשורת התפריטים
          \n' + + '
          Windows או Linux:‏ Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          העבר מיקוד לסרגל הכלים
          \n' + + '
          Windows או Linux:‏ Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          העבר מיקוד לכותרת התחתונה
          \n' + + '
          Windows או Linux:‏ Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          העבר מיקוד להודעה
          \n' + + '
          Windows או Linux:‏ Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          העבר מיקוד לסרגל כלים הקשרי
          \n' + + '
          Windows‏, Linux או macOS:‏ Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\n' + + ' הנתיב של רכיב הכותרת התחתונה.

          \n' + + '\n' + + '

          עבור בין מקטעים במסך

          \n' + + '\n' + + '

          כדי לעבור בין המקטעים במסך, הקש Tab.

          \n' + + '\n' + + '

          כדי לעבור למקטע הקודם במסך, הקש Shift+Tab.

          \n' + + '\n' + + '

          הסדר מבחינת מקש Tab של הרכיבים במסך:

          \n' + + '\n' + + '
            \n' + + '
          1. שורת התפריטים
          2. \n' + + '
          3. כל קבוצה בסרגל הכלים
          4. \n' + + '
          5. הסרגל הצידי
          6. \n' + + '
          7. נתיב של רכיב בכותרת התחתונה
          8. \n' + + '
          9. לחצן לספירת מילים בכותרת התחתונה
          10. \n' + + '
          11. קישור של המותג בכותרת התחתונה
          12. \n' + + '
          13. ידית לשינוי גודל עבור העורך בכותרת התחתונה
          14. \n' + + '
          \n' + + '\n' + + '

          אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.

          \n' + + '\n' + + '

          אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש Shift+Tab\n' + + ' מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.

          \n' + + '\n' + + '

          עבור בתוך מקטעים במסך

          \n' + + '\n' + + '

          כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש החץ המתאים.

          \n' + + '\n' + + '

          מקשי החיצים שמאלה וימינה

          \n' + + '\n' + + '
            \n' + + '
          • עבור בין תפריטים בשורת התפריטים.
          • \n' + + '
          • פתח תפריט משני בתפריט.
          • \n' + + '
          • עבור בין לחצנים בקבוצה בסרגל הכלים.
          • \n' + + '
          • עבור בין פריטים ברכיב בכותרת התחתונה.
          • \n' + + '
          \n' + + '\n' + + '

          מקשי החיצים למטה ולמעלה

          \n' + + '\n' + + '
            \n' + + '
          • עבור בין פריטים בתפריט.
          • \n' + + '
          • עבור בין פריטים בחלון הקובץ של סרגל הכלים.
          • \n' + + '
          \n' + + '\n' + + '

          מקשי החצים משתנים בתוך המקטע במסך שעליו נמצא המיקוד.

          \n' + + '\n' + + '

          כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על Esc.

          \n' + + '\n' + + "

          אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על Esc מביאה גם ליציאה\n" + + ' מהניווט במקלדת לחלוטין.

          \n' + + '\n' + + '

          הפעל פריט בתפריט או לחצן בסרגל הכלים

          \n' + + '\n' + + '

          כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על Return, Enter,\n' + + ' או על מקש הרווח כדי להפעיל את הפריט.

          \n' + + '\n' + + '

          ניווט בחלונות דו-שיח בלי כרטיסיות

          \n' + + '\n' + + '

          בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.

          \n' + + '\n' + + '

          עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או Shift+Tab.

          \n' + + '\n' + + '

          ניווט בחלונות דו-שיח עם כרטיסיות

          \n' + + '\n' + + '

          בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.

          \n' + + '\n' + + '

          עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על החץהמתאים\n' + + ' כדי לעבור בין הכרטיסיות הזמינות.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/hi.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hi.js new file mode 100644 index 0000000..ef59a5c --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi', +'

          कीबोर्ड नेविगेशन शुरू करें

          \n' + + '\n' + + '
          \n' + + '
          मेन्यू बार पर फ़ोकस करें
          \n' + + '
          Windows या Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          टूलबार पर फ़ोकस करें
          \n' + + '
          Windows या Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          फ़ुटर पर फ़ोकस करें
          \n' + + '
          Windows या Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          नोटिफ़िकेशन फ़ोकस
          \n' + + '
          Windows या Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          प्रासंगिक टूलबार पर फ़ोकस करें
          \n' + + '
          Windows, Linux या macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\n' + + ' रेखांकित किया जाएगा।

          \n' + + '\n' + + '

          UI सेक्शन के बीच नेविगेट करें

          \n' + + '\n' + + '

          एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, Tab दबाएं।

          \n' + + '\n' + + '

          एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, Shift+Tab दबाएं।

          \n' + + '\n' + + '

          इन UI सेक्शन का Tab क्रम नीचे दिया गया है:

          \n' + + '\n' + + '
            \n' + + '
          1. मेन्यू बार
          2. \n' + + '
          3. प्रत्येक टूलबार समूह
          4. \n' + + '
          5. साइडबार
          6. \n' + + '
          7. फ़ुटर में तत्व पथ
          8. \n' + + '
          9. फ़ुटर में शब्द गणना टॉगल बटन
          10. \n' + + '
          11. फ़ुटर में ब्रांडिंग लिंक
          12. \n' + + '
          13. फ़ुटर में संपादक का आकार बदलने का हैंडल
          14. \n' + + '
          \n' + + '\n' + + '

          अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।

          \n' + + '\n' + + '

          अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो Shift+Tab दबाने से\n' + + ' फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।

          \n' + + '\n' + + '

          UI सेक्शन के भीतर नेविगेट करें

          \n' + + '\n' + + '

          एक UI तत्व से दूसरे में जाने के लिए उपयुक्त ऐरो कुंजी दबाएं।

          \n' + + '\n' + + '

          बाएं और दाएं ऐरो कुंजियां

          \n' + + '\n' + + '
            \n' + + '
          • मेन्यू बार में मेन्यू के बीच ले जाती हैं।
          • \n' + + '
          • मेन्यू में एक सब-मेन्यू खोलें।
          • \n' + + '
          • टूलबार समूह में बटनों के बीच ले जाएं।
          • \n' + + '
          • फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।
          • \n' + + '
          \n' + + '\n' + + '

          नीचे और ऊपर ऐरो कुंजियां

          \n' + + '\n' + + '
            \n' + + '
          • मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।
          • \n' + + '
          • टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।
          • \n' + + '
          \n' + + '\n' + + '

          फ़ोकस वाले UI सेक्शन के भीतर ऐरो कुंजियां चलाती रहती हैं।

          \n' + + '\n' + + '

          कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए Esc कुंजी दबाएं।

          \n' + + '\n' + + "

          अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो Esc कुंजी दबाने से भी\n" + + ' कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।

          \n' + + '\n' + + '

          मेन्यू आइटम या टूलबार बटन निष्पादित करें

          \n' + + '\n' + + '

          जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए Return, Enter,\n' + + ' या Space bar दबाएं।

          \n' + + '\n' + + '

          गैर-टैब वाले डायलॉग पर नेविगेट करें

          \n' + + '\n' + + '

          गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।

          \n' + + '\n' + + '

          Tab or Shift+Tab दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।

          \n' + + '\n' + + '

          टैब किए गए डायलॉग पर नेविगेट करें

          \n' + + '\n' + + '

          टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।

          \n' + + '\n' + + '

          इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए Tab या\n' + + ' Shift+Tab दबाएं।

          \n' + + '\n' + + '

          टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त ऐरो\n' + + ' कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/hr.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hr.js new file mode 100644 index 0000000..1bf35c5 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr', +'

          Početak navigacije na tipkovnici

          \n' + + '\n' + + '
          \n' + + '
          Fokusiranje trake izbornika
          \n' + + '
          Windows ili Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokusiranje alatne trake
          \n' + + '
          Windows ili Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokusiranje podnožja
          \n' + + '
          Windows ili Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokusiranje obavijesti
          \n' + + '
          Windows ili Linux: Alt + F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokusiranje kontekstne alatne trake
          \n' + + '
          Windows, Linux ili macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\n' + + ' putu elementa u podnožju.

          \n' + + '\n' + + '

          Navigacija između dijelova korisničkog sučelja

          \n' + + '\n' + + '

          Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite tabulator.

          \n' + + '\n' + + '

          Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite Shift + tabulator.

          \n' + + '\n' + + '

          Ovo je redoslijed pomicanja tabulatora po dijelovima korisničkog sučelja:

          \n' + + '\n' + + '
            \n' + + '
          1. Traka izbornika
          2. \n' + + '
          3. Pojedinačne grupe na alatnoj traci
          4. \n' + + '
          5. Bočna traka
          6. \n' + + '
          7. Put elemenata u podnožju
          8. \n' + + '
          9. Gumb za pomicanje po broju riječi u podnožju
          10. \n' + + '
          11. Veza na brand u podnožju
          12. \n' + + '
          13. Značajka za promjenu veličine alata za uređivanje u podnožju
          14. \n' + + '
          \n' + + '\n' + + '

          Ako neki dio korisničkog sučelja nije naveden, on se preskače.

          \n' + + '\n' + + '

          Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na Shift + tabulator\n' + + ' fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.

          \n' + + '\n' + + '

          Navigacija unutar dijelova korisničkog sučelja

          \n' + + '\n' + + '

          Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom strelicom.

          \n' + + '\n' + + '

          Tipke s lijevom i desnom strelicom

          \n' + + '\n' + + '
            \n' + + '
          • služe za pomicanje između izbornika na alatnoj traci.
          • \n' + + '
          • otvaraju podizbornik unutar izbornika.
          • \n' + + '
          • služe za pomicanje između gumba unutar skupina na alatnoj traci.
          • \n' + + '
          • služe za pomicanje između stavki na elementu puta u podnožju.
          • \n' + + '
          \n' + + '\n' + + '

          Tipke s donjom i gornjom strelicom

          \n' + + '\n' + + '
            \n' + + '
          • služe za pomicanje između stavki unutar izbornika.
          • \n' + + '
          • služe za pomicanje između stavki na alatnoj traci skočnog izbornika.
          • \n' + + '
          \n' + + '\n' + + '

          Tipkama strelica kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.

          \n' + + '\n' + + '

          Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku Esc.

          \n' + + '\n' + + '

          Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku Esc također\n' + + ' u potpunosti zatvarate navigaciju na tipkovnici.

          \n' + + '\n' + + '

          Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci

          \n' + + '\n' + + '

          Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku Return, Enter\n' + + ' ili razmak da biste pokrenuli željenu radnju.

          \n' + + '\n' + + '

          Navigacija dijaloškim okvirima izvan kartica

          \n' + + '\n' + + '

          Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.

          \n' + + '\n' + + '

          Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na tabulator ili Shift + tabulator.

          \n' + + '\n' + + '

          Navigacija dijaloškim okvirima u karticama

          \n' + + '\n' + + '

          Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.

          \n' + + '\n' + + '

          Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na tabulator ili\n' + + ' Shift + tabulator.

          \n' + + '\n' + + '

          Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom strelicom\n' + + ' za kružno pomicanje između dostupnih kartica.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/hu_HU.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hu_HU.js new file mode 100644 index 0000000..5c984bb --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/hu_HU.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU', +'

          Billentyűzetes navigáció indítása

          \n' + + '\n' + + '
          \n' + + '
          Fókusz a menüsávra
          \n' + + '
          Windows és Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fókusz az eszköztárra
          \n' + + '
          Windows és Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fókusz a láblécre
          \n' + + '
          Windows és Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Ráközelítés az értesítésre
          \n' + + '
          Windows vagy Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fókusz egy környezetfüggő eszköztárra
          \n' + + '
          Windows, Linux és macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\n' + + ' a lábléc elemútvonalán.

          \n' + + '\n' + + '

          Navigálás a felhasználói felület szakaszai között

          \n' + + '\n' + + '

          A felhasználói felület következő szakaszára váltáshoz nyomja meg a Tab billentyűt.

          \n' + + '\n' + + '

          A felhasználói felület előző szakaszára váltáshoz nyomja meg a Shift+Tab billentyűt.

          \n' + + '\n' + + '

          A Tab billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:

          \n' + + '\n' + + '
            \n' + + '
          1. Menüsáv
          2. \n' + + '
          3. Az egyes eszköztárcsoportok
          4. \n' + + '
          5. Oldalsáv
          6. \n' + + '
          7. Elemútvonal a láblécen
          8. \n' + + '
          9. Szószámátkapcsoló gomb a láblécen
          10. \n' + + '
          11. Márkalink a láblécen
          12. \n' + + '
          13. Szerkesztő átméretezési fogópontja a láblécen
          14. \n' + + '
          \n' + + '\n' + + '

          Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.

          \n' + + '\n' + + '

          Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a Shift+Tab\n' + + ' billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.

          \n' + + '\n' + + '

          Navigálás a felhasználói felület szakaszain belül

          \n' + + '\n' + + '

          A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő nyílbillentyűt.

          \n' + + '\n' + + '

          A bal és a jobb nyílgomb

          \n' + + '\n' + + '
            \n' + + '
          • a menüsávban a menük között vált.
          • \n' + + '
          • a menükben megnyit egy almenüt.
          • \n' + + '
          • az eszköztárcsoportban a gombok között vált.
          • \n' + + '
          • a lábléc elemútvonalán az elemek között vált.
          • \n' + + '
          \n' + + '\n' + + '

          A le és a fel nyílgomb

          \n' + + '\n' + + '
            \n' + + '
          • a menükben a menüpontok között vált.
          • \n' + + '
          • az eszköztár előugró menüjében az elemek között vált.
          • \n' + + '
          \n' + + '\n' + + '

          A nyílbillentyűk lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.

          \n' + + '\n' + + '

          A megnyitott menüket, almenüket és előugró menüket az Esc billentyűvel zárhatja be.

          \n' + + '\n' + + '

          Ha a fókusz az aktuális felületi elem „felső” részén van, az Esc billentyűvel az egész\n' + + ' billentyűzetes navigációból kilép.

          \n' + + '\n' + + '

          Menüpont vagy eszköztárgomb aktiválása

          \n' + + '\n' + + '

          Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a Return, az Enter\n' + + ' vagy a Szóköz billentyűt az adott elem vagy gomb aktiválásához.

          \n' + + '\n' + + '

          Navigálás a lapokkal nem rendelkező párbeszédablakokban

          \n' + + '\n' + + '

          A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.

          \n' + + '\n' + + '

          A párbeszédpanelek interaktív összetevői között a Tab vagy a Shift+Tab billentyűvel navigálhat.

          \n' + + '\n' + + '

          Navigálás a lapokkal rendelkező párbeszédablakokban

          \n' + + '\n' + + '

          A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.

          \n' + + '\n' + + '

          A párbeszédpanel e lapjának interaktív összetevői között a Tab vagy\n' + + ' Shift+Tab billentyűvel navigálhat.

          \n' + + '\n' + + '

          A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő nyílbillentyűt\n' + + ' a rendelkezésre álló lapok közötti lépkedéshez.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/id.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/id.js new file mode 100644 index 0000000..d607dd1 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/id.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.id', +'

          Memulai navigasi keyboard

          \n' + + '\n' + + '
          \n' + + '
          Fokus pada bilah Menu
          \n' + + '
          Windows atau Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokus pada Bilah Alat
          \n' + + '
          Windows atau Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokus pada footer
          \n' + + '
          Windows atau Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokuskan pemberitahuan
          \n' + + '
          Windows atau Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokus pada bilah alat kontekstual
          \n' + + '
          Windows, Linux, atau macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\n' + + ' alur elemen Footer.

          \n' + + '\n' + + '

          Berpindah antar-bagian UI

          \n' + + '\n' + + '

          Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan Tab.

          \n' + + '\n' + + '

          Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan Shift+Tab.

          \n' + + '\n' + + '

          Urutan Tab bagian-bagian UI ini adalah:

          \n' + + '\n' + + '
            \n' + + '
          1. Bilah menu
          2. \n' + + '
          3. Tiap grup bilah alat
          4. \n' + + '
          5. Bilah sisi
          6. \n' + + '
          7. Alur elemen di footer
          8. \n' + + '
          9. Tombol aktifkan/nonaktifkan jumlah kata di footer
          10. \n' + + '
          11. Tautan merek di footer
          12. \n' + + '
          13. Pengatur pengubahan ukuran editor di footer
          14. \n' + + '
          \n' + + '\n' + + '

          Jika suatu bagian UI tidak ada, bagian tersebut dilewati.

          \n' + + '\n' + + '

          Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan Shift+Tab\n' + + ' akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.

          \n' + + '\n' + + '

          Berpindah di dalam bagian-bagian UI

          \n' + + '\n' + + '

          Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol Panah yang sesuai.

          \n' + + '\n' + + '

          Tombol panah Kiri dan Kanan untuk

          \n' + + '\n' + + '
            \n' + + '
          • berpindah-pindah antar-menu di dalam bilah menu.
          • \n' + + '
          • membuka sub-menu di dalam menu.
          • \n' + + '
          • berpindah-pindah antar-tombol di dalam grup bilah alat.
          • \n' + + '
          • berpindah-pindah antar-item di dalam alur elemen footer.
          • \n' + + '
          \n' + + '\n' + + '

          Tombol panah Bawah dan Atas untuk

          \n' + + '\n' + + '
            \n' + + '
          • berpindah-pindah antar-item menu di dalam menu.
          • \n' + + '
          • berpindah-pindah antar-item di dalam menu pop-up bilah alat.
          • \n' + + '
          \n' + + '\n' + + '

          Tombol Panah hanya bergerak di dalam bagian UI yang difokuskan.

          \n' + + '\n' + + '

          Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol Esc.

          \n' + + '\n' + + '

          Jika fokus sedang berada di ‘atas’ bagian UI tertentu, menekan tombol Esc juga dapat mengeluarkan fokus\n' + + ' dari seluruh navigasi keyboard.

          \n' + + '\n' + + '

          Menjalankan item menu atau tombol bilah alat

          \n' + + '\n' + + '

          Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan Return, Enter,\n' + + ' atau Spasi untuk menjalankan item.

          \n' + + '\n' + + '

          Berpindah dalam dialog tanpa tab

          \n' + + '\n' + + '

          Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.

          \n' + + '\n' + + '

          Berpindah di antara komponen dalam dialog interaktif dengan menekan Tab atau Shift+Tab.

          \n' + + '\n' + + '

          Berpindah dalam dialog dengan tab

          \n' + + '\n' + + '

          Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.

          \n' + + '\n' + + '

          Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol Panah\n' + + ' yang sesuai untuk berpindah ke berbagai tab yang tersedia.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/it.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/it.js new file mode 100644 index 0000000..3a791c9 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/it.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.it', +'

          Iniziare la navigazione tramite tastiera

          \n' + + '\n' + + '
          \n' + + '
          Impostare lo stato attivo per la barra dei menu
          \n' + + '
          Windows o Linux: ALT+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Impostare lo stato attivo per la barra degli strumenti
          \n' + + '
          Windows o Linux: ALT+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Impostare lo stato attivo per il piè di pagina
          \n' + + '
          Windows o Linux: ALT+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Metti a fuoco la notifica
          \n' + + '
          Windows o Linux: ALT+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Impostare lo stato attivo per la barra degli strumenti contestuale
          \n' + + '
          Windows, Linux o macOS: CTRL+F9
          \n' + + '
          \n' + + '\n' + + "

          La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\n" + + " nel percorso dell'elemento del piè di pagina.

          \n" + + '\n' + + "

          Navigare tra le sezioni dell'interfaccia utente

          \n" + + '\n' + + "

          Per passare da una sezione dell'interfaccia utente alla successiva, premere TAB.

          \n" + + '\n' + + "

          Per passare da una sezione dell'interfaccia utente alla precedente, premere MAIUSC+TAB.

          \n" + + '\n' + + "

          L'ordine di tabulazione di queste sezioni dell'interfaccia utente è:

          \n" + + '\n' + + '
            \n' + + '
          1. Barra dei menu
          2. \n' + + '
          3. Ogni gruppo di barre degli strumenti
          4. \n' + + '
          5. Barra laterale
          6. \n' + + "
          7. Percorso dell'elemento nel piè di pagina
          8. \n" + + '
          9. Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina
          10. \n' + + '
          11. Collegamento al marchio nel piè di pagina
          12. \n' + + "
          13. Quadratino di ridimensionamento dell'editor nel piè di pagina
          14. \n" + + '
          \n' + + '\n' + + "

          Se una sezione dell'interfaccia utente non è presente, viene saltata.

          \n" + + '\n' + + '

          Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo MAIUSC+TAB\n' + + " si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.

          \n" + + '\n' + + "

          Navigare all'interno delle sezioni dell'interfaccia utente

          \n" + + '\n' + + "

          Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto freccia appropriato.

          \n" + + '\n' + + '

          I tasti freccia Sinistra e Destra

          \n' + + '\n' + + '
            \n' + + '
          • consentono di spostarsi tra i menu della barra dei menu.
          • \n' + + '
          • aprono un sottomenu in un menu.
          • \n' + + '
          • consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.
          • \n' + + "
          • consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.
          • \n" + + '
          \n' + + '\n' + + '

          I tasti freccia Giù e Su

          \n' + + '\n' + + '
            \n' + + '
          • consentono di spostarsi tra le voci di un menu.
          • \n' + + '
          • consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.
          • \n' + + '
          \n' + + '\n' + + "

          I tasti freccia consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.

          \n" + + '\n' + + '

          Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto ESC.

          \n' + + '\n' + + "

          Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto ESC si esce\n" + + ' completamente dalla navigazione tramite tastiera.

          \n' + + '\n' + + '

          Eseguire una voce di menu o un pulsante della barra degli strumenti

          \n' + + '\n' + + '

          Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto diritorno a capo, il tasto Invio\n' + + ' o la barra spaziatrice per eseguirli.

          \n' + + '\n' + + '

          Navigare nelle finestre di dialogo non a schede

          \n' + + '\n' + + "

          Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.

          \n" + + '\n' + + '

          Per spostarsi tra i componenti interattivi della finestra di dialogo, premere TAB o MAIUSC+TAB.

          \n' + + '\n' + + '

          Navigare nelle finestre di dialogo a schede

          \n' + + '\n' + + "

          Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.

          \n" + + '\n' + + '

          Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere TAB o\n' + + ' MAIUSC+TAB.

          \n' + + '\n' + + "

          Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto freccia\n" + + ' appropriato per scorrere le schede disponibili.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ja.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ja.js new file mode 100644 index 0000000..26872db --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ja.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja', +'

          キーボード ナビゲーションの開始

          \n' + + '\n' + + '
          \n' + + '
          メニュー バーをフォーカス
          \n' + + '
          Windows または Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          ツール バーをフォーカス
          \n' + + '
          Windows または Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          フッターをフォーカス
          \n' + + '
          Windows または Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          通知にフォーカス
          \n' + + '
          Windows または Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          コンテキスト ツール バーをフォーカス
          \n' + + '
          Windows、Linux または macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\n' + + ' 下線が引かれます。

          \n' + + '\n' + + '

          UI セクション間の移動

          \n' + + '\n' + + '

          次の UI セクションに移動するには、Tab を押します。

          \n' + + '\n' + + '

          前の UI セクションに移動するには、Shift+Tab を押します。

          \n' + + '\n' + + '

          これらの UI セクションの Tab の順序:

          \n' + + '\n' + + '
            \n' + + '
          1. メニュー バー
          2. \n' + + '
          3. 各ツール バー グループ
          4. \n' + + '
          5. サイド バー
          6. \n' + + '
          7. フッターの要素パス
          8. \n' + + '
          9. フッターの単語数切り替えボタン
          10. \n' + + '
          11. フッターのブランド リンク
          12. \n' + + '
          13. フッターのエディター サイズ変更ハンドル
          14. \n' + + '
          \n' + + '\n' + + '

          UI セクションが存在しない場合は、スキップされます。

          \n' + + '\n' + + '

          フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、Shift+Tab を押すと、\n' + + ' フォーカスが最後ではなく最初のツール バー グループに移動します。

          \n' + + '\n' + + '

          UI セクション内の移動

          \n' + + '\n' + + '

          次の UI 要素に移動するには、適切な矢印キーを押します。

          \n' + + '\n' + + '

          左矢印右矢印のキー

          \n' + + '\n' + + '
            \n' + + '
          • メニュー バーのメニュー間で移動します。
          • \n' + + '
          • メニュー内のサブメニューを開きます。
          • \n' + + '
          • ツール バー グループのボタン間で移動します。
          • \n' + + '
          • フッターの要素パスの項目間で移動します。
          • \n' + + '
          \n' + + '\n' + + '

          下矢印上矢印のキー

          \n' + + '\n' + + '
            \n' + + '
          • メニュー内のメニュー項目間で移動します。
          • \n' + + '
          • ツール バー ポップアップ メニュー内のメニュー項目間で移動します。
          • \n' + + '
          \n' + + '\n' + + '

          矢印キーで、フォーカスされた UI セクション内で循環します。

          \n' + + '\n' + + '

          開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、Esc キーを押します。

          \n' + + '\n' + + '

          現在のフォーカスが特定の UI セクションの「一番上」にある場合、Esc キーを押すと\n' + + ' キーボード ナビゲーションも完全に閉じられます。

          \n' + + '\n' + + '

          メニュー項目またはツール バー ボタンの実行

          \n' + + '\n' + + '

          目的のメニュー項目やツール バー ボタンが強調表示されている場合、リターンEnter、\n' + + ' またはスペース キーを押して項目を実行します。

          \n' + + '\n' + + '

          タブのないダイアログの移動

          \n' + + '\n' + + '

          タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。

          \n' + + '\n' + + '

          Tab または Shift+Tab を押して、対話型ダイアログ コンポーネント間で移動します。

          \n' + + '\n' + + '

          タブ付きダイアログの移動

          \n' + + '\n' + + '

          タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。

          \n' + + '\n' + + '

          Tab または\n' + + ' Shift+Tab を押して、このダイアログ タブの対話型コンポーネント間で移動します。

          \n' + + '\n' + + '

          タブ メニューをフォーカスしてから適切な矢印キーを押して表示可能なタブを循環して、\n' + + ' 別のダイアログに切り替えます。

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/kk.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/kk.js new file mode 100644 index 0000000..e31532f --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/kk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk', +'

          Пернетақта навигациясын бастау

          \n' + + '\n' + + '
          \n' + + '
          Мәзір жолағын фокустау
          \n' + + '
          Windows немесе Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Құралдар тақтасын фокустау
          \n' + + '
          Windows немесе Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Төменгі деректемені фокустау
          \n' + + '
          Windows немесе Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Хабарландыруды белгілеу
          \n' + + '
          Windows немесе Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Мәтінмәндік құралдар тақтасын фокустау
          \n' + + '
          Windows, Linux немесе macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\n' + + ' бірінші ПИ элементінен басталады.

          \n' + + '\n' + + '

          ПИ бөлімдері арасында навигациялау

          \n' + + '\n' + + '

          Бір ПИ бөлімінен келесісіне өту үшін Tab пернесін басыңыз.

          \n' + + '\n' + + '

          Бір ПИ бөлімінен алдыңғысына өту үшін Shift+Tab пернесін басыңыз.

          \n' + + '\n' + + '

          Осы ПИ бөлімдерінің Tab реті:

          \n' + + '\n' + + '
            \n' + + '
          1. Мәзір жолағы
          2. \n' + + '
          3. Әрбір құралдар тақтасы тобы
          4. \n' + + '
          5. Бүйірлік жолақ
          6. \n' + + '
          7. Төменгі деректемедегі элемент жолы
          8. \n' + + '
          9. Төменгі деректемедегі сөздер санын ауыстыру түймесі
          10. \n' + + '
          11. Төменгі деректемедегі брендингтік сілтеме
          12. \n' + + '
          13. Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы
          14. \n' + + '
          \n' + + '\n' + + '

          ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.

          \n' + + '\n' + + '

          Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, Shift+Tab тіркесімін басу әрекеті\n' + + ' фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.

          \n' + + '\n' + + '

          ПИ бөлімдерінде навигациялау

          \n' + + '\n' + + '

          Бір ПИ элементінен келесісіне өту үшін Arrow (Көрсеткі) пернесін басыңыз.

          \n' + + '\n' + + '

          Left (Сол жақ) және Right (Оң жақ) көрсеткі пернелері

          \n' + + '\n' + + '
            \n' + + '
          • мәзір жолағындағы мәзірлер арасында жылжыту.
          • \n' + + '
          • мәзірде ішкі мәзірді ашу.
          • \n' + + '
          • құралдар тақтасы тобындағы түймелер арасында жылжыту.
          • \n' + + '
          • төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.
          • \n' + + '
          \n' + + '\n' + + '

          Down (Төмен) және Up (Жоғары) көрсеткі пернелері

          \n' + + '\n' + + '
            \n' + + '
          • мәзірдегі мәзір элементтері арасында жылжыту.
          • \n' + + '
          • құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.
          • \n' + + '
          \n' + + '\n' + + '

          Фокусталған ПИ бөліміндегі Arrow (Көрсеткі) пернелерінің циклі.

          \n' + + '\n' + + '

          Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, Esc пернесін басыңыз.

          \n' + + '\n' + + '

          Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, Esc пернесін басу әрекеті пернетақта\n' + + ' навигациясын толығымен жабады.

          \n' + + '\n' + + '

          Мәзір элементін немесе құралдар тақтасы түймесін орындау

          \n' + + '\n' + + '

          Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін Return (Қайтару), Enter (Енгізу)\n' + + ' немесе Space bar (Бос орын) пернесін басыңыз.

          \n' + + '\n' + + '

          Белгіленбеген диалог терезелерін навигациялау

          \n' + + '\n' + + '

          Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.

          \n' + + '\n' + + '

          Tab немесе Shift+Tab пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.

          \n' + + '\n' + + '

          Белгіленген диалог терезелерін навигациялау

          \n' + + '\n' + + '

          Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.

          \n' + + '\n' + + '

          Tab немесе\n' + + ' Shift+Tab пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.

          \n' + + '\n' + + '

          Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті Arrow (Көрсеткі)\n' + + ' пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ko_KR.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ko_KR.js new file mode 100644 index 0000000..e7c8e7f --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ko_KR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR', +'

          키보드 탐색 시작

          \n' + + '\n' + + '
          \n' + + '
          메뉴 모음 포커스 표시
          \n' + + '
          Windows 또는 Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          도구 모음 포커스 표시
          \n' + + '
          Windows 또는 Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          푸터 포커스 표시
          \n' + + '
          Windows 또는 Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          알림 포커스
          \n' + + '
          Windows 또는 Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          컨텍스트 도구 모음에 포커스 표시
          \n' + + '
          Windows, Linux 또는 macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\n' + + ' 경우 밑줄 표시됩니다.

          \n' + + '\n' + + '

          UI 섹션 간 탐색

          \n' + + '\n' + + '

          한 UI 섹션에서 다음 UI 섹션으로 이동하려면 Tab(탭)을 누릅니다.

          \n' + + '\n' + + '

          한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 Shift+Tab(시프트+탭)을 누릅니다.

          \n' + + '\n' + + '

          이 UI 섹션의 Tab(탭) 순서는 다음과 같습니다.

          \n' + + '\n' + + '
            \n' + + '
          1. 메뉴 바
          2. \n' + + '
          3. 각 도구 모음 그룹
          4. \n' + + '
          5. 사이드바
          6. \n' + + '
          7. 푸터의 요소 경로
          8. \n' + + '
          9. 푸터의 단어 수 토글 버튼
          10. \n' + + '
          11. 푸터의 브랜딩 링크
          12. \n' + + '
          13. 푸터의 에디터 크기 변경 핸들
          14. \n' + + '
          \n' + + '\n' + + '

          UI 섹션이 없는 경우 건너뛰기합니다.

          \n' + + '\n' + + '

          푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 Shift+Tab(시프트+탭)을 누르면\n' + + ' 포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.

          \n' + + '\n' + + '

          UI 섹션 내 탐색

          \n' + + '\n' + + '

          한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 화살표 키를 누릅니다.

          \n' + + '\n' + + '

          왼쪽오른쪽 화살표 키의 용도:

          \n' + + '\n' + + '
            \n' + + '
          • 메뉴 모음에서 메뉴 항목 사이를 이동합니다.
          • \n' + + '
          • 메뉴에서 하위 메뉴를 엽니다.
          • \n' + + '
          • 도구 모음 그룹에서 버튼 사이를 이동합니다.
          • \n' + + '
          • 푸터의 요소 경로에서 항목 간에 이동합니다.
          • \n' + + '
          \n' + + '\n' + + '

          아래 화살표 키의 용도:

          \n' + + '\n' + + '
            \n' + + '
          • 메뉴에서 메뉴 항목 사이를 이동합니다.
          • \n' + + '
          • 도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.
          • \n' + + '
          \n' + + '\n' + + '

          화살표 키는 포커스 표시 UI 섹션 내에서 순환됩니다.

          \n' + + '\n' + + '

          열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 Esc 키를 누릅니다.

          \n' + + '\n' + + "

          현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 Esc 키를 누르면\n" + + ' 키보드 탐색이 완전히 종료됩니다.

          \n' + + '\n' + + '

          메뉴 항목 또는 도구 모음 버튼 실행

          \n' + + '\n' + + '

          원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 Return(리턴), Enter(엔터),\n' + + ' 또는 Space bar(스페이스바)를 눌러 해당 항목을 실행합니다.

          \n' + + '\n' + + '

          탭이 없는 대화 탐색

          \n' + + '\n' + + '

          탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.

          \n' + + '\n' + + '

          대화형 요소들 사이를 이동할 때는 Tab(탭) 또는 Shift+Tab(시프트+탭)을 누릅니다.

          \n' + + '\n' + + '

          탭이 있는 대화 탐색

          \n' + + '\n' + + '

          탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.

          \n' + + '\n' + + '

          이 대화 탭의 대화형 요소들 사이를 이동할 때는 Tab(탭) 또는\n' + + ' Shift+Tab(시프트+탭)을 누릅니다.

          \n' + + '\n' + + '

          다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 화살표\n' + + ' 키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ms.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ms.js new file mode 100644 index 0000000..2c047bb --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ms.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms', +'

          Mulakan navigasi papan kekunci

          \n' + + '\n' + + '
          \n' + + '
          Fokus bar Menu
          \n' + + '
          Windows atau Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokus Bar Alat
          \n' + + '
          Windows atau Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokus pengaki
          \n' + + '
          Windows atau Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Tumpu kepada pemberitahuan
          \n' + + '
          Windows atau Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokus bar alat kontekstual
          \n' + + '
          Windows, Linux atau macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\n' + + ' laluan elemen Pengaki.

          \n' + + '\n' + + '

          Navigasi antara bahagian UI

          \n' + + '\n' + + '

          Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan Tab.

          \n' + + '\n' + + '

          Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan Shift+Tab.

          \n' + + '\n' + + '

          Tertib Tab bahagian UI ini ialah:

          \n' + + '\n' + + '
            \n' + + '
          1. Bar menu
          2. \n' + + '
          3. Setiap kumpulan bar alat
          4. \n' + + '
          5. Bar sisi
          6. \n' + + '
          7. Laluan elemen dalam pengaki
          8. \n' + + '
          9. Butang togol kiraan perkataan dalam pengaki
          10. \n' + + '
          11. Pautan penjenamaan dalam pengaki
          12. \n' + + '
          13. Pemegang saiz semula editor dalam pengaki
          14. \n' + + '
          \n' + + '\n' + + '

          Jika bahagian UI tidak wujud, ia dilangkau.

          \n' + + '\n' + + '

          Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan Shift+Tab\n' + + ' akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.

          \n' + + '\n' + + '

          Navigasi dalam bahagian UI

          \n' + + '\n' + + '

          Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci Anak Panah yang bersesuaian.

          \n' + + '\n' + + '

          Kekunci anak panah Kiri dan Kanan

          \n' + + '\n' + + '
            \n' + + '
          • bergerak antara menu dalam bar menu.
          • \n' + + '
          • membukan submenu dalam menu.
          • \n' + + '
          • bergerak antara butang dalam kumpulan bar alat.
          • \n' + + '
          • Laluan elemen dalam pengaki.
          • \n' + + '
          \n' + + '\n' + + '

          Kekunci anak panah Bawah dan Atas

          \n' + + '\n' + + '
            \n' + + '
          • bergerak antara item menu dalam menu.
          • \n' + + '
          • bergerak antara item dalam menu timbul bar alat.
          • \n' + + '
          \n' + + '\n' + + '

          Kekunci Anak Panah berkitar dalam bahagian UI difokuskan.

          \n' + + '\n' + + '

          Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci Esc.

          \n' + + '\n' + + "

          Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci Esc juga akan keluar daripada\n" + + ' navigasi papan kekunci sepenuhnya.

          \n' + + '\n' + + '

          Laksanakan item menu atau butang bar alat

          \n' + + '\n' + + '

          Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan Return, Enter,\n' + + ' atau bar Space untuk melaksanakan item.

          \n' + + '\n' + + '

          Navigasi ke dialog tidak bertab

          \n' + + '\n' + + '

          Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.

          \n' + + '\n' + + '

          Navigasi antara komponen dialog interaktif dengan menekan Tab atau Shift+Tab.

          \n' + + '\n' + + '

          Navigasi ke dialog bertab

          \n' + + '\n' + + '

          Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.

          \n' + + '\n' + + '

          Navigasi antara komponen interaktif tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci Anak Panah yang bersesuaian\n' + + ' untuk berkitar menerusi tab yang tersedia.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/nb_NO.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/nb_NO.js new file mode 100644 index 0000000..071e3f5 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/nb_NO.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO', +'

          Starte tastaturnavigering

          \n' + + '\n' + + '
          \n' + + '
          Utheve menylinjen
          \n' + + '
          Windows eller Linux: Alt + F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Utheve verktøylinjen
          \n' + + '
          Windows eller Linux: Alt + F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Utheve bunnteksten
          \n' + + '
          Windows eller Linux: Alt + F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokuser på varselet
          \n' + + '
          Windows eller Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Utheve en kontekstuell verktøylinje
          \n' + + '
          Windows, Linux eller macOS: Ctrl + F9
          \n' + + '
          \n' + + '\n' + + '

          Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\n' + + ' elementstien i bunnteksten.

          \n' + + '\n' + + '

          Navigere mellom grensesnittdeler

          \n' + + '\n' + + '

          Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på tabulatortasten.

          \n' + + '\n' + + '

          Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på Shift + tabulatortasten.

          \n' + + '\n' + + '

          Rekkefølgen til tabulatortasten gjennom grensesnittdelene er:

          \n' + + '\n' + + '
            \n' + + '
          1. Menylinjen
          2. \n' + + '
          3. Hver gruppe på verktøylinjen
          4. \n' + + '
          5. Sidestolpen
          6. \n' + + '
          7. Elementstien i bunnteksten
          8. \n' + + '
          9. Veksleknappen for ordantall i bunnteksten
          10. \n' + + '
          11. Merkelenken i bunnteksten
          12. \n' + + '
          13. Skaleringshåndtaket for redigeringsprogrammet i bunnteksten
          14. \n' + + '
          \n' + + '\n' + + '

          Hvis en grensesnittdel ikke er til stede, blir den hoppet over.

          \n' + + '\n' + + '

          Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på Shift + tabulatortasten\n' + + ' for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.

          \n' + + '\n' + + '

          Navigere innenfor grensesnittdeler

          \n' + + '\n' + + '

          Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle piltasten.

          \n' + + '\n' + + '

          De venstre og høyre piltastene

          \n' + + '\n' + + '
            \n' + + '
          • beveger deg mellom menyer på menylinjen.
          • \n' + + '
          • åpner en undermeny i en meny.
          • \n' + + '
          • beveger deg mellom knapper i en gruppe på verktøylinjen.
          • \n' + + '
          • beveger deg mellom elementer i elementstien i bunnteksten.
          • \n' + + '
          \n' + + '\n' + + '

          Ned- og opp-piltastene

          \n' + + '\n' + + '
            \n' + + '
          • beveger deg mellom menyelementer i en meny.
          • \n' + + '
          • beveger deg mellom elementer i en hurtigmeny på verktøylinjen.
          • \n' + + '
          \n' + + '\n' + + '

          Med piltastene kan du bevege deg innenfor den uthevede grensesnittdelen.

          \n' + + '\n' + + '

          Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på Esc-tasten.

          \n' + + '\n' + + '

          Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på Esc også avslutte\n' + + ' tastaturnavigeringen helt.

          \n' + + '\n' + + '

          Utføre et menyelement eller en knapp på en verktøylinje

          \n' + + '\n' + + '

          Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på Retur, Enter,\n' + + ' eller mellomromstasten for å utføre elementet.

          \n' + + '\n' + + '

          Navigere i dialogbokser uten faner

          \n' + + '\n' + + '

          I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.

          \n' + + '\n' + + '

          Naviger mellom interaktive komponenter i dialogboksen ved å trykke på tabulatortasten eller Shift + tabulatortasten.

          \n' + + '\n' + + '

          Navigere i fanebaserte dialogbokser

          \n' + + '\n' + + '

          I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.

          \n' + + '\n' + + '

          Naviger mellom interaktive komponenter i fanen ved å trykke på tabulatortasten eller\n' + + ' Shift + tabulatortasten.

          \n' + + '\n' + + '

          Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle piltasten\n' + + ' for å bevege deg mellom de tilgjengelige fanene.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/nl.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/nl.js new file mode 100644 index 0000000..05c07ae --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/nl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl', +'

          Toetsenbordnavigatie starten

          \n' + + '\n' + + '
          \n' + + '
          Focus op de menubalk instellen
          \n' + + '
          Windows of Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Focus op de werkbalk instellen
          \n' + + '
          Windows of Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Focus op de voettekst instellen
          \n' + + '
          Windows of Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Focus op de melding instellen
          \n' + + '
          Windows of Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Focus op een contextuele werkbalk instellen
          \n' + + '
          Windows, Linux of macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\n' + + ' in het elementenpad van de voettekst bevindt.

          \n' + + '\n' + + '

          Navigeren tussen UI-secties

          \n' + + '\n' + + '

          Druk op Tab om naar de volgende UI-sectie te gaan.

          \n' + + '\n' + + '

          Druk op Shift+Tab om naar de vorige UI-sectie te gaan.

          \n' + + '\n' + + '

          De Tab-volgorde van deze UI-secties is:

          \n' + + '\n' + + '
            \n' + + '
          1. Menubalk
          2. \n' + + '
          3. Elke werkbalkgroep
          4. \n' + + '
          5. Zijbalk
          6. \n' + + '
          7. Elementenpad in de voettekst
          8. \n' + + '
          9. Wisselknop voor aantal woorden in de voettekst
          10. \n' + + '
          11. Merkkoppeling in de voettekst
          12. \n' + + '
          13. Greep voor het wijzigen van het formaat van de editor in de voettekst
          14. \n' + + '
          \n' + + '\n' + + '

          Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.

          \n' + + '\n' + + '

          Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op Shift+Tab drukken\n' + + ' om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.

          \n' + + '\n' + + '

          Navigeren binnen UI-secties

          \n' + + '\n' + + '

          Druk op de pijltjestoets om naar het betreffende UI-element te gaan.

          \n' + + '\n' + + '

          Met de pijltjestoetsen Links en Rechts

          \n' + + '\n' + + '
            \n' + + "
          • wissel je tussen menu's in de menubalk.
          • \n" + + '
          • open je een submenu in een menu.
          • \n' + + '
          • wissel je tussen knoppen in een werkbalkgroep.
          • \n' + + '
          • wissel je tussen items in het elementenpad in de voettekst.
          • \n' + + '
          \n' + + '\n' + + '

          Met de pijltjestoetsen Omlaag en Omhoog

          \n' + + '\n' + + '
            \n' + + '
          • wissel je tussen menu-items in een menu.
          • \n' + + '
          • wissel je tussen items in een werkbalkpop-upmenu.
          • \n' + + '
          \n' + + '\n' + + '

          Met de pijltjestoetsen wissel je binnen de UI-sectie waarop de focus is ingesteld.

          \n' + + '\n' + + '

          Druk op de toets Esc om een geopend menu, submenu of pop-upmenu te sluiten.

          \n' + + '\n' + + "

          Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets Esc drukken\n" + + ' om de toetsenbordnavigatie af te sluiten.

          \n' + + '\n' + + '

          Een menu-item of werkbalkknop uitvoeren

          \n' + + '\n' + + '

          Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op Return, Enter\n' + + ' of de spatiebalk drukken om het item uit te voeren.

          \n' + + '\n' + + '

          Navigeren in dialoogvensters zonder tabblad

          \n' + + '\n' + + '

          Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.

          \n' + + '\n' + + '

          Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op Tab of Shift+Tab te drukken.

          \n' + + '\n' + + '

          Navigeren in dialoogvensters met tabblad

          \n' + + '\n' + + '

          Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.

          \n' + + '\n' + + '

          Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op Tab of\n' + + ' Shift+Tab te drukken.

          \n' + + '\n' + + '

          Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste pijltjestoets\n' + + ' te drukken om tussen de beschikbare tabbladen te wisselen.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/pl.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pl.js new file mode 100644 index 0000000..e89f808 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl', +'

          Początek nawigacji przy użyciu klawiatury

          \n' + + '\n' + + '
          \n' + + '
          Ustaw fokus na pasek menu
          \n' + + '
          Windows lub Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Ustaw fokus na pasek narzędzi
          \n' + + '
          Windows lub Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Ustaw fokus na sekcję Footer
          \n' + + '
          Windows lub Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Skup się na powiadomieniu
          \n' + + '
          Windows lub Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Ustaw fokus na kontekstowy pasek narzędzi
          \n' + + '
          Windows, Linux lub macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\n' + + ' w ścieżce elementów w sekcji Footer — podkreślony.

          \n' + + '\n' + + '

          Nawigacja pomiędzy sekcjami interfejsu użytkownika

          \n' + + '\n' + + '

          Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij Tab.

          \n' + + '\n' + + '

          Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij Shift+Tab.

          \n' + + '\n' + + '

          Kolejność klawisza Tab w takich sekcjach interfejsu użytkownika jest następująca:

          \n' + + '\n' + + '
            \n' + + '
          1. Pasek menu
          2. \n' + + '
          3. Każda grupa na pasku narzędzi
          4. \n' + + '
          5. Pasek boczny
          6. \n' + + '
          7. Ścieżka elementów w sekcji Footer
          8. \n' + + '
          9. Przycisk przełączania liczby słów w sekcji Footer
          10. \n' + + '
          11. Łącze brandujące w sekcji Footer
          12. \n' + + '
          13. Uchwyt zmiany rozmiaru edytora w sekcji Footer
          14. \n' + + '
          \n' + + '\n' + + '

          Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.

          \n' + + '\n' + + '

          Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie Shift+Tab\n' + + ' przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.

          \n' + + '\n' + + '

          Nawigacja wewnątrz sekcji interfejsu użytkownika

          \n' + + '\n' + + '

          Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz strzałki.

          \n' + + '\n' + + '

          Klawisze strzałek w prawo i w lewo służą do

          \n' + + '\n' + + '
            \n' + + '
          • przenoszenia się pomiędzy menu na pasku menu,
          • \n' + + '
          • otwarcia podmenu w menu,
          • \n' + + '
          • przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,
          • \n' + + '
          • przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.
          • \n' + + '
          \n' + + '\n' + + '

          Klawisze strzałek w dół i w górę służą do

          \n' + + '\n' + + '
            \n' + + '
          • przenoszenia się pomiędzy elementami menu w menu,
          • \n' + + '
          • przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.
          • \n' + + '
          \n' + + '\n' + + '

          Klawisze strzałek służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.

          \n' + + '\n' + + '

          Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz Esc.

          \n' + + '\n' + + '

          Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza Esc powoduje wyjście\n' + + ' z nawigacji przy użyciu klawiatury.

          \n' + + '\n' + + '

          Wykonanie elementu menu lub przycisku paska narzędzi

          \n' + + '\n' + + '

          Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz Return, Enter\n' + + ' lub Spacja, aby go wykonać.

          \n' + + '\n' + + '

          Nawigacja po oknie dialogowym bez kart

          \n' + + '\n' + + '

          Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.

          \n' + + '\n' + + '

          Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze Tab lub Shift+Tab.

          \n' + + '\n' + + '

          Nawigacja po oknie dialogowym z kartami

          \n' + + '\n' + + '

          W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.

          \n' + + '\n' + + '

          Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy Tab lub\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza strzałki\n' + + ' w celu przemieszczenia się pomiędzy dostępnymi kartami.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_BR.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_BR.js new file mode 100644 index 0000000..2938fcf --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_BR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR', +'

          Iniciar navegação pelo teclado

          \n' + + '\n' + + '
          \n' + + '
          Foco na barra de menus
          \n' + + '
          Windows ou Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Foco na barra de ferramentas
          \n' + + '
          Windows ou Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Foco no rodapé
          \n' + + '
          Windows ou Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Foco na notificação
          \n' + + '
          Windows ou Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Foco na barra de ferramentas contextual
          \n' + + '
          Windows, Linux ou macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\n' + + ' caminho do elemento Rodapé.

          \n' + + '\n' + + '

          Navegar entre seções da IU

          \n' + + '\n' + + '

          Para ir de uma seção da IU para a seguinte, pressione Tab.

          \n' + + '\n' + + '

          Para ir de uma seção da IU para a anterior, pressione Shift+Tab.

          \n' + + '\n' + + '

          A ordem de Tab destas seções da IU é:

          \n' + + '\n' + + '
            \n' + + '
          1. Barra de menus
          2. \n' + + '
          3. Cada grupo da barra de ferramentas
          4. \n' + + '
          5. Barra lateral
          6. \n' + + '
          7. Caminho do elemento no rodapé
          8. \n' + + '
          9. Botão de alternar contagem de palavras no rodapé
          10. \n' + + '
          11. Link da marca no rodapé
          12. \n' + + '
          13. Alça de redimensionamento do editor no rodapé
          14. \n' + + '
          \n' + + '\n' + + '

          Se não houver uma seção da IU, ela será pulada.

          \n' + + '\n' + + '

          Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas, não para o último.

          \n' + + '\n' + + '

          Navegar dentro das seções da IU

          \n' + + '\n' + + '

          Para ir de um elemento da IU para o seguinte, pressione a Seta correspondente.

          \n' + + '\n' + + '

          As teclas de seta Esquerda e Direita

          \n' + + '\n' + + '
            \n' + + '
          • movem entre menus na barra de menus.
          • \n' + + '
          • abrem um submenu em um menu.
          • \n' + + '
          • movem entre botões em um grupo da barra de ferramentas.
          • \n' + + '
          • movem entre itens no caminho do elemento do rodapé.
          • \n' + + '
          \n' + + '\n' + + '

          As teclas de seta Abaixo e Acima

          \n' + + '\n' + + '
            \n' + + '
          • movem entre itens de menu em um menu.
          • \n' + + '
          • movem entre itens em um menu suspenso da barra de ferramentas.
          • \n' + + '
          \n' + + '\n' + + '

          As teclas de Seta alternam dentre a seção da IU em foco.

          \n' + + '\n' + + '

          Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione Esc.

          \n' + + '\n' + + '

          Se o foco atual estiver no ‘alto’ de determinada seção da IU, pressionar Esc também sai\n' + + ' totalmente da navegação pelo teclado.

          \n' + + '\n' + + '

          Executar um item de menu ou botão da barra de ferramentas

          \n' + + '\n' + + '

          Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione Return, Enter,\n' + + ' ou a Barra de espaço para executar o item.

          \n' + + '\n' + + '

          Navegar por caixas de diálogo sem guias

          \n' + + '\n' + + '

          Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.

          \n' + + '\n' + + '

          Navegue entre componentes interativos de caixa de diálogo pressionando Tab ou Shift+Tab.

          \n' + + '\n' + + '

          Navegar por caixas de diálogo com guias

          \n' + + '\n' + + '

          Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.

          \n' + + '\n' + + '

          Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando Tab ou\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a Seta\n' + + ' adequada para percorrer as guias disponíveis.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_PT.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_PT.js new file mode 100644 index 0000000..03da3d6 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/pt_PT.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT', +'

          Iniciar navegação com teclado

          \n' + + '\n' + + '
          \n' + + '
          Foco na barra de menu
          \n' + + '
          Windows ou Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Foco na barra de ferramentas
          \n' + + '
          Windows ou Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Foco no rodapé
          \n' + + '
          Windows ou Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Focar a notificação
          \n' + + '
          Windows ou Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Foco numa barra de ferramentas contextual
          \n' + + '
          Windows, Linux ou macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\n' + + ' caminho do elemento do rodapé.

          \n' + + '\n' + + '

          Navegar entre secções de IU

          \n' + + '\n' + + '

          Para se mover de uma secção de IU para a seguinte, prima Tab.

          \n' + + '\n' + + '

          Para se mover de uma secção de IU para a anterior, prima Shift+Tab.

          \n' + + '\n' + + '

          A ordem de tabulação destas secções de IU é:

          \n' + + '\n' + + '
            \n' + + '
          1. Barra de menu
          2. \n' + + '
          3. Cada grupo da barra de ferramentas
          4. \n' + + '
          5. Barra lateral
          6. \n' + + '
          7. Caminho do elemento no rodapé
          8. \n' + + '
          9. Botão de alternar da contagem de palavras no rodapé
          10. \n' + + '
          11. Ligação da marca no rodapé
          12. \n' + + '
          13. Alça de redimensionamento do editor no rodapé
          14. \n' + + '
          \n' + + '\n' + + '

          Se uma secção de IU não estiver presente, é ignorada.

          \n' + + '\n' + + '

          Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas e não para o último.

          \n' + + '\n' + + '

          Navegar nas secções de IU

          \n' + + '\n' + + '

          Para se mover de um elemento de IU para o seguinte, prima a tecla de seta adequada.

          \n' + + '\n' + + '

          As teclas de seta Para a esquerda e Para a direita

          \n' + + '\n' + + '
            \n' + + '
          • movem-se entre menus na barra de menu.
          • \n' + + '
          • abrem um submenu num menu.
          • \n' + + '
          • movem-se entre botões num grupo da barra de ferramentas.
          • \n' + + '
          • movem-se entre itens no caminho do elemento do rodapé.
          • \n' + + '
          \n' + + '\n' + + '

          As teclas de seta Para cima e Para baixo

          \n' + + '\n' + + '
            \n' + + '
          • movem-se entre itens de menu num menu.
          • \n' + + '
          • movem-se entre itens num menu de pop-up da barra de ferramentas.
          • \n' + + '
          \n' + + '\n' + + '

          As teclas de seta deslocam-se ciclicamente na secção de IU em foco.

          \n' + + '\n' + + '

          Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla Esc.

          \n' + + '\n' + + '

          Se o foco atual estiver no "topo" de determinada secção de IU, premir a tecla Esc também fecha\n' + + ' completamente a navegação com teclado.

          \n' + + '\n' + + '

          Executar um item de menu ou botão da barra de ferramentas

          \n' + + '\n' + + '

          Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima Retrocesso, Enter\n' + + ' ou a Barra de espaço para executar o item.

          \n' + + '\n' + + '

          Navegar em diálogos sem separadores

          \n' + + '\n' + + '

          Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.

          \n' + + '\n' + + '

          Navegue entre componentes interativos do diálogo, premindo Tab ou Shift+Tab.

          \n' + + '\n' + + '

          Navegar em diálogos com separadores

          \n' + + '\n' + + '

          Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.

          \n' + + '\n' + + '

          Navegue entre os componentes interativos deste separador do diálogo, premindo Tab ou\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de seta\n' + + ' adequada para se deslocar ciclicamente pelos separadores disponíveis.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ro.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ro.js new file mode 100644 index 0000000..38d3441 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ro.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro', +'

          Începeți navigarea de la tastatură

          \n' + + '\n' + + '
          \n' + + '
          Focalizare pe bara de meniu
          \n' + + '
          Windows sau Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Focalizare pe bara de instrumente
          \n' + + '
          Windows sau Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Focalizare pe subsol
          \n' + + '
          Windows sau Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Focalizare pe notificare
          \n' + + '
          Windows sau Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Focalizare pe o bară de instrumente contextuală
          \n' + + '
          Windows, Linux sau macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\n' + + ' calea elementului Subsol.

          \n' + + '\n' + + '

          Navigați între secțiunile interfeței cu utilizatorul

          \n' + + '\n' + + '

          Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați Tab.

          \n' + + '\n' + + '

          Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați Shift+Tab.

          \n' + + '\n' + + '

          Ordinea cu Tab a acestor secțiuni ale interfeței cu utilizatorul este următoarea:

          \n' + + '\n' + + '
            \n' + + '
          1. Bara de meniu
          2. \n' + + '
          3. Fiecare grup de bare de instrumente
          4. \n' + + '
          5. Bara laterală
          6. \n' + + '
          7. Calea elementului în subsol
          8. \n' + + '
          9. Buton de comutare a numărului de cuvinte în subsol
          10. \n' + + '
          11. Link de branding în subsol
          12. \n' + + '
          13. Mâner de redimensionare a editorului în subsol
          14. \n' + + '
          \n' + + '\n' + + '

          În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.

          \n' + + '\n' + + '

          În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului Shift+Tab\n' + + ' mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.

          \n' + + '\n' + + '

          Navigați în secțiunile interfeței cu utilizatorul

          \n' + + '\n' + + '

          Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu săgeata corespunzătoare.

          \n' + + '\n' + + '

          Tastele cu săgeți către stânga și dreapta

          \n' + + '\n' + + '
            \n' + + '
          • navighează între meniurile din bara de meniuri.
          • \n' + + '
          • deschid un sub-meniu dintr-un meniu.
          • \n' + + '
          • navighează între butoanele dintr-un grup de bare de instrumente.
          • \n' + + '
          • navighează între elementele din calea elementelor subsolului.
          • \n' + + '
          \n' + + '\n' + + '

          Tastele cu săgeți în sus și în jos

          \n' + + '\n' + + '
            \n' + + '
          • navighează între elementele de meniu dintr-un meniu.
          • \n' + + '
          • navighează între elementele unui meniu pop-up din bara de instrumente.
          • \n' + + '
          \n' + + '\n' + + '

          Tastele cu săgeți navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.

          \n' + + '\n' + + '

          Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta Esc.

          \n' + + '\n' + + '

          Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei Esc se iese, de asemenea,\n' + + ' în întregime din navigarea de la tastatură.

          \n' + + '\n' + + '

          Executarea unui element de meniu sau a unui buton din bara de instrumente

          \n' + + '\n' + + '

          Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați Return, Enter,\n' + + ' sau bara de spațiu pentru a executa elementul.

          \n' + + '\n' + + '

          Navigarea de dialoguri fără file

          \n' + + '\n' + + '

          În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.

          \n' + + '\n' + + '

          Navigați între componentele dialogului interactiv apăsând Tab sau Shift+Tab.

          \n' + + '\n' + + '

          Navigarea de dialoguri cu file

          \n' + + '\n' + + '

          În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.

          \n' + + '\n' + + '

          Navigați între componentele interactive ale acestei file de dialog apăsând Tab sau\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând săgeata corespunzătoare\n' + + ' pentru a parcurge filele disponibile.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/ru.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ru.js new file mode 100644 index 0000000..d310f54 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/ru.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru', +'

          Начните управление с помощью клавиатуры

          \n' + + '\n' + + '
          \n' + + '
          Фокус на панели меню
          \n' + + '
          Windows или Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Фокус на панели инструментов
          \n' + + '
          Windows или Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Фокус на нижнем колонтитуле
          \n' + + '
          Windows или Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Фокус на уведомлении
          \n' + + '
          Windows или Linux: Alt+12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Фокус на контекстной панели инструментов
          \n' + + '
          Windows, Linux или macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\n' + + ' в пути элементов нижнего колонтитула).

          \n' + + '\n' + + '

          Переход между разделами пользовательского интерфейса

          \n' + + '\n' + + '

          Чтобы перейти из текущего раздела интерфейса в следующий, нажмите Tab.

          \n' + + '\n' + + '

          Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите Shift+Tab.

          \n' + + '\n' + + '

          Вкладки разделов интерфейса расположены в следующем порядке:

          \n' + + '\n' + + '
            \n' + + '
          1. Панель меню
          2. \n' + + '
          3. Группы панели инструментов
          4. \n' + + '
          5. Боковая панель
          6. \n' + + '
          7. Путь элементов нижнего колонтитула
          8. \n' + + '
          9. Подсчет слов/символов в нижнем колонтитуле
          10. \n' + + '
          11. Брендовая ссылка в нижнем колонтитуле
          12. \n' + + '
          13. Угол для изменения размера окна редактора
          14. \n' + + '
          \n' + + '\n' + + '

          Если раздел интерфейса отсутствует, он пропускается.

          \n' + + '\n' + + '

          Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш Shift+Tab\n' + + ' фокус переносится на первую группу панели инструментов, а не на последнюю.

          \n' + + '\n' + + '

          Переход между элементами внутри разделов пользовательского интерфейса

          \n' + + '\n' + + '

          Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую клавишу со стрелкой.

          \n' + + '\n' + + '

          Клавиши со стрелками влево и вправо позволяют

          \n' + + '\n' + + '
            \n' + + '
          • перемещаться между разными меню в панели меню.
          • \n' + + '
          • открывать разделы меню.
          • \n' + + '
          • перемещаться между кнопками в группе панели инструментов.
          • \n' + + '
          • перемещаться между элементами в пути элементов нижнего колонтитула.
          • \n' + + '
          \n' + + '\n' + + '

          Клавиши со стрелками вниз и вверх позволяют

          \n' + + '\n' + + '
            \n' + + '
          • перемещаться между элементами одного меню.
          • \n' + + '
          • перемещаться между элементами всплывающего меню в панели инструментов.
          • \n' + + '
          \n' + + '\n' + + '

          При использовании клавиш со стрелками вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.

          \n' + + '\n' + + '

          Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу Esc.

          \n' + + '\n' + + '

          Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши Esc также приведет\n' + + ' к выходу из режима управления с помощью клавиатуры.

          \n' + + '\n' + + '

          Использование элемента меню или кнопки на панели инструментов

          \n' + + '\n' + + '

          Когда элемент меню или кнопка панели инструментов будут выделены, нажмите Return, Enter\n' + + ' или Space, чтобы их активировать.

          \n' + + '\n' + + '

          Управление в диалоговом окне без вкладок

          \n' + + '\n' + + '

          При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.

          \n' + + '\n' + + '

          Для перехода между интерактивными компонентами диалогового окна нажимайте Tab или Shift+Tab.

          \n' + + '\n' + + '

          Управление в диалоговом окне с вкладками

          \n' + + '\n' + + '

          При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.

          \n' + + '\n' + + '

          Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте Tab или\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте клавиши со стрелками\n' + + ' для циклического переключения между доступными вкладками.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/sk.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sk.js new file mode 100644 index 0000000..60cc628 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk', +'

          Začíname s navigáciou pomocou klávesnice

          \n' + + '\n' + + '
          \n' + + '
          Prejsť na panel s ponukami
          \n' + + '
          Windows alebo Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Prejsť na panel nástrojov
          \n' + + '
          Windows alebo Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Prejsť na pätičku
          \n' + + '
          Windows alebo Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Zaostriť na oznámenie
          \n' + + '
          Windows alebo Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Prejsť na kontextový panel nástrojov
          \n' + + '
          Windows, Linux alebo macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\n' + + ' cesty k pätičke podčiarknutá.

          \n' + + '\n' + + '

          Navigácia medzi časťami používateľského rozhrania

          \n' + + '\n' + + '

          Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo Tab.

          \n' + + '\n' + + '

          Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá Shift + Tab.

          \n' + + '\n' + + '

          Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla Tab:

          \n' + + '\n' + + '
            \n' + + '
          1. Panel s ponukou
          2. \n' + + '
          3. Každá skupina panela nástrojov
          4. \n' + + '
          5. Bočný panel
          6. \n' + + '
          7. Cesta k prvku v pätičke
          8. \n' + + '
          9. Prepínač počtu slov v pätičke
          10. \n' + + '
          11. Odkaz na informácie o značke v pätičke
          12. \n' + + '
          13. Úchyt na zmenu veľkosti editora v pätičke
          14. \n' + + '
          \n' + + '\n' + + '

          Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.

          \n' + + '\n' + + '

          Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov Shift+Tab\n' + + ' prejdete na prvú skupinu panela nástrojov, nie na poslednú.

          \n' + + '\n' + + '

          Navigácia v rámci častí používateľského rozhrania

          \n' + + '\n' + + '

          Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so šípkou.

          \n' + + '\n' + + '

          Klávesy so šípkami doľava a doprava

          \n' + + '\n' + + '
            \n' + + '
          • umožňujú presun medzi ponukami na paneli ponúk,
          • \n' + + '
          • otvárajú podponuku v rámci ponuky,
          • \n' + + '
          • umožňujú presun medzi tlačidlami v skupine panelov nástrojov,
          • \n' + + '
          • umožňujú presun medzi položkami cesty prvku v pätičke.
          • \n' + + '
          \n' + + '\n' + + '

          Klávesy so šípkami dole a hore

          \n' + + '\n' + + '
            \n' + + '
          • umožňujú presun medzi položkami ponuky,
          • \n' + + '
          • umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.
          • \n' + + '
          \n' + + '\n' + + '

          Klávesy so šípkami vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.

          \n' + + '\n' + + '

          Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves Esc.

          \n' + + '\n' + + '

          Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu Esc úplne ukončíte tiež\n' + + ' navigáciu pomocou klávesnice.

          \n' + + '\n' + + '

          Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov

          \n' + + '\n' + + '

          Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov Return, Enter\n' + + ' alebo medzerníka vykonáte príslušný príkaz položky.

          \n' + + '\n' + + '

          Navigácia v dialógových oknách bez záložiek

          \n' + + '\n' + + '

          Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.

          \n' + + '\n' + + '

          Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov Tab alebo Shift+Tab.

          \n' + + '\n' + + '

          Navigácia v dialógových oknách so záložkami

          \n' + + '\n' + + '

          Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.

          \n' + + '\n' + + '

          Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov Tab alebo\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so šípkou\n' + + ' prepínať medzi dostupnými záložkami.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/sl_SI.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sl_SI.js new file mode 100644 index 0000000..2b25f5a --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sl_SI.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI', +'

          Začetek krmarjenja s tipkovnico

          \n' + + '\n' + + '
          \n' + + '
          Fokus na menijsko vrstico
          \n' + + '
          Windows ali Linux: Alt + F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokus na orodno vrstico
          \n' + + '
          Windows ali Linux: Alt + F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokus na nogo
          \n' + + '
          Windows ali Linux: Alt + F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Označitev obvestila
          \n' + + '
          Windows ali Linux: Alt + F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokus na kontekstualno orodno vrstico
          \n' + + '
          Windows, Linux ali macOS: Ctrl + F9
          \n' + + '
          \n' + + '\n' + + '

          Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\n' + + ' poti do elementa noge.

          \n' + + '\n' + + '

          Krmarjenje med razdelki uporabniškega vmesnika

          \n' + + '\n' + + '

          Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite tabulatorko.

          \n' + + '\n' + + '

          Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite shift + tabulatorko.

          \n' + + '\n' + + '

          Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate tabulatorko, je:

          \n' + + '\n' + + '
            \n' + + '
          1. Menijska vrstica
          2. \n' + + '
          3. Posamezne skupine orodne vrstice
          4. \n' + + '
          5. Stranska vrstica
          6. \n' + + '
          7. Pod do elementa v nogi
          8. \n' + + '
          9. Gumb za preklop štetja besed v nogi
          10. \n' + + '
          11. Povezava do blagovne znamke v nogi
          12. \n' + + '
          13. Ročaj za spreminjanje velikosti urejevalnika v nogi
          14. \n' + + '
          \n' + + '\n' + + '

          Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.

          \n' + + '\n' + + '

          Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na shift + tabulatorko\n' + + ' fokus premaknete na prvo skupino orodne vrstice, ne zadnjo.

          \n' + + '\n' + + '

          Krmarjenje v razdelkih uporabniškega vmesnika

          \n' + + '\n' + + '

          Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno puščično tipko.

          \n' + + '\n' + + '

          Leva in desna puščična tipka

          \n' + + '\n' + + '
            \n' + + '
          • omogočata premikanje med meniji v menijski vrstici.
          • \n' + + '
          • odpreta podmeni v meniju.
          • \n' + + '
          • omogočata premikanje med gumbi v skupini orodne vrstice.
          • \n' + + '
          • omogočata premikanje med elementi na poti do elementov noge.
          • \n' + + '
          \n' + + '\n' + + '

          Spodnja in zgornja puščična tipka

          \n' + + '\n' + + '
            \n' + + '
          • omogočata premikanje med elementi menija.
          • \n' + + '
          • omogočata premikanje med elementi v pojavnem meniju orodne vrstice.
          • \n' + + '
          \n' + + '\n' + + '

          Puščične tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.

          \n' + + '\n' + + '

          Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko Esc.

          \n' + + '\n' + + '

          Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke Esc zaprete\n' + + ' tudi celotno krmarjenje s tipkovnico.

          \n' + + '\n' + + '

          Izvajanje menijskega elementa ali gumba orodne vrstice

          \n' + + '\n' + + '

          Ko je označen želeni menijski element ali orodja vrstica, pritisnite vračalko, Enter\n' + + ' ali preslednico, da izvedete element.

          \n' + + '\n' + + '

          Krmarjenje po pogovornih oknih brez zavihkov

          \n' + + '\n' + + '

          Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.

          \n' + + '\n' + + '

          Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom tabulatorke ali kombinacije tipke shift + tabulatorke.

          \n' + + '\n' + + '

          Krmarjenje po pogovornih oknih z zavihki

          \n' + + '\n' + + '

          Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.

          \n' + + '\n' + + '

          Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom tabulatorke ali\n' + + ' kombinacije tipke shift + tabulatorke.

          \n' + + '\n' + + '

          Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno puščično\n' + + ' tipko, da se pomaknete med razpoložljivimi zavihki.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/sv_SE.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sv_SE.js new file mode 100644 index 0000000..c30f2f2 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/sv_SE.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE', +'

          Påbörja tangentbordsnavigering

          \n' + + '\n' + + '
          \n' + + '
          Fokusera på menyraden
          \n' + + '
          Windows eller Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Fokusera på verktygsraden
          \n' + + '
          Windows eller Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Fokusera på verktygsraden
          \n' + + '
          Windows eller Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Fokusera aviseringen
          \n' + + '
          Windows eller Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Fokusera på en snabbverktygsrad
          \n' + + '
          Windows, Linux eller macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\n' + + ' sidfotens elementsökväg.

          \n' + + '\n' + + '

          Navigera mellan UI-avsnitt

          \n' + + '\n' + + '

          Flytta från ett UI-avsnitt till nästa genom att trycka på Tabb.

          \n' + + '\n' + + '

          Flytta från ett UI-avsnitt till det föregående genom att trycka på Skift+Tabb.

          \n' + + '\n' + + '

          Tabb-ordningen för dessa UI-avsnitt är:

          \n' + + '\n' + + '
            \n' + + '
          1. Menyrad
          2. \n' + + '
          3. Varje verktygsradsgrupp
          4. \n' + + '
          5. Sidoruta
          6. \n' + + '
          7. Elementsökväg i sidfoten
          8. \n' + + '
          9. Växlingsknapp för ordantal i sidfoten
          10. \n' + + '
          11. Varumärkeslänk i sidfoten
          12. \n' + + '
          13. Storlekshandtag för redigeraren i sidfoten
          14. \n' + + '
          \n' + + '\n' + + '

          Om ett UI-avsnitt inte finns hoppas det över.

          \n' + + '\n' + + '

          Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\n' + + ' när du trycker på Skift+Tabb, inte till den sista.

          \n' + + '\n' + + '

          Navigera i UI-avsnitt

          \n' + + '\n' + + '

          Flytta från ett UI-element till nästa genom att trycka på motsvarande piltangent.

          \n' + + '\n' + + '

          Vänsterpil och högerpil

          \n' + + '\n' + + '
            \n' + + '
          • flytta mellan menyer på menyraden.
          • \n' + + '
          • öppna en undermeny på en meny.
          • \n' + + '
          • flytta mellan knappar i en verktygsradgrupp.
          • \n' + + '
          • flytta mellan objekt i sidfotens elementsökväg.
          • \n' + + '
          \n' + + '\n' + + '

          Nedpil och uppil

          \n' + + '\n' + + '
            \n' + + '
          • flytta mellan menyalternativ på en meny.
          • \n' + + '
          • flytta mellan alternativ på en popup-meny på verktygsraden.
          • \n' + + '
          \n' + + '\n' + + '

          Piltangenterna cirkulerar inom det fokuserade UI-avsnittet.

          \n' + + '\n' + + '

          Tryck på Esc-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.

          \n' + + '\n' + + '

          Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\n' + + ' du trycker på Esc-tangenten.

          \n' + + '\n' + + '

          Köra ett menyalternativ eller en verktygfältsknapp

          \n' + + '\n' + + '

          När menyalternativet eller verktygsradsknappen är markerad trycker du på Retur, Enter\n' + + ' eller blanksteg för att köra alternativet.

          \n' + + '\n' + + '

          Navigera i dialogrutor utan flikar

          \n' + + '\n' + + '

          I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.

          \n' + + '\n' + + '

          Navigera mellan interaktiva dialogkomponenter genom att trycka på Tabb eller Skift+Tabb.

          \n' + + '\n' + + '

          Navigera i dialogrutor med flikar

          \n' + + '\n' + + '

          I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.

          \n' + + '\n' + + '

          Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på Tabb eller\n' + + ' Skift+Tabb.

          \n' + + '\n' + + '

          Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande piltangent\n' + + ' för att cirkulera mellan de tillgängliga flikarna.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/th_TH.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/th_TH.js new file mode 100644 index 0000000..562fe7a --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/th_TH.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH', +'

          เริ่มต้นการนำทางด้วยแป้นพิมพ์

          \n' + + '\n' + + '
          \n' + + '
          โฟกัสที่แถบเมนู
          \n' + + '
          Windows หรือ Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          โฟกัสที่แถบเครื่องมือ
          \n' + + '
          Windows หรือ Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          โฟกัสที่ส่วนท้าย
          \n' + + '
          Windows หรือ Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          โฟกัสไปที่การแจ้งเตือน
          \n' + + '
          Windows หรือ Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          โฟกัสที่แถบเครื่องมือตามบริบท
          \n' + + '
          Windows, Linux หรือ macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\n' + + ' พาธองค์ประกอบส่วนท้าย

          \n' + + '\n' + + '

          การนำทางระหว่างส่วนต่างๆ ของ UI

          \n' + + '\n' + + '

          ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด Tab

          \n' + + '\n' + + '

          ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด Shift+Tab

          \n' + + '\n' + + '

          ลำดับแท็บของส่วนต่างๆ ของ UI คือ:

          \n' + + '\n' + + '
            \n' + + '
          1. แถบเมนู
          2. \n' + + '
          3. แต่ละกลุ่มแถบเครื่องมือ
          4. \n' + + '
          5. แถบข้าง
          6. \n' + + '
          7. พาธองค์ประกอบในส่วนท้าย
          8. \n' + + '
          9. ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย
          10. \n' + + '
          11. ลิงก์ชื่อแบรนด์ในส่วนท้าย
          12. \n' + + '
          13. จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย
          14. \n' + + '
          \n' + + '\n' + + '

          หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป

          \n' + + '\n' + + '

          หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด Shift+Tab\n' + + ' จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย

          \n' + + '\n' + + '

          การนำทางภายในส่วนต่างๆ ของ UI

          \n' + + '\n' + + '

          ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่มลูกศรที่เหมาะสม

          \n' + + '\n' + + '

          ปุ่มลูกศรซ้ายและขวา

          \n' + + '\n' + + '
            \n' + + '
          • ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู
          • \n' + + '
          • เปิดเมนูย่อยในเมนู
          • \n' + + '
          • ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ
          • \n' + + '
          • ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย
          • \n' + + '
          \n' + + '\n' + + '

          ปุ่มลูกศรลงและขึ้น

          \n' + + '\n' + + '
            \n' + + '
          • ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู
          • \n' + + '
          • ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ
          • \n' + + '
          \n' + + '\n' + + '

          ปุ่มลูกศรจะเลื่อนไปมาภายในส่วน UI ที่โฟกัส

          \n' + + '\n' + + '

          ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม Esc

          \n' + + '\n' + + '

          หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม Esc จะทำให้ออกจาก\n' + + ' การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน

          \n' + + '\n' + + '

          การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ

          \n' + + '\n' + + '

          เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด Return, Enter\n' + + ' หรือ Space bar เพื่อดำเนินการรายการดังกล่าว

          \n' + + '\n' + + '

          การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ

          \n' + + '\n' + + '

          ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด

          \n' + + '\n' + + '

          นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด Tab หรือ Shift+Tab

          \n' + + '\n' + + '

          การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ

          \n' + + '\n' + + '

          ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด

          \n' + + '\n' + + '

          นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด Tab หรือ\n' + + ' Shift+Tab

          \n' + + '\n' + + '

          สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่มลูกศรที่เหมาะสม\n' + + ' เพื่อเลือกแท็บที่ใช้ได้

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/tr.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/tr.js new file mode 100644 index 0000000..37f39b0 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/tr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr', +'

          Klavyeyle gezintiyi başlatma

          \n' + + '\n' + + '
          \n' + + '
          Menü çubuğuna odaklan
          \n' + + '
          Windows veya Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Araç çubuğuna odaklan
          \n' + + '
          Windows veya Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Alt bilgiye odaklan
          \n' + + '
          Windows veya Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Bildirime odakla
          \n' + + '
          Windows veya Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Bağlamsal araç çubuğuna odaklan
          \n' + + '
          Windows, Linux veya macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\n' + + ' yolundaysa altı çizilir.

          \n' + + '\n' + + '

          Kullanıcı arabirimi bölümleri arasında gezinme

          \n' + + '\n' + + '

          Sonraki kullanıcı arabirimi bölümüne gitmek için Sekme tuşuna basın.

          \n' + + '\n' + + '

          Önceki kullanıcı arabirimi bölümüne gitmek için Shift+Sekme tuşlarına basın.

          \n' + + '\n' + + '

          Bu kullanıcı arabirimi bölümlerinin Sekme sırası:

          \n' + + '\n' + + '
            \n' + + '
          1. Menü çubuğu
          2. \n' + + '
          3. Her araç çubuğu grubu
          4. \n' + + '
          5. Kenar çubuğu
          6. \n' + + '
          7. Alt bilgide öğe yolu
          8. \n' + + '
          9. Alt bilgide sözcük sayısı geçiş düğmesi
          10. \n' + + '
          11. Alt bilgide marka bağlantısı
          12. \n' + + '
          13. Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı
          14. \n' + + '
          \n' + + '\n' + + '

          Kullanıcı arabirimi bölümü yoksa atlanır.

          \n' + + '\n' + + '

          Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse Shift+Sekme tuşlarına basıldığında\n' + + ' odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.

          \n' + + '\n' + + '

          Kullanıcı arabirimi bölümleri içinde gezinme

          \n' + + '\n' + + '

          Sonraki kullanıcı arabirimi elemanına gitmek için uygun Ok tuşuna basın.

          \n' + + '\n' + + '

          Sol ve Sağ ok tuşları

          \n' + + '\n' + + '
            \n' + + '
          • menü çubuğundaki menüler arasında hareket eder.
          • \n' + + '
          • menüde bir alt menü açar.
          • \n' + + '
          • araç çubuğu grubundaki düğmeler arasında hareket eder.
          • \n' + + '
          • alt bilginin öğe yolundaki öğeler arasında hareket eder.
          • \n' + + '
          \n' + + '\n' + + '

          Aşağı ve Yukarı ok tuşları

          \n' + + '\n' + + '
            \n' + + '
          • menüdeki menü öğeleri arasında hareket eder.
          • \n' + + '
          • araç çubuğu açılır menüsündeki öğeler arasında hareket eder.
          • \n' + + '
          \n' + + '\n' + + '

          Ok tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.

          \n' + + '\n' + + '

          Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için Esc tuşuna basın.

          \n' + + '\n' + + '

          Geçerli odak belirli bir kullanıcı arabirimi bölümünün "üst" kısmındaysa Esc tuşuna basıldığında\n' + + ' klavyeyle gezintiden de tamamen çıkılır.

          \n' + + '\n' + + '

          Menü öğesini veya araç çubuğu düğmesini yürütme

          \n' + + '\n' + + '

          İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında Return, Enter\n' + + ' veya Ara çubuğu tuşuna basın.

          \n' + + '\n' + + '

          Sekme bulunmayan iletişim kutularında gezinme

          \n' + + '\n' + + '

          Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.

          \n' + + '\n' + + '

          Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için Sekme veya Shift+ Sekme tuşlarına basın.

          \n' + + '\n' + + '

          Sekmeli iletişim kutularında gezinme

          \n' + + '\n' + + '

          Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.

          \n' + + '\n' + + '

          Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için Sekme veya\n' + + ' Shift+Sekme tuşlarına basın.

          \n' + + '\n' + + '

          Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun Ok tuşuna basarak\n' + + ' başka bir iletişim kutusu sekmesine geçiş yapın.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/uk.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/uk.js new file mode 100644 index 0000000..028d4a4 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/uk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk', +'

          Початок роботи з навігацією за допомогою клавіатури

          \n' + + '\n' + + '
          \n' + + '
          Фокус на рядок меню
          \n' + + '
          Windows або Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Фокус на панелі інструментів
          \n' + + '
          Windows або Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Фокус на розділі "Нижній колонтитул"
          \n' + + '
          Windows або Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Фокус на сповіщення
          \n' + + '
          Windows або Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Фокус на контекстній панелі інструментів
          \n' + + '
          Windows, Linux або macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\n' + + ' шляху до елемента "Нижній колонтитул".

          \n' + + '\n' + + '

          Навігація між розділами інтерфейсу користувача

          \n' + + '\n' + + '

          Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу Tab.

          \n' + + '\n' + + '

          Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш Shift+Tab.

          \n' + + '\n' + + '

          Порядок Вкладок цих розділів інтерфейсу користувача такий:

          \n' + + '\n' + + '
            \n' + + '
          1. Рядок меню
          2. \n' + + '
          3. Кожна група панелей інструментів
          4. \n' + + '
          5. Бічна панель
          6. \n' + + '
          7. Шлях до елементів у розділі "Нижній колонтитул"
          8. \n' + + '
          9. Кнопка перемикача "Кількість слів" у розділі "Нижній колонтитул"
          10. \n' + + '
          11. Посилання на брендинг у розділі "Нижній колонтитул"
          12. \n' + + '
          13. Маркер змінення розміру в розділі "Нижній колонтитул"
          14. \n' + + '
          \n' + + '\n' + + '

          Якщо розділ інтерфейсу користувача відсутній, він пропускається.

          \n' + + '\n' + + '

          Якщо фокус навігації клавіатури знаходиться на розділі "Нижній колонтитул", але користувач не бачить видиму бічну панель, натисніть Shift+Tab,\n' + + ' щоб перемістити фокус на першу групу панелі інструментів, а не на останню.

          \n' + + '\n' + + '

          Навігація в межах розділів інтерфейсу користувача

          \n' + + '\n' + + '

          Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу зі стрілкою.

          \n' + + '\n' + + '

          Клавіші зі стрілками Ліворуч і Праворуч

          \n' + + '\n' + + '
            \n' + + '
          • переміщують між меню в рядку меню.
          • \n' + + '
          • відкривають вкладене меню в меню.
          • \n' + + '
          • переміщують користувача між кнопками в групі панелі інструментів.
          • \n' + + '
          • переміщують між елементами в шляху до елементів у розділі "Нижній колонтитул".
          • \n' + + '
          \n' + + '\n' + + '

          Клавіші зі стрілками Вниз і Вгору

          \n' + + '\n' + + '
            \n' + + '
          • переміщують між елементами меню в меню.
          • \n' + + '
          • переміщують між елементами в спливаючому меню панелі інструментів.
          • \n' + + '
          \n' + + '\n' + + '

          Клавіші зі стрілками переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.

          \n' + + '\n' + + '

          Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу Esc.

          \n' + + '\n' + + '

          Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші Esc також виконує вихід\n' + + ' з навігації за допомогою клавіатури повністю.

          \n' + + '\n' + + '

          Виконання елементу меню або кнопки панелі інструментів

          \n' + + '\n' + + '

          Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші Return, Enter,\n' + + ' або Пробіл, щоб виконати цей елемент.

          \n' + + '\n' + + '

          Навігація по діалоговим вікнам без вкладок

          \n' + + '\n' + + '

          У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.

          \n' + + '\n' + + '

          Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші Tab або Shift+Tab.

          \n' + + '\n' + + '

          Навігація по діалоговим вікнам з вкладками

          \n' + + '\n' + + '

          У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.

          \n' + + '\n' + + '

          Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші Tab або\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу зі стрілкою,\n' + + ' щоб циклічно переходити по доступним вкладкам.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/vi.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/vi.js new file mode 100644 index 0000000..d8eda11 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/vi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi', +'

          Bắt đầu điều hướng bàn phím

          \n' + + '\n' + + '
          \n' + + '
          Tập trung vào thanh menu
          \n' + + '
          Windows hoặc Linux: Alt+F9
          \n' + + '
          macOS: ⌥F9
          \n' + + '
          Tập trung vào thanh công cụ
          \n' + + '
          Windows hoặc Linux: Alt+F10
          \n' + + '
          macOS: ⌥F10
          \n' + + '
          Tập trung vào chân trang
          \n' + + '
          Windows hoặc Linux: Alt+F11
          \n' + + '
          macOS: ⌥F11
          \n' + + '
          Tập trung vào thông báo
          \n' + + '
          Windows hoặc Linux: Alt+F12
          \n' + + '
          macOS: ⌥F12
          \n' + + '
          Tập trung vào thanh công cụ ngữ cảnh
          \n' + + '
          Windows, Linux hoặc macOS: Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\n' + + ' đường dẫn phần tử Chân trang).

          \n' + + '\n' + + '

          Di chuyển qua lại giữa các phần UI

          \n' + + '\n' + + '

          Để di chuyển từ một phần UI sang phần tiếp theo, ấn Tab.

          \n' + + '\n' + + '

          Để di chuyển từ một phần UI về phần trước đó, ấn Shift+Tab.

          \n' + + '\n' + + '

          Thứ tự Tab của các phần UI này như sau:

          \n' + + '\n' + + '
            \n' + + '
          1. Thanh menu
          2. \n' + + '
          3. Từng nhóm thanh công cụ
          4. \n' + + '
          5. Thanh bên
          6. \n' + + '
          7. Đường dẫn phần tử trong chân trang
          8. \n' + + '
          9. Nút chuyển đổi đếm chữ ở chân trang
          10. \n' + + '
          11. Liên kết thương hiệu ở chân trang
          12. \n' + + '
          13. Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang
          14. \n' + + '
          \n' + + '\n' + + '

          Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.

          \n' + + '\n' + + '

          Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn Shift+Tab\n' + + ' sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.

          \n' + + '\n' + + '

          Di chuyển qua lại trong các phần UI

          \n' + + '\n' + + '

          Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím Mũi tên tương ứng cho phù hợp.

          \n' + + '\n' + + '

          Các phím mũi tên TráiPhải

          \n' + + '\n' + + '
            \n' + + '
          • di chuyển giữa các menu trong thanh menu.
          • \n' + + '
          • mở menu phụ trong một menu.
          • \n' + + '
          • di chuyển giữa các nút trong nhóm thanh công cụ.
          • \n' + + '
          • di chuyển giữa các mục trong đường dẫn phần tử của chân trang.
          • \n' + + '
          \n' + + '\n' + + '

          Các phím mũi tên Hướng xuốngHướng lên

          \n' + + '\n' + + '
            \n' + + '
          • di chuyển giữa các mục menu trong menu.
          • \n' + + '
          • di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.
          • \n' + + '
          \n' + + '\n' + + '

          Các phím mũi tên xoay vòng trong một phần UI tập trung.

          \n' + + '\n' + + '

          Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím Esc.

          \n' + + '\n' + + '

          Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím Esc cũng sẽ thoát\n' + + ' toàn bộ phần điều hướng bàn phím.

          \n' + + '\n' + + '

          Thực hiện chức năng của một mục menu hoặc nút thanh công cụ

          \n' + + '\n' + + '

          Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn Return, Enter,\n' + + ' hoặc Phím cách để thực hiện chức năng mục đó.

          \n' + + '\n' + + '

          Điều hướng giữa các hộp thoại không có nhiều tab

          \n' + + '\n' + + '

          Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.

          \n' + + '\n' + + '

          Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn Tab hoặc Shift+Tab.

          \n' + + '\n' + + '

          Điều hướng giữa các hộp thoại có nhiều tab

          \n' + + '\n' + + '

          Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.

          \n' + + '\n' + + '

          Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn Tab hoặc\n' + + ' Shift+Tab.

          \n' + + '\n' + + '

          Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím Mũi tên phù hợp\n' + + ' để xoay vòng các tab hiện có.

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_CN.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_CN.js new file mode 100644 index 0000000..f7e73d1 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_CN.js @@ -0,0 +1,87 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN', +'

          开始键盘导航

          \n' + + '\n' + + '
          \n' + + '
          使菜单栏处于焦点
          \n' + + '
          Windows 或 Linux:Alt+F9
          \n' + + '
          macOS:⌥F9
          \n' + + '
          使工具栏处于焦点
          \n' + + '
          Windows 或 Linux:Alt+F10
          \n' + + '
          macOS:⌥F10
          \n' + + '
          使页脚处于焦点
          \n' + + '
          Windows 或 Linux:Alt+F11
          \n' + + '
          macOS:⌥F11
          \n' + + '
          使通知处于焦点
          \n' + + '
          Windows 或 Linux:Alt+F12
          \n' + + '
          macOS:⌥F12
          \n' + + '
          使上下文工具栏处于焦点
          \n' + + '
          Windows、Linux 或 macOS:Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          导航将在第一个 UI 项上开始,其中突出显示该项,或者对于页脚元素路径中的第一项,将为其添加下划线。

          \n' + + '\n' + + '

          在 UI 部分之间导航

          \n' + + '\n' + + '

          要从一个 UI 部分移至下一个,请按 Tab

          \n' + + '\n' + + '

          要从一个 UI 部分移至上一个,请按 Shift+Tab

          \n' + + '\n' + + '

          这些 UI 部分的 Tab 顺序为:

          \n' + + '\n' + + '
            \n' + + '
          1. 菜单栏
          2. \n' + + '
          3. 每个工具栏组
          4. \n' + + '
          5. 边栏
          6. \n' + + '
          7. 页脚中的元素路径
          8. \n' + + '
          9. 页脚中的字数切换按钮
          10. \n' + + '
          11. 页脚中的品牌链接
          12. \n' + + '
          13. 页脚中的编辑器调整大小图柄
          14. \n' + + '
          \n' + + '\n' + + '

          如果不存在某个 UI 部分,则跳过它。

          \n' + + '\n' + + '

          如果键盘导航焦点在页脚,并且没有可见的边栏,则按 Shift+Tab 将焦点移至第一个工具栏组而非最后一个。

          \n' + + '\n' + + '

          在 UI 部分内导航

          \n' + + '\n' + + '

          要从一个 UI 元素移至下一个,请按相应的箭头键。

          \n' + + '\n' + + '

          箭头键

          \n' + + '\n' + + '
            \n' + + '
          • 在菜单栏中的菜单之间移动。
          • \n' + + '
          • 打开菜单中的子菜单。
          • \n' + + '
          • 在工具栏组中的按钮之间移动。
          • \n' + + '
          • 在页脚的元素路径中的各项之间移动。
          • \n' + + '
          \n' + + '\n' + + '

          箭头键

          \n' + + '\n' + + '
            \n' + + '
          • 在菜单中的菜单项之间移动。
          • \n' + + '
          • 在工具栏弹出菜单中的各项之间移动。
          • \n' + + '
          \n' + + '\n' + + '

          箭头键在具有焦点的 UI 部分内循环。

          \n' + + '\n' + + '

          要关闭打开的菜单、打开的子菜单或打开的弹出菜单,请按 Esc 键。

          \n' + + '\n' + + '

          如果当前的焦点在特定 UI 部分的“顶部”,则按 Esc 键还将完全退出键盘导航。

          \n' + + '\n' + + '

          执行菜单项或工具栏按钮

          \n' + + '\n' + + '

          当突出显示所需的菜单项或工具栏按钮时,按 ReturnEnter空格以执行该项。

          \n' + + '\n' + + '

          在非标签页式对话框中导航

          \n' + + '\n' + + '

          在非标签页式对话框中,当对话框打开时,第一个交互组件获得焦点。

          \n' + + '\n' + + '

          通过按 TabShift+Tab,在交互对话框组件之间导航。

          \n' + + '\n' + + '

          在标签页式对话框中导航

          \n' + + '\n' + + '

          在标签页式对话框中,当对话框打开时,标签页菜单中的第一个按钮获得焦点。

          \n' + + '\n' + + '

          通过按 TabShift+Tab,在此对话框的交互组件之间导航。

          \n' + + '\n' + + '

          通过将焦点移至另一对话框标签页的菜单,然后按相应的箭头键以在可用的标签页间循环,从而切换到该对话框标签页。

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_TW.js b/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_TW.js new file mode 100644 index 0000000..5912770 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/js/i18n/keynav/zh_TW.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW', +'

          開始鍵盤瀏覽

          \n' + + '\n' + + '
          \n' + + '
          跳至功能表列
          \n' + + '
          Windows 或 Linux:Alt+F9
          \n' + + '
          macOS:⌥F9
          \n' + + '
          跳至工具列
          \n' + + '
          Windows 或 Linux:Alt+F10
          \n' + + '
          macOS:⌥F10
          \n' + + '
          跳至頁尾
          \n' + + '
          Windows 或 Linux:Alt+F11
          \n' + + '
          macOS:⌥F11
          \n' + + '
          跳至通知
          \n' + + '
          Windows 或 Linux:Alt+F12
          \n' + + '
          macOS:⌥F12
          \n' + + '
          跳至關聯式工具列
          \n' + + '
          Windows、Linux 或 macOS:Ctrl+F9
          \n' + + '
          \n' + + '\n' + + '

          瀏覽會從第一個 UI 項目開始,該項目會反白顯示,但如果是「頁尾」元素路徑的第一項,\n' + + ' 則加底線。

          \n' + + '\n' + + '

          在 UI 區段之間瀏覽

          \n' + + '\n' + + '

          從 UI 區段移至下一個,請按 Tab

          \n' + + '\n' + + '

          從 UI 區段移回上一個,請按 Shift+Tab

          \n' + + '\n' + + '

          這些 UI 區段的 Tab 順序如下:

          \n' + + '\n' + + '
            \n' + + '
          1. 功能表列
          2. \n' + + '
          3. 各個工具列群組
          4. \n' + + '
          5. 側邊欄
          6. \n' + + '
          7. 頁尾中的元素路徑
          8. \n' + + '
          9. 頁尾中字數切換按鈕
          10. \n' + + '
          11. 頁尾中的品牌連結
          12. \n' + + '
          13. 頁尾中編輯器調整大小控點
          14. \n' + + '
          \n' + + '\n' + + '

          如果 UI 區段未顯示,表示已略過該區段。

          \n' + + '\n' + + '

          如果鍵盤瀏覽跳至頁尾,但沒有顯示側邊欄,則按下 Shift+Tab\n' + + ' 會跳至第一個工具列群組,而不是最後一個。

          \n' + + '\n' + + '

          在 UI 區段之內瀏覽

          \n' + + '\n' + + '

          在兩個 UI 元素之間移動,請按適當的方向鍵。

          \n' + + '\n' + + '

          向左向右方向鍵

          \n' + + '\n' + + '
            \n' + + '
          • 在功能表列中的功能表之間移動。
          • \n' + + '
          • 開啟功能表中的子功能表。
          • \n' + + '
          • 在工具列群組中的按鈕之間移動。
          • \n' + + '
          • 在頁尾的元素路徑中項目之間移動。
          • \n' + + '
          \n' + + '\n' + + '

          向下向上方向鍵

          \n' + + '\n' + + '
            \n' + + '
          • 在功能表中的功能表項目之間移動。
          • \n' + + '
          • 在工具列快顯功能表中的項目之間移動。
          • \n' + + '
          \n' + + '\n' + + '

          方向鍵會在所跳至 UI 區段之內循環。

          \n' + + '\n' + + '

          若要關閉已開啟的功能表、已開啟的子功能表,或已開啟的快顯功能表,請按 Esc 鍵。

          \n' + + '\n' + + '

          如果目前已跳至特定 UI 區段的「頂端」,則按 Esc 鍵也會結束\n' + + ' 整個鍵盤瀏覽。

          \n' + + '\n' + + '

          執行功能表列項目或工具列按鈕

          \n' + + '\n' + + '

          當想要的功能表項目或工具列按鈕已反白顯示時,按 ReturnEnter、\n' + + ' 或空白鍵即可執行該項目。

          \n' + + '\n' + + '

          瀏覽非索引標籤式對話方塊

          \n' + + '\n' + + '

          在非索引標籤式對話方塊中,開啟對話方塊時會跳至第一個互動元件。

          \n' + + '\n' + + '

          TabShift+Tab 即可在互動式對話方塊元件之間瀏覽。

          \n' + + '\n' + + '

          瀏覽索引標籤式對話方塊

          \n' + + '\n' + + '

          在索引標籤式對話方塊中,開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。

          \n' + + '\n' + + '

          若要在此對話方塊的互動式元件之間瀏覽,請按 Tab 或\n' + + ' Shift+Tab

          \n' + + '\n' + + '

          先跳至索引標籤式功能表,然後按適當的方向鍵,即可切換至另一個對話方塊索引標籤,\n' + + ' 以循環瀏覽可用的索引標籤。

          \n'); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/help/plugin.min.js b/staticfiles/tinymce/plugins/help/plugin.min.js new file mode 100644 index 0000000..acddac2 --- /dev/null +++ b/staticfiles/tinymce/plugins/help/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const n=e=>{const n=(new Date).getTime(),a=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+a+t+String(n)},a=e=>t=>t.options.get(e),r=a("help_tabs"),o=a("forced_plugins"),i=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=a=e,(r=String).prototype.isPrototypeOf(n)||(null===(o=a.constructor)||void 0===o?void 0:o.name)===r.name)?"string":t;var n,a,r,o})(e);const s=e=>undefined===e;const c=e=>"function"==typeof e,l=()=>false;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?m.none():m.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const u=Array.prototype.slice,p=Array.prototype.indexOf,y=(e,t)=>{const n=e.length,a=new Array(n);for(let r=0;r{const n=[];for(let a=0,r=e.length;a{const n=u.call(e,0);return n.sort(t),n},g=Object.keys,k=Object.hasOwnProperty,v=(e,t)=>k.call(e,t);var b=tinymce.util.Tools.resolve("tinymce.Resource"),f=tinymce.util.Tools.resolve("tinymce.util.I18n");const A=(e,t)=>b.load(`tinymce.html-i18n.help-keynav.${t}`,`${e}/js/i18n/keynav/${t}.js`),w=e=>A(e,f.getCode()).catch((()=>A(e,"en")));var C=tinymce.util.Tools.resolve("tinymce.Env");const S=e=>{const t=C.os.isMacOS()||C.os.isiOS(),n=t?{alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"}:{meta:"Ctrl ",access:"Shift + Alt "},a=e.split("+"),r=y(a,(e=>{const t=e.toLowerCase().trim();return v(n,t)?n[t]:e}));return t?r.join("").replace(/\s/,""):r.join("+")},M=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Alt + F12"],action:"Focus to notification"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],_=()=>({name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:y(M,(e=>{const t=y(e.shortcuts,S).join(" or ");return[e.action,t]}))}]}),x=y([{key:"accordion",name:"Accordion"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"image",name:"Image"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"advlist",name:"List Styles"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"pagebreak",name:"Page Break"},{key:"preview",name:"Preview"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"table",name:"Table"},{key:"textcolor",name:"Text Color"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"typography",name:"Advanced Typography",type:"premium",slug:"advanced-typography"},{key:"ai",name:"AI Assistant",type:"premium"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"advcode",name:"Enhanced Code Editor",type:"premium"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium",slug:"introduction-to-mediaembed"},{key:"advtable",name:"Enhanced Tables",type:"premium"},{key:"exportpdf",name:"Export to PDF",type:"premium"},{key:"exportword",name:"Export to Word",type:"premium"},{key:"footnotes",name:"Footnotes",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"editimage",name:"Image Editing",type:"premium"},{key:"uploadcare",name:"Image Optimizer Powered by Uploadcare",type:"premium"},{key:"importword",name:"Import from Word",type:"premium"},{key:"inlinecss",name:"Inline CSS",type:"premium",slug:"inline-css"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"math",name:"Math",type:"premium"},{key:"markdown",name:"Markdown",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"mergetags",name:"Merge Tags",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium",slug:"introduction-to-powerpaste"},{key:"revisionhistory",name:"Revision History",type:"premium"},{key:"tinymcespellchecker",name:"Spell Checker",type:"premium",slug:"introduction-to-tiny-spellchecker"},{key:"autocorrect",name:"Spelling Autocorrect",type:"premium"},{key:"tableofcontents",name:"Table of Contents",type:"premium"},{key:"advtemplate",name:"Templates",type:"premium",slug:"advanced-templates"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"introduction-to-tiny-comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium",slug:"tinydrive-introduction"}],(e=>({...e,type:e.type||"opensource",slug:e.slug||e.key}))),T=e=>{const t=e=>`${e.name}`,n=(e,n)=>{return(a=x,r=e=>e.key===n,((e,t,n)=>{for(let a=0,r=e.length;a((e,n)=>{const a=e.plugins[n].getMetadata;if(c(a)){const e=a();return{name:e.name,html:t(e)}}return{name:n,html:n}})(e,n)),(e=>{const n="premium"===e.type?`${e.name}*`:e.name;return{name:n,html:t({name:n,url:`https://www.tiny.cloud/docs/tinymce/7/${e.slug}/`})}}));var a,r},a=e=>{const t=(e=>{const t=g(e.plugins),n=o(e),a=s(n)?["onboarding"]:n.concat(["onboarding"]);return h(t,(e=>!(((e,t)=>p.call(e,t))(a,e)>-1)))})(e),a=d(y(t,(t=>n(e,t))),((e,t)=>e.name.localeCompare(t.name))),r=y(a,(e=>"
        • "+e.html+"
        • ")),i=r.length,c=r.join("");return"

          "+f.translate(["Plugins installed ({0}):",i])+"

            "+c+"
          "},r={type:"htmlpanel",presets:"document",html:[(e=>null==e?"":"
          "+a(e)+"
          ")(e),(()=>{const e=h(x,(({type:e})=>"premium"===e)),t=d(y(e,(e=>e.name)),((e,t)=>e.localeCompare(t))),n=y(t,(e=>`
        • ${e}
        • `)).join("");return"

          "+f.translate("Premium plugins:")+"

          "})()].join("")};return{name:"plugins",title:"Plugins",items:[r]}};var O=tinymce.util.Tools.resolve("tinymce.EditorManager");const P=(e,t,a)=>()=>{(async(e,t,a)=>{const o=_(),s=await(async e=>({name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:await w(e)}]}))(a),c=T(e),l=(()=>{var e,t;const n='TinyMCE '+(e=O.majorVersion,t=O.minorVersion,(0===e.indexOf("@")?"X.X.X":e+"."+t)+"");return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

          "+f.translate(["You are using {0}",n])+"

          ",presets:"document"}]}})(),u={[o.name]:o,[s.name]:s,[c.name]:c,[l.name]:l,...t.get()};return m.from(r(e)).fold((()=>(e=>{const t=g(e),n=t.indexOf("versions");return-1!==n&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t}})(u)),(e=>((e,t)=>{const a={},r=y(e,(e=>{var r;if(i(e))return v(t,e)&&(a[e]=t[e]),e;{const t=null!==(r=e.name)&&void 0!==r?r:n("tab-name");return a[t]=e,t}}));return{tabs:a,names:r}})(e,u)))})(e,t,a).then((({tabs:t,names:n})=>{const a={type:"tabpanel",tabs:(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t{return v(n=t,a=e)?m.from(n[a]):m.none();var n,a})))};e.windowManager.open({title:"Help",size:"medium",body:a,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}))};e.add("help",((e,t)=>{const a=(()=>{let e={};return{get:()=>e,set:t=>{e=t}}})(),r=(e=>({addTab:t=>{var a;const r=null!==(a=t.name)&&void 0!==a?a:n("tab-name"),o=e.get();o[r]=t,e.set(o)}}))(a);(e=>{(0,e.options.register)("help_tabs",{processor:"array"})})(e);const o=P(e,a,t);return((e,t)=>{e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t,context:"any"}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t,context:"any"})})(e,o),((e,t)=>{e.addCommand("mceHelp",t)})(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),((e,t)=>{e.on("init",(()=>{w(t)}))})(e,t),r}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/image/plugin.min.js b/staticfiles/tinymce/plugins/image/plugin.min.js new file mode 100644 index 0000000..9480158 --- /dev/null +++ b/staticfiles/tinymce/plugins/image/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=Object.getPrototypeOf,a=(e,t,a)=>{var i;return!!a(e,t.prototype)||(null===(i=e.constructor)||void 0===i?void 0:i.name)===t.name},i=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&a(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":t})(t)===e,s=e=>t=>typeof t===e,r=i("string"),o=i("object"),n=e=>((e,i)=>o(e)&&a(e,i,((e,a)=>t(e)===a)))(e,Object),l=i("array"),c=e=>null===e;const m=s("boolean"),d=e=>!(e=>null==e)(e),g=s("function"),u=s("number"),p=()=>{};class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const b=Object.keys,v=Object.hasOwnProperty,y=(e,t)=>v.call(e,t),f=Array.prototype.push,w=e=>{const t=[];for(let a=0,i=e.length;a{((e,t,a)=>{if(!(r(a)||m(a)||u(a)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",a,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,a+"")})(e.dom,t,a)},D=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},_=D;var C=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),I=tinymce.util.Tools.resolve("tinymce.util.URI");const U=e=>e.length>0,S=e=>t=>t.options.get(e),x=S("image_dimensions"),N=S("image_advtab"),T=S("image_uploadtab"),E=S("image_prepend_url"),L=S("image_class_list"),O=S("image_description"),j=S("image_title"),M=S("image_caption"),R=S("image_list"),k=S("a11y_advanced_options"),z=S("automatic_uploads"),B=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),P=e=>(e&&(e=e.replace(/px$/,"")),e),F=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e),H=e=>"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder")),G=(e,t)=>{const a=e.options.get;return I.isDomSafe(t,"img",{allow_html_data_urls:a("allow_html_data_urls"),allow_script_urls:a("allow_script_urls"),allow_svg_data_urls:a("allow_svg_data_urls")})},W=C.DOM,$=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?P(e.style.marginLeft):"",V=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?P(e.style.marginTop):"",K=e=>e.style.borderWidth?P(e.style.borderWidth):"",Z=(e,t)=>{var a;return e.hasAttribute(t)&&null!==(a=e.getAttribute(t))&&void 0!==a?a:""},q=e=>null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName,J=(e,t,a)=>{""===a||null===a?e.removeAttribute(t):e.setAttribute(t,a)},Q=(e,t)=>{const a=e.getAttribute("style"),i=t(null!==a?a:"");i.length>0?(e.setAttribute("style",i),e.setAttribute("data-mce-style",i)):e.removeAttribute("style")},X=(e,t)=>(e,a,i)=>{const s=e.style;s[a]?(s[a]=F(i),Q(e,t)):J(e,a,i)},Y=(e,t)=>e.style[t]?P(e.style[t]):Z(e,t),ee=(e,t)=>{const a=F(t);e.style.marginLeft=a,e.style.marginRight=a},te=(e,t)=>{const a=F(t);e.style.marginTop=a,e.style.marginBottom=a},ae=(e,t)=>{const a=F(t);e.style.borderWidth=a},ie=(e,t)=>{e.style.borderStyle=t},se=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:""},re=e=>d(e)&&"FIGURE"===e.nodeName,oe=e=>0===W.getAttrib(e,"alt").length&&"presentation"===W.getAttrib(e,"role"),ne=e=>oe(e)?"":Z(e,"alt"),le=(e,t)=>{var a;const i=document.createElement("img");return J(i,"style",t.style),($(i)||""!==t.hspace)&&ee(i,t.hspace),(V(i)||""!==t.vspace)&&te(i,t.vspace),(K(i)||""!==t.border)&&ae(i,t.border),(se(i)||""!==t.borderStyle)&&ie(i,t.borderStyle),e(null!==(a=i.getAttribute("style"))&&void 0!==a?a:"")},ce=(e,t)=>({src:Z(t,"src"),alt:ne(t),title:Z(t,"title"),width:Y(t,"width"),height:Y(t,"height"),class:Z(t,"class"),style:e(Z(t,"style")),caption:q(t),hspace:$(t),vspace:V(t),border:K(t),borderStyle:se(t),isDecorative:oe(t)}),me=(e,t,a,i,s)=>{a[i]!==t[i]&&s(e,i,String(a[i]))},de=(e,t,a)=>{if(a){W.setAttrib(e,"role","presentation");const t=_(e);A(t,"alt","")}else{if(c(t)){_(e).dom.removeAttribute("alt")}else{const a=_(e);A(a,"alt",t)}"presentation"===W.getAttrib(e,"role")&&W.setAttrib(e,"role","")}},ge=(e,t)=>(a,i,s)=>{e(a,s),Q(a,t)},ue=(e,t,a)=>{const i=ce(e,a);me(a,i,t,"caption",((e,t,a)=>(e=>{q(e)?(e=>{const t=e.parentNode;d(t)&&(W.insertAfter(e,t),W.remove(t))})(e):(e=>{const t=W.create("figure",{class:"image"});W.insertAfter(t,e),t.appendChild(e),t.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),t.contentEditable="false"})(e)})(e))),me(a,i,t,"src",J),me(a,i,t,"title",J),me(a,i,t,"width",X(0,e)),me(a,i,t,"height",X(0,e)),me(a,i,t,"class",J),me(a,i,t,"style",ge(((e,t)=>J(e,"style",t)),e)),me(a,i,t,"hspace",ge(ee,e)),me(a,i,t,"vspace",ge(te,e)),me(a,i,t,"border",ge(ae,e)),me(a,i,t,"borderStyle",ge(ie,e)),((e,t,a)=>{a.alt===t.alt&&a.isDecorative===t.isDecorative||de(e,a.alt,a.isDecorative)})(a,i,t)},pe=(e,t)=>{const a=(e=>{if(e.margin){const t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),i=e.dom.styles.parse(e.dom.styles.serialize(a));return e.dom.styles.serialize(i)},he=e=>{const t=e.selection.getNode(),a=e.dom.getParent(t,"figure.image");return a?e.dom.select("img",a)[0]:t&&("IMG"!==t.nodeName||H(t))?null:t},be=(e,t)=>{var a;const i=e.dom,s=(t=>{const a={};var i;return((e,t,a,i)=>{((e,t)=>{const a=b(e);for(let i=0,s=a.length;i{(t(e,s)?a:i)(e,s)}))})(t,((t,a)=>!e.schema.isValidChild(a,"figure")),(i=a,(e,t)=>{i[t]=e}),p),a})(e.schema.getTextBlockElements()),r=i.getParent(t.parentNode,(e=>{return t=s,a=e.nodeName,y(t,a)&&void 0!==t[a]&&null!==t[a];var t,a}),e.getBody());return r&&null!==(a=i.split(r,t))&&void 0!==a?a:t},ve=(e,t)=>{const a=((t,a)=>{const i=document.createElement("img");if(ue((t=>pe(e,t)),{...a,caption:!1},i),de(i,a.alt,a.isDecorative),a.caption){const e=W.create("figure",{class:"image"});return e.appendChild(i),e.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false",e}return i})(0,t);e.dom.setAttrib(a,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(a.outerHTML);const i=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(i,"data-mce-id",null),re(i)){const t=be(e,i);e.selection.select(t)}else e.selection.select(i)},ye=(e,t)=>{const a=he(e);if(a){const i={...ce((t=>pe(e,t)),a),...t},s=((e,t)=>{const a=t.src;return{...t,src:G(e,a)?a:""}})(e,i);i.src?((e,t)=>{const a=he(e);if(a)if(ue((t=>pe(e,t)),t,a),((e,t)=>{e.dom.setAttrib(t,"src",t.getAttribute("src"))})(e,a),re(a.parentNode)){e.dom.setStyle(a,"float","");const t=a.parentNode;be(e,t),e.selection.select(a.parentNode)}else e.selection.select(a),((e,t,a)=>{const i=()=>{a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())};a.onload=()=>{t.width||t.height||!x(e)||e.dom.setAttribs(a,{width:String(a.clientWidth),height:String(a.clientHeight)}),i()},a.onerror=i})(e,t,a)})(e,s):((e,t)=>{if(t){const a=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(a),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})(e,a)}else t.src&&ve(e,{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1,...t})},fe=(we=(e,t)=>n(e)&&n(t)?fe(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let a=0;ar(e.value)?e.value:"",Ce=(e,t)=>{const a=[];return De.each(e,(e=>{const i=(e=>r(e.text)?e.text:r(e.title)?e.title:"")(e);if(void 0!==e.menu){const s=Ce(e.menu,t);a.push({text:i,items:s})}else{const s=t(e);a.push({text:i,value:s})}})),a},Ie=(e=_e)=>t=>t?h.from(t).map((t=>Ce(t,e))):h.none(),Ue=(e,t)=>(e=>{for(let i=0;iy(e,"items"))(a=e[i])?Ue(a.items,t):a.value===t?h.some(a):h.none();if(s.isSome())return s}var a;return h.none()})(e),Se=Ie,xe=(e,t)=>e.bind((e=>Ue(e,t))),Ne=e=>{const t=Se((t=>e.convertURL(t.value||t.url||"","src"))),a=new Promise((a=>{((e,t)=>{const a=R(e);r(a)?fetch(a).then((e=>{e.ok&&e.json().then(t)})):g(a)?a(t):t(a)})(e,(e=>{a(t(e).map((e=>w([[{text:"None",value:""}],e]))))}))})),i=(A=L(e),Ie(_e)(A)),s=N(e),o=T(e),n=(e=>U(e.options.get("images_upload_url")))(e),l=(e=>d(e.options.get("images_upload_handler")))(e),c=(e=>{const t=he(e);return t?ce((t=>pe(e,t)),t):{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}})(e),m=O(e),u=j(e),p=x(e),b=M(e),v=k(e),y=z(e),f=h.some(E(e)).filter((e=>r(e)&&e.length>0));var A;return a.then((e=>({image:c,imageList:e,classList:i,hasAdvTab:s,hasUploadTab:o,hasUploadUrl:n,hasUploadHandler:l,hasDescription:m,hasImageTitle:u,hasDimensions:p,hasImageCaption:b,prependURL:f,hasAccessibilityOptions:v,automaticUploads:y})))},Te=e=>{const t=e.imageList.map((e=>({name:"images",type:"listbox",label:"Image list",items:e}))),a={name:"alt",type:"input",label:"Alternative description",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},i=e.classList.map((e=>({name:"classes",type:"listbox",label:"Class",items:e})));return w([[{name:"src",type:"urlinput",filetype:"image",label:"Source",picker_text:"Browse files"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[a]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{...(s=e.classList.isSome()&&e.hasImageCaption,s?{type:"grid",columns:2}:{type:"panel"}),items:w([i.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]]);var s},Ee=e=>({title:"General",name:"general",items:Te(e)}),Le=Te,Oe=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),je=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),Me=(e,t,a,i)=>{((e,t)=>{const a=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\/\//.test(t)?h.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?h.some(e+t):h.none())))(e,a.src.value).each((e=>{t.setData({src:{value:e,meta:a.src.meta}})}))})(t,i),((e,t)=>{const a=t.getData(),i=a.src.meta;if(void 0!==i){const s=fe({},a);((e,t,a)=>{e.hasDescription&&r(a.alt)&&(t.alt=a.alt),e.hasAccessibilityOptions&&(t.isDecorative=a.isDecorative||t.isDecorative||!1),e.hasImageTitle&&r(a.title)&&(t.title=a.title),e.hasDimensions&&(r(a.width)&&(t.dimensions.width=a.width),r(a.height)&&(t.dimensions.height=a.height)),r(a.class)&&xe(e.classList,a.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&m(a.caption)&&(t.caption=a.caption),e.hasAdvTab&&(r(a.style)&&(t.style=a.style),r(a.vspace)&&(t.vspace=a.vspace),r(a.border)&&(t.border=a.border),r(a.hspace)&&(t.hspace=a.hspace),r(a.borderstyle)&&(t.borderstyle=a.borderstyle))})(e,s,i),t.setData(s)}})(t,i),((e,t,a,i)=>{const s=i.getData(),r=s.src.value,o=s.src.meta||{};o.width||o.height||!t.hasDimensions||(U(r)?e.imageSize(r).then((e=>{a.open&&i.setData({dimensions:e})})).catch((e=>console.error(e))):i.setData({dimensions:{width:"",height:""}}))})(e,t,a,i),((e,t,a)=>{const i=a.getData(),s=xe(e.imageList,i.src.value);t.prevImage=s,a.setData({images:s.map((e=>e.value)).getOr("")})})(t,a,i)},Re=(e,t,a,i)=>{const s=i.getData();var r;i.block("Uploading image"),(r=s.fileinput,(e=>0{i.unblock()}),(s=>{const r=URL.createObjectURL(s),o=()=>{i.unblock(),URL.revokeObjectURL(r)},n=s=>{i.setData({src:{value:s,meta:{}}}),i.showTab("general"),Me(e,t,a,i),i.focus("src")};var l;(l=s,new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{var e;t(null===(e=a.error)||void 0===e?void 0:e.message)},a.readAsDataURL(l)}))).then((a=>{const l=e.createBlobCache(s,r,a);t.automaticUploads?e.uploadImage(l).then((e=>{n(e.url),o()})).catch((t=>{o(),e.alertErr(t,(()=>{i.focus("fileinput")}))})):(e.addToBlobCache(l),n(l.blobUri()),i.unblock())}))}))},ke=(e,t,a)=>(i,s)=>{"src"===s.name?Me(e,t,a,i):"images"===s.name?((e,t,a,i)=>{const s=i.getData(),r=xe(t.imageList,s.images);r.each((e=>{const t=""===s.alt||a.prevImage.map((e=>e.text===s.alt)).getOr(!1);t?""===e.value?i.setData({src:e,alt:a.prevAlt}):i.setData({src:e,alt:e.text}):i.setData({src:e})})),a.prevImage=r,Me(e,t,a,i)})(e,t,a,i):"alt"===s.name?a.prevAlt=i.getData().alt:"fileinput"===s.name?Re(e,t,a,i):"isDecorative"===s.name&&i.setEnabled("alt",!i.getData().isDecorative)},ze=e=>()=>{e.open=!1},Be=e=>e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler?{type:"tabpanel",tabs:w([[Ee(e)],e.hasAdvTab?[{title:"Advanced",name:"advanced",items:[{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}]:[]])}:{type:"panel",items:Le(e)},Pe=(e,t,a)=>i=>{const s=fe(Oe(t.image),i.getData()),r={...s,style:le(a.normalizeCss,je(s,!1))};e.execCommand("mceUpdateImage",!1,je(r,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),i.close()},Fe=e=>t=>G(e,t)?(e=>new Promise((t=>{const a=document.createElement("img"),i=e=>{a.parentNode&&a.parentNode.removeChild(a),t(e)};a.addEventListener("load",(()=>{const e={width:B(a.width,a.clientWidth),height:B(a.height,a.clientHeight)};i(Promise.resolve(e))})),a.addEventListener("error",(()=>{i(Promise.reject(`Failed to get image dimensions for: ${e}`))}));const s=a.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left="0px",s.width=s.height="auto",document.body.appendChild(a),a.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:"",height:""}),He=e=>(t,a,i)=>{var s;return e.editorUpload.blobCache.create({blob:t,blobUri:a,name:null===(s=t.name)||void 0===s?void 0:s.replace(/\.[^\.]+$/,""),filename:t.name,base64:i.split(",")[1]})},Ge=e=>t=>{e.editorUpload.blobCache.add(t)},We=e=>(t,a)=>{e.windowManager.alert(t,a)},$e=e=>t=>pe(e,t),Ve=e=>t=>e.dom.parseStyle(t),Ke=e=>(t,a)=>e.dom.serializeStyle(t,a),Ze=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject("Failed to upload image"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),qe=e=>{const t={imageSize:Fe(e),addToBlobCache:Ge(e),createBlobCache:He(e),alertErr:We(e),normalizeCss:$e(e),parseStyle:Ve(e),serializeStyle:Ke(e),uploadImage:Ze(e)};return{open:()=>{Ne(e).then((a=>{const i=(e=>({prevImage:xe(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(a);return{title:"Insert/Edit Image",size:"normal",body:Be(a),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Oe(a.image),onSubmit:Pe(e,a,t),onChange:ke(t,a,i),onClose:ze(i)}})).then(e.windowManager.open)}}},Je=e=>{const t=e.attr("class");return d(t)&&/\bimage\b/.test(t)},Qe=e=>t=>{let a=t.length;const i=t=>{t.attr("contenteditable",e?"true":null)};for(;a--;){const s=t[a];Je(s)&&(s.attr("contenteditable",e?"false":null),De.each(s.getAll("figcaption"),i))}},Xe=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("image",(e=>{(e=>{const t=e.options.register;t("image_dimensions",{processor:"boolean",default:!0}),t("image_advtab",{processor:"boolean",default:!1}),t("image_uploadtab",{processor:"boolean",default:!0}),t("image_prepend_url",{processor:"string",default:""}),t("image_class_list",{processor:"object[]"}),t("image_description",{processor:"boolean",default:!0}),t("image_title",{processor:"boolean",default:!1}),t("image_caption",{processor:"boolean",default:!1}),t("image_list",{processor:e=>{const t=!1===e||r(e)||((e,t)=>{if(l(e)){for(let a=0,i=e.length;a{e.on("PreInit",(()=>{e.parser.addNodeFilter("figure",Qe(!0)),e.serializer.addNodeFilter("figure",Qe(!1))}))})(e),(e=>{e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:qe(e).open,onSetup:t=>{t.setActive(d(he(e)));const a=e.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",t.setActive).unbind,i=Xe(e)(t);return()=>{a(),i()}}}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:qe(e).open,onSetup:Xe(e)}),e.ui.registry.addContextMenu("image",{update:t=>e.selection.isEditable()&&(re(t)||"IMG"===t.nodeName&&!H(t))?["image"]:[]})})(e),(e=>{e.addCommand("mceImage",qe(e).open),e.addCommand("mceUpdateImage",((t,a)=>{e.undoManager.transact((()=>ye(e,a)))}))})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/importcss/plugin.min.js b/staticfiles/tinymce/plugins/importcss/plugin.min.js new file mode 100644 index 0000000..b1b1a5e --- /dev/null +++ b/staticfiles/tinymce/plugins/importcss/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=e=>"function"==typeof e;var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),g=p("importcss_file_filter"),_=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),M=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s{const s=e.length,r=new Array(s);for(let o=0;oa.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=_(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/",c=e.editorManager.suffix;return t===o+"/content"+(e.inline?".inline":"")+`${c}.css`||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet&&e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(g(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),M(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/insertdatetime/plugin.min.js b/staticfiles/tinymce/plugins/insertdatetime/plugin.min.js new file mode 100644 index 0000000..8a05382 --- /dev/null +++ b/staticfiles/tinymce/plugins/insertdatetime/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),n=t("insertdatetime_timeformat"),r=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)&&e.selection.isEditable()){const a=d(e,t);let n;n=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const r=e.dom.getParent(e.selection.getStart(),"time");r?((e,t,a,n)=>{const r=e.dom.create("time",{datetime:a},n);e.dom.replace(r,t),e.selection.select(r,!0),e.selection.collapse(!1)})(e,r,n,a):e.insertContent('")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");const g=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,n)=>{u(e,null!=n?n:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:n(e))}))})(e),(e=>{const t=r(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=r(e);return t.length>0?t[0]:n(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)},onSetup:g(e)});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)}))),onSetup:g(e)})})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/link/plugin.min.js b/staticfiles/tinymce/plugins/link/plugin.min.js new file mode 100644 index 0000000..d8c40c7 --- /dev/null +++ b/staticfiles/tinymce/plugins/link/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(l=o.constructor)||void 0===l?void 0:l.name)===r.name)?"string":t;var n,o,r,l})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),l=t("array"),s=e=>null===e;const i=n("boolean"),a=e=>!(e=>null==e)(e),c=n("function"),u=(e,t)=>{if(l(e)){for(let n=0,o=e.length;n{},d=(e,t)=>e===t;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return a(e)?m.some(e):m.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const h=Array.prototype.indexOf,p=Array.prototype.push,f=e=>{const t=[];for(let n=0,o=e.length;n{for(let n=0;ne.exists((e=>n(e,t))),b=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;te?m.some(t):m.none(),y=e=>t=>t.options.get(e),_=y("link_assume_external_targets"),w=y("link_context_toolbar"),C=y("link_list"),O=y("link_default_target"),S=y("link_default_protocol"),A=y("link_target_list"),N=y("link_rel_list"),E=y("link_class_list"),R=y("link_title"),T=y("allow_unsafe_link_target"),L=y("link_quicklink"),P=y("link_attributes_postprocess"),M=Object.keys,D=Object.hasOwnProperty,B=(e,t)=>D.call(e,t);var I=tinymce.util.Tools.resolve("tinymce.util.URI"),K=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),j=tinymce.util.Tools.resolve("tinymce.util.Tools");const U=e=>a(e)&&"a"===e.nodeName.toLowerCase(),q=e=>U(e)&&!!$(e),F=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),o=n.firstChild,r=new K(o,n),l=[];let s=o;do{t(s)&&l.push(s)}while(s=r.next());return l}},V=e=>/^\w+:/i.test(e),$=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute("data-mce-href"))&&void 0!==t?t:e.getAttribute("href"))&&void 0!==n?n:""},z=(e,t)=>{const n=["noopener"],o=e?e.split(/\s+/):[],r=e=>e.filter((e=>-1===j.inArray(n,e))),l=t?(e=>(e=r(e)).length>0?e.concat(n):n)(o):r(o);return l.length>0?(e=>j.trim(e.sort().join(" ")))(l):""},G=(e,t)=>(t=t||W(e.selection.getRng())[0]||e.selection.getNode(),Z(t)?m.from(e.dom.select("a[href]",t)[0]):m.from(e.dom.getParent(t,"a[href]"))),H=(e,t)=>G(e,t).isSome(),J=(e,t)=>t.fold((()=>e.getContent({format:"text"})),(e=>e.innerText||e.textContent||"")).replace(/\uFEFF/g,""),W=e=>F(e,q),Q=e=>j.grep(e,q),X=e=>Q(e).length>0,Y=e=>{const t=e.schema.getTextInlineElements();if(G(e).exists((e=>e.hasAttribute("data-mce-block"))))return!1;const n=e.selection.getRng();return!!n.collapsed||0===F(n,(e=>1===e.nodeType&&!U(e)&&!B(t,e.nodeName.toLowerCase()))).length},Z=e=>a(e)&&"FIGURE"===e.nodeName&&/\bimage\b/i.test(e.className),ee=(e,t,n)=>{const o=e.selection.getNode(),r=G(e,o),l=((e,t)=>{const n={...t};if(0===N(e).length&&!T(e)){const e=z(n.rel,"_blank"===n.target);n.rel=e||null}return m.from(n.target).isNone()&&!1===A(e)&&(n.target=O(e)),n.href=((e,t)=>"http"!==t&&"https"!==t||V(e)?e:t+"://"+e)(n.href,_(e)),n})(e,(e=>{return t=["title","rel","class","target"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),o={href:e.href},((e,t)=>{for(let n=0,o=e.length;n{o=n(o,e)})),o;var t,n,o})(n)),s=P(e);a(s)&&s(l),e.undoManager.transact((()=>{n.href===t.href&&t.attach(),r.fold((()=>{((e,t,n,o)=>{const r=e.dom;Z(t)?le(r,t,o):n.fold((()=>{e.execCommand("mceInsertLink",!1,o);const t=e.selection.getEnd(),n=r.createRng();n.setStartAfter(t),n.setEndAfter(t),e.selection.setRng(n)}),(t=>{e.insertContent(r.createHTML("a",o,r.encode(t)))}))})(e,o,n.text,l)}),(t=>{e.focus(),((e,t,n,o)=>{n.each((e=>{B(t,"innerText")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,o);const r=e.dom.createRng();r.setStartAfter(t),r.setEndAfter(t),e.selection.setRng(r)})(e,t,n.text,l)}))}))},te=e=>{const{class:t,href:n,rel:o,target:r,text:l,title:i}=e;return(e=>{const t={};var n;return((e,t,n,o)=>{((e,t)=>{const n=M(e);for(let o=0,r=n.length;o{(t(e,r)?n:o)(e,r)}))})(e,((e,t)=>!1===s(e)),(n=t,(e,t)=>{n[t]=e}),g),t})({class:t.getOrNull(),href:n,rel:o.getOrNull(),target:r.getOrNull(),text:l.getOrNull(),title:i.getOrNull()})},ne=(e,t,n)=>{const o=((e,t)=>{const n=e.options.get,o={allow_html_data_urls:n("allow_html_data_urls"),allow_script_urls:n("allow_script_urls"),allow_svg_data_urls:n("allow_svg_data_urls")},r=t.href;return{...t,href:I.isDomSafe(r,"a",o)?r:""}})(e,n);e.hasPlugin("rtc",!0)?e.execCommand("createlink",!1,te(o)):ee(e,t,o)},oe=e=>{e.hasPlugin("rtc",!0)?e.execCommand("unlink"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();Z(t)?re(e,t):(e=>{const t=e.dom,n=e.selection,o=n.getBookmark(),r=n.getRng().cloneRange(),l=t.getParent(r.startContainer,"a[href]",e.getBody()),s=t.getParent(r.endContainer,"a[href]",e.getBody());l&&r.setStartBefore(l),s&&r.setEndAfter(s),n.setRng(r),e.execCommand("unlink"),n.moveToBookmark(o)})(e),e.focus()}))})(e)},re=(e,t)=>{var n;const o=e.dom.select("img",t)[0];if(o){const r=e.dom.getParents(o,"a[href]",t)[0];r&&(null===(n=r.parentNode)||void 0===n||n.insertBefore(o,r),e.dom.remove(r))}},le=(e,t,n)=>{var o;const r=e.select("img",t)[0];if(r){const t=e.create("a",n);null===(o=r.parentNode)||void 0===o||o.insertBefore(t,r),t.appendChild(r)}},se=e=>o(e.value)?e.value:"",ie=(e,t)=>{const n=[];return j.each(e,(e=>{const r=(e=>o(e.text)?e.text:o(e.title)?e.title:"")(e);if(void 0!==e.menu){const o=ie(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},ae=(e=se)=>t=>m.from(t).map((t=>ie(t,e))),ce=e=>ae(se)(e),ue=ae,ge=(e,t)=>n=>({name:e,type:"listbox",label:t,items:n}),de=se,me=(e,t)=>k(t,(t=>(e=>{return B(t=e,n="items")&&void 0!==t[n]&&null!==t[n];var t,n})(t)?me(e,t.items):x(t.value===e,t))),he=(e,t)=>{const n={text:e.text,title:e.title},o=(e,o)=>{const r=(l=t,s=o,"link"===s?l.link:"anchor"===s?l.anchor:m.none()).getOr([]);var l,s;return((e,t,n,o)=>{const r=o[t],l=e.length>0;return void 0!==r?me(r,n).map((t=>({url:{value:t.value,meta:{text:l?e:t.text,attach:g}},text:l?e:t.text}))):m.none()})(n.text,o,r,e)};return{onChange:(e,t)=>{const r=t.name;return"url"===r?(e=>{const t=(o=e.url,x(n.text.length<=0,m.from(null===(r=o.meta)||void 0===r?void 0:r.text).getOr(o.value)));var o,r;const l=(e=>{var t;return x(n.title.length<=0,m.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(""))})(e.url);return t.isSome()||l.isSome()?m.some({...t.map((e=>({text:e}))).getOr({}),...l.map((e=>({title:e}))).getOr({})}):m.none()})(e()):((e,t)=>h.call(e,t))(["anchor","link"],r)>-1?o(e(),r):"text"===r||"title"===r?(n[r]=e()[r],m.none()):m.none()}}};var pe=tinymce.util.Tools.resolve("tinymce.util.Delay");const fe=e=>{const t=e.href;return t.indexOf("@")>0&&-1===t.indexOf("/")&&-1===t.indexOf("mailto:")?m.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:e=>({...e,href:"mailto:"+t})}):m.none()},ke=(e,t)=>n=>{const o=n.href;return 1===e&&!V(o)||0===e&&/^\s*www(\.|\d\.)/i.test(o)?m.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+"://"+o})}):m.none()},ve=e=>{const t=e.dom.select("a:not([href])"),n=f(((e,t)=>{const n=e.length,o=new Array(n);for(let r=0;r{const t=e.name||e.id;return t?[{text:t,value:"#"+t}]:[]})));return n.length>0?m.some([{text:"None",value:""}].concat(n)):m.none()},be=e=>{const t=E(e);return t.length>0?ce(t):m.none()},xe=e=>{try{return m.some(JSON.parse(e))}catch(e){return m.none()}},ye=(e,t)=>{const n=N(e);if(n.length>0){const o=v(t,"_blank"),r=e=>z(de(e),o);return(!1===T(e)?ue(r):ce)(n)}return m.none()},_e=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],we=e=>{const t=A(e);return l(t)?ce(t).orThunk((()=>m.some(_e))):!1===t?m.none():m.some(_e)},Ce=(e,t,n)=>{const o=e.getAttrib(t,n);return null!==o&&o.length>0?m.some(o):m.none()},Oe=(e,t)=>(e=>{const t=t=>e.convertURL(t.value||t.url||"","href"),n=C(e);return new Promise((e=>{o(n)?fetch(n).then((e=>e.ok?e.text().then(xe):Promise.reject())).then(e,(()=>e(m.none()))):c(n)?n((t=>e(m.some(t)))):e(m.from(n))})).then((e=>e.bind(ue(t)).map((e=>e.length>0?[{text:"None",value:""}].concat(e):e))))})(e).then((n=>{const o=((e,t)=>{const n=e.dom,o=Y(e)?m.some(J(e.selection,t)):m.none(),r=t.bind((e=>m.from(n.getAttrib(e,"href")))),l=t.bind((e=>m.from(n.getAttrib(e,"target")))),s=t.bind((e=>Ce(n,e,"rel"))),i=t.bind((e=>Ce(n,e,"class")));return{url:r,text:o,title:t.bind((e=>Ce(n,e,"title"))),target:l,rel:s,linkClass:i}})(e,t);return{anchor:o,catalogs:{targets:we(e),rels:ye(e,o.target),classes:be(e),anchor:ve(e),link:n},optNode:t,flags:{titleEnabled:R(e)}}})),Se=e=>{const t=(e=>{const t=G(e);return Oe(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const o=n.getData();if(!o.url.value)return oe(e),void n.close();const r=e=>m.from(o[e]).filter((n=>!v(t.anchor[e],n))),l={href:o.url.value,text:r("text"),target:r("target"),rel:r("rel"),class:r("linkClass"),title:r("title")},s={href:o.url.value,attach:void 0!==o.url.meta&&o.url.meta.attach?o.url.meta.attach:g};((e,t)=>k([fe,ke(_(e),S(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((o=>{((e,t,n)=>{const o=e.selection.getRng();pe.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(o),n(t)}))}))})(e,n.message,(e=>{o(e?n.preprocess(t):t)}))})))))(e,l).then((t=>{ne(e,s,t)})),n.close()})(e,t);return((e,t,n)=>{const o=e.anchor.text.map((()=>({name:"text",type:"input",label:"Text to display"}))).toArray(),r=e.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],l=((e,t)=>{const n=e.anchor,o=n.url.getOr("");return{url:{value:o,meta:{original:{value:o}}},text:n.text.getOr(""),title:n.title.getOr(""),anchor:o,link:o,rel:n.rel.getOr(""),target:n.target.or(t).getOr(""),linkClass:n.linkClass.getOr("")}})(e,m.from(O(n))),s=e.catalogs,i=he(l,s);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:f([[{name:"url",type:"urlinput",filetype:"file",label:"URL",picker_text:"Browse links"}],o,r,b([s.anchor.map(ge("anchor","Anchors")),s.rels.map(ge("rel","Rel")),s.targets.map(ge("target","Open link in...")),s.link.map(ge("link","Link list")),s.classes.map(ge("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:l,onChange:(e,{name:t})=>{i.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ae=tinymce.util.Tools.resolve("tinymce.util.VK");const Ne=(e,t)=>{if(t){const o=$(t);if(/^#/.test(o)){const t=e.dom.select(`${o},[name="${n=o,((e,t)=>((e,t)=>""===t||e.length>=t.length&&e.substr(0,0+t.length)===t)(e,t))(n,"#")?(e=>e.substring(1))(n):n}"]`);t.length&&e.selection.scrollIntoView(t[0],!0)}else(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const n=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window});document.dispatchEvent(n),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)})(t.href)}var n},Ee=(e,t)=>{const n=Q(e.dom.getParents(t));return x(1===n.length,n[0])},Re=e=>e.selection.isCollapsed()||(e=>{const t=e.selection.getRng(),n=t.startContainer;return q(n)&&t.startContainer===t.endContainer&&1===e.dom.select("img",n).length})(e)?Ee(e,e.selection.getStart()):(e=>{const t=W(e.selection.getRng());return x(t.length>0,t[0]).or(Ee(e,e.selection.getNode()))})(e),Te=e=>()=>{e.execCommand("mceLink",!1,{dialog:!0})},Le=(e,t)=>(e.on("NodeChange",t),()=>e.off("NodeChange",t)),Pe=e=>t=>{const n=()=>{t.setActive(!e.mode.isReadOnly()&&H(e,e.selection.getNode())),t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},Me=e=>t=>{const n=()=>{t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},De=e=>t=>{const n=e.dom.getParents(e.selection.getStart()),o=n=>{t.setEnabled((t=>{return X(t)||(n=e.selection.getRng(),W(n).length>0);var n})(n)&&e.selection.isEditable())};return o(n),Le(e,(e=>o(e.parents)))},Be=e=>{const t=(e=>{const t=(()=>{const e=(e=>{const t=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(m.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(m.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(m.some(e))}}})(g);return{...e,on:t=>e.get().each(t)}})(),n=()=>t.get().or(Re(e));return e.on("contextmenu",(n=>{Ee(e,n.target).each(t.set)})),e.on("SelectionChange",(()=>{t.isSet()||Re(e).each(t.set)})),e.on("click",(n=>{t.clear();const o=Q(e.dom.getParents(n.target));1===o.length&&Ae.metaKeyPressed(n)&&(n.preventDefault(),Ne(e,o[0]))})),e.on("keydown",(o=>{t.clear(),!o.isDefaultPrevented()&&13===o.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(o)&&n().each((t=>{o.preventDefault(),Ne(e,t)}))})),{gotoSelectedLink:()=>n().each((t=>Ne(e,t)))}})(e);((e,t)=>{e.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Meta+K",onAction:Te(e),onSetup:Pe(e)}),e.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),((e,t)=>{e.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:Te(e),onSetup:Me(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),(e=>{e.ui.registry.addContextMenu("link",{update:t=>e.dom.isEditable(t)?X(e.dom.getParents(t,"a"))?"link unlink openlink":"link":""})})(e),((e,t)=>{const n=t=>{const n=e.selection.getNode();return t.setEnabled(H(e,n)&&e.selection.isEditable()),g};e.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Pe(e)},label:"Link",predicate:t=>w(e)&&H(e,t),initValue:()=>G(e).fold((()=>""),$),commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(H(e,n)),Pe(e)(t)},onAction:t=>{const n=t.getValue(),o=(t=>{const n=G(e),o=Y(e);if(n.isNone()&&o){const o=J(e.selection,n);return x(0===o.length,t)}return m.none()})(n);ne(e,{href:n,attach:g},{href:n,text:o,title:m.none(),rel:m.none(),target:m.from(O(e)),class:m.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:n,onAction:t=>{oe(e),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:n,onAction:e=>{t.gotoSelectedLink(),e.hide()}}]})})(e,t)};e.add("link",(e=>{(e=>{const t=e.options.register;t("link_assume_external_targets",{processor:e=>{const t=o(e)||i(e);return t?!0===e?{value:1,valid:t}:"http"===e||"https"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:"Must be a string or a boolean."}},default:!1}),t("link_context_toolbar",{processor:"boolean",default:!1}),t("link_list",{processor:e=>o(e)||c(e)||u(e,r)}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"}),t("link_target_list",{processor:e=>i(e)||u(e,r),default:!0}),t("link_rel_list",{processor:"object[]",default:[]}),t("link_class_list",{processor:"object[]",default:[]}),t("link_title",{processor:"boolean",default:!0}),t("allow_unsafe_link_target",{processor:"boolean",default:!1}),t("link_quicklink",{processor:"boolean",default:!1}),t("link_attributes_postprocess",{processor:"function"})})(e),(e=>{e.addCommand("mceLink",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&L(e)?e.dispatch("contexttoolbar-show",{toolbarKey:"quicklink"}):Se(e)}))})(e),Be(e),(e=>{e.addShortcut("Meta+K","",(()=>{e.execCommand("mceLink")}))})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/lists/plugin.min.js b/staticfiles/tinymce/plugins/lists/plugin.min.js new file mode 100644 index 0000000..ba49b0b --- /dev/null +++ b/staticfiles/tinymce/plugins/lists/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var n,o,r,s})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),s=t("array"),i=n("boolean"),l=e=>!(e=>null==e)(e),a=n("function"),d=n("number"),c=()=>{},m=e=>()=>e,u=(e,t)=>e===t,p=e=>t=>!e(t),g=m(!1);class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return l(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const f=Array.prototype.slice,y=Array.prototype.indexOf,v=Array.prototype.push,C=(e,t)=>{return n=e,o=t,y.call(n,o)>-1;var n,o},b=(e,t)=>{for(let n=0,o=e.length;n{const n=e.length,o=new Array(n);for(let r=0;r{for(let n=0,o=e.length;n{const n=[];for(let o=0,r=e.length;o(S(e,((e,o)=>{n=t(n,e,o)})),n),A=(e,t,n)=>{for(let o=0,r=e.length;oA(e,t,g),x=(e,t)=>(e=>{const t=[];for(let n=0,o=e.length;n{const t=f.call(e,0);return t.reverse(),t},E=(e,t)=>t>=0&&tE(e,0),D=e=>E(e,e.length-1),B=(e,t)=>{const n=[],o=a(t)?e=>b(n,(n=>t(n,e))):e=>C(n,e);for(let t=0,r=e.length;te.exists((e=>n(e,t))),P=(e,t,n)=>e.isSome()&&t.isSome()?h.some(n(e.getOrDie(),t.getOrDie())):h.none(),I=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},R=(e,t)=>{const n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return I(n.childNodes[0])},U=(e,t)=>{const n=(t||document).createElement(e);return I(n)},$=I,_=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},H=(e,t)=>e.dom===t.dom,F=_,V="undefined"!=typeof window?window:Function("return this;")(),j=(e,t)=>((e,t)=>{let n=null!=t?t:V;for(let t=0;t{const t=j("ownerDocument.defaultView",e);return r(e)&&((e=>((e,t)=>{const n=((e,t)=>j(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(K(e).constructor.name))},Q=e=>e.dom.nodeName.toLowerCase(),W=e=>e.dom.nodeType,q=e=>t=>W(t)===e,Z=e=>G(e)&&z(e.dom),G=q(1),J=q(3),X=q(11),Y=e=>t=>G(t)&&Q(t)===e,ee=e=>h.from(e.dom.parentNode).map($),te=e=>N(e.dom.childNodes,$),ne=(e,t)=>{const n=e.dom.childNodes;return h.from(n[t]).map($)},oe=e=>ne(e,0),re=e=>ne(e,e.dom.childNodes.length-1),se=e=>$(e.dom.host),ie=e=>{const t=J(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return(e=>{const t=(e=>$(e.dom.getRootNode()))(e);return X(n=t)&&l(n.dom.host)?h.some(t):h.none();var n})($(t)).fold((()=>n.body.contains(t)),(o=ie,r=se,e=>o(r(e))));var o,r};var le=(e,t,n,o,r)=>e(n,o)?h.some(n):a(r)&&r(n)?h.none():t(n,o,r);const ae=(e,t,n)=>{let o=e.dom;const r=a(n)?n:g;for(;o.parentNode;){o=o.parentNode;const e=$(o);if(t(e))return h.some(e);if(r(e))break}return h.none()},de=(e,t,n)=>le(((e,t)=>t(e)),ae,e,t,n),ce=(e,t,n)=>ae(e,(e=>_(e,t)),n),me=(e,t)=>{ee(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},ue=(e,t)=>{e.dom.appendChild(t.dom)},pe=(e,t)=>{S(t,(t=>{ue(e,t)}))},ge=e=>{e.dom.textContent="",S(te(e),(e=>{he(e)}))},he=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)};var fe=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),ye=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),ve=tinymce.util.Tools.resolve("tinymce.util.VK");const Ce=e=>N(e,$),be=Object.keys,Ne=(e,t)=>{const n=be(e);for(let o=0,r=n.length;o{const n=e.dom;Ne(t,((e,t)=>{((e,t,n)=>{if(!(o(n)||i(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(n,t,e)}))},Le=e=>O(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),Oe=e=>(e=>$(e.dom.cloneNode(!0)))(e),Ae=(e,t)=>{const n=((e,t)=>{const n=U(t),o=Le(e);return Se(n,o),n})(e,t);var o,r;r=n,(e=>h.from(e.dom.nextSibling).map($))(o=e).fold((()=>{ee(o).each((e=>{ue(e,r)}))}),(e=>{me(e,r)}));const s=te(e);return pe(n,s),he(e),n};var Te=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),xe=tinymce.util.Tools.resolve("tinymce.util.Tools");const ke=e=>t=>l(t)&&t.nodeName.toLowerCase()===e,Ee=e=>t=>l(t)&&e.test(t.nodeName),we=e=>l(e)&&3===e.nodeType,De=e=>l(e)&&1===e.nodeType,Be=Ee(/^(OL|UL|DL)$/),Me=Ee(/^(OL|UL)$/),Pe=ke("ol"),Ie=Ee(/^(LI|DT|DD)$/),Re=Ee(/^(DT|DD)$/),Ue=Ee(/^(TH|TD)$/),$e=ke("br"),_e=(e,t)=>l(t)&&t.nodeName in e.schema.getTextBlockElements(),He=(e,t)=>l(e)&&e.nodeName in t,Fe=(e,t)=>l(t)&&t.nodeName in e.schema.getVoidElements(),Ve=(e,t,n)=>{const o=e.isEmpty(t);return!(n&&e.select("span[data-mce-type=bookmark]",t).length>0)&&o},je=(e,t)=>e.isChildOf(t,e.getRoot()),Ke=e=>t=>t.options.get(e),ze=Ke("lists_indent_on_tab"),Qe=Ke("forced_root_block"),We=Ke("forced_root_block_attrs"),qe=(e,t,n={})=>{const o=e.dom,r=e.schema.getBlockElements(),s=o.createFragment(),i=Qe(e),l=We(e);let a,d,c=!1;for(d=o.create(i,{...l,...n.style?{style:n.style}:{}}),He(t.firstChild,r)||s.appendChild(d);a=t.firstChild;){const e=a.nodeName;c||"SPAN"===e&&"bookmark"===a.getAttribute("data-mce-type")||(c=!0),He(a,r)?(s.appendChild(a),d=null):(d||(d=o.create(i,l),s.appendChild(d)),d.appendChild(a))}return!c&&d&&d.appendChild(o.create("br",{"data-mce-bogus":"1"})),s},Ze=Te.DOM,Ge=Y("dd"),Je=Y("dt"),Xe=(e,t)=>{var n;Ge(t)?Ae(t,"dt"):Je(t)&&(n=t,h.from(n.dom.parentElement).map($)).each((n=>((e,t,n)=>{const o=Ze.select('span[data-mce-type="bookmark"]',t),r=qe(e,n),s=Ze.createRng();s.setStartAfter(n),s.setEndAfter(t);const i=s.extractContents();for(let t=i.firstChild;t;t=t.firstChild)if("LI"===t.nodeName&&e.dom.isEmpty(t)){Ze.remove(t);break}e.dom.isEmpty(i)||Ze.insertAfter(i,t),Ze.insertAfter(r,t);const l=n.parentElement;l&&Ve(e.dom,l)&&(e=>{const t=e.parentNode;t&&xe.each(o,(e=>{t.insertBefore(e,n.parentNode)})),Ze.remove(e)})(l),Ze.remove(n),Ve(e.dom,t)&&Ze.remove(t)})(e,n.dom,t.dom)))},Ye=e=>{Je(e)&&Ae(e,"dd")},et=(e,t)=>{if(we(e))return{container:e,offset:t};const n=fe.getNode(e,t);return we(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&we(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&we(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},tt=e=>{const t=e.cloneRange(),n=et(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);const o=et(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},nt=["OL","UL","DL"],ot=nt.join(","),rt=(e,t)=>{const n=t||e.selection.getStart(!0);return e.dom.getParent(n,ot,lt(e,n))},st=e=>{const t=e.selection.getSelectedBlocks();return L(((e,t)=>{const n=xe.map(t,(t=>e.dom.getParent(t,"li,dd,dt",lt(e,t))||t));return B(n)})(e,t),Ie)},it=(e,t)=>{const n=e.dom.getParents(t,"TD,TH");return n.length>0?n[0]:e.getBody()},lt=(e,t)=>{const n=e.dom.getParents(t,e.dom.isBlock),o=T(n,(t=>{return(t=>t.nodeName.toLowerCase()!==Qe(e))(t)&&(n=e.schema,!Be(o=t)&&!Ie(o)&&b(nt,(e=>n.isValidChild(o.nodeName,e))));var n,o}));return o.getOr(e.getBody())},at=(e,t)=>{const n=e.dom.getParents(t,"ol,ul",lt(e,t));return D(n)},dt=(e,t)=>{const n=N(t,(t=>at(e,t).getOr(t)));return B(n)},ct=e=>/\btox\-/.test(e.className),mt=(e,t)=>A(e,Be,Ue).exists((e=>e.nodeName===t&&!ct(e))),ut=(e,t)=>null!==t&&!e.dom.isEditable(t),pt=(e,t)=>{const n=e.dom.getParent(t,"ol,ul,dl");return ut(e,n)||!e.selection.isEditable()},gt=(e,t)=>{const n=e.selection.getNode();return t({parents:e.dom.getParents(n),element:n}),e.on("NodeChange",t),()=>e.off("NodeChange",t)},ht=(e,t)=>{const n=(t||document).createDocumentFragment();return S(e,(e=>{n.appendChild(e.dom)})),$(n)},ft=(e,t,n)=>e.dispatch("ListMutation",{action:t,element:n}),yt=(vt=/^\s+|\s+$/g,e=>e.replace(vt,""));var vt;const Ct=(e,t,n)=>{((e,t,n)=>{if(!o(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);(e=>void 0!==e.style&&a(e.style.getPropertyValue))(e)&&e.style.setProperty(t,n)})(e.dom,t,n)},bt=e=>F(e,"OL,UL"),Nt=e=>oe(e).exists(bt),St=e=>"listAttributes"in e,Lt=e=>"isComment"in e,Ot=e=>e.depth>0,At=e=>e.isSelected,Tt=e=>{const t=te(e),n=re(e).exists(bt)?t.slice(0,-1):t;return N(n,Oe)},xt=(e,t)=>{ue(e.item,t.list)},kt=(e,t)=>{const n={list:U(t,e),item:U("li",e)};return ue(n.list,n.item),n},Et=(e,t,n)=>{const o=t.slice(0,n.depth);return D(o).each((t=>{if(St(n)){const o=((e,t,n)=>{const o=U("li",e);return Se(o,t),pe(o,n),o})(e,n.itemAttributes,n.content);((e,t)=>{ue(e.list,t),e.item=t})(t,o),((e,t)=>{Q(e.list)!==t.listType&&(e.list=Ae(e.list,t.listType)),Se(e.list,t.listAttributes)})(t,n)}else if((e=>"isFragment"in e)(n))pe(t.item,n.content);else{const e=R(`\x3c!--${n.content}--\x3e`);ue(t.list,e)}})),o},wt=(e,t)=>{let n=h.none();const o=O(t,((t,o,r)=>Lt(o)?0===r?(n=h.some(o),t):Et(e,t,o):o.depth>t.length?((e,t,n)=>{const o=((e,t,n)=>{const o=[];for(let r=0;r{for(let t=1;t{for(let t=0;t{St(t)&&(Se(e.list,t.listAttributes),Se(e.item,t.itemAttributes)),pe(e.item,t.content)}))})(o,n),r=o,P(D(t),w(r),xt),t.concat(o)})(e,t,o):Et(e,t,o)),[]);return n.each((e=>{const t=R(`\x3c!--${e.content}--\x3e`);w(o).each((e=>{((e,t)=>{oe(e).fold((()=>{ue(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))})(e.list,t)}))})),w(o).map((e=>e.list))},Dt=e=>(S(e,((t,n)=>{((e,t)=>{const n=e[t].depth,o=e=>e.depth===n&&!e.dirty,r=e=>e.depthA(e.slice(t+1),o,r)))})(e,n).fold((()=>{t.dirty&&St(t)&&(e=>{e.listAttributes=((e,t)=>{const n={};var o;return((e,t,n,o)=>{Ne(e,((e,r)=>{(t(e,r)?n:o)(e,r)}))})(e,t,(o=n,(e,t)=>{o[t]=e}),c),n})(e.listAttributes,((e,t)=>"start"!==t))})(t)}),(e=>{return o=e,void(St(n=t)&&St(o)&&(n.listType=o.listType,n.listAttributes={...o.listAttributes}));var n,o}))})),e),Bt=(e,t,n,o)=>{var r,s;if(8===W(s=o)||"#comment"===Q(s))return[{depth:e+1,content:null!==(r=o.dom.nodeValue)&&void 0!==r?r:"",dirty:!1,isSelected:!1,isComment:!0}];t.each((e=>{H(e.start,o)&&n.set(!0)}));const i=((e,t,n)=>ee(e).filter(G).map((o=>({depth:t,dirty:!1,isSelected:n,content:Tt(e),itemAttributes:Le(e),listAttributes:Le(o),listType:Q(o),isInPreviousLi:!1}))))(o,e,n.get());t.each((e=>{H(e.end,o)&&n.set(!1)}));const l=re(o).filter(bt).map((o=>Pt(e,t,n,o))).getOr([]);return i.toArray().concat(l)},Mt=(e,t,n,o)=>oe(o).filter(bt).fold((()=>Bt(e,t,n,o)),(r=>{const s=O(te(o),((o,s,i)=>{if(0===i)return o;if(F(s,"LI"))return o.concat(Bt(e,t,n,s));{const t={isFragment:!0,depth:e,content:[s],isSelected:!1,dirty:!1,parentListType:Q(r)};return o.concat(t)}}),[]);return Pt(e,t,n,r).concat(s)})),Pt=(e,t,n,o)=>x(te(o),(o=>(bt(o)?Pt:Mt)(e+1,t,n,o))),It=(e,t,n)=>{const o=((e,t)=>{const n=(()=>{let e=!1;return{get:()=>e,set:t=>{e=t}}})();return N(e,(e=>({sourceList:e,entries:Pt(0,t,n,e)})))})(t,(e=>{const t=N(st(e),$);return P(T(t,p(Nt)),T(k(t),p(Nt)),((e,t)=>({start:e,end:t})))})(e));S(o,(t=>{((e,t)=>{S(L(e,At),(e=>((e,t)=>{switch(e){case"Indent":t.depth++;break;case"Outdent":t.depth--;break;case"Flatten":t.depth=0}t.dirty=!0})(t,e)))})(t.entries,n);const o=((e,t)=>x(((e,t)=>{if(0===e.length)return[];{let n=t(e[0]);const o=[];let r=[];for(let s=0,i=e.length;sw(t).exists(Ot)?((e,t)=>{const n=Dt(t);return wt(e.contentDocument,n).toArray()})(e,t):((e,t)=>{const n=Dt(t);return N(n,(t=>{const n=Lt(t)?ht([R(`\x3c!--${t.content}--\x3e`)]):ht(t.content),o=St(t)?t.itemAttributes:{};return $(qe(e,n.dom,o))}))})(e,t))))(e,t.entries);var r;S(o,(t=>{ft(e,"Indent"===n?"IndentList":"OutdentList",t.dom)})),r=t.sourceList,S(o,(e=>{me(r,e)})),he(t.sourceList)}))},Rt=(e,t)=>{const n=Ce((e=>{const t=(e=>{const t=at(e,e.selection.getStart()),n=L(e.selection.getSelectedBlocks(),Me);return t.toArray().concat(n)})(e),n=(e=>{const t=e.selection.getStart();return e.dom.getParents(t,"ol,ul",lt(e,t))})(e);return T(n,(e=>{return t=$(e),ee(t).exists((e=>Ie(e.dom)&&oe(e).exists((e=>!Be(e.dom)))&&re(e).exists((e=>!Be(e.dom)))));var t})).fold((()=>dt(e,t)),(e=>[e]))})(e)),o=Ce((e=>L(st(e),Re))(e));let r=!1;if(n.length||o.length){const s=e.selection.getBookmark();It(e,n,t),((e,t,n)=>{S(n,"Indent"===t?Ye:t=>Xe(e,t))})(e,t,o),e.selection.moveToBookmark(s),e.selection.setRng(tt(e.selection.getRng())),e.nodeChanged(),r=!0}return r},Ut=(e,t)=>!(e=>{const t=rt(e);return ut(e,t)||!e.selection.isEditable()})(e)&&Rt(e,t),$t=e=>Ut(e,"Indent"),_t=e=>Ut(e,"Outdent"),Ht=e=>Ut(e,"Flatten"),Ft=e=>"\ufeff"===e;var Vt=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager");const jt=Te.DOM,Kt=e=>{const t={},n=n=>{let o=e[n?"startContainer":"endContainer"],r=e[n?"startOffset":"endOffset"];if(De(o)){const e=jt.create("span",{"data-mce-type":"bookmark"});o.hasChildNodes()?(r=Math.min(r,o.childNodes.length-1),n?o.insertBefore(e,o.childNodes[r]):jt.insertAfter(e,o.childNodes[r])):o.appendChild(e),o=e,r=0}t[n?"startContainer":"endContainer"]=o,t[n?"startOffset":"endOffset"]=r};return n(!0),e.collapsed||n(),t},zt=e=>{const t=t=>{let n=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"];if(n){if(De(n)&&n.parentNode){const e=n;o=(e=>{var t;let n=null===(t=e.parentNode)||void 0===t?void 0:t.firstChild,o=0;for(;n;){if(n===e)return o;De(n)&&"bookmark"===n.getAttribute("data-mce-type")||o++,n=n.nextSibling}return-1})(n),n=n.parentNode,jt.remove(e),!n.hasChildNodes()&&jt.isBlock(n)&&n.appendChild(jt.create("br"))}e[t?"startContainer":"endContainer"]=n,e[t?"startOffset":"endOffset"]=o}};t(!0),t();const n=jt.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),tt(n)},Qt=e=>{switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Wt=(e,t)=>{xe.each(t,((t,n)=>{e.setAttribute(n,t)}))},qt=(e,t,n)=>{((e,t,n)=>{const o=n["list-style-type"]?n["list-style-type"]:null;e.setStyle(t,"list-style-type",o)})(e,t,n),((e,t,n)=>{Wt(t,n["list-attributes"]),xe.each(e.select("li",t),(e=>{Wt(e,n["list-item-attributes"])}))})(e,t,n)},Zt=(e,t)=>l(t)&&!He(t,e.schema.getBlockElements()),Gt=(e,t,n,o)=>{let r=t[n?"startContainer":"endContainer"];const s=t[n?"startOffset":"endOffset"];De(r)&&(r=r.childNodes[Math.min(s,r.childNodes.length-1)]||r),!n&&$e(r.nextSibling)&&(r=r.nextSibling);const i=(t,n)=>{var r;const s=new ye(t,(t=>{for(;!e.dom.isBlock(t)&&t.parentNode&&o!==t;)t=t.parentNode;return t})(t)),i=n?"next":"prev";let l;for(;l=s[i]();)if(!Fe(e,l)&&!Ft(l.textContent)&&0!==(null===(r=l.textContent)||void 0===r?void 0:r.length))return h.some(l);return h.none()};if(n&&we(r))if(Ft(r.textContent))r=i(r,!1).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.previousSibling&&(Zt(e,r.previousSibling)||we(r.previousSibling));)r=r.previousSibling;if(!n&&we(r))if(Ft(r.textContent))r=i(r,!0).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.nextSibling&&(Zt(e,r.nextSibling)||we(r.nextSibling));)r=r.nextSibling;for(;r.parentNode!==o;){const t=r.parentNode;if(_e(e,r))return r;if(/^(TD|TH)$/.test(t.nodeName))return r;r=t}return r},Jt=(e,t,n)=>{const o=e.selection.getRng();let r="LI";const s=lt(e,((e,t)=>{const n=e.selection.getStart(!0),o=Gt(e,t,!0,e.getBody());return r=$(o),s=$(t.commonAncestorContainer),i=r,l=function(e,...t){return(...n)=>{const o=t.concat(n);return e.apply(null,o)}}(H,s),ae(i,l,void 0).isSome()?t.commonAncestorContainer:n;var r,s,i,l})(e,o)),i=e.dom;if("false"===i.getContentEditable(e.selection.getNode()))return;"DL"===(t=t.toUpperCase())&&(r="DT");const l=Kt(o),a=L(((e,t,n)=>{const o=[],r=e.dom,s=Gt(e,t,!0,n),i=Gt(e,t,!1,n);let l;const a=[];for(let e=s;e&&(a.push(e),e!==i);e=e.nextSibling);return xe.each(a,(t=>{var s;if(_e(e,t))return o.push(t),void(l=null);if(r.isBlock(t)||$e(t))return $e(t)&&r.remove(t),void(l=null);const i=t.nextSibling;Vt.isBookmarkNode(t)&&(Be(i)||_e(e,i)||!i&&t.parentNode===n)?l=null:(l||(l=r.create("p"),null===(s=t.parentNode)||void 0===s||s.insertBefore(l,t),o.push(l)),l.appendChild(t))})),o})(e,o,s),e.dom.isEditable);xe.each(a,(o=>{let s;const l=o.previousSibling,a=o.parentNode;Ie(a)||(l&&Be(l)&&l.nodeName===t&&((e,t,n)=>{const o=e.getStyle(t,"list-style-type");let r=n?n["list-style-type"]:"";return r=null===r?"":r,o===r})(i,l,n)?(s=l,o=i.rename(o,r),l.appendChild(o)):(s=i.create(t),a.insertBefore(s,o),s.appendChild(o),o=i.rename(o,r)),((e,t)=>{xe.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],(n=>e.setStyle(t,n,"")))})(i,o),qt(i,s,n),Yt(e.dom,s))})),e.selection.setRng(zt(l))},Xt=(e,t,n)=>{return((e,t)=>Be(e)&&e.nodeName===(null==t?void 0:t.nodeName))(t,n)&&((e,t,n)=>e.getStyle(t,"list-style-type",!0)===e.getStyle(n,"list-style-type",!0))(e,t,n)&&(o=n,t.className===o.className);var o},Yt=(e,t)=>{let n,o=t.nextSibling;if(Xt(e,t,o)){const r=o;for(;n=r.firstChild;)t.appendChild(n);e.remove(r)}if(o=t.previousSibling,Xt(e,t,o)){const r=o;for(;n=r.lastChild;)t.insertBefore(n,t.firstChild);e.remove(r)}},en=(e,t,n,o)=>{if(t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},tn=(e,t,n,o)=>{if(t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},nn=e=>"list-style-type"in e,on=(e,t,n)=>{const o=rt(e);if(pt(e,o))return;const s=(e=>{const t=rt(e),n=e.selection.getSelectedBlocks();return((e,t)=>l(e)&&1===t.length&&t[0]===e)(t,n)?(e=>L(e.querySelectorAll(ot),Be))(t):L(n,(e=>Be(e)&&t!==e))})(e),i=r(n)?n:{};s.length>0?((e,t,n,o,r)=>{const s=Be(t);if(!s||t.nodeName!==o||nn(r)||ct(t)){Jt(e,o,r);const i=Kt(e.selection.getRng()),l=s?[t,...n]:n,a=s&&ct(t)?tn:en;xe.each(l,(t=>{a(e,t,o,r)})),e.selection.setRng(zt(i))}else Ht(e)})(e,o,s,t,i):((e,t,n,o)=>{if(t!==e.getBody())if(t)if(t.nodeName!==n||nn(o)||ct(t)){const r=Kt(e.selection.getRng());ct(t)&&t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),qt(e.dom,t,o);const s=e.dom.rename(t,n);Yt(e.dom,s),e.selection.setRng(zt(r)),Jt(e,n,o),ft(e,Qt(n),s)}else Ht(e);else Jt(e,n,o),ft(e,Qt(n),t)})(e,o,t,i)},rn=Te.DOM,sn=(e,t)=>{const n=xe.grep(e.select("ol,ul",t));xe.each(n,(t=>{((e,t)=>{const n=t.parentElement;if(n&&"LI"===n.nodeName&&n.firstChild===t){const o=n.previousSibling;o&&"LI"===o.nodeName?(o.appendChild(t),Ve(e,n)&&rn.remove(n)):rn.setStyle(n,"listStyleType","none")}if(Be(n)){const e=n.previousSibling;e&&"LI"===e.nodeName&&e.appendChild(t)}})(e,t)}))},ln=(e,t,n,o)=>{let r=t.startContainer;const s=t.startOffset;if(we(r)&&(n?s0))return r;const i=e.schema.getNonEmptyElements();De(r)&&(r=fe.getNode(r,s));const l=new ye(r,o);n&&((e,t)=>!!$e(t)&&e.isBlock(t.nextSibling)&&!$e(t.previousSibling))(e.dom,r)&&l.next();const a=n?l.next.bind(l):l.prev2.bind(l);for(;r=a();){if("LI"===r.nodeName&&!r.hasChildNodes())return r;if(i[r.nodeName])return r;if(we(r)&&r.data.length>0)return r}return null},an=(e,t)=>{const n=t.childNodes;return 1===n.length&&!Be(n[0])&&e.isBlock(n[0])},dn=e=>h.from(e).map($).filter(Z).exists((e=>((e,t=!1)=>{return ie(e)?e.dom.isContentEditable:(n=e,le(((e,t)=>_(e,t)),ce,n,"[contenteditable]",void 0)).fold(m(t),(e=>"true"===(e=>e.dom.contentEditable)(e)));var n})(e)&&!C(["details"],Q(e)))),cn=(e,t,n)=>{let o;const r=an(e,n)?n.firstChild:n;if(((e,t)=>{an(e,t)&&dn(t.firstChild)&&e.remove(t.firstChild,!0)})(e,t),!Ve(e,t,!0))for(;o=t.firstChild;)r.appendChild(o)},mn=(e,t,n)=>{let o;const r=t.parentNode;if(!je(e,t)||!je(e,n))return;Be(n.lastChild)&&(o=n.lastChild),r===n.lastChild&&$e(r.previousSibling)&&e.remove(r.previousSibling);const s=n.lastChild;s&&$e(s)&&t.hasChildNodes()&&e.remove(s),Ve(e,n,!0)&&ge($(n)),cn(e,t,n),o&&n.appendChild(o);const i=((e,t)=>{const n=e.dom,o=t.dom;return n!==o&&n.contains(o)})($(n),$(t))?e.getParents(t,Be,n):[];e.remove(t),S(i,(t=>{Ve(e,t)&&t!==e.getRoot()&&e.remove(t)}))},un=(e,t)=>{const n=e.dom,o=e.selection,r=o.getStart(),s=it(e,r),i=n.getParent(o.getStart(),"LI",s);if(i){const r=i.parentElement;if(r===e.getBody()&&Ve(n,r))return!0;const l=tt(o.getRng()),a=n.getParent(ln(e,l,t,s),"LI",s),d=a&&(t?n.isChildOf(i,a):n.isChildOf(a,i));if(a&&a!==i&&!d)return e.undoManager.transact((()=>{var n,o;t?((e,t,n,o)=>{const r=e.dom;if(r.isEmpty(o))((e,t,n)=>{ge($(n)),mn(e.dom,t,n),e.selection.setCursorLocation(n,0)})(e,n,o);else{const s=Kt(t);mn(r,n,o),e.selection.setRng(zt(s))}})(e,l,a,i):(null===(o=(n=i).parentNode)||void 0===o?void 0:o.firstChild)===n?_t(e):((e,t,n,o)=>{const r=Kt(t);mn(e.dom,n,o);const s=zt(r);e.selection.setRng(s)})(e,l,i,a)})),!0;if(d&&!t&&a!==i){const t=l.commonAncestorContainer.parentElement;return!(!t||n.isChildOf(a,t)||(e.undoManager.transact((()=>{const o=Kt(l);cn(n,t,a),t.remove();const r=zt(o);e.selection.setRng(r)})),0))}if(!a&&!t&&0===l.startOffset&&0===l.endOffset)return e.undoManager.transact((()=>{Ht(e)})),!0}return!1},pn=e=>{const t=e.selection.getStart(),n=it(e,t);return e.dom.getParent(t,"LI,DT,DD",n)||st(e).length>0},gn=(e,t)=>{const n=e.selection;return!pt(e,n.getNode())&&(n.isCollapsed()?((e,t)=>un(e,t)||((e,t)=>{const n=e.dom,o=e.selection.getStart(),r=it(e,o),s=n.getParent(o,n.isBlock,r);if(s&&n.isEmpty(s,void 0,{checkRootAsContent:!0})){const o=tt(e.selection.getRng()),i=ln(e,o,t,r),l=n.getParent(i,"LI",r);if(i&&l){const a=e=>C(["td","th","caption"],Q(e)),d=e=>e.dom===r;return!!((e,t,n=u)=>P(e,t,n).getOr(e.isNone()&&t.isNone()))(de($(l),a,d),de($(o.startContainer),a,d),H)&&(e.undoManager.transact((()=>{const o=l.parentNode;((e,t,n)=>{const o=e.getParent(t.parentNode,e.isBlock,n);e.remove(t),o&&e.isEmpty(o)&&e.remove(o)})(n,s,r),Yt(n,o),e.selection.select(i,!0),e.selection.collapse(t)})),!0)}}return!1})(e,t))(e,t):(e=>!!pn(e)&&(e.undoManager.transact((()=>{let t=!0;const n=()=>t=!1;e.on("input",n),e.execCommand("Delete"),e.off("input",n),t&&e.dispatch("input"),sn(e.dom,e.getBody())})),!0))(e))},hn=e=>{const t=k(yt(e).split("")),n=N(t,((e,t)=>{const n=e.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,t)*n}));return O(n,((e,t)=>e+t),0)},fn=e=>{if(--e<0)return"";{const t=e%26,n=Math.floor(e/26);return fn(n)+String.fromCharCode("A".charCodeAt(0)+t)}},yn=e=>{const t=parseInt(e.start,10);return M(e.listStyleType,"upper-alpha")?fn(t):M(e.listStyleType,"lower-alpha")?fn(t).toLowerCase():e.start},vn=(e,t)=>()=>{const n=rt(e);return l(n)&&n.nodeName===t},Cn=e=>{e.addCommand("mceListProps",(()=>{(e=>{const t=rt(e);Pe(t)&&!pt(e,t)&&e.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:yn({start:e.dom.getAttrib(t,"start","1"),listStyleType:h.from(e.dom.getStyle(t,"list-style-type"))})},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{(e=>{switch((e=>/^[0-9]+$/.test(e)?2:/^[A-Z]+$/.test(e)?0:/^[a-z]+$/.test(e)?1:e.length>0?4:3)(e)){case 2:return h.some({listStyleType:h.none(),start:e});case 0:return h.some({listStyleType:h.some("upper-alpha"),start:hn(e).toString()});case 1:return h.some({listStyleType:h.some("lower-alpha"),start:hn(e).toString()});case 3:return h.some({listStyleType:h.none(),start:""});case 4:return h.none()}})(t.getData().start).each((t=>{e.execCommand("mceListUpdate",!1,{attrs:{start:"1"===t.start?"":t.start},styles:{"list-style-type":t.listStyleType.getOr("")}})})),t.close()}})})(e)}))};var bn=tinymce.util.Tools.resolve("tinymce.html.Node");const Nn=e=>3===e.type,Sn=e=>0===e.length,Ln=e=>{const t=(t,n)=>{const o=bn.create("li");S(t,(e=>o.append(e))),n?e.insert(o,n,!0):e.append(o)},n=O(e.children(),((e,n)=>Nn(n)?[...e,n]:Sn(e)||Nn(n)?e:(t(e,n),[])),[]);Sn(n)||t(n)},On=(e,t)=>n=>(n.setEnabled(e.selection.isEditable()),gt(e,(o=>{n.setActive(mt(o.parents,t)),n.setEnabled(!pt(e,o.element)&&e.selection.isEditable())}))),An=(e,t)=>n=>gt(e,(o=>n.setEnabled(mt(o.parents,t)&&!pt(e,o.element))));e.add("lists",(e=>((e=>{(0,e.options.register)("lists_indent_on_tab",{processor:"boolean",default:!0})})(e),(e=>{e.on("PreInit",(()=>{const{parser:t}=e;t.addNodeFilter("ul,ol",(e=>S(e,Ln)))}))})(e),e.hasPlugin("rtc",!0)?Cn(e):((e=>{ze(e)&&(e=>{e.on("keydown",(t=>{t.keyCode!==ve.TAB||ve.metaKeyPressed(t)||e.undoManager.transact((()=>{(t.shiftKey?_t(e):$t(e))&&t.preventDefault()}))}))})(e),(e=>{e.on("ExecCommand",(t=>{const n=t.command.toLowerCase();"delete"!==n&&"forwarddelete"!==n||!pn(e)||sn(e.dom,e.getBody())})),e.on("keydown",(t=>{t.keyCode===ve.BACKSPACE?gn(e,!1)&&t.preventDefault():t.keyCode===ve.DELETE&&gn(e,!0)&&t.preventDefault()}))})(e)})(e),(e=>{e.on("BeforeExecCommand",(t=>{const n=t.command.toLowerCase();"indent"===n?$t(e):"outdent"===n&&_t(e)})),e.addCommand("InsertUnorderedList",((t,n)=>{on(e,"UL",n)})),e.addCommand("InsertOrderedList",((t,n)=>{on(e,"OL",n)})),e.addCommand("InsertDefinitionList",((t,n)=>{on(e,"DL",n)})),e.addCommand("RemoveList",(()=>{Ht(e)})),Cn(e),e.addCommand("mceListUpdate",((t,n)=>{r(n)&&((e,t)=>{const n=rt(e);null===n||pt(e,n)||e.undoManager.transact((()=>{r(t.styles)&&e.dom.setStyles(n,t.styles),r(t.attrs)&&Ne(t.attrs,((t,o)=>e.dom.setAttrib(n,o,t)))}))})(e,n)})),e.addQueryStateHandler("InsertUnorderedList",vn(e,"UL")),e.addQueryStateHandler("InsertOrderedList",vn(e,"OL")),e.addQueryStateHandler("InsertDefinitionList",vn(e,"DL"))})(e)),(e=>{const t=t=>()=>e.execCommand(t);e.hasPlugin("advlist")||(e.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:t("InsertOrderedList"),onSetup:On(e,"OL")}),e.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:t("InsertUnorderedList"),onSetup:On(e,"UL")}))})(e),(e=>{const t={text:"List properties...",icon:"ordered-list",onAction:()=>e.execCommand("mceListProps"),onSetup:An(e,"OL")};e.ui.registry.addMenuItem("listprops",t),e.ui.registry.addContextMenu("lists",{update:t=>{const n=rt(e,t);return Pe(n)?["listprops"]:[]}})})(e),(e=>({backspaceDelete:t=>{gn(e,t)}}))(e))))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/media/plugin.min.js b/staticfiles/tinymce/plugins/media/plugin.min.js new file mode 100644 index 0000000..5a31076 --- /dev/null +++ b/staticfiles/tinymce/plugins/media/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=o=e,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":t;var r,o,a,s})(t)===e,r=t("string"),o=t("object"),a=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,l=(e,t)=>{for(let r=0,o=e.length;r{const t=[];for(let r=0,o=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),f=p("media_filter_html"),y=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),k=p("media_dimensions");var j=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,$=e=>e.replace(/px$/,""),C=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map($).getOr(""),height:d(r,"max-height").map($).getOr("")}},T=(e,t)=>{let r={};for(let o=A({validate:!1,forced_root_block:!1},t).parse(e);o;o=o.walk())if(1===o.type){const e=o.name;if(o.attr("data-ephox-embed-iri")){r=C(o);break}r.source||"param"!==e||(r.source=o.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=j.extend(o.attributes.map,r)),"source"===e&&(r.source?r.altsource||(r.altsource=o.attr("src")):r.source=o.attr("src")),"img"!==e||r.poster||(r.poster=o.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},z=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var D=tinymce.util.Tools.resolve("tinymce.html.Node"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer");const M=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,P=e=>/^[0-9.]+$/.test(e)?e+"px":e,R=(e,t)=>{const r=t.attr("style"),o=r?N.parseStyle(r):{};s(e.width)&&(o["max-width"]=P(e.width)),s(e.height)&&(o["max-height"]=P(e.height)),t.attr("style",N.serializeStyle(o))},E=["source","altsource"],U=(e,t,r,o)=>{let a=0,s=0;const i=M(o);i.addNodeFilter("source",(e=>a=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const o=e.name;if(e.attr("data-ephox-embed-iri")){R(t,e);break}switch(o){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(o){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=a;r<2;r++)if(t[E[r]]){const o=new D("source",1);o.attr("src",t[E[r]]),o.attr("type",t[E[r]+"mime"]||null),e.append(o)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new D("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[E[s]]),e.attr("type",t[E[s]+"mime"]||null),!t[E[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return F({},o).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?h=$3&title=0&byline=0",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),o=e.regex.exec(t);let a=r+e.url;if(s(o))for(let e=0;eo[e]?o[e]:""));return a.replace(/\?$/,"")},B=e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?j.extend({},t[0],{url:I(t[0],e)}):null},G=(e,t)=>{var r;const o=j.extend({},t);if(!o.source&&(j.extend(o,T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema)),!o.source))return"";o.altsource||(o.altsource=""),o.poster||(o.poster=""),o.source=e.convertURL(o.source,"source"),o.altsource=e.convertURL(o.altsource,"source"),o.sourcemime=z(o.source),o.altsourcemime=z(o.altsource),o.poster=e.convertURL(o.poster,"poster");const a=B(o.source);if(a&&(o.source=a.url,o.type=a.type,o.allowfullscreen=a.allowFullscreen,o.width=o.width||String(a.w),o.height=o.height||String(a.h)),o.embed)return U(o.embed,o,!0,e.schema);{const t=g(e),r=b(e),a=w(e);return o.width=o.width||"300",o.height=o.height||"150",j.each(o,((t,r)=>{o[r]=e.dom.encode(""+t)})),"iframe"===o.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(o,a):"application/x-shockwave-flash"===o.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(o):-1!==o.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(o,t):((e,t)=>t?t(e):'")(o,r)}},W=e=>e.hasAttribute("data-mce-object")||e.hasAttribute("data-ephox-embed-iri"),q={},H=e=>t=>G(e,t),J=(e,t)=>{const r=y(e);return r?((e,t,r)=>new Promise(((o,a)=>{const s=r=>(r.html&&(q[e.source]=r),o({url:e.source,html:r.html?r.html:t(e)}));q[e.source]?s(q[e.source]):r({url:e.source}).then(s).catch(a)})))(t,H(e),r):((e,t)=>Promise.resolve({html:t(e),url:e.source}))(t,H(e))},K=(e,t)=>{const r={};return d(e,"dimensions").each((e=>{l(["width","height"],(o=>{d(t,o).orThunk((()=>d(e,o))).each((e=>r[o]=e))}))})),r},Q=(e,t)=>{const r=t&&"dimensions"!==t?((e,t)=>d(t,e).bind((e=>d(e,"meta"))))(t,e).getOr({}):{},a=((e,t,r)=>a=>{const s=()=>d(e,a),n=()=>d(t,a),l=e=>d(e,"value").bind((e=>e.length>0?i.some(e):i.none()));return{[a]:(a===r?s().bind((e=>o(e)?l(e).orThunk(n):n().orThunk((()=>i.from(e))))):n().orThunk((()=>s().bind((e=>o(e)?l(e):i.from(e)))))).getOr("")}})(e,r,t);return{...a("source"),...a("altsource"),...a("poster"),...a("embed"),...K(e,r)}},V=e=>{const t={...e,source:{value:d(e,"source").getOr("")},altsource:{value:d(e,"altsource").getOr("")},poster:{value:d(e,"poster").getOr("")}};return l(["width","height"],(r=>{d(e,r).each((e=>{const o=t.dimensions||{};o[r]=e,t.dimensions=o}))})),t},X=e=>t=>{const r=t&&t.msg?"Media embed handler error: "+t.msg:"Media embed handler threw unknown error.";e.notificationManager.open({type:"error",text:r})},Y=(e,t)=>o=>{if(r(o.url)&&o.url.trim().length>0){const r=o.html,a={...T(r,t.schema),source:o.url,embed:r};e.setData(V(a))}},Z=(e,t)=>{const r=e.dom.select("*[data-mce-object]");e.insertContent(t),((e,t)=>{const r=e.dom.select("*[data-mce-object]");for(let e=0;e=0;o--)t[e]===r[o]&&r.splice(o,1);e.selection.select(r[0])})(e,r),e.nodeChanged()},ee=(e,t)=>s(t)&&"ephox-embed-iri"===t&&s(B(e)),te=(e,t)=>((e,t)=>e.width!==t.width||e.height!==t.height)(e,t)&&ee(t.source,e.type),re=e=>{const t=(e=>{const t=e.selection.getNode(),r=W(t)?e.serializer.serialize(t,{selection:!0}):"",o=T(r,e.schema),a=(()=>{if(ee(o.source,o.type)){const r=e.dom.getRect(t);return{width:r.w.toString().replace(/px$/,""),height:r.h.toString().replace(/px$/,"")}}return{}})();return{embed:r,...o,...a}})(e),r=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(t),o=V(t),a=k(e)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[],s={title:"General",name:"general",items:c([[{name:"source",type:"urlinput",filetype:"media",label:"Source",picker_text:"Browse files"}],a])},i=[];x(e)&&i.push({name:"altsource",type:"urlinput",filetype:"media",label:"Alternative source URL"}),_(e)&&i.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});const n={title:"Advanced",name:"advanced",items:i},l=[s,{title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]}];i.length>0&&l.push(n);const m={type:"tabpanel",tabs:l},u=e.windowManager.open({title:"Insert/Edit Media",size:"normal",body:m,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{const o=Q(t.getData());((e,t,r)=>{var o,a;t.embed=te(e,t)&&k(r)?G(r,{...t,embed:""}):U(null!==(o=t.embed)&&void 0!==o?o:"",t,!1,r.schema),t.embed&&(e.source===t.source||(a=t.source,h(q,a)))?Z(r,t.embed):J(r,t).then((e=>{Z(r,e.html)})).catch(X(r))})(r.get(),o,e),t.close()},onChange:(t,o)=>{switch(o.name){case"source":((t,r)=>{const o=Q(r.getData(),"source");t.source!==o.source&&(Y(u,e)({url:o.source,html:""}),J(e,o).then(Y(u,e)).catch(X(e)))})(r.get(),t);break;case"embed":(t=>{var r;const o=Q(t.getData()),a=T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema);t.setData(V(a))})(t);break;case"dimensions":case"altsource":case"poster":((t,r,o)=>{const a=Q(t.getData(),r),s=te(o,a)&&k(e)?{...a,embed:""}:a,i=G(e,s);t.setData(V({...s,embed:i}))})(t,o.name,r.get())}r.set(Q(t.getData()))},initialData:o})};var oe=tinymce.util.Tools.resolve("tinymce.Env");const ae=e=>{const t=e.name;return"iframe"===t||"video"===t||"audio"===t},se=(e,t,r,o=null)=>{const a=e.attr(r);return s(a)?a:h(t,r)?null:o},ie=(e,t,r)=>{const o="img"===t.name||"video"===e.name,a=o?"300":null,s="audio"===e.name?"30":"150",i=o?s:null;t.attr({width:se(e,r,"width",a),height:se(e,r,"height",i)})},ne=(e,t)=>{const r=t.name,o=new D("img",1);return ce(e,t,o),ie(t,o,{}),o.attr({style:t.attr("style"),src:oe.transparentSrc,"data-mce-object":r,class:"mce-object mce-object-"+r}),o},le=(e,t)=>{var r;const o=t.name,a=new D("span",1);a.attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,class:"mce-preview-object mce-object-"+o}),ce(e,t,a);const i=e.dom.parseStyle(null!==(r=t.attr("style"))&&void 0!==r?r:""),n=new D(o,1);if(ie(t,n,i),n.attr({src:t.attr("src"),style:t.attr("style"),class:t.attr("class")}),"iframe"===o)n.attr({allowfullscreen:t.attr("allowfullscreen"),frameborder:"0",sandbox:t.attr("sandbox"),referrerpolicy:t.attr("referrerpolicy")});else{l(["controls","crossorigin","currentTime","loop","muted","poster","preload"],(e=>{n.attr(e,t.attr(e))}));const r=a.attr("data-mce-html");s(r)&&((e,t,r,o)=>{const a=M(e.schema).parse(o,{context:t});for(;a.firstChild;)r.append(a.firstChild)})(e,o,n,unescape(r))}const c=new D("span",1);return c.attr("class","mce-shim"),a.append(n),a.append(c),a},ce=(e,t,r)=>{var o;const a=null!==(o=t.attributes)&&void 0!==o?o:[];let s=a.length;for(;s--;){const t=a[s].name;let o=a[s].value;"width"===t||"height"===t||"style"===t||(n="data-mce-",(i=t).length>=9&&i.substr(0,9)===n)||("data"!==t&&"src"!==t||(o=e.convertURL(o,t)),r.attr("data-mce-p-"+t,o))}var i,n;const c=F({inner:!0},e.schema),m=new D("div",1);l(t.children(),(e=>m.append(e)));const u=c.serialize(m);u&&(r.attr("data-mce-html",escape(u)),r.empty())},me=e=>{const t=e.attr("class");return r(t)&&/\btiny-pageembed\b/.test(t)},ue=e=>{let t=e;for(;t=t.parent;)if(t.attr("data-ephox-embed-iri")||me(t))return!0;return!1},de=(e,t,r)=>{const o=(0,e.options.get)("xss_sanitization"),a=f(e);return M(e.schema,{sanitize:o,validate:a}).parse(r,{context:t})},he=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("media",(e=>((e=>{const t=e.options.register;t("audio_template_callback",{processor:"function"}),t("video_template_callback",{processor:"function"}),t("iframe_template_callback",{processor:"function"}),t("media_live_embeds",{processor:"boolean",default:!0}),t("media_filter_html",{processor:"boolean",default:!0}),t("media_url_resolver",{processor:"function"}),t("media_alt_source",{processor:"boolean",default:!0}),t("media_poster",{processor:"boolean",default:!0}),t("media_dimensions",{processor:"boolean",default:!0})})(e),(e=>{e.addCommand("mceMedia",(()=>{re(e)}))})(e),(e=>{const t=()=>e.execCommand("mceMedia");e.ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:t,onSetup:t=>{const r=e.selection;t.setActive(W(r.getNode()));const o=r.selectorChangedWithUnbind("img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]",t.setActive).unbind,a=he(e)(t);return()=>{o(),a()}}}),e.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:t,onSetup:he(e)})})(e),(e=>{e.on("ResolveName",(e=>{let t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}))})(e),(e=>{e.on("PreInit",(()=>{const{schema:t,serializer:r,parser:o}=e,a=t.getBoolAttrs();l("webkitallowfullscreen mozallowfullscreen".split(" "),(e=>{a[e]={}})),((e,t)=>{const r=m(e);for(let o=0,a=r.length;o{const o=t.getElementRule(r);o&&l(e,(e=>{o.attributes[e]={},o.attributesOrder.push(e)}))})),o.addNodeFilter("iframe,video,audio,object,embed",(e=>t=>{let r,o=t.length;for(;o--;)r=t[o],r.parent&&(r.parent.attr("data-mce-object")||(ae(r)&&v(e)?ue(r)||r.replace(le(e,r)):ue(r)||r.replace(ne(e,r))))})(e)),r.addAttributeFilter("data-mce-object",((t,r)=>{var o;let a=t.length;for(;a--;){const s=t[a];if(!s.parent)continue;const i=s.attr(r),n=new D(i,1);if("audio"!==i){const e=s.attr("class");e&&-1!==e.indexOf("mce-preview-object")&&s.firstChild?n.attr({width:s.firstChild.attr("width"),height:s.firstChild.attr("height")}):n.attr({width:s.attr("width"),height:s.attr("height")})}n.attr({style:s.attr("style")});const c=null!==(o=s.attributes)&&void 0!==o?o:[];let m=c.length;for(;m--;){const e=c[m].name;0===e.indexOf("data-mce-p-")&&n.attr(e.substr(11),c[m].value)}const u=s.attr("data-mce-html");if(u){const t=de(e,i,unescape(u));l(t.children(),(e=>n.append(e)))}s.replace(n)}}))})),e.on("SetContent",(()=>{const t=e.dom;l(t.select("span.mce-preview-object"),(e=>{0===t.select("span.mce-shim",e).length&&t.add(e,"span",{class:"mce-shim"})}))}))})(e),(e=>{e.on("mousedown",(t=>{const r=e.dom.getParent(t.target,".mce-preview-object");r&&"2"===e.dom.getAttrib(r,"data-mce-selected")&&t.stopImmediatePropagation()})),e.on("click keyup touchend",(()=>{const t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")})),e.on("ObjectResized",(t=>{const r=t.target;if(r.getAttribute("data-mce-object")){let o=r.getAttribute("data-mce-html");o&&(o=unescape(o),r.setAttribute("data-mce-html",escape(U(o,{width:String(t.width),height:String(t.height)},!1,e.schema))))}}))})(e),(e=>({showDialog:()=>{re(e)}}))(e))))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/nonbreaking/plugin.min.js b/staticfiles/tinymce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 0000000..048e6d7 --- /dev/null +++ b/staticfiles/tinymce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,o=e("boolean"),a=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),s=t("nonbreaking_wrap"),r=(n,e)=>{let o="";for(let a=0;a{const o=s(n)||n.plugins.visualchars?`${r(" ",e)}`:r(" ",e);n.undoManager.transact((()=>n.insertContent(o)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");const u=n=>e=>{const o=()=>{e.setEnabled(n.selection.isEditable())};return n.on("NodeChange",o),o(),()=>{n.off("NodeChange",o)}};n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>o(n)?{value:n?3:0,valid:!0}:a(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e,onSetup:u(n)}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e,onSetup:u(n)})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(o=>{if(o.keyCode===l.TAB&&!o.isDefaultPrevented()){if(o.shiftKey)return;o.preventDefault(),o.stopImmediatePropagation(),c(n,e)}}))})(n)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/pagebreak/plugin.min.js b/staticfiles/tinymce/plugins/pagebreak/plugin.min.js new file mode 100644 index 0000000..b498342 --- /dev/null +++ b/staticfiles/tinymce/plugins/pagebreak/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),n=t("pagebreak_separator"),o=t("pagebreak_split_block"),r="mce-pagebreak",s=e=>{const t=``;return e?`

          ${t}

          `:t},c=e=>a=>{const t=()=>{a.setEnabled(e.selection.isEditable())};return e.on("NodeChange",t),t(),()=>{e.off("NodeChange",t)}};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(o(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a,onSetup:c(e)}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a,onSetup:c(e)})})(e),(e=>{const a=n(e),t=()=>o(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(n=>{let o,s,c=n.length;for(;c--;)if(o=n[c],s=o.attr("class"),s&&-1!==s.indexOf(r)){const n=o.parent;if(n&&e.schema.getBlockElements()[n.name]&&t()){n.type=3,n.value=a,n.raw=!0,o.remove();continue}o.type=3,o.value=a,o.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,r)&&(a.name="pagebreak")}))})(e)}))}(); \ No newline at end of file diff --git a/staticfiles/tinymce/plugins/preview/plugin.min.js b/staticfiles/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 0000000..41e9891 --- /dev/null +++ b/staticfiles/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>undefined===e;class r{constructor(e,t){this.tag=e,this.value=t}static some(e){return new r(!0,e)}static none(){return r.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?r.some(e(this.value)):r.none()}bind(e){return this.tag?e(this.value):r.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:r.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?r.none():r.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}r.singletonNone=new r(!1);const n=e=>()=>e,s=n(!1),i=(e,t)=>((e,t,n)=>{for(let s=0,i=e.length;sa(0,0),a=(e,t)=>({major:e,minor:t}),c={nu:a,detect:(e,t)=>{const r=String(t).toLowerCase();return 0===e.length?o():((e,t)=>{const r=((e,t)=>{for(let r=0;rNumber(t.replace(r,"$"+e));return a(n(1),n(2))})(e,r)},unknown:o},u=(e,t)=>{const r=String(t).toLowerCase();return i(e,(e=>e.search(r)))},d=(e,r,n=0,s)=>{const i=e.indexOf(r,n);return-1!==i&&(!!t(s)||i+r.length<=s)},l=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,h=e=>t=>d(t,e),m=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>d(e,"edge/")&&d(e,"chrome")&&d(e,"safari")&&d(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,l],search:e=>d(e,"chrome")&&!d(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>d(e,"msie")||d(e,"trident")},{name:"Opera",versionRegexes:[l,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:h("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:h("firefox")},{name:"Safari",versionRegexes:[l,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(d(e,"safari")||d(e,"mobile/"))&&d(e,"applewebkit")}],v=[{name:"Windows",search:h("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>d(e,"iphone")||d(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:h("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:h("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:h("linux"),versionRegexes:[]},{name:"Solaris",search:h("sunos"),versionRegexes:[]},{name:"FreeBSD",search:h("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:h("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],g={browsers:n(m),oses:n(v)},p="Edge",w="Chromium",f="Opera",x="Firefox",S="Safari",y=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isEdge:n(p),isChromium:n(w),isIE:n("IE"),isOpera:n(f),isFirefox:n(x),isSafari:n(S)}},b=()=>y({current:void 0,version:c.unknown()}),O=y,R=(n(p),n(w),n("IE"),n(f),n(x),n(S),"Windows"),C="Android",A="Linux",k="macOS",D="Solaris",E="FreeBSD",I="ChromeOS",P=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isWindows:n(R),isiOS:n("iOS"),isAndroid:n(C),isMacOS:n(k),isLinux:n(A),isSolaris:n(D),isFreeBSD:n(E),isChromeOS:n(I)}},T=()=>P({current:void 0,version:c.unknown()}),_=P,B=(n(R),n("iOS"),n(C),n(A),n(k),n(D),n(E),n(I),(e,t,s)=>{const o=g.browsers(),a=g.oses(),d=t.bind((e=>((e,t)=>((e,t)=>{for(let r=0;r{const r=t.brand.toLowerCase();return i(e,(e=>{var t;return r===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:c.nu(parseInt(t.version,10),0)})))})))(o,e))).orThunk((()=>((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(o,e))).fold(b,O),l=((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(a,e).fold(T,_),h=((e,t,r,s)=>{const i=e.isiOS()&&!0===/ipad/i.test(r),o=e.isiOS()&&!i,a=e.isiOS()||e.isAndroid(),c=a||s("(pointer:coarse)"),u=i||!o&&a&&s("(min-device-width:768px)"),d=o||a&&!u,l=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),h=!d&&!u&&!l;return{isiPad:n(i),isiPhone:n(o),isTablet:n(u),isPhone:n(d),isTouch:n(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:n(l),isDesktop:n(h)}})(l,d,e,s);return{browser:d,os:l,deviceType:h}}),L=e=>window.matchMedia(e).matches;let N=(e=>{let t,r=!1;return(...n)=>(r||(r=!0,t=e.apply(null,n)),t)})((()=>B(window.navigator.userAgent,r.from(window.navigator.userAgentData),L)));const F=()=>N();var M=tinymce.util.Tools.resolve("tinymce.util.Tools");const $=e=>t=>t.options.get(e),W=$("content_style"),U=$("content_css_cors"),K=$("body_class"),j=$("body_id"),V=e=>{const t=(e=>{var t;let r="";const n=e.dom.encode,s=null!==(t=W(e))&&void 0!==t?t:"";r+=``;const i=U(e)?' crossorigin="anonymous"':"";M.each(e.contentCSS,(t=>{r+='"})),s&&(r+='");const o=j(e),a=K(e),c=e.getBody().dir,u=c?' dir="'+n(c)+'"':"";return""+r+'"+e.getContent()+(()=>{const e=F().os.isMacOS()||F().os.isiOS();return` + + + diff --git a/templates/spa_test/index.html b/templates/spa_test/index.html new file mode 100644 index 0000000..3175daf --- /dev/null +++ b/templates/spa_test/index.html @@ -0,0 +1,205 @@ + + + + + + Django Auth - SPA Test (Token-Based) + + + + + +
          + + + + +
          +
          +
          +

          Welcome Back! 👋

          +

          Sign in to continue

          + + +
          +
          + + +
          +
          + + +
          + +
          + +
          OR
          + + + + + +
          + + +
          + ℹ️ Token-Based Flow: +

          Bu sayfa Nuxt/Next.js gibi çalışır:

          +
            +
          1. Frontend'de Google/GitHub OAuth
          2. +
          3. Access token alınır
          4. +
          5. Token Django'ya POST edilir
          6. +
          7. Django JWT token döner
          8. +
          9. JWT localStorage'a kaydedilir
          10. +
          +
          +
          +
          + + + + + + + + + +
          + + + + + + + diff --git a/templates/test_github_simple.html b/templates/test_github_simple.html new file mode 100644 index 0000000..36a25fa --- /dev/null +++ b/templates/test_github_simple.html @@ -0,0 +1,353 @@ + + + + + + GitHub OAuth Test + + + +
          +

          🐙 GitHub OAuth Test

          +

          Django REST API - GitHub Authentication

          + +
          +

          📝 GitHub Personal Access Token Nasıl Alınır?

          +
            +
          1. GitHub Settings → Tokens sayfasına git
          2. +
          3. Generate new token (classic) butonuna tıkla
          4. +
          5. Scopes seç: +
              +
            • user
            • +
            • user:email
            • +
            +
          6. +
          7. Token'ı oluştur ve kopyala
          8. +
          9. Aşağıdaki alana yapıştır
          10. +
          +
          + +
          + + +
          + + + +
          +
          +

          Testing authentication...

          +
          + +
          +

          Result

          +
          +
          +
          + + + + + diff --git a/templates/test_oauth_error.html b/templates/test_oauth_error.html new file mode 100644 index 0000000..c6367d2 --- /dev/null +++ b/templates/test_oauth_error.html @@ -0,0 +1,79 @@ + + + + Authentication Error + + + +
          +
          +

          Authentication Failed

          +
          + Something went wrong during authentication. +
          + Try Again +
          + + + + + diff --git a/templates/test_oauth_flow.html b/templates/test_oauth_flow.html new file mode 100644 index 0000000..d375792 --- /dev/null +++ b/templates/test_oauth_flow.html @@ -0,0 +1,208 @@ + + + + + + OAuth Flow Test - Real Authentication + + + +
          +

          🔐 OAuth Flow Test

          +

          Gerçek OAuth Authentication - Django REST API

          + +
          + ✨ Nasıl Çalışır? +

          + Butona tıkladığınızda GitHub veya Google'ın kendi sayfasına yönlendirileceksiniz. + Orada giriş yapıp izin verdikten sonra, otomatik olarak geri dönecek ve + JWT token'larınız gösterilecek! +

          +
          + + + 🔵 + Login with Google + + +
          VEYA
          + + + + Login with GitHub + + +
          +

          ⚠️ GitHub OAuth App Ayarları

          +

          GitHub OAuth çalışması için callback URL'ini ayarlamalısınız:

          +
            +
          1. Git: GitHub Settings → OAuth Apps
          2. +
          3. OAuth App'inizi bulun veya yeni oluşturun
          4. +
          5. Authorization callback URL: http://localhost:8000/api/v1/social/complete/github/
          6. +
          7. Kaydet
          8. +
          + +

          ⚠️ Google OAuth App Ayarları

          +
            +
          1. Git: Google Cloud Console
          2. +
          3. OAuth 2.0 Client ID'nizi düzenleyin
          4. +
          5. Authorized redirect URIs: http://localhost:8000/api/v1/social/complete/google-oauth2/
          6. +
          7. Authorized JavaScript origins: http://localhost:8000
          8. +
          9. Kaydet
          10. +
          +
          +
          + + + diff --git a/templates/test_social_auth.html b/templates/test_social_auth.html new file mode 100644 index 0000000..c8cc0c7 --- /dev/null +++ b/templates/test_social_auth.html @@ -0,0 +1,307 @@ + + + + + + Social Auth Test + + + +
          +

          🔐 Social Auth Test

          +

          Django REST API - Social Authentication

          + +
          + ⚠️ Not: Bu sayfa sadece test amaçlıdır. Google için callback URL'ini Google Console'da ayarlamanız gerekiyor: http://localhost:8000/api/v1/social/complete/google-oauth2/ +
          + + + + + +
          +
          +

          Processing...

          +
          + +
          +

          Result

          +
          +
          +
          + + + + + + + + diff --git a/test_contact_api.py b/test_contact_api.py new file mode 100644 index 0000000..b66e327 --- /dev/null +++ b/test_contact_api.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +""" +Contact API Test Script +Bu script contact endpoint'ini test eder ve email gönderimini kontrol eder. +""" + +import requests +import json + +# API endpoint +BASE_URL = "http://127.0.0.1:8000" +CONTACT_URL = f"{BASE_URL}/api/v1/contact/create/" + +# Test data +test_contact = { + "name": "Test Kullanıcı", + "email": "test@example.com", + "subject": "Test Konusu", + "message": "Bu bir test mesajıdır. Celery ile email gönderimi test ediliyor." +} + +print("=" * 60) +print("Contact API Test") +print("=" * 60) +print(f"\nEndpoint: {CONTACT_URL}") +print(f"\nTest Data:") +print(json.dumps(test_contact, indent=2, ensure_ascii=False)) +print("\n" + "=" * 60) + +try: + # POST request gönder + response = requests.post(CONTACT_URL, json=test_contact) + + print(f"\nResponse Status Code: {response.status_code}") + print(f"Response Headers: {dict(response.headers)}") + + if response.status_code == 201: + print("\n✅ Contact başarıyla oluşturuldu!") + print(f"\nResponse Data:") + print(json.dumps(response.json(), indent=2, ensure_ascii=False)) + print("\n📧 Email gönderimi için Celery worker'ı kontrol edin.") + print(" MailPit: http://localhost:8025") + else: + print(f"\n❌ Hata! Status Code: {response.status_code}") + print(f"Response: {response.text}") + +except requests.exceptions.ConnectionError: + print("\n❌ Bağlantı hatası! Django sunucusu çalışıyor mu?") + print(" Sunucuyu başlatmak için: python manage.py runserver") +except Exception as e: + print(f"\n❌ Beklenmeyen hata: {str(e)}") + +print("\n" + "=" * 60) + diff --git a/test_github.sh b/test_github.sh new file mode 100644 index 0000000..1746085 --- /dev/null +++ b/test_github.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# GitHub OAuth Test Script +# Usage: ./test_github.sh + +if [ -z "$1" ]; then + echo "❌ Access token gerekli!" + echo "" + echo "Kullanım: ./test_github.sh " + echo "" + echo "Personal Access Token almak için:" + echo "1. https://github.com/settings/tokens" + echo "2. Generate new token (classic)" + echo "3. Scopes: user, user:email" + echo "4. Token'ı kopyala" + exit 1 +fi + +ACCESS_TOKEN="$1" + +echo "⚫ GitHub OAuth Test" +echo "====================" +echo "" +echo "📤 Request gönderiliyor..." +echo "" + +curl -X POST http://localhost:8000/api/v1/auth/social/github/ \ + -H "Content-Type: application/json" \ + -d "{\"access_token\":\"$ACCESS_TOKEN\"}" \ + | python -m json.tool + +echo "" +echo "====================" + diff --git a/test_google.sh b/test_google.sh new file mode 100644 index 0000000..1b7b70f --- /dev/null +++ b/test_google.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Google OAuth Test Script +# Usage: ./test_google.sh + +if [ -z "$1" ]; then + echo "❌ Access token gerekli!" + echo "" + echo "Kullanım: ./test_google.sh " + echo "" + echo "Token almak için:" + echo "1. https://developers.google.com/oauthplayground/" + echo "2. Settings → Use your own OAuth credentials" + echo "3. Client ID: 915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com" + echo "4. Client Secret: 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" + echo "5. Scopes: userinfo.email, userinfo.profile" + echo "6. Authorize → Exchange code for tokens" + echo "7. Access token'ı kopyala" + exit 1 +fi + +ACCESS_TOKEN="$1" + +echo "🔵 Google OAuth Test" +echo "====================" +echo "" +echo "📤 Request gönderiliyor..." +echo "" + +curl -X POST http://localhost:8000/api/v1/auth/social/google-oauth2/ \ + -H "Content-Type: application/json" \ + -d "{\"access_token\":\"$ACCESS_TOKEN\"}" \ + | python -m json.tool + +echo "" +echo "====================" + diff --git a/test_social_auth_manual.py b/test_social_auth_manual.py new file mode 100644 index 0000000..dd0d822 --- /dev/null +++ b/test_social_auth_manual.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python +""" +Manual Social Auth Test Script + +Bu script ile social authentication'ı test edebilirsiniz. +Gerçek bir access token ile test yapar. +""" +import requests +import json + +BASE_URL = "http://localhost:8000/api/v1" + +def print_header(title): + print(f"\n{'='*60}") + print(f" {title}") + print(f"{'='*60}\n") + +def print_response(response): + print(f"Status Code: {response.status_code}") + try: + data = response.json() + print(f"Response:\n{json.dumps(data, indent=2)}") + except: + print(f"Response: {response.text}") + +def test_google_oauth(): + """ + Google OAuth Test + + Gerçek test için: + 1. Google OAuth Playground'a git: https://developers.google.com/oauthplayground/ + 2. Scopes seç: + - https://www.googleapis.com/auth/userinfo.email + - https://www.googleapis.com/auth/userinfo.profile + 3. "Authorize APIs" tıkla + 4. Access token'ı kopyala + 5. Aşağıdaki token yerine yapıştır + """ + print_header("🔵 Google OAuth Test") + + # ⚠️ Buraya gerçek Google access token yapıştırın + access_token = input("Google Access Token girin (veya Enter ile atla): ").strip() + + if not access_token: + print("❌ Access token girilmedi. Atlaniyor...") + print("\n📝 Google token almak için:") + print(" 1. https://developers.google.com/oauthplayground/") + print(" 2. Settings (sağ üst) → Use your own OAuth credentials") + print(" 3. Client ID: 915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com") + print(" 4. Client Secret: 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") + print(" 5. Scopes: userinfo.email, userinfo.profile") + print(" 6. Authorize APIs → Exchange authorization code for tokens") + return + + try: + response = requests.post( + f"{BASE_URL}/auth/social/google-oauth2/", + json={"access_token": access_token}, + headers={"Content-Type": "application/json"} + ) + + print_response(response) + + if response.status_code == 200: + print("\n✅ Google OAuth Başarılı!") + data = response.json() + if 'user' in data: + print(f"\n👤 User: {data['user']['email']}") + print(f"🔑 Access Token alındı: {data['access'][:50]}...") + else: + print("\n❌ Google OAuth Başarısız!") + + except requests.exceptions.ConnectionError: + print("❌ Server'a bağlanılamadı. Server çalışıyor mu?") + print(" python manage.py runserver") + except Exception as e: + print(f"❌ Hata: {e}") + +def test_github_oauth(): + """ + GitHub OAuth Test + + Gerçek test için: + 1. GitHub'da Personal Access Token oluştur + 2. Scopes: user, user:email + 3. Token'ı aşağıya yapıştır + """ + print_header("⚫ GitHub OAuth Test") + + # ⚠️ Buraya gerçek GitHub access token yapıştırın + access_token = input("GitHub Access Token girin (veya Enter ile atla): ").strip() + + if not access_token: + print("❌ Access token girilmedi. Atlanıyor...") + print("\n📝 GitHub token almak için:") + print(" 1. https://github.com/settings/tokens") + print(" 2. Generate new token (classic)") + print(" 3. Scopes: user, user:email") + print(" 4. Token'ı kopyala") + return + + try: + response = requests.post( + f"{BASE_URL}/auth/social/github/", + json={"access_token": access_token}, + headers={"Content-Type": "application/json"} + ) + + print_response(response) + + if response.status_code == 200: + print("\n✅ GitHub OAuth Başarılı!") + data = response.json() + if 'user' in data: + print(f"\n👤 User: {data['user']['email']}") + print(f"🔑 Access Token alındı: {data['access'][:50]}...") + else: + print("\n❌ GitHub OAuth Başarısız!") + + except requests.exceptions.ConnectionError: + print("❌ Server'a bağlanılamadı. Server çalışıyor mu?") + print(" python manage.py runserver") + except Exception as e: + print(f"❌ Hata: {e}") + +def test_endpoints_available(): + """Check if social auth endpoints are available""" + print_header("🔍 Endpoint Kontrolü") + + try: + # Test if server is running + response = requests.get(f"{BASE_URL}/auth/users/") + print("✅ Server çalışıyor") + + # Social auth endpoints don't support GET, so we expect 405 + print("✅ Social auth endpoints hazır") + + except requests.exceptions.ConnectionError: + print("❌ Server çalışmıyor!") + print(" Çalıştırmak için: python manage.py runserver") + return False + except Exception as e: + print(f"⚠️ Beklenmeyen hata: {e}") + return False + + return True + +def main(): + print("\n" + "="*60) + print(" 🔐 Django Social Auth Test Script") + print("="*60) + print("\n📝 Bu script ile Google ve GitHub OAuth'u test edebilirsiniz.") + print(" Real access token'larla çalışır.\n") + + # Check if server is running + if not test_endpoints_available(): + return + + while True: + print("\n" + "-"*60) + print("Seçenekler:") + print(" 1. Google OAuth Test") + print(" 2. GitHub OAuth Test") + print(" 3. HTML Test Sayfasını Aç") + print(" 4. Çıkış") + print("-"*60) + + choice = input("\nSeçiminiz (1-4): ").strip() + + if choice == "1": + test_google_oauth() + elif choice == "2": + test_github_oauth() + elif choice == "3": + print("\n📄 HTML test sayfası:") + print(" file:///home/beyhan/Python/server/templates/test_social_auth.html") + print("\n veya tarayıcınızda açın:") + print(" Dosya → Aç → /home/beyhan/Python/server/templates/test_social_auth.html") + elif choice == "4": + print("\n👋 Çıkılıyor...") + break + else: + print("❌ Geçersiz seçim!") + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print("\n\n👋 Test sonlandırıldı.") + diff --git a/uploads/logo/Linux-Logo.wine_.png b/uploads/logo/Linux-Logo.wine_.png new file mode 100644 index 0000000..6d22fe5 Binary files /dev/null and b/uploads/logo/Linux-Logo.wine_.png differ diff --git a/uploads/logo/Linux-Logo_igyxp47.wine_.png b/uploads/logo/Linux-Logo_igyxp47.wine_.png new file mode 100644 index 0000000..6d22fe5 Binary files /dev/null and b/uploads/logo/Linux-Logo_igyxp47.wine_.png differ diff --git a/yapilacak.txt b/yapilacak.txt new file mode 100644 index 0000000..3708938 --- /dev/null +++ b/yapilacak.txt @@ -0,0 +1,9 @@ +gto_rjpaoo2xeggp4xvx4tpw3wvj44ecsbanopkubl4hno4lv5hug2qa + + + +e67ee880-a044-46a9-b231-1243af3e4d70 + + +bu bir e-commerce uygulamasi olacak django 6.0 kullaiyorum ve versiyonu degisme +ben senden cart diye bir app em var bunu shoping cart mantigi sesion kullanarak bir shopin cart olusturman \ No newline at end of file