diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 32ecb8af..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,79 +0,0 @@ -version: 2 -jobs: - lint: - docker: - - image: golangci/golangci-lint:v1.27.0 - steps: - - checkout - - run: golangci-lint run -v - build-node: - docker: - - image: circleci/node - steps: - - checkout - - run: - name: "Build" - command: ./wizard.sh -a - - run: - name: "Cleanup" - command: rm -rf frontend/node_modules - - persist_to_workspace: - root: . - paths: - - '*' - build-go: - docker: - - image: circleci/golang:1.14.3 - steps: - - attach_workspace: - at: '~/project' - - run: - name: "Compile" - command: GOOS=linux GOARCH=amd64 ./wizard.sh -c - - run: - name: "Cleanup" - command: | - rm -rf frontend/build - git checkout -- go.sum # TODO: why is it being changed? - - persist_to_workspace: - root: . - paths: - - '*' - release: - docker: - - image: circleci/golang:1.14.3 - steps: - - attach_workspace: - at: '~/project' - - setup_remote_docker - - run: docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD - - run: curl -sL https://git.io/goreleaser | bash - - run: docker logout -workflows: - version: 2 - build-workflow: - jobs: - - lint: - filters: - tags: - only: /.*/ - - build-node: - filters: - tags: - only: /.*/ - - build-go: - filters: - tags: - only: /.*/ - requires: - - build-node - - lint - - release: - context: deploy - requires: - - build-go - filters: - tags: - only: /^v.*/ - branches: - ignore: /.*/ \ No newline at end of file diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 00000000..8d08beae --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,160 @@ +# CLAUDE.md + +Guidance for Claude when working in this repository (File Browser, `filebrowser/filebrowser`). + +## Repo orientation + +- Go backend (`github.com/filebrowser/filebrowser/v2`, ecosystem `go`) + Vue frontend under `frontend/`. +- The project is in **maintenance-only mode** (see `SECURITY.md`). Prefer small, surgical, well-tested changes. +- Version scheme: `v2.63.x`. Conventional-commit messages (`fix(scope): …`, `feat: …`, `chore: …`). +- Verify with `go build ./...`, `go vet ./...`, `go test ./...`. Reuse existing test harnesses (e.g. `signToken`, `scopedUserStorage`, `handle`, `customFSUser`, `mockUserStore`). + +--- + +# Handling security advisories + +Use this playbook when asked to triage, verify, fix, or manage GitHub security advisories. +All advisory state lives on GitHub and is driven with the `gh` CLI. States are +`triage → draft → published`, plus `closed`. + +## 1. Fetch + +```bash +# List by state (also: published, draft, closed) +gh api '/repos/filebrowser/filebrowser/security-advisories?state=triage&per_page=100' \ + --jq '.[] | {ghsa_id, severity, summary, state}' + +# Full report for one advisory (read .summary and .description) +gh api /repos/filebrowser/filebrowser/security-advisories/GHSA-xxxx-xxxx-xxxx \ + --jq '.summary, "---", .description' +``` + +Always pull the **published** set too — you need it to dedup against. + +## 2. Verify each report — do NOT trust the report text + +Read the actual source **at HEAD** and reach one verdict per advisory: + +- **CONFIRMED** — defect exists at HEAD. Quote the exact `file:line`. +- **FIXED** — already patched (find the fix commit). +- **FALSE / NOT APPLICABLE** — claim is wrong, or targets a different project. +- **NOT EXPLOITABLE** — pattern exists but no code path can reach the precondition. +- **DUPLICATE** — of a published advisory, or of another triage advisory. + +Common traps — check each before accepting a report: + +- **"Incomplete fix of a prior advisory."** Read the original fix commit and confirm the *specific* + sibling code path is actually still unguarded — a prior fix may already cover a related path. +- **Wrong project.** Confirm the referenced files, symbols, and endpoints exist in this repo; reports + sometimes describe a fork. If the cited code isn't here, close as not applicable. +- **"Legacy / upgraded / imported records are affected."** Trace the field's git history and confirm that + some released version could actually produce such a record before believing it + (`git log -S'Field' -- path`, `git show `, `git tag --contains `). +- **Overlapping reports.** Two triage advisories may share one root cause — consolidate and fix once. +- **Known, intentionally-unaddressed classes.** Some areas are known and tracked but not fixed (see + `SECURITY.md`'s Known Issues); matching reports are duplicates. + +Record, per advisory: verdict, the `file:line` evidence, exploitability preconditions +(default config? platform-specific? auth required?), and the disposition. + +## 3. Fix (one commit per advisory) + +- Branch off `master` first; never commit fixes directly to `master`. +- **One commit per fix**, each referencing the GHSA in the body (`Refs GHSA-xxxx-xxxx-xxxx`). +- When several advisories share a root cause because parallel code paths diverged, **centralize** the logic + (e.g. `settings.CreateUserHome` used by signup, proxy, and hook provisioning) so they cannot drift again. +- Keep it surgical; match surrounding style. + +## 4. Add a regression test per fix + +- Reuse the existing harnesses; add a focused test asserting the fixed behavior (and that the legitimate + path still works). Commit tests alongside the fixes (`test(scope): …`, `Refs GHSA-…`). +- Run `go test ./... && go vet ./...` before finishing. + +## 5. Severity — set a CVSS vector, don't hand-assert + +Set a CVSS v3.1 vector; GitHub derives the score **and** severity from it (overriding the plain `severity` +field). Encode the real preconditions in the vector so the band is defensible: + +- Requires a specific target configuration/platform (e.g. case-insensitive FS) → **AC:H**. +- Unauthenticated vs needs an account → **PR:N / PR:L**. +- Keep it consistent with the **predecessor CVE's** rating (an incomplete-fix follow-up should not outrank + its parent). Bands: `0.1–3.9` low, `4.0–6.9` medium, `7.0–8.9` high, `9.0–10.0` critical. + +```bash +gh api -X PATCH /repos/filebrowser/filebrowser/security-advisories/GHSA-xxxx-xxxx-xxxx \ + -f cvss_vector_string='CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H' \ + --jq '{ghsa_id, severity, score: .cvss.score, vector: .cvss.vector_string}' +``` + +## 6. Clean up the title + +Rewrite reporter titles to the concise, sentence-case, backtick-free style of the published advisories +(state the vuln; drop "Incomplete fix of…" prefixes and jargon). The title is the `summary` field: + +```bash +gh api -X PATCH .../security-advisories/GHSA-xxxx-xxxx-xxxx \ + -f summary='Proxy-auth auto-provisioning ignores createUserDir and grants the server root scope' +``` + +## 7. Rewrite the body into the standard structure + +Reporter reports arrive in whatever shape the reporter used. Before drafting, rewrite the +`description` into the sections below — **reusing the reporter's own wording wherever it is +accurate**, rather than paraphrasing it. Drop the greeting, the offer to help, and any claim the +verification in step 2 disproved. Keep sections in this order and omit the ones that don't apply: + +| Section | Contents | +| --- | --- | +| `## Summary` | What the defect is, in two or three sentences. Note the version it was reported against and the range it was verified over. | +| `## Details` | Root cause, naming `file.go`, the function, and a short quote of the **pre-fix** code. | +| `## PoC` | The reporter's reproduction steps and observed result, trimmed to the essentials. | +| `## Impact` | Who can exploit it (privilege level, preconditions) and what they get. | +| `## Patches` | Fixed version plus a link to the fix commit, and one sentence on what the fix does. Mention it if the reporter re-tested and confirmed. | +| `## Workarounds` | Real mitigations, or `None. Upgrade to vX.Y.Z.` | +| `## Out of scope` | Anything in the original report deliberately **not** treated as a vulnerability, with the reasoning. Needed whenever the advisory is narrower than the report. | +| `## References` | Fix and regression-test commit links. | + +Use `##` headings (matching the published advisories) and keep the body in the maintainer's voice — +first person ("I reproduced…") belongs only inside quoted PoC steps. + +Send it as a file so the Markdown survives shell quoting: + +```bash +jq -Rs '{description: .}' desc.md \ + | gh api -X PATCH .../security-advisories/GHSA-xxxx-xxxx-xxxx --input - +``` + +## 8. Set affected & patched versions + +The package is always `{ecosystem: "go", name: "github.com/filebrowser/filebrowser/v2"}`. + +- `vulnerable_version_range` — `<= ` (the newest tag; find it with + `git tag --list 'v2.*' --sort=-version:refname | head -1`). +- `patched_versions` — the **next** release that will actually ship the fix. It doesn't exist just + because the branch does; it still has to be cut. **When unsure which version that will be, ask.** + +Replace the placeholder versions below before sending: + +```bash +printf '%s' '{"vulnerabilities":[{"package":{"ecosystem":"go","name":"github.com/filebrowser/filebrowser/v2"},"vulnerable_version_range":"<= ","patched_versions":"","vulnerable_functions":[]}]}' \ + | gh api -X PATCH .../security-advisories/GHSA-xxxx-xxxx-xxxx --input - +``` + +## 9. Move state / close, by disposition + +```bash +gh api -X PATCH .../security-advisories/GHSA-xxxx-xxxx-xxxx -f state=draft # fixed, awaiting release +gh api -X PATCH .../security-advisories/GHSA-xxxx-xxxx-xxxx -f state=closed # duplicate / N-A / not-exploitable +``` + +- **CONFIRMED & fixed** → metadata done → **draft**. Publish after the patched release ships. +- **DUPLICATE / NOT APPLICABLE / NOT EXPLOITABLE** → **closed**. +- **DEFERRED** (confirmed but not yet fixed) → leave in **triage** with a note. +- The REST API **cannot post advisory comments** — replies to reporters (dup notice, evidence, links to + the relevant tracking issue) must be posted manually in the advisory UI. Draft the text for the maintainer. + +## 10. Release & publish + +Push the branch, open a PR, merge, tag/release the `patched_versions` you set, then publish the drafts. +Confirm outward-facing/irreversible advisory actions (close, publish) with the maintainer before doing them. diff --git a/.dockerignore b/.dockerignore index 8767564e..f7796e79 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,7 @@ -testdata/ -.github/ -**.git +.venv +dist +.idea +frontend/node_modules +frontend/dist +filebrowser.db +docs/index.md \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..4c1605e6 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @filebrowser/maintainers diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index a26278e3..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve ---- - -**Description** -A clear and concise description of what the issue is about. What are you trying to do? - -**Expected behaviour** -What did you expect to happen? - -**What is happening instead?** -Please, give full error messages and/or log. - -**Additional context** -Add any other context about the problem here. If applicable, add screenshots to help explain your problem. - -**How to reproduce?** -Tell us how to reproduce this issue. How can someone who is starting from scratch reproduce this behaviour as minimally as possible? - -**Files** -A list of relevant files for this issue. Large files can be uploaded one-by-one or in a tarball/zipfile. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..f84e7933 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,53 @@ +name: Bug Report +description: Report a bug in FileBrowser. +labels: [bug, 'waiting: triage'] +body: + - type: checkboxes + attributes: + label: Checklist + description: Please verify that you've followed these steps + options: + - label: This is a bug report, not a question. + required: true + - label: I have searched on the [issue tracker](https://github.com/filebrowser/filebrowser/issues?q=is%3Aissue) for my bug. + required: true + - label: I am running the latest [FileBrowser version](https://github.com/filebrowser/filebrowser/releases) or have an issue updating. + required: true + - type: textarea + id: version + attributes: + label: Version + render: Text + description: | + Enter the version of FileBrowser you are using. + validations: + required: true + - type: textarea + attributes: + label: Description + description: | + A clear and concise description of what the issue is about. What are you trying to do? + validations: + required: true + - type: textarea + attributes: + label: What did you expect to happen? + validations: + required: true + - type: textarea + attributes: + label: What actually happened? + validations: + required: true + - type: textarea + attributes: + label: Reproduction Steps + description: | + Tell us how to reproduce this issue. How can someone who is starting from scratch reproduce this behavior as minimally as possible? + validations: + required: true + - type: textarea + attributes: + label: Files + description: | + A list of relevant files for this issue. Large files can be uploaded one-by-one or in a tarball/zipfile. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..b712a879 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Discussions + url: https://github.com/filebrowser/filebrowser/discussions + about: Please ask questions and discuss features here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index d2c13ab8..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project ---- - -**Is your feature request related to a problem? Please describe.** -Add a clear and concise description of what the problem is. E.g. *I'm always frustrated when [...]* - -**Describe the solution you'd like** -Add a clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -Add a clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d59412e1..8ec9b288 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,16 +1,16 @@ -**Description** -Please explain the changes you made here. -If the feature changes current behaviour, explain why your solution is better. +## Description -:rotating_light: Before submitting your PR, please read [community](https://github.com/filebrowser/community), and indicate which issues (in any of the repos) are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/). + -- [ ] DO make sure you are requesting to **pull a topic/feature/bugfix branch** (right side). Don't request your master! -- [ ] DO make sure you are making a pull request against the **master branch** (left side). Also you should start *your branch* off *our master*. -- [ ] DO make sure that File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md). -- [ ] DO make sure that related issues are opened in other repositories. I.e., the frontend, caddy plugins or the web page need to be updated accordingly. -- [ ] AVOID breaking the continuous integration build. +## Additional Information -**Further comments** -If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did, what alternatives you considered, etc. + -:heart: Thank you! +## Checklist + +Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/). + +- [ ] I am aware this project is being **archived on 2026-09-01** and that no further changes will be merged, including bug fixes. See [README](https://github.com/filebrowser/filebrowser/blob/master/README.md) +- [ ] I am aware that translations MUST be made through [Transifex](https://app.transifex.com/file-browser/file-browser/) and that this PR is NOT a translation update +- [ ] I am making a PR against the `master` branch. +- [ ] I am sure File Browser can be successfully built. See [CONTRIBUTING.md](https://github.com/filebrowser/filebrowser/blob/master/CONTRIBUTING.md). diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..5cc4d465 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,133 @@ +name: Continuous Integration + +on: + push: + branches: + - "master" + tags: + - "v*" + pull_request: + +jobs: + lint-frontend: + name: Lint Frontend + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v6 + with: + package_json_file: "frontend/package.json" + - uses: actions/setup-node@v6 + with: + node-version: "24.x" + cache: "pnpm" + cache-dependency-path: "frontend/pnpm-lock.yaml" + - working-directory: frontend + run: | + pnpm install --frozen-lockfile + pnpm run lint + + test-frontend: + name: Test Frontend + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v6 + with: + package_json_file: "frontend/package.json" + - uses: actions/setup-node@v6 + with: + node-version: "24.x" + cache: "pnpm" + cache-dependency-path: "frontend/pnpm-lock.yaml" + - working-directory: frontend + run: | + pnpm install --frozen-lockfile + pnpm run test + + lint-backend: + name: Lint Backend + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-go@v6 + with: + go-version: "1.26.x" + - uses: golangci/golangci-lint-action@v9 + with: + version: "latest" + + test: + name: Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-go@v6 + with: + go-version: "1.26.x" + - run: go test --race ./... + + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - uses: actions/setup-go@v6 + with: + go-version: '1.26' + - uses: pnpm/action-setup@v6 + with: + package_json_file: "frontend/package.json" + - uses: actions/setup-node@v6 + with: + node-version: "24.x" + cache: "pnpm" + cache-dependency-path: "frontend/pnpm-lock.yaml" + - name: Install Task + uses: go-task/setup-task@v2 + - run: task build + + release: + name: Release + needs: ["lint-frontend", "lint-backend", "test", "build"] + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - uses: actions/setup-go@v6 + with: + go-version: '1.26' + - uses: pnpm/action-setup@v6 + with: + package_json_file: "frontend/package.json" + - uses: actions/setup-node@v6 + with: + node-version: "24.x" + cache: "pnpm" + cache-dependency-path: "frontend/pnpm-lock.yaml" + - name: Set up QEMU + uses: docker/setup-qemu-action@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + - name: Install Task + uses: go-task/setup-task@v2 + - run: task build:frontend + - name: Login to Docker Hub + uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v7 + with: + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GH_PAT }} + + + diff --git a/.github/workflows/lint-pr.yaml b/.github/workflows/lint-pr.yaml new file mode 100644 index 00000000..9a4e2615 --- /dev/null +++ b/.github/workflows/lint-pr.yaml @@ -0,0 +1,46 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - reopened + - edited + - synchronize + +permissions: + pull-requests: write + +jobs: + main: + name: Validate Title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v6 + id: lint_pr_title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: marocchino/sticky-pull-request-comment@v3 + # When the previous steps fails, the workflow would stop. By adding this + # condition you can continue the execution with the populated error message. + if: always() && (steps.lint_pr_title.outputs.error_message != null) + with: + header: pr-title-lint-error + message: | + Hey there and thank you for opening this pull request! 👋🏼 + + We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted. + + Details: + + ``` + ${{ steps.lint_pr_title.outputs.error_message }} + ``` + + # Delete a previous comment when the issue has been resolved + - if: ${{ steps.lint_pr_title.outputs.error_message == null }} + uses: marocchino/sticky-pull-request-comment@v3 + with: + header: pr-title-lint-error + delete: true diff --git a/.gitignore b/.gitignore index 773afff7..b9ee1fe0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,15 @@ *.db -*.lock *.bak _old rice-box.go .idea/ -filebrowser -dist/ +/filebrowser +/filebrowser.exe +/dist +.venv .DS_Store node_modules -/frontend/dist # local env files .env.local @@ -28,3 +28,12 @@ yarn-error.log* *.njsproj *.sln *.sw* +bin/ +build/ + +# Vue distributable files +/frontend/dist/* +!/frontend/dist/.gitkeep + +default.nix +Dockerfile.dev diff --git a/.golangci.yml b/.golangci.yml index d94a3448..8819f48b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,132 +1,14 @@ -linters-settings: - dupl: - threshold: 100 - exhaustive: - default-signifies-exhaustive: false - funlen: - lines: 100 - statements: 50 - goconst: - min-len: 2 - min-occurrences: 2 - gocritic: - enabled-tags: - - diagnostic - - experimental - - opinionated - - performance - - style - disabled-checks: - - dupImport # https://github.com/go-critic/go-critic/issues/845 - - ifElseChain - - octalLiteral - - whyNoLint - - wrapperFunc - gocyclo: - min-complexity: 15 - goimports: - local-prefixes: github.com/filebrowser/filebrowser - golint: - min-confidence: 0 - gomnd: - settings: - mnd: - # don't include the "operation" and "assign" - checks: argument,case,condition,return - govet: - check-shadowing: true - lll: - line-length: 140 - maligned: - suggest-new: true - misspell: - locale: US - nolintlint: - allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space) - allow-unused: false # report any unused nolint directives - require-explanation: false # don't require an explanation for nolint directives - require-specific: false # don't require nolint directives to be specific about which linter is being skipped +version: "2" linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - disable-all: true + default: standard enable: - - bodyclose - - deadcode - - depguard - - dogsled - - dupl - - errcheck - - funlen - - gochecknoinits - - goconst - gocritic - - gocyclo - - gofmt - - goimports - - golint - - gomnd - - goprintffuncname - - gosec - - gosimple - govet - - ineffassign - - interfacer - - lll - - misspell - - nakedret - - nolintlint - - rowserrcheck - - scopelint - - staticcheck - - structcheck - - stylecheck - - typecheck - - unconvert - - unparam - - unused - - varcheck - - whitespace - - prealloc - - # don't enable: - # - asciicheck - # - exhaustive (TODO: enable after next release; current release at time of writing is v1.27) - # - gochecknoglobals - # - gocognit - # - godot - # - godox - # - goerr113 - # - maligned - # - nestif - # - testpackage - # - wsl - -issues: - exclude-rules: - - path: cmd/.*.go - linters: - - gochecknoinits - - path: .*_test.go - linters: - - lll - - gochecknoinits - - gocyclo - - funlen - - dupl - - scopelint - - text: "Auther" - linters: - - misspell - -run: - skip-dirs: - - frontend/ - skip-files: - - http/rice-box.go - -# golangci.com configuration -# https://github.com/golangci/golangci/wiki/Configuration -service: - golangci-lint-version: 1.27.x # use the fixed version to not introduce new linters unexpectedly \ No newline at end of file + - revive + exclusions: + presets: + - std-error-handling + - comments + paths: + - frontend/ diff --git a/.goreleaser.yml b/.goreleaser.yml index 5d56ed0f..be192ef8 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,107 +1,204 @@ +version: 2 + project_name: filebrowser env: - GO111MODULE=on -before: - hooks: - - go mod download - -build: - env: - - CGO_ENABLED=0 - ldflags: - - -s -w -X github.com/filebrowser/filebrowser/v2/version.Version={{ .Version }} -X github.com/filebrowser/filebrowser/v2/version.CommitSHA={{ .ShortCommit }} - main: main.go - binary: filebrowser - goos: - - darwin - - linux - - windows - - freebsd - - netbsd - - openbsd - - dragonfly - - solaris - goarch: - - amd64 - - 386 - - arm - - arm64 - goarm: - - 5 - - 6 - - 7 - ignore: - - goos: darwin - goarch: 386 - - goos: openbsd - goarch: arm - - goos: freebsd - goarch: arm - - goos: netbsd - goarch: arm - - goos: solaris - goarch: arm +builds: + - env: + - CGO_ENABLED=0 + ldflags: + - -s -w -X github.com/filebrowser/filebrowser/v2/version.Version={{ .Version }} -X github.com/filebrowser/filebrowser/v2/version.CommitSHA={{ .ShortCommit }} + main: main.go + binary: filebrowser + goos: + - darwin + - linux + - windows + - freebsd + - openbsd + goarch: + - amd64 + - "386" + - arm + - arm64 + - riscv64 + goarm: + - "5" + - "6" + - "7" + ignore: + - goos: darwin + goarch: "386" + # Experimental, may not work properly + - goos: openbsd + goarch: riscv64 + # Broken as of Go 1.24, deprecated as of Go 1.26 + - goos: windows + goarch: arm + - goos: freebsd + goarch: arm archives: - - - name_template: "{{.Os}}-{{.Arch}}{{if .Arm}}v{{.Arm}}{{end}}-{{ .ProjectName }}" - format: tar.gz + - name_template: "{{.Os}}-{{.Arch}}{{if .Arm}}v{{.Arm}}{{end}}-{{ .ProjectName }}" + formats: ["tar.gz"] format_overrides: - goos: windows - format: zip + formats: ["zip"] dockers: - - - dockerfile: Dockerfile - binaries: - - filebrowser + # Alpine docker images + - dockerfile: Dockerfile + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/amd64" goos: linux goarch: amd64 - goarm: '' image_templates: - - "filebrowser/filebrowser:latest" - - "filebrowser/filebrowser:{{ .Tag }}" - - "filebrowser/filebrowser:v{{ .Major }}" + - "filebrowser/filebrowser:{{ .Tag }}-amd64" + - "filebrowser/filebrowser:v{{ .Major }}-amd64" extra_files: - - .docker.json - - - dockerfile: Dockerfile - binaries: - - filebrowser + - docker + - dockerfile: Dockerfile + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/arm64" + goos: linux + goarch: arm64 + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-arm64" + - "filebrowser/filebrowser:v{{ .Major }}-arm64" + extra_files: + - docker + - dockerfile: Dockerfile + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/arm/v6" goos: linux goarch: arm - goarm: '5' + goarm: "6" image_templates: - - "filebrowser/filebrowser:pi" - - "filebrowser/filebrowser:{{ .Tag }}-pi" - - "filebrowser/filebrowser:v{{ .Major }}-pi" + - "filebrowser/filebrowser:{{ .Tag }}-armv6" + - "filebrowser/filebrowser:v{{ .Major }}-armv6" extra_files: - - .docker.json - - - dockerfile: Dockerfile.alpine - binaries: - - filebrowser + - docker + - dockerfile: Dockerfile + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/arm/v7" + goos: linux + goarch: arm + goarm: "7" + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-armv7" + - "filebrowser/filebrowser:v{{ .Major }}-armv7" + extra_files: + - docker + + ## s6-overlay docker images + - dockerfile: Dockerfile.s6 + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/amd64" goos: linux goarch: amd64 - goarm: '' image_templates: - - "filebrowser/filebrowser:alpine" - - "filebrowser/filebrowser:{{ .Tag }}-alpine" - - "filebrowser/filebrowser:v{{ .Major }}-alpine" + - "filebrowser/filebrowser:{{ .Tag }}-amd64-s6" + - "filebrowser/filebrowser:v{{ .Major }}-amd64-s6" extra_files: - - .docker.json - - - dockerfile: Dockerfile.debian - binaries: - - filebrowser + - docker + - dockerfile: Dockerfile.s6 + use: buildx + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" + - "--platform=linux/arm64" goos: linux - goarch: amd64 - goarm: '' + goarch: arm64 image_templates: - - "filebrowser/filebrowser:debian" - - "filebrowser/filebrowser:{{ .Tag }}-debian" - - "filebrowser/filebrowser:v{{ .Major }}-debian" + - "filebrowser/filebrowser:{{ .Tag }}-arm64-s6" + - "filebrowser/filebrowser:v{{ .Major }}-arm64-s6" extra_files: - - .docker.json + - docker + +docker_manifests: + - name_template: "filebrowser/filebrowser:latest" + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-amd64" + - "filebrowser/filebrowser:{{ .Tag }}-arm64" + - "filebrowser/filebrowser:{{ .Tag }}-armv7" + - name_template: "filebrowser/filebrowser:{{ .Tag }}" + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-amd64" + - "filebrowser/filebrowser:{{ .Tag }}-arm64" + - "filebrowser/filebrowser:{{ .Tag }}-armv7" + - name_template: "filebrowser/filebrowser:v{{ .Major }}" + image_templates: + - "filebrowser/filebrowser:v{{ .Major }}-amd64" + - "filebrowser/filebrowser:v{{ .Major }}-arm64" + - "filebrowser/filebrowser:v{{ .Major }}-armv7" + ## s6 image manifests + - name_template: "filebrowser/filebrowser:s6" + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-amd64-s6" + - "filebrowser/filebrowser:{{ .Tag }}-arm64-s6" + - name_template: "filebrowser/filebrowser:{{ .Tag }}-s6" + image_templates: + - "filebrowser/filebrowser:{{ .Tag }}-amd64-s6" + - "filebrowser/filebrowser:{{ .Tag }}-arm64-s6" + - name_template: "filebrowser/filebrowser:v{{ .Major }}-s6" + image_templates: + - "filebrowser/filebrowser:v{{ .Major }}-amd64-s6" + - "filebrowser/filebrowser:v{{ .Major }}-arm64-s6" + +homebrew_casks: + - name: filebrowser + repository: + owner: filebrowser + name: homebrew-tap + commit_author: + name: FileBrowser Robot + email: robot@filebrowser.org + homepage: https://github.com/filebrowser/filebrowser + description: File Browser is a create-your-own-cloud-kind of software where you can install it on a server, direct it to a path and then access your files through a nice web interface + hooks: + post: + install: | + if system_command("/usr/bin/xattr", args: ["-h"]).exit_status == 0 + system_command "/usr/bin/xattr", args: ["-dr", "com.apple.quarantine", "#{staged_path}/filebrowser"] + end diff --git a/.tx/config b/.tx/config deleted file mode 100644 index 339e80b4..00000000 --- a/.tx/config +++ /dev/null @@ -1,10 +0,0 @@ -[main] -host = https://www.transifex.com -lang_map = pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be, sv_SE: sv-se - -[file-browser.file-browser] -file_filter = frontend/src/i18n/.json -minimum_perc = 50 -source_file = frontend/src/i18n/en.json -source_lang = en -type = KEYVALUEJSON diff --git a/.versionrc b/.versionrc new file mode 100644 index 00000000..ecf59363 --- /dev/null +++ b/.versionrc @@ -0,0 +1,14 @@ +{ + "types": [ + { "type": "feat", "section": "Features" }, + { "type": "fix", "section": "Bug Fixes" }, + { "type": "perf", "section": "Performance improvements" }, + { "type": "revert", "section": "Reverts" }, + { "type": "refactor", "section": "Refactorings" }, + { "type": "build", "section": "Build" }, + { "type": "ci", "hidden": true }, + { "type": "test", "hidden": true }, + { "type": "chore", "hidden": true }, + { "type": "docs", "hidden": true } + ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index d234e451..ecb03aa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,1890 @@ # Changelog -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. + +## [2.63.23](https://github.com/filebrowser/filebrowser/compare/v2.63.22...v2.63.23) (2026-07-27) +## [2.63.22](https://github.com/filebrowser/filebrowser/compare/v2.63.21...v2.63.22) (2026-07-27) + +### Bug Fixes + +* enforce rules on recursive operations and expired proxy tokens ([#6053](https://github.com/filebrowser/filebrowser/issues/6053)) ([72faf6d](https://github.com/filebrowser/filebrowser/commit/72faf6dd3c85628e332d3e567124b86708ce2695)) +* make the sidebar scrollable when content overflows ([#6031](https://github.com/filebrowser/filebrowser/issues/6031)) ([a789f29](https://github.com/filebrowser/filebrowser/commit/a789f29ceec4734e7471592921d1ce67f1a10a7e)) +* unblock stalled and frozen uploads ([0b925cb](https://github.com/filebrowser/filebrowser/commit/0b925cbca940fe0b2726827cf66783da05c64f5e)), closes [#6006](https://github.com/filebrowser/filebrowser/issues/6006), references [#5987](https://github.com/filebrowser/filebrowser/issues/5987) +* use absolute URLs for the PWA manifest icon sources ([#6032](https://github.com/filebrowser/filebrowser/issues/6032)) ([cfff843](https://github.com/filebrowser/filebrowser/commit/cfff84306af66deedfdc9248300919b3ddd9a7f0)) +## [2.63.21](https://github.com/filebrowser/filebrowser/compare/v2.63.20...v2.63.21) (2026-07-26) + +### Bug Fixes + +* **http:** canonicalize paths before checking access rules ([#6045](https://github.com/filebrowser/filebrowser/issues/6045)) ([e6d70cf](https://github.com/filebrowser/filebrowser/commit/e6d70cf24c0cd79a1787601dc99104ec7e7ca3ef)) + +### Reverts + +* Revert "chore(deps): update all non-major dependencies (#5946)" ([0dd8905](https://github.com/filebrowser/filebrowser/commit/0dd89058867f87a7bc04aa7517d21528a280e27c)), references [#5946](https://github.com/filebrowser/filebrowser/issues/5946) +## [2.63.20](https://github.com/filebrowser/filebrowser/compare/v2.63.19...v2.63.20) (2026-07-25) + +### Bug Fixes + +* use aria-selected ([67e893e](https://github.com/filebrowser/filebrowser/commit/67e893eee7ee411e166d3fcd759a87b6f0971277)) +* **users:** make the provisioned scope check atomic with the save ([fb6aeba](https://github.com/filebrowser/filebrowser/commit/fb6aeba9eae7b8eb401e0db325973781e1ffd08b)) +## [2.63.19](https://github.com/filebrowser/filebrowser/compare/v2.63.18...v2.63.19) (2026-07-25) + +### Bug Fixes + +* accessibility and security improvements ([#6033](https://github.com/filebrowser/filebrowser/issues/6033)) ([b21b124](https://github.com/filebrowser/filebrowser/commit/b21b1245ae1b57f031b2f5d787f32a17532402c0)) +* **auth:** isolate auto-provisioned proxy and hook users to their own home ([8ddd3d1](https://github.com/filebrowser/filebrowser/commit/8ddd3d1db9b9f5727d0bf96ea0e7d9a25a8692b4)) +* **http:** delete abandoned TUS uploads through the scoped filesystem ([9bd79c3](https://github.com/filebrowser/filebrowser/commit/9bd79c3aaeb4a55b0e69cf8976c4a258db2f5e06)) +* **http:** enforce declared Upload-Length on TUS uploads ([4daddec](https://github.com/filebrowser/filebrowser/commit/4daddec6f200b03a721197d8c0b4b652c994894e)) +* **http:** enforce download permission on the checksum branch ([6c69b5c](https://github.com/filebrowser/filebrowser/commit/6c69b5cd895e15b29e563200a9a6dfc27b06525e)) +* **http:** run upload hooks for directories ([#6034](https://github.com/filebrowser/filebrowser/issues/6034)) ([9b78324](https://github.com/filebrowser/filebrowser/commit/9b78324d773c790951cc6a97840c4b55f66b5f3d)) +* process --FollowExternalSymlinks ([c05c668](https://github.com/filebrowser/filebrowser/commit/c05c66814891c3cccef394162e428444b53394e4)) +* return error instead of panicking on an unreadable directory during copy ([#6020](https://github.com/filebrowser/filebrowser/issues/6020)) ([ac46cf0](https://github.com/filebrowser/filebrowser/commit/ac46cf06719575477d5125e7472037c204b3702d)) +* **storage:** reject case-folded home directory collisions ([4b8a8d7](https://github.com/filebrowser/filebrowser/commit/4b8a8d72ce554dde378b5091da74aa930ea18327)) +* **upload:** handle encoded path conflicts safely ([#6040](https://github.com/filebrowser/filebrowser/issues/6040)) ([7361d91](https://github.com/filebrowser/filebrowser/commit/7361d91ea2e8cc200a0f40ac84adcd02aedc9ed2)) +## [2.63.18](https://github.com/filebrowser/filebrowser/compare/v2.63.17...v2.63.18) (2026-07-04) + + +### Bug Fixes + +* avoid recursive conflict checks for copy and move ([#6009](https://github.com/filebrowser/filebrowser/issues/6009)) ([dfc2e88](https://github.com/filebrowser/filebrowser/commit/dfc2e887e1a19d54984a0d7e39a2a63caf73ef19)) +* deduplicate PT language ([4470288](https://github.com/filebrowser/filebrowser/commit/4470288ba1828a14453a99348fd22c62aa0b9460)) +* **preview:** keep the EPUB table-of-contents button clear of the header ([#6010](https://github.com/filebrowser/filebrowser/issues/6010)) ([aac2516](https://github.com/filebrowser/filebrowser/commit/aac25166378422135e624e305c410c54a39374fb)) + +## [2.63.17](https://github.com/filebrowser/filebrowser/compare/v2.63.16...v2.63.17) (2026-06-27) + + +### Bug Fixes + +* **auth:** reject signup when normalized home dir collides (GHSA-7rc3-g7h6-22m7) ([883a36f](https://github.com/filebrowser/filebrowser/commit/883a36f02fcb69566a8628cb47f18fdc73348387)) +* match admin share paths by owner scope ([#5992](https://github.com/filebrowser/filebrowser/issues/5992)) ([43a404c](https://github.com/filebrowser/filebrowser/commit/43a404ca69bf25553bfbbb2b446f0f53077c6302)) +* normalize recursive listing paths to forward slashes ([#6003](https://github.com/filebrowser/filebrowser/issues/6003)) ([2472fbc](https://github.com/filebrowser/filebrowser/commit/2472fbcd30502606feb11fbc8b8dc4f3803e6641)) +* preserve SRT subtitle line breaks ([#6002](https://github.com/filebrowser/filebrowser/issues/6002)) ([d9cf2f0](https://github.com/filebrowser/filebrowser/commit/d9cf2f0100d2c4892cad8e339eacca96df1aa5b6)) +* **raw:** neutralize backslashes in archive entry names (GHSA-83xp-526h-j3ww) ([8503ba6](https://github.com/filebrowser/filebrowser/commit/8503ba61ff51d48a7313896483d130eb6a5abfe0)) +* **share:** delete exact directory share on trailing-slash delete (GHSA-pp88-jhwj-5qh5) ([f30fca6](https://github.com/filebrowser/filebrowser/commit/f30fca636c1af9ef401e9a82ff60391cb3db97e1)) +* **share:** stop exposing password hash and bypass token in share API (GHSA-833g-cqhp-h72j) ([ec13054](https://github.com/filebrowser/filebrowser/commit/ec130546713c44cd24556907552ac554c7f809c9)) + +## [2.63.16](https://github.com/filebrowser/filebrowser/compare/v2.63.15...v2.63.16) (2026-06-23) + + +### Bug Fixes + +* dangling symlink, write, delete scope bugs ([64511ce](https://github.com/filebrowser/filebrowser/commit/64511ce45e3be379e965f7f4fb0929a068d5bb81)) +* restore symlink behavior as opt-in followExternalSymlinks ([a106392](https://github.com/filebrowser/filebrowser/commit/a1063925e15ef27f9d5dc26aae371bbf52af608c)) + +## [2.63.15](https://github.com/filebrowser/filebrowser/compare/v2.63.14...v2.63.15) (2026-06-13) + + +### Bug Fixes + +* restore ScopedFs RealPath ([#5986](https://github.com/filebrowser/filebrowser/issues/5986)) ([403d2bb](https://github.com/filebrowser/filebrowser/commit/403d2bbd3357aa57e78745b52dcdad3490901bb3)) + +## [2.63.14](https://github.com/filebrowser/filebrowser/compare/v2.63.13...v2.63.14) (2026-06-07) + + +### Bug Fixes + +* recursive check ([3406d3d](https://github.com/filebrowser/filebrowser/commit/3406d3d7f98dfc3c16e4ff7ff4a87e3bdfe221dd)) + + +### Refactorings + +* ScopedFs to avoid escaping symlinks ([7c2c0a1](https://github.com/filebrowser/filebrowser/commit/7c2c0a11b31b2bb214d741005a0b02b1764208b3)) + +## [2.63.13](https://github.com/filebrowser/filebrowser/compare/v2.63.12...v2.63.13) (2026-06-06) + + +### Bug Fixes + +* copy/move allow overwrite ([a1a514d](https://github.com/filebrowser/filebrowser/commit/a1a514dcbb216d2080412c5354eea1e1fb033050)) + + +### Refactorings + +* cleanup and simplify upload.ts ([5f7311d](https://github.com/filebrowser/filebrowser/commit/5f7311d32437e98d7c14c7b307a4f68109275535)) + +## [2.63.12](https://github.com/filebrowser/filebrowser/compare/v2.63.11...v2.63.12) (2026-06-04) + + +### Bug Fixes + +* await copy move conflict detection ([#5978](https://github.com/filebrowser/filebrowser/issues/5978)) ([c1abe8f](https://github.com/filebrowser/filebrowser/commit/c1abe8f561208bf36bde70879d1a15ef9de998fa)) +* keep mobile file sort controls visible ([#5977](https://github.com/filebrowser/filebrowser/issues/5977)) ([0bb2768](https://github.com/filebrowser/filebrowser/commit/0bb2768754d11b865d68e72dcd7cebb232a6308a)) +* skip inaccessible children when listing directories ([#5958](https://github.com/filebrowser/filebrowser/issues/5958)) ([7b7ff8a](https://github.com/filebrowser/filebrowser/commit/7b7ff8ae8f97393b2e6ae6e061c1f780077c32b6)) + +## [2.63.11](https://github.com/filebrowser/filebrowser/compare/v2.63.10...v2.63.11) (2026-06-04) + + +### Bug Fixes + +* incomplete fix for symlinked directories let scopes users and public-share recipients read and write files outside of scope ([3471ec2](https://github.com/filebrowser/filebrowser/commit/3471ec2c4b6473831c72ee889cb3c1a6849a1fb1)) + +## [2.63.10](https://github.com/filebrowser/filebrowser/compare/v2.63.9...v2.63.10) (2026-06-03) + + +### Bug Fixes + +* allow writes when user scope resolves to filesystem root ([6b04cbf](https://github.com/filebrowser/filebrowser/commit/6b04cbf5e9db1f5b9c0b1624843607ce2881cfc4)) + +## [2.63.9](https://github.com/filebrowser/filebrowser/compare/v2.63.8...v2.63.9) (2026-06-03) + + +### Bug Fixes + +* force octet-stream for attachment downloads ([#5942](https://github.com/filebrowser/filebrowser/issues/5942)) ([103acd1](https://github.com/filebrowser/filebrowser/commit/103acd15fe57554fe0246bfe70a49b6cb4ae0c51)) +* prevent symlink scope escape in copy/move/rename ([cdd666f](https://github.com/filebrowser/filebrowser/commit/cdd666fc95f569ad583c32391e45646fed676dfd)) +* set X-Content-Type-Options: nosniff on raw file responses ([35db07d](https://github.com/filebrowser/filebrowser/commit/35db07d0159c520a6b3c969ac52033593914fadd)) +* use constant-time comparison for share access token ([1951436](https://github.com/filebrowser/filebrowser/commit/19514367adf2d9fe5be2b7666e397979ea679b94)) + +## [2.63.8](https://github.com/filebrowser/filebrowser/compare/v2.63.7...v2.63.8) (2026-06-03) + + +### Bug Fixes + +* check if share is within scope when creating ([ca019ae](https://github.com/filebrowser/filebrowser/commit/ca019ae7d966a7c28de2b2341271cd13e3458ae6)) + +## [2.63.7](https://github.com/filebrowser/filebrowser/compare/v2.63.6...v2.63.7) (2026-06-03) + + +### Bug Fixes + +* disallow shares for non-existent paths ([166583d](https://github.com/filebrowser/filebrowser/commit/166583db632e088e9f0adce30aec43bb9d9019f4)) + +## [2.63.6](https://github.com/filebrowser/filebrowser/compare/v2.63.5...v2.63.6) (2026-06-03) + + +### Bug Fixes + +* address three security disclosures (archive traversal, login DoS, symlink escape) ([847d08b](https://github.com/filebrowser/filebrowser/commit/847d08bdd135e5c3659f2e6dea2f0cd36617af9b)) +* cross-user unauthorized share-link deletion ([0231b7e](https://github.com/filebrowser/filebrowser/commit/0231b7ebdfbe77a6c54027d30c4856c3fd81ee4d)) +* incorrect access control in public directory shares via rule path rebasing ([e07c59d](https://github.com/filebrowser/filebrowser/commit/e07c59df0b850f5924d5b1683e8609661ddcf534)) +* parse csv files with uneven columns in their rows ([#5965](https://github.com/filebrowser/filebrowser/issues/5965)) ([5328e80](https://github.com/filebrowser/filebrowser/commit/5328e80d2e88d1c279a1250a7dfee4fc96f703ec)) +* remove undocumented hook auth with shell replacement ([34ae34e](https://github.com/filebrowser/filebrowser/commit/34ae34e764d72540c039f1f5ea2ec4c974168c1f)) + +## [2.63.5](https://github.com/filebrowser/filebrowser/compare/v2.63.4...v2.63.5) (2026-05-21) + + +### Bug Fixes + +* **router:** handle undefined catchAll param on root redirect ([#5955](https://github.com/filebrowser/filebrowser/issues/5955)) ([6ad8160](https://github.com/filebrowser/filebrowser/commit/6ad8160aa3309314c1b471c5090b67c824464396)) + +## [2.63.4](https://github.com/filebrowser/filebrowser/compare/v2.63.3...v2.63.4) (2026-05-17) + + +### Bug Fixes + +* show item shares from all users to admins ([#5941](https://github.com/filebrowser/filebrowser/issues/5941)) ([9cc18a8](https://github.com/filebrowser/filebrowser/commit/9cc18a81e3e1b8bf96795bfbe3d83ced294ecfd7)) + +## [2.63.3](https://github.com/filebrowser/filebrowser/compare/v2.63.2...v2.63.3) (2026-05-05) + + +### Bug Fixes + +* correct environment variable in compose.yaml ([#5910](https://github.com/filebrowser/filebrowser/issues/5910)) ([41b801d](https://github.com/filebrowser/filebrowser/commit/41b801d30c736c8ca863e2be6aece7d99e92129e)) +* Fix conflict modal and add a resume transfert option ([#5884](https://github.com/filebrowser/filebrowser/issues/5884)) ([f4e1485](https://github.com/filebrowser/filebrowser/commit/f4e148523e0dc9242081831b53544396f995c611)) + +## [2.63.2](https://github.com/filebrowser/filebrowser/compare/v2.63.1...v2.63.2) (2026-04-11) + + +### Bug Fixes + +* **preview:** let arrow keys seek video instead of switching files ([#5895](https://github.com/filebrowser/filebrowser/issues/5895)) ([0fadf28](https://github.com/filebrowser/filebrowser/commit/0fadf28b18e506ddca0027e83ebe567ac57932bf)) + +## [2.63.1](https://github.com/filebrowser/filebrowser/compare/v2.63.0...v2.63.1) (2026-04-04) + + +### Bug Fixes + +* check download permission in resource handler ([#5891](https://github.com/filebrowser/filebrowser/issues/5891)) ([1e03fea](https://github.com/filebrowser/filebrowser/commit/1e03feadb550e4414b5589a6a8df57f538efba15)) +* check share owner permissions on public share access ([#5888](https://github.com/filebrowser/filebrowser/issues/5888)) ([7dbf7a3](https://github.com/filebrowser/filebrowser/commit/7dbf7a3528234b2a9ee9c4115e8ecf58d258ca51)) +* enforce directory boundary in rule path matching ([#5889](https://github.com/filebrowser/filebrowser/issues/5889)) ([8adf127](https://github.com/filebrowser/filebrowser/commit/8adf127c7d33585333b8030869f6f318e6517179)) +* restrict default permissions for proxy-auth auto-provisioned users ([#5890](https://github.com/filebrowser/filebrowser/issues/5890)) ([f13c7c8](https://github.com/filebrowser/filebrowser/commit/f13c7c8cffd6d58ff29c4a6763ced1385f69961e)) + +## [2.63.0](https://github.com/filebrowser/filebrowser/compare/v2.62.2...v2.63.0) (2026-04-04) + + +### Features + +* enable copy operation on drag‑and‑drop with ctrl key ([#5882](https://github.com/filebrowser/filebrowser/issues/5882)) ([876cdb3](https://github.com/filebrowser/filebrowser/commit/876cdb34265b090c2a74a69509f4106f2c5e8726)) + + +### Bug Fixes + +* check download permission when sharing permission is enabled ([#5875](https://github.com/filebrowser/filebrowser/issues/5875)) ([0f39bd0](https://github.com/filebrowser/filebrowser/commit/0f39bd055efdadc15abd2f8146cf5da3793f8318)) +* **tus:** reject negative upload-length to prevent inconsistent cache entry ([#5876](https://github.com/filebrowser/filebrowser/issues/5876)) ([7a16129](https://github.com/filebrowser/filebrowser/commit/7a16129bfc07dbdc2fa52b99d2985c1bc0ea12e2)) + +## [2.62.2](https://github.com/filebrowser/filebrowser/compare/v2.62.1...v2.62.2) (2026-03-28) + + +### Bug Fixes + +* disable scripted content in epub ([126227b](https://github.com/filebrowser/filebrowser/commit/126227bb2754eee15cd7c722916c3bb8821084a2)) +* double slash in TUS upload path when readEntries returns multiple batches ([#5848](https://github.com/filebrowser/filebrowser/issues/5848)) ([432f3e6](https://github.com/filebrowser/filebrowser/commit/432f3e60ffdf92af6f8f56119a1bac8084f52a60)) +* include filename in Content-Disposition header for inline downloads ([#5860](https://github.com/filebrowser/filebrowser/issues/5860)) ([8f81b77](https://github.com/filebrowser/filebrowser/commit/8f81b77cf2a3da0a445f3700fbf4a0091ea46c07)) +* json escaping ([c406bda](https://github.com/filebrowser/filebrowser/commit/c406bda0c73ac8b187e23a97c05521edc77efa84)) +* self-registered users don't get execute perms ([b6a4fb1](https://github.com/filebrowser/filebrowser/commit/b6a4fb1f27f4d894b384c0f3acacda276d1338a5)) +* shares listing ([a8fc165](https://github.com/filebrowser/filebrowser/commit/a8fc1657b796c5da7190466beff13e680721b6d3)) +* touch Redis upload cache key on GetLength to prevent TTL expiry ([#5850](https://github.com/filebrowser/filebrowser/issues/5850)) ([4812536](https://github.com/filebrowser/filebrowser/commit/48125365551ce2b27790aaafd7594cf5ce52f1ba)) +* use html/template ([d9f9460](https://github.com/filebrowser/filebrowser/commit/d9f9460c1e51d10a25065e10358c12d5ced66ad9)) + +## [2.62.1](https://github.com/filebrowser/filebrowser/compare/v2.62.0...v2.62.1) (2026-03-14) + + +### Bug Fixes + +* base url/reverse proxy redirect ([fc80f4f](https://github.com/filebrowser/filebrowser/commit/fc80f4f44c856ddc19df3024c245990fffd55630)) + +## [2.62.0](https://github.com/filebrowser/filebrowser/compare/v2.61.2...v2.62.0) (2026-03-14) + + +### Features + +* Updates for project File Browser ([#5807](https://github.com/filebrowser/filebrowser/issues/5807)) ([858eb42](https://github.com/filebrowser/filebrowser/commit/858eb426515ec55172e9cca47bdf1e25a0d0d81d)) + + +### Bug Fixes + +* allow deleting the user's own account ([#5820](https://github.com/filebrowser/filebrowser/issues/5820)) ([f04af0c](https://github.com/filebrowser/filebrowser/commit/f04af0cac6c808b8e7c9a9651380c252c4de9132)) +* around languages ([c21af07](https://github.com/filebrowser/filebrowser/commit/c21af0791a5df458c2ddb81ce9ae44b772b6d82d)) +* clean path in patch handler ([4bd7d69](https://github.com/filebrowser/filebrowser/commit/4bd7d69c82163b201a987e99c0c50d7ecc6ee5f1)) +* make perm.share depend on share.download ([09a2616](https://github.com/filebrowser/filebrowser/commit/09a26166b4f79446e7174c017380f6db45444e32)) +* properly surface config parse errors ([#5822](https://github.com/filebrowser/filebrowser/issues/5822)) ([ef2e999](https://github.com/filebrowser/filebrowser/commit/ef2e9992dc3098f6c4722c2a98966cd8abf8bab5)) +* signup handler shouldn't create admins ([a63573b](https://github.com/filebrowser/filebrowser/commit/a63573b67eb302167b4c4f218361a2d0c138deab)) +* **tus:** preserve percent-encoded upload paths in Location header ([#5817](https://github.com/filebrowser/filebrowser/issues/5817)) ([0542fc0](https://github.com/filebrowser/filebrowser/commit/0542fc0ba43740c967414eebd156bac86ad80376)) +* **upload:** avoid skipping whole folder upload on conflict modal ([#5814](https://github.com/filebrowser/filebrowser/issues/5814)) ([f5f8b60](https://github.com/filebrowser/filebrowser/commit/f5f8b60b331a07729a1fed1ed065cb6fc20930ea)) +* **upload:** don't mark every folder-upload file as conflicting ([#5813](https://github.com/filebrowser/filebrowser/issues/5813)) ([6dcef07](https://github.com/filebrowser/filebrowser/commit/6dcef07f40d550acee63dd01e0a3bcf78532f690)) + +## [2.61.2](https://github.com/filebrowser/filebrowser/compare/v2.61.1...v2.61.2) (2026-03-06) + + +### Bug Fixes + +* added dateFormat to getUserDefaults so this is respected in the … ([#5804](https://github.com/filebrowser/filebrowser/issues/5804)) ([8598db2](https://github.com/filebrowser/filebrowser/commit/8598db2accccf5b87353e5e718b2ad1c946e5c44)) +* avoid sending the same name in the file/folder rename modal ([#5806](https://github.com/filebrowser/filebrowser/issues/5806)) ([d7b00ce](https://github.com/filebrowser/filebrowser/commit/d7b00ce5f672b7ce0b26ce31abdfc74f8b00b939)) +* **csv-viewer:** add support for missing text encodings in dropdown list ([#5795](https://github.com/filebrowser/filebrowser/issues/5795)) ([4af3f85](https://github.com/filebrowser/filebrowser/commit/4af3f85e64e795e8ae1d87d4caee8185028294ac)) +* **frontend:** do not delete original assets ([4d9e6b8](https://github.com/filebrowser/filebrowser/commit/4d9e6b821852203cef67233791a922013bd5b64d)) +* **frontend:** input password type ([8ee5576](https://github.com/filebrowser/filebrowser/commit/8ee55761a1aa9bc091d8466c44f03c2043a8ca79)) +* validate current password with a modal ([#5805](https://github.com/filebrowser/filebrowser/issues/5805)) ([177c7cf](https://github.com/filebrowser/filebrowser/commit/177c7cfcce36779e2c5ebaa4b59a055dd1e17648)) + +## [2.61.1](https://github.com/filebrowser/filebrowser/compare/v2.61.0...v2.61.1) (2026-03-04) + + +### Bug Fixes + +* check for correct permission in TUS Delete ([7ed1425](https://github.com/filebrowser/filebrowser/commit/7ed1425115be602c2b23236c410098ea2d74b42f)) + +## [2.61.0](https://github.com/filebrowser/filebrowser/compare/v2.60.0...v2.61.0) (2026-02-28) + + +### Features + +* improved conflict resolution when uploading/copying/moving files ([#5765](https://github.com/filebrowser/filebrowser/issues/5765)) ([aa80909](https://github.com/filebrowser/filebrowser/commit/aa809096eb35fdfbdeb6784b1ebfe2ca1e42f52b)) + + +### Bug Fixes + +* correctly clean path ([31194fb](https://github.com/filebrowser/filebrowser/commit/31194fb57a5b92e7155219d7ec7273028fcb2e83)) + +## [2.60.0](https://github.com/filebrowser/filebrowser/compare/v2.59.0...v2.60.0) (2026-02-21) + + +### Features + +* Updates for project File Browser ([#5764](https://github.com/filebrowser/filebrowser/issues/5764)) ([9940bdd](https://github.com/filebrowser/filebrowser/commit/9940bdd663ff5141110778524b8a22c957036e78)) + + +### Bug Fixes + +* always show separators and encoding list in the CSV viewer ([#5774](https://github.com/filebrowser/filebrowser/issues/5774)) ([3169a14](https://github.com/filebrowser/filebrowser/commit/3169a14a4d63a0a11a5288f4f3a674c0a0edb972)) +* modal lifecycle issues, multiple modals, new directory creation and discard changes behavior ([#5773](https://github.com/filebrowser/filebrowser/issues/5773)) ([200d501](https://github.com/filebrowser/filebrowser/commit/200d5015472c79d5caa683ea291ebf500356a39f)) + +## [2.59.0](https://github.com/filebrowser/filebrowser/compare/v2.58.0...v2.59.0) (2026-02-15) + + +### Features + +* add 'Open direct' button to images ([#5678](https://github.com/filebrowser/filebrowser/issues/5678)) ([804b14b](https://github.com/filebrowser/filebrowser/commit/804b14b698aa218fa5c2aaba687e72c5f7617f0f)) +* Updates for project File Browser ([#5760](https://github.com/filebrowser/filebrowser/issues/5760)) ([63a76ef](https://github.com/filebrowser/filebrowser/commit/63a76ef18c51121e08634810a894c1e22a870428)) + + +### Bug Fixes + +* render equations in markdown preview ([#5745](https://github.com/filebrowser/filebrowser/issues/5745)) ([0467326](https://github.com/filebrowser/filebrowser/commit/0467326d5c082c42c0ede88ee2d3472f5fb65600)) + +## [2.58.0](https://github.com/filebrowser/filebrowser/compare/v2.57.1...v2.58.0) (2026-02-14) + + +### Features + +* nederlands ([88b97de](https://github.com/filebrowser/filebrowser/commit/88b97def9ee72fe6e8094209aebb71830b7305be)) +* support for multiple encodings in CSV files ([#5756](https://github.com/filebrowser/filebrowser/issues/5756)) ([f67bccf](https://github.com/filebrowser/filebrowser/commit/f67bccf8c5470cb280fe854d92aa2666c270bcf5)) +* Updates for project File Browser ([#5749](https://github.com/filebrowser/filebrowser/issues/5749)) ([c94870f](https://github.com/filebrowser/filebrowser/commit/c94870fcfe1b4acb2db9ab897b9f7d35e3b75770)) +* Updates for project File Browser ([#5759](https://github.com/filebrowser/filebrowser/issues/5759)) ([5e8f5be](https://github.com/filebrowser/filebrowser/commit/5e8f5be245fd0126545ef5ca61c2d428ac128ad5)) + + +### Bug Fixes + +* **frontend:** pnpm lock ([b09960e](https://github.com/filebrowser/filebrowser/commit/b09960e538387ff29371c80be1584720f65181e7)) +* ignore version.go ([1f7904d](https://github.com/filebrowser/filebrowser/commit/1f7904dad21a87f04e1543ee10b60ce79e5eebe9)) +* respect Accept-Encoding for pre-compressed JS ([#5750](https://github.com/filebrowser/filebrowser/issues/5750)) ([6a76dfe](https://github.com/filebrowser/filebrowser/commit/6a76dfeba9254a938e320928c67d110f73f83715)) +* wrap response text in Error before reject ([#5753](https://github.com/filebrowser/filebrowser/issues/5753)) ([e5bc0d3](https://github.com/filebrowser/filebrowser/commit/e5bc0d3cce18fa7b069688b176b99efbb67382d2)) + +## [2.57.1](https://github.com/filebrowser/filebrowser/compare/v2.57.0...v2.57.1) (2026-02-08) + + +### Bug Fixes + +* normalize fields capitalization ([ff2f004](https://github.com/filebrowser/filebrowser/commit/ff2f00498cff151e2fb1f5f0b16963bf33c3d6d4)) +* remove skip clean ([489af40](https://github.com/filebrowser/filebrowser/commit/489af403a19057f6b6b4b1dc0e48cbb26a202ef9)) + +## [2.57.0](https://github.com/filebrowser/filebrowser/compare/v2.56.0...v2.57.0) (2026-02-01) + + +### Features + +* Add Redis upload cache for multi-replica deployments ([#5724](https://github.com/filebrowser/filebrowser/issues/5724)) ([08d7a15](https://github.com/filebrowser/filebrowser/commit/08d7a1504c42c115fdd82d3845694fe87147f1db)) +* Updates for project File Browser ([#5725](https://github.com/filebrowser/filebrowser/issues/5725)) ([8fee256](https://github.com/filebrowser/filebrowser/commit/8fee2561afbf968ed577bc4139562a42b2278243)) + + +### Bug Fixes + +* adjust yaml config decodification to yaml.v3 ([#5722](https://github.com/filebrowser/filebrowser/issues/5722)) ([b594d4d](https://github.com/filebrowser/filebrowser/commit/b594d4d4e28a1b35e69d81d2c35948fe0d629888)) +* avoid 409 conflict when renaming files differing only by case ([#5729](https://github.com/filebrowser/filebrowser/issues/5729)) ([d441b28](https://github.com/filebrowser/filebrowser/commit/d441b28f432c3448a29ac828400321f1f4ed32d9)) + +## [2.56.0](https://github.com/filebrowser/filebrowser/compare/v2.55.0...v2.56.0) (2026-01-24) + + +### Features + +* Updates for project File Browser ([#5698](https://github.com/filebrowser/filebrowser/issues/5698)) ([f0f2f1f](https://github.com/filebrowser/filebrowser/commit/f0f2f1ff069aae566d8bf25ec275da59f29a96bc)) + + +### Bug Fixes + +* adjust columns of the table from the "users ls" command ([#5716](https://github.com/filebrowser/filebrowser/issues/5716)) ([3032a1f](https://github.com/filebrowser/filebrowser/commit/3032a1fade43737c51c49b5ccda34f336394c2ed)) +* avoid clearing selection when clicking elements outside the empty area ([#5715](https://github.com/filebrowser/filebrowser/issues/5715)) ([004488c](https://github.com/filebrowser/filebrowser/commit/004488c15b3c30784e1ea564b3ca9feec7bcad08)) + +## [2.55.0](https://github.com/filebrowser/filebrowser/compare/v2.54.0...v2.55.0) (2026-01-18) + + +### Features + +* added cut, copy, paste and show command palette functions in header ([#5648](https://github.com/filebrowser/filebrowser/issues/5648)) ([785b7ab](https://github.com/filebrowser/filebrowser/commit/785b7abb7ba7a86cc0deae1052c319ff714c222c)) +* update translations ([#5677](https://github.com/filebrowser/filebrowser/issues/5677)) ([e7ea1ad](https://github.com/filebrowser/filebrowser/commit/e7ea1ad27d3d17e249489d3338be40bfea15e2a1)) + + +### Bug Fixes + +* prevent context menu clicks from clearing file selection ([#5681](https://github.com/filebrowser/filebrowser/issues/5681)) ([59ca0c3](https://github.com/filebrowser/filebrowser/commit/59ca0c340afc7774747c70ede9a5a5a3c9349d6b)) +* request current password when deleting users ([#5667](https://github.com/filebrowser/filebrowser/issues/5667)) ([cfa6c58](https://github.com/filebrowser/filebrowser/commit/cfa6c5864e5e7673aa9f3180e4964e0db92cc4da)) +* retain file selection when closing the editor ([#5693](https://github.com/filebrowser/filebrowser/issues/5693)) ([4094fb3](https://github.com/filebrowser/filebrowser/commit/4094fb359babac70e88d0ed4bfe3bd100744aad6)) + +## [2.54.0](https://github.com/filebrowser/filebrowser/compare/v2.53.1...v2.54.0) (2026-01-10) + + +### Features + +* add "redirect after copy/move" user setting ([#5662](https://github.com/filebrowser/filebrowser/issues/5662)) ([fda8a99](https://github.com/filebrowser/filebrowser/commit/fda8a992929b1466e75fb2813f2c4e293c12d244)) +* force file sync while uploading file ([#5668](https://github.com/filebrowser/filebrowser/issues/5668)) ([4fd18a3](https://github.com/filebrowser/filebrowser/commit/4fd18a382c31bbe7059d6733ffa371e70051865b)) +* update translations ([#5659](https://github.com/filebrowser/filebrowser/issues/5659)) ([464b581](https://github.com/filebrowser/filebrowser/commit/464b581953139c17e3276b774e381e4052827125)) + + +### Bug Fixes + +* clear selection by clicking on empty area ([#5663](https://github.com/filebrowser/filebrowser/issues/5663)) ([208535a](https://github.com/filebrowser/filebrowser/commit/208535a8cc23254de0013dfab9008486707ee6c2)) +* hide "change password form" in noauth setting ([#5652](https://github.com/filebrowser/filebrowser/issues/5652)) ([219582c](https://github.com/filebrowser/filebrowser/commit/219582c0b03fd90979b1d1398dba7919d086a23f)) + +## [2.53.1](https://github.com/filebrowser/filebrowser/compare/v2.53.0...v2.53.1) (2026-01-03) + + +### Bug Fixes + +* download path encoding file paths ([#5655](https://github.com/filebrowser/filebrowser/issues/5655)) ([ffa893e](https://github.com/filebrowser/filebrowser/commit/ffa893e9ac387a49dba5917a41df7c3b7ce120fc)) +* request a password to change sensitive user data ([#5629](https://github.com/filebrowser/filebrowser/issues/5629)) ([b8151a0](https://github.com/filebrowser/filebrowser/commit/b8151a038a1ea55afae8073b439b74e364cac12f)) + +## [2.53.0](https://github.com/filebrowser/filebrowser/compare/v2.52.0...v2.53.0) (2025-12-29) + + +### Features + +* add "disable image resolution calculation" flag ([#5638](https://github.com/filebrowser/filebrowser/issues/5638)) ([a2d80c6](https://github.com/filebrowser/filebrowser/commit/a2d80c62c1c17962e566f68fb7cac6960ed3e4cb)) +* support streaming response for search results ([#5630](https://github.com/filebrowser/filebrowser/issues/5630)) ([20bfd13](https://github.com/filebrowser/filebrowser/commit/20bfd131c6a4fca48a645b52171c2d1cc3ce92b7)) +* update translations ([a12a612](https://github.com/filebrowser/filebrowser/commit/a12a612970d6cc3dfbca1b35ef3a60a887a4effb)) +* update translations ([#5626](https://github.com/filebrowser/filebrowser/issues/5626)) ([f899756](https://github.com/filebrowser/filebrowser/commit/f89975603e29b9f1fc05aec58afb42bbd56ed696)) +* update translations ([#5631](https://github.com/filebrowser/filebrowser/issues/5631)) ([032d6c7](https://github.com/filebrowser/filebrowser/commit/032d6c7520a64686c9d9b1218562256f629b4703)) + + +### Bug Fixes + +* conversion of backslashes in file paths for archive creation ([#5637](https://github.com/filebrowser/filebrowser/issues/5637)) ([9595f39](https://github.com/filebrowser/filebrowser/commit/9595f3939c1c129ed875a47adcc4fbcfad9a0e65)) +* Don't crash on invalid config import ([#5640](https://github.com/filebrowser/filebrowser/issues/5640)) ([79d1aa9](https://github.com/filebrowser/filebrowser/commit/79d1aa9229b076ee8e3b71d6cf061fc90738f4da)) +* fix nil deref in config set command ([#5641](https://github.com/filebrowser/filebrowser/issues/5641)) ([60b1ee8](https://github.com/filebrowser/filebrowser/commit/60b1ee8bb9e18b21d7f2c04cb1cc90046cecd3e1)) + +## [2.52.0](https://github.com/filebrowser/filebrowser/compare/v2.51.2...v2.52.0) (2025-12-13) + + +### Features + +* sync translations with Transifex ([7fa3432](https://github.com/filebrowser/filebrowser/commit/7fa3432f25610bbb55a718bc709b9a7bf41d92f0)) +* update translations ([#5615](https://github.com/filebrowser/filebrowser/issues/5615)) ([3fdca6d](https://github.com/filebrowser/filebrowser/commit/3fdca6dfd9a18c3f4895b4ef3cbd216824dbb57a)) + + +### Bug Fixes + +* display the directory name in the shared folder view ([#5617](https://github.com/filebrowser/filebrowser/issues/5617)) ([6d4c867](https://github.com/filebrowser/filebrowser/commit/6d4c86767239dad4f09f30f48678f2f3a716eb12)) +* hide the context menu when changing the route ([#5613](https://github.com/filebrowser/filebrowser/issues/5613)) ([cf96657](https://github.com/filebrowser/filebrowser/commit/cf966578d8c6beab111b74f495bac6bdec173f41)) + +## [2.51.2](https://github.com/filebrowser/filebrowser/compare/v2.51.1...v2.51.2) (2025-12-07) + + +### Bug Fixes + +* **frontend:** add missing i18n strings ([c171599](https://github.com/filebrowser/filebrowser/commit/c1715992bda46517f801c1aa496df8a3b42a4e4d)) + +## [2.51.1](https://github.com/filebrowser/filebrowser/compare/v2.51.0...v2.51.1) (2025-12-07) + + +### Bug Fixes + +* **frontend:** csv viewer i18n strings ([4cbb4b7](https://github.com/filebrowser/filebrowser/commit/4cbb4b73af816104475f15c1d996640b56203602)) +* prevent the right-click from selecting multiple items when the "single-click" option is active ([#5608](https://github.com/filebrowser/filebrowser/issues/5608)) ([152f830](https://github.com/filebrowser/filebrowser/commit/152f8302f7cda21bde37692b175c22c124233f45)) + +## [2.51.0](https://github.com/filebrowser/filebrowser/compare/v2.50.0...v2.51.0) (2025-12-06) + + +### Features + +* update translations ([2d88c06](https://github.com/filebrowser/filebrowser/commit/2d88c067611e936056dbbf04247f1c1c709b2a09)) + + +### Bug Fixes + +* added column separator select (comma, semicolon and both) in CSV viewer ([#5604](https://github.com/filebrowser/filebrowser/issues/5604)) ([204a3f0](https://github.com/filebrowser/filebrowser/commit/204a3f0eeaa0c68781b60651bf27c4b27eac44e6)) + + +### Refactorings + +* cleanup package names ([#5605](https://github.com/filebrowser/filebrowser/issues/5605)) ([f029c30](https://github.com/filebrowser/filebrowser/commit/f029c3005e450cfbebb074c42dbdf65db9c8d56a)) + +## [2.50.0](https://github.com/filebrowser/filebrowser/compare/v2.49.0...v2.50.0) (2025-11-30) + + +### Features + +* configurable logout page URL for proxy/hook auth ([#3884](https://github.com/filebrowser/filebrowser/issues/3884)) ([b9ac45d](https://github.com/filebrowser/filebrowser/commit/b9ac45d5dac4b4eb2ba364629090fbf306cffd2b)) +* render CSVs as table ([#5569](https://github.com/filebrowser/filebrowser/issues/5569)) ([982405e](https://github.com/filebrowser/filebrowser/commit/982405ec944f94baf43594b0ed2f06329ff4e9ed)) +* update frontend/src/i18n/hr.json ([279a5cc](https://github.com/filebrowser/filebrowser/commit/279a5ccd1e8d7bde4568b63cb3c506af48b6c618)) +* update translations ([78e0395](https://github.com/filebrowser/filebrowser/commit/78e039596070a3a9e643a693cc99960c69dcfe92)) + + +### Bug Fixes + +* do not close editor if save failed ([701522a](https://github.com/filebrowser/filebrowser/commit/701522a0600cfa542469540ed764630c0ba1a732)), closes [#5591](https://github.com/filebrowser/filebrowser/issues/5591) + +## [2.49.0](https://github.com/filebrowser/filebrowser/compare/v2.48.2...v2.49.0) (2025-11-22) + + +### Features + +* add "copy download link to clipboard" button to Share prompt ([#5173](https://github.com/filebrowser/filebrowser/issues/5173)) ([d48f566](https://github.com/filebrowser/filebrowser/commit/d48f5665d6975c4cbbdf9be20dc2e0106db02f01)) +* add Bulgarian language ([8db2411](https://github.com/filebrowser/filebrowser/commit/8db2411cd43a23ae3292a817e3524cfdb5ae9b86)) +* Updates for project File Browser ([#5566](https://github.com/filebrowser/filebrowser/issues/5566)) ([54306bd](https://github.com/filebrowser/filebrowser/commit/54306bdc8700fac489326ae81e28ac5db0580d13)) + + +### Bug Fixes + +* display friendly error message for password validation on signup ([#5563](https://github.com/filebrowser/filebrowser/issues/5563)) ([6d5aa35](https://github.com/filebrowser/filebrowser/commit/6d5aa355e433d613e5a3ae137f410c63baeddf0f)) + +## [2.48.2](https://github.com/filebrowser/filebrowser/compare/v2.48.1...v2.48.2) (2025-11-18) + + +### Bug Fixes + +* add transitionary support for FB_BASEURL ([984ea7b](https://github.com/filebrowser/filebrowser/commit/984ea7b569e3bd33b6f91ebdf63684a618d51e94)) + + +### Refactorings + +* rename python for clarification ([fd7b70c](https://github.com/filebrowser/filebrowser/commit/fd7b70cf38ac67c8c9ff79f2e7fde5e2ec45a1de)) + +## [2.48.1](https://github.com/filebrowser/filebrowser/compare/v2.48.0...v2.48.1) (2025-11-17) + + +### Bug Fixes + +* options should only override if set ([420adea](https://github.com/filebrowser/filebrowser/commit/420adea7e61a1c182cddd6fb2544a0752e5709f7)) + +## [2.48.0](https://github.com/filebrowser/filebrowser/compare/v2.47.0...v2.48.0) (2025-11-17) + + +### Features + +* consistent flags and environment variables ([#5549](https://github.com/filebrowser/filebrowser/issues/5549)) ([0a0cb80](https://github.com/filebrowser/filebrowser/commit/0a0cb8046fce52f1ff926171b34bcdb7cd39aab3)) + + +### Bug Fixes + +* add tokenExpirationTime to `config init` and troubleshoot docs ([#5546](https://github.com/filebrowser/filebrowser/issues/5546)) ([8c5dc76](https://github.com/filebrowser/filebrowser/commit/8c5dc7641e6f8aadd9e5d5d3b25a2ad9f1ec9a1e)) +* use all available flags in quick setup ([f41585f](https://github.com/filebrowser/filebrowser/commit/f41585f0392d65c08c01ab65b62d3eeb04c03b7d)) + + +### Refactorings + +* reuse logic for config init and set ([89be0b1](https://github.com/filebrowser/filebrowser/commit/89be0b1873527987dd2dddac746e93b8bc684d46)) + +## [2.47.0](https://github.com/filebrowser/filebrowser/compare/v2.46.1...v2.47.0) (2025-11-16) + + +### Features + +* add TUS settings to the command line ([#5556](https://github.com/filebrowser/filebrowser/issues/5556)) ([e24e1f1](https://github.com/filebrowser/filebrowser/commit/e24e1f1abae9e80add620c4ad65660ca1b575a49)) +* remove importer of v1 config ([#5550](https://github.com/filebrowser/filebrowser/issues/5550)) ([ceb5e72](https://github.com/filebrowser/filebrowser/commit/ceb5e723f3ee2c966bb561a804015246450280ca)) + + +### Bug Fixes + +* exit 0 when gracefully shutting down ([#5555](https://github.com/filebrowser/filebrowser/issues/5555)) ([5de4099](https://github.com/filebrowser/filebrowser/commit/5de4099cba2cf012d4a213c8eb29c412fc72c151)) + +## [2.46.1](https://github.com/filebrowser/filebrowser/compare/v2.46.0...v2.46.1) (2025-11-15) + + +### Bug Fixes + +* env key replacer and remove unused function ([#5547](https://github.com/filebrowser/filebrowser/issues/5547)) ([13814e1](https://github.com/filebrowser/filebrowser/commit/13814e11197ebd9101940883e3ca85998f86d442)) +* remove duplicated 'hide-defaults' flag (is 'hideDefaults') ([#5548](https://github.com/filebrowser/filebrowser/issues/5548)) ([ffc8504](https://github.com/filebrowser/filebrowser/commit/ffc850454e4cb8f10b970511681d6c627340afc7)) + +## [2.46.0](https://github.com/filebrowser/filebrowser/compare/v2.45.3...v2.46.0) (2025-11-14) + + +### Features + +* add 'hide-dotfiles' as command line parameter ([#3802](https://github.com/filebrowser/filebrowser/issues/3802)) ([0d973d3](https://github.com/filebrowser/filebrowser/commit/0d973d3aad70ceb88950f2cd9c297fc76e7955b1)) +* add context menu ([#3343](https://github.com/filebrowser/filebrowser/issues/3343)) ([1ace579](https://github.com/filebrowser/filebrowser/commit/1ace579a553486bb15af2d11f537414156606434)) +* add option to hide the login button from public-facing pages ([#3922](https://github.com/filebrowser/filebrowser/issues/3922)) ([ac7b49c](https://github.com/filebrowser/filebrowser/commit/ac7b49c1484b4e27a1149310542ccd1e90659ee2)) +* Updates for project File Browser ([#5544](https://github.com/filebrowser/filebrowser/issues/5544)) ([fb5d099](https://github.com/filebrowser/filebrowser/commit/fb5d099f8514516216f407be012d2e3f25de2441)) + +## [2.45.3](https://github.com/filebrowser/filebrowser/compare/v2.45.2...v2.45.3) (2025-11-13) + +This is a test release to ensure the updated workflow works. + +## [2.45.2](https://github.com/filebrowser/filebrowser/compare/v2.45.1...v2.45.2) (2025-11-13) + + +### Bug Fixes + +* **deps:** update module github.com/shirou/gopsutil/v3 to v4 ([#5536](https://github.com/filebrowser/filebrowser/issues/5536)) ([fdff7a3](https://github.com/filebrowser/filebrowser/commit/fdff7a38f4711f2b58dfdd60bebbb057bd3a478d)) +* **deps:** update module gopkg.in/yaml.v2 to v3 ([#5537](https://github.com/filebrowser/filebrowser/issues/5537)) ([f26a685](https://github.com/filebrowser/filebrowser/commit/f26a68587d8432b536453093f42dc255d19d10fa)) + +### [2.45.1](https://github.com/filebrowser/filebrowser/compare/v2.45.0...v2.45.1) (2025-11-11) + + +### Bug Fixes + +* share page preview items to contain baseUrl ([#5510](https://github.com/filebrowser/filebrowser/issues/5510)) ([6950c2e](https://github.com/filebrowser/filebrowser/commit/6950c2e4d2868f06235f93c0a18b303b4095ca0a)) + +## [2.45.0](https://github.com/filebrowser/filebrowser/compare/v2.44.2...v2.45.0) (2025-11-01) + + +### Features + +* update translations ([#5458](https://github.com/filebrowser/filebrowser/issues/5458)) ([b9a03fa](https://github.com/filebrowser/filebrowser/commit/b9a03fabd98119d6588882f5ba2a7d29b012d729)) + + +### Bug Fixes + +* support croatian ([#5502](https://github.com/filebrowser/filebrowser/issues/5502)) ([93fe31c](https://github.com/filebrowser/filebrowser/commit/93fe31cc55c9d9d27c634993619a768fa700da1d)) + +### [2.44.2](https://github.com/filebrowser/filebrowser/compare/v2.44.1...v2.44.2) (2025-10-22) + + +### Bug Fixes + +* **http:** remove auth query parameter ([57db25d](https://github.com/filebrowser/filebrowser/commit/57db25d08a1ef2cd0b41f34e312b7b7c35c7ed38)) + + +### Build + +* **deps-dev:** bump vite from 6.3.6 to 6.4.1 in /frontend ([b8f64a1](https://github.com/filebrowser/filebrowser/commit/b8f64a1c1bc235df784d7f52abd3a9e84c6db6ce)) + +### [2.44.1](https://github.com/filebrowser/filebrowser/compare/v2.44.0...v2.44.1) (2025-10-17) + + +### Bug Fixes + +* **auth:** prevent integer overflow in logout timer using safeTimeout ([#5470](https://github.com/filebrowser/filebrowser/issues/5470)) ([dd88398](https://github.com/filebrowser/filebrowser/commit/dd883985bb484af9dfea2677a40d56999fdc72f3)) +* editor discard prompt doesn't save nor discard ([a397e73](https://github.com/filebrowser/filebrowser/commit/a397e7305d1572baf67823413f97a29eea38f0cc)) +* wrong url on settings branding link ([d0039af](https://github.com/filebrowser/filebrowser/commit/d0039afbb76a9364c1e6ac9715ccc3c239dc8cb6)) + + +### Refactorings + +* use slices.Contains to simplify code ([#5483](https://github.com/filebrowser/filebrowser/issues/5483)) ([97b8911](https://github.com/filebrowser/filebrowser/commit/97b8911ba8a65456091cbec0202f6b5209fcf363)) + +## [2.44.0](https://github.com/filebrowser/filebrowser/compare/v2.43.0...v2.44.0) (2025-09-25) + + +### Features + +* allow setting ace editor theme ([#3826](https://github.com/filebrowser/filebrowser/issues/3826)) ([b9787c7](https://github.com/filebrowser/filebrowser/commit/b9787c78f3889171f94db19e7655dce68c64b6fb)) +* Improved path display in the new file and directory modal ([#5451](https://github.com/filebrowser/filebrowser/issues/5451)) ([d29ad35](https://github.com/filebrowser/filebrowser/commit/d29ad356d1067c87b2821debab91286549f512a0)) +* Translate frontend/src/i18n/en.json in no ([dec7a02](https://github.com/filebrowser/filebrowser/commit/dec7a027378fbc6948d203199c44a640a141bcad)) +* Updates for project File Browser ([#5446](https://github.com/filebrowser/filebrowser/issues/5446)) ([4ff247e](https://github.com/filebrowser/filebrowser/commit/4ff247e134e4d61668ee656a258ed67f71414e18)) +* Updates for project File Browser ([#5450](https://github.com/filebrowser/filebrowser/issues/5450)) ([0eade71](https://github.com/filebrowser/filebrowser/commit/0eade717ce9d04bf48051922f11d983edbc7c2d0)) +* Updates for project File Browser ([#5457](https://github.com/filebrowser/filebrowser/issues/5457)) ([1165f00](https://github.com/filebrowser/filebrowser/commit/1165f00bd4dcb0dcfbc084f54f51902ba4b4a714)) + + +### Bug Fixes + +* computation of file path ([c472542](https://github.com/filebrowser/filebrowser/commit/c4725428e07da72b855009e2c13c6ed91d32e0b7)) +* show login when session token expires ([e6c674b](https://github.com/filebrowser/filebrowser/commit/e6c674b3c616831942c4d4aacab0907d58003e23)) +* some formatting issues with i18n files ([949ddff](https://github.com/filebrowser/filebrowser/commit/949ddffef20e38169902c5fd74dca4815dcecf11)) +* **upload:** throttle upload speed calculation to 100ms to avoid Infinity MB/s ([#5456](https://github.com/filebrowser/filebrowser/issues/5456)) ([692ca5e](https://github.com/filebrowser/filebrowser/commit/692ca5eaf01e4dcf346ba03f82c5dbd50cce246b)) + +## [2.43.0](https://github.com/filebrowser/filebrowser/compare/v2.42.5...v2.43.0) (2025-09-13) + + +### Features + +* "save changes" button to discard changes dialog ([84e8632](https://github.com/filebrowser/filebrowser/commit/84e8632b98e315bfef2da77dd7d1049daec99241)) +* Translate frontend/src/i18n/en.json in es ([571ce6c](https://github.com/filebrowser/filebrowser/commit/571ce6cb0d7c8725d1cc1a3238ea506ddc72b060)) +* Translate frontend/src/i18n/en.json in fr ([6b1fa87](https://github.com/filebrowser/filebrowser/commit/6b1fa87ad38ebbb1a9c5d0e5fc88ba796c148bcf)) +* Updates for project File Browser ([#5427](https://github.com/filebrowser/filebrowser/issues/5427)) ([8950585](https://github.com/filebrowser/filebrowser/commit/89505851414bfcee6b9ff02087eb4cec51c330f6)) + + +### Bug Fixes + +* optimize markdown preview height ([783503a](https://github.com/filebrowser/filebrowser/commit/783503aece7fca9e26f7e849b0e7478aba976acb)) + + +### Reverts + +* build(deps): bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 ([0769265](https://github.com/filebrowser/filebrowser/commit/07692653ffe0ea5e517e6dc1fd3961172e931843)) + + +### Build + +* **deps-dev:** bump vite from 6.1.6 to 6.3.6 in /frontend ([36c6cc2](https://github.com/filebrowser/filebrowser/commit/36c6cc203e10947439519a0413d5817921a1690d)) +* **deps:** bump github.com/go-viper/mapstructure/v2 in /tools ([280fa56](https://github.com/filebrowser/filebrowser/commit/280fa562a67824887ae6e2530a3b73739d6e1bb4)) +* **deps:** bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 ([950028a](https://github.com/filebrowser/filebrowser/commit/950028abebe2898bac4ecfd8715c0967246310cb)) + + +### Refactorings + +* to use strings.Lines ([b482a9b](https://github.com/filebrowser/filebrowser/commit/b482a9bf0d292ec6542d2145a4408971e4c985f1)) + +## [2.43.0](https://github.com/filebrowser/filebrowser/compare/v2.42.5...v2.43.0) (2025-09-13) + + +### Features + +* "save changes" button to discard changes dialog ([84e8632](https://github.com/filebrowser/filebrowser/commit/84e8632b98e315bfef2da77dd7d1049daec99241)) +* Translate frontend/src/i18n/en.json in es ([571ce6c](https://github.com/filebrowser/filebrowser/commit/571ce6cb0d7c8725d1cc1a3238ea506ddc72b060)) +* Translate frontend/src/i18n/en.json in fr ([6b1fa87](https://github.com/filebrowser/filebrowser/commit/6b1fa87ad38ebbb1a9c5d0e5fc88ba796c148bcf)) +* Updates for project File Browser ([#5427](https://github.com/filebrowser/filebrowser/issues/5427)) ([8950585](https://github.com/filebrowser/filebrowser/commit/89505851414bfcee6b9ff02087eb4cec51c330f6)) + + +### Bug Fixes + +* optimize markdown preview height ([783503a](https://github.com/filebrowser/filebrowser/commit/783503aece7fca9e26f7e849b0e7478aba976acb)) + + +### Build + +* **deps-dev:** bump vite from 6.1.6 to 6.3.6 in /frontend ([36c6cc2](https://github.com/filebrowser/filebrowser/commit/36c6cc203e10947439519a0413d5817921a1690d)) +* **deps:** bump github.com/go-viper/mapstructure/v2 in /tools ([280fa56](https://github.com/filebrowser/filebrowser/commit/280fa562a67824887ae6e2530a3b73739d6e1bb4)) +* **deps:** bump github.com/ulikunitz/xz from 0.5.12 to 0.5.14 ([950028a](https://github.com/filebrowser/filebrowser/commit/950028abebe2898bac4ecfd8715c0967246310cb)) + + +### Refactorings + +* to use strings.Lines ([b482a9b](https://github.com/filebrowser/filebrowser/commit/b482a9bf0d292ec6542d2145a4408971e4c985f1)) + +### [2.42.5](https://github.com/filebrowser/filebrowser/compare/v2.42.4...v2.42.5) (2025-08-16) + + +### Bug Fixes + +* "new folder" button not working in the move and copy popup ([#5368](https://github.com/filebrowser/filebrowser/issues/5368)) ([3107ae4](https://github.com/filebrowser/filebrowser/commit/3107ae41475ae9383c3af414d25a133e549f8087)) + +### [2.42.4](https://github.com/filebrowser/filebrowser/compare/v2.42.3...v2.42.4) (2025-08-16) + + +### Bug Fixes + +* add libcap to Dockerfile.s6 ([342b239](https://github.com/filebrowser/filebrowser/commit/342b239ac6f4af2453d5f7aa27f7f0093024dd72)) + +### [2.42.3](https://github.com/filebrowser/filebrowser/compare/v2.42.2...v2.42.3) (2025-08-09) + + +### Bug Fixes + +* add missing CLI flags for user management ([#5351](https://github.com/filebrowser/filebrowser/issues/5351)) ([cd51a59](https://github.com/filebrowser/filebrowser/commit/cd51a59e72c72560fce7bcc9b12aaf02646b699c)) + +### [2.42.2](https://github.com/filebrowser/filebrowser/compare/v2.42.1...v2.42.2) (2025-08-06) + + +### Bug Fixes + +* show file upload errors ([06e8713](https://github.com/filebrowser/filebrowser/commit/06e8713fa55065d38f02499d3e8d39fc86926cab)) + + +### Refactorings + +* upload progress calculation ([#5350](https://github.com/filebrowser/filebrowser/issues/5350)) ([c14cf86](https://github.com/filebrowser/filebrowser/commit/c14cf86f8304e01d804e01a7eef5ea093627ef37)) + +### [2.42.1](https://github.com/filebrowser/filebrowser/compare/v2.42.0...v2.42.1) (2025-07-31) + + +### Features + +* Translate frontend/src/i18n/en.json in sk ([14ee054](https://github.com/filebrowser/filebrowser/commit/14ee0543599f2ec73b7f5d2dbd8415f47fe592aa)) +* Translate frontend/src/i18n/en.json in vi ([75baf7c](https://github.com/filebrowser/filebrowser/commit/75baf7ce337671a1045f897ba4a19967a31b1aec)) + + +### Bug Fixes + +* directory mode on config init ([4ff6347](https://github.com/filebrowser/filebrowser/commit/4ff634715543b65878943273dff70f340167900b)) + +## [2.42.0](https://github.com/filebrowser/filebrowser/compare/v2.41.0...v2.42.0) (2025-07-27) + + +### Features + +* add Norwegian support ([#5332](https://github.com/filebrowser/filebrowser/issues/5332)) ([25e47c3](https://github.com/filebrowser/filebrowser/commit/25e47c3ce8b35b820b5370a4b8bfdf682bd5ae0b)) +* select item on file list after navigating back ([#5329](https://github.com/filebrowser/filebrowser/issues/5329)) ([cbeec6d](https://github.com/filebrowser/filebrowser/commit/cbeec6d225691723c4750d7f84122ebb14d662bf)) +* Translate frontend/src/i18n/en.json in no ([5eb3bf4](https://github.com/filebrowser/filebrowser/commit/5eb3bf40586c2ffc32f4834b5dd59f0eb719c1f7)) +* Translate frontend/src/i18n/en.json in sk ([07dfdce](https://github.com/filebrowser/filebrowser/commit/07dfdce8e4c371f4ca7480f3cef0bd66ff5c9abb)) + + +### Bug Fixes + +* norsk loading ([619f683](https://github.com/filebrowser/filebrowser/commit/619f6837b0d1ec6c654d30f4ecedd6696874721f)) + + +### Reverts + +* Revert "chore(release): 2.42.0" ([d778c19](https://github.com/filebrowser/filebrowser/commit/d778c192ae02c5e73781f7632e3b7276c5811e17)) + + +### Build + +* bump go version to 1.23.11 ([c7a5c7e](https://github.com/filebrowser/filebrowser/commit/c7a5c7efee2b2bede89ec90bafd1af61c39519ff)) +* bump to go 1.24 ([c1b0207](https://github.com/filebrowser/filebrowser/commit/c1b0207800b4bb52c8dd459c1d69ce0f785473b6)) + +## [2.41.0](https://github.com/filebrowser/filebrowser/compare/v2.40.2...v2.41.0) (2025-07-22) + + +### Features + +* Allow file and directory creation modes to be configured ([21ad653](https://github.com/filebrowser/filebrowser/commit/21ad653b7eb246c0e95ccdc131f8d59267de7818)), closes [#5316](https://github.com/filebrowser/filebrowser/issues/5316) [#5200](https://github.com/filebrowser/filebrowser/issues/5200) +* better error handling for sys kill signals ([1582b8b](https://github.com/filebrowser/filebrowser/commit/1582b8b2cd1c62fa93e60ca9b4e740e940b02e84)) + +### [2.40.2](https://github.com/filebrowser/filebrowser/compare/v2.40.1...v2.40.2) (2025-07-17) + + +### Bug Fixes + +* Location header on TUS endpoint ([#5302](https://github.com/filebrowser/filebrowser/issues/5302)) ([607f570](https://github.com/filebrowser/filebrowser/commit/607f5708a2484428ab837781a5ef26b8cc3194f4)) + + +### Build + +* **deps:** bump vue-i18n from 11.1.9 to 11.1.10 in /frontend ([d61110e](https://github.com/filebrowser/filebrowser/commit/d61110e4d7155a5849557adf3b75dc0191f17e80)) + +### [2.40.1](https://github.com/filebrowser/filebrowser/compare/v2.40.0...v2.40.1) (2025-07-15) + + +### Bug Fixes + +* print correct user on setup ([88f1442](https://github.com/filebrowser/filebrowser/commit/88f144293267260fd4d823e3259783309b1a57b3)) + +## [2.40.0](https://github.com/filebrowser/filebrowser/compare/v2.39.0...v2.40.0) (2025-07-13) + + +### Features + +* add font size botton to text editor ([#5290](https://github.com/filebrowser/filebrowser/issues/5290)) ([035084d](https://github.com/filebrowser/filebrowser/commit/035084d8e83243065fad69bfac1b69559fbad5fb)) + + +### Bug Fixes + +* invalid path when uploading files ([9072cbc](https://github.com/filebrowser/filebrowser/commit/9072cbce340da55477906f5419a4cfb6d6937dc0)) +* Only left click should drag the image in extended image view ([b8454bb](https://github.com/filebrowser/filebrowser/commit/b8454bb2e41ca2848b926b66354468ba4b1c7ba5)) + +## [2.39.0](https://github.com/filebrowser/filebrowser/compare/v2.38.0...v2.39.0) (2025-07-13) + + +### Features + +* Improve Docker entrypoint and config handling ([01c814c](https://github.com/filebrowser/filebrowser/commit/01c814cf98f81f2bcd622aea75e5b1efe3484940)) +* rewrite the archiver and added support for zstd and brotli ([#5283](https://github.com/filebrowser/filebrowser/issues/5283)) ([7c71686](https://github.com/filebrowser/filebrowser/commit/7c716862c1bd3cdedd3c02d3a37207293db197ca)) + + +### Bug Fixes + +* drop modify permission for uploading new file ([#5270](https://github.com/filebrowser/filebrowser/issues/5270)) ([0f27c91](https://github.com/filebrowser/filebrowser/commit/0f27c91eca581482ce4f82f6429f5dac12f8b64e)) +* Settings button in the sidebar ([5a8e717](https://github.com/filebrowser/filebrowser/commit/5a8e7171b1b41eff771fe27133c91d2c250896a8)) + + +### Build + +* improve docker image and binary sizes ([35ca24a](https://github.com/filebrowser/filebrowser/commit/35ca24adb886721fc9d5e1a68cfc577e2c5f0230)) +* lightweight busybox-based container build ([#5285](https://github.com/filebrowser/filebrowser/issues/5285)) ([5c5942d](https://github.com/filebrowser/filebrowser/commit/5c5942d99514b433e09d90624bbe58992eab6be2)) +* remove upx ([1a5c83b](https://github.com/filebrowser/filebrowser/commit/1a5c83bcfe847f1e41a44cef23fd795b19b6b434)) + +## [2.38.0](https://github.com/filebrowser/filebrowser/compare/v2.37.0...v2.38.0) (2025-07-12) + + +### Features + +* Show the current users name in the sidebar ([#2821](https://github.com/filebrowser/filebrowser/issues/2821)) ([528ce92](https://github.com/filebrowser/filebrowser/commit/528ce92fad6dcc8e8b7910036bf9175146e27bf7)) +* Updates for project File Browser ([b4eddf4](https://github.com/filebrowser/filebrowser/commit/b4eddf45e4d7e6f6ccf242e67fe20f89f5e2f9a9)) + + +### Bug Fixes + +* prevent page change if there are outstanding edits ([#5260](https://github.com/filebrowser/filebrowser/issues/5260)) ([fbe169b](https://github.com/filebrowser/filebrowser/commit/fbe169b84f28cba22ea87f01b52f2420f1ea6814)) + +## [2.37.0](https://github.com/filebrowser/filebrowser/compare/v2.36.3...v2.37.0) (2025-07-08) + + +### Features + +* Translate frontend/src/i18n/en.json in zh_CN ([65bbf44](https://github.com/filebrowser/filebrowser/commit/65bbf44e3c0bff83e64193d46e9d6ad302952276)) +* Translate frontend/src/i18n/en.json in zh_TW ([b28952c](https://github.com/filebrowser/filebrowser/commit/b28952cb2582bd4eb44e91d0676e2803c458cf31)) +* Translate frontend/src/i18n/en.json in zh_TW ([1e96fd9](https://github.com/filebrowser/filebrowser/commit/1e96fd9035d5185dc80970a2826ccb573b5f000e)) + + +### Bug Fixes + +* long file name overlap ([fcb248a](https://github.com/filebrowser/filebrowser/commit/fcb248a5feb7b7404ca5923aae17f6d3f8d3cc96)) +* preview PDF is correctly displayed ([bf73e4d](https://github.com/filebrowser/filebrowser/commit/bf73e4dea3b27c01c8f6e60fb2048e1a2122a70e)) +* Upload progress size calculation ([e423395](https://github.com/filebrowser/filebrowser/commit/e423395ef0bcd106ddc7d460c055b95b5208415e)) + +### [2.36.3](https://github.com/filebrowser/filebrowser/compare/v2.36.2...v2.36.3) (2025-07-06) + + +### Bug Fixes + +* log error if branding file exists but cannot be loaded ([3645b57](https://github.com/filebrowser/filebrowser/commit/3645b578cddb9fc8f25a00e0153fb600ad1b9266)) + +### [2.36.2](https://github.com/filebrowser/filebrowser/compare/v2.36.1...v2.36.2) (2025-07-06) + + +### Bug Fixes + +* lookup directory name if blank when downloading shared directory ([046d619](https://github.com/filebrowser/filebrowser/commit/046d6193c57b4df0e3dc583b6518b43d29d302c9)) + +### [2.36.1](https://github.com/filebrowser/filebrowser/compare/v2.36.0...v2.36.1) (2025-07-03) + + +### Bug Fixes + +* remove associated shares when deleting file/folder ([e99e0b3](https://github.com/filebrowser/filebrowser/commit/e99e0b3028e1c8a50e1744bb07ecc8e809bdb8e6)) + +## [2.36.0](https://github.com/filebrowser/filebrowser/compare/v2.35.0...v2.36.0) (2025-07-02) + + +### Features + +* update icons, remove deprecated Microsoft Tiles ([04166e8](https://github.com/filebrowser/filebrowser/commit/04166e81e52d38b1f66ba3313ccb1291c239eea2)) + +## [2.35.0](https://github.com/filebrowser/filebrowser/compare/v2.34.2...v2.35.0) (2025-06-30) + + +### Features + +* Long press selects item in single click mode ([8d75220](https://github.com/filebrowser/filebrowser/commit/8d7522049ced83f28f0933b55772c32e3ad04627)) + + +### Bug Fixes + +* shell value must be joined by blank space ([4403cd3](https://github.com/filebrowser/filebrowser/commit/4403cd35720dbda5a8bb1013b92582accf3317bc)) +* update documentation links ([38d0366](https://github.com/filebrowser/filebrowser/commit/38d0366acf88352b5a9a97c45837b0f865efae0b)) + +### [2.34.2](https://github.com/filebrowser/filebrowser/compare/v2.34.1...v2.34.2) (2025-06-29) + + +### Bug Fixes + +* mitigate unprotected shares ([2b5d6cb](https://github.com/filebrowser/filebrowser/commit/2b5d6cbb996a61a769acc56af0acc12eec2d8d8f)) + +### [2.34.1](https://github.com/filebrowser/filebrowser/compare/v2.34.0...v2.34.1) (2025-06-29) + + +### Bug Fixes + +* exclude to-be-moved folder from move dialog ([#5235](https://github.com/filebrowser/filebrowser/issues/5235)) ([7354eb6](https://github.com/filebrowser/filebrowser/commit/7354eb6cf966244141277c2808988855c004f908)) +* passthrough the minimum password length ([#5236](https://github.com/filebrowser/filebrowser/issues/5236)) ([bf37f88](https://github.com/filebrowser/filebrowser/commit/bf37f88c32222ad9c186482bb97338a9c9b4a93c)) + +## [2.34.0](https://github.com/filebrowser/filebrowser/compare/v2.33.10...v2.34.0) (2025-06-29) + + +### Features + +* Translate frontend/src/i18n/en.json in fa ([0acd69c](https://github.com/filebrowser/filebrowser/commit/0acd69c537ce2909ff62c4bb6980982524ece221)) +* Translate frontend/src/i18n/en.json in fa ([#5233](https://github.com/filebrowser/filebrowser/issues/5233)) ([09f679f](https://github.com/filebrowser/filebrowser/commit/09f679fae43398f5b87d21acc9d974d4d053392f)) +* update translations for project File Browser ([#5226](https://github.com/filebrowser/filebrowser/issues/5226)) ([a5ea2a2](https://github.com/filebrowser/filebrowser/commit/a5ea2a266bef619d1c4322266d1aa7d397d2c856)) + + +### Bug Fixes + +* abort ongoing requests when changing pages ([#3927](https://github.com/filebrowser/filebrowser/issues/3927)) ([93c4b2e](https://github.com/filebrowser/filebrowser/commit/93c4b2e03c5176da01a7e00a03c03ffcce279bc8)) +* add configurable minimum password length ([#5225](https://github.com/filebrowser/filebrowser/issues/5225)) ([464b644](https://github.com/filebrowser/filebrowser/commit/464b644adf22a2178414a6f1e4fa286276de81d2)) +* do not expose the name of the root directory ([#5224](https://github.com/filebrowser/filebrowser/issues/5224)) ([0892559](https://github.com/filebrowser/filebrowser/commit/089255997a653c284cd4249990b58bed00086c61)) +* Graceful shutdown ([8230eb7](https://github.com/filebrowser/filebrowser/commit/8230eb7ab51ccbd00b03f5b9d6964fa4aae331d4)) + + +### Reverts + +* Revert "docs: change cloudflare environment (#5231)" (#5232) ([9e273cd](https://github.com/filebrowser/filebrowser/commit/9e273cd9475d57b9500034e8b341ff8b620bcab8)), closes [#5231](https://github.com/filebrowser/filebrowser/issues/5231) [#5232](https://github.com/filebrowser/filebrowser/issues/5232) + + +### Build + +* add an arm64 target for the site image ([#5229](https://github.com/filebrowser/filebrowser/issues/5229)) ([f5e531c](https://github.com/filebrowser/filebrowser/commit/f5e531c8ae0b9b18717e184856ace0ce19beef82)) +* bump golangci-lint to 2.1.6 ([1d494ff](https://github.com/filebrowser/filebrowser/commit/1d494ff3159ef939cfb4980ccde6f27df3e738b5)) +* **deps:** bump brace-expansion from 1.1.11 to 1.1.12 in /tools ([#5228](https://github.com/filebrowser/filebrowser/issues/5228)) ([5a07291](https://github.com/filebrowser/filebrowser/commit/5a072913062a6b2b0e5c74a02ca7710218ed3e5e)) +* **deps:** bump github.com/go-viper/mapstructure/v2 ([f32f273](https://github.com/filebrowser/filebrowser/commit/f32f27383d1fafa074f038cc873bd37b7f20ee27)) +* **deps:** bump github.com/go-viper/mapstructure/v2 in /tools ([5331969](https://github.com/filebrowser/filebrowser/commit/5331969163f5ae1fd2389f665059fc9e4a98db15)) +* publish docs to cloudflare pages ([#5230](https://github.com/filebrowser/filebrowser/issues/5230)) ([8861933](https://github.com/filebrowser/filebrowser/commit/8861933cf845b104e072f35e5f37d7c26097c9dc)) + +### [2.33.10](https://github.com/filebrowser/filebrowser/compare/v2.33.9...v2.33.10) (2025-06-26) + + +### Bug Fixes + +* correctly check if command is allowed when using shell ([4d830f7](https://github.com/filebrowser/filebrowser/commit/4d830f707fc4314741fd431e70c2ce50cd5a3108)) +* correctly split shell ([f84a6db](https://github.com/filebrowser/filebrowser/commit/f84a6db680b6df1c7c8f06f1816f7e4c9e963668)) +* ignore linting error ([e735491](https://github.com/filebrowser/filebrowser/commit/e735491c57b12c3b19dd2e4b570723df78f4eb44)) + +### [2.33.9](https://github.com/filebrowser/filebrowser/compare/v2.33.8...v2.33.9) (2025-06-26) + + +### Bug Fixes + +* check exact match on command allow list ([e2e1e49](https://github.com/filebrowser/filebrowser/commit/e2e1e4913085cca8917e0f69171dc28d3c6af1b6)) +* remove auth token from /api/command ([d5b39a1](https://github.com/filebrowser/filebrowser/commit/d5b39a14fd3fc0d1c364116b41289484df7c27b2)) +* remove unused import ([c232d41](https://github.com/filebrowser/filebrowser/commit/c232d41f903d3026ec290bbe819b6c59a933048e)) + +### [2.33.8](https://github.com/filebrowser/filebrowser/compare/v2.33.7...v2.33.8) (2025-06-25) + +### [2.33.7](https://github.com/filebrowser/filebrowser/compare/v2.33.6...v2.33.7) (2025-06-25) + + +### Bug Fixes + +* correctly parse negative boolean flags ([221451a](https://github.com/filebrowser/filebrowser/commit/221451a5179c8f139819a315b80d0ecb0e7220c3)) +* linting issues ([4bfbf33](https://github.com/filebrowser/filebrowser/commit/4bfbf332499fc8aea5f6df6aae1efa0de918d1ae)) +* linting issues ([e74c958](https://github.com/filebrowser/filebrowser/commit/e74c95886226c0ee429af1860eed21dd1f8601aa)) + +### [2.33.6](https://github.com/filebrowser/filebrowser/compare/v2.33.5...v2.33.6) (2025-06-24) + + +### Bug Fixes + +* remove incorrect default for password flag ([23bd8f6](https://github.com/filebrowser/filebrowser/commit/23bd8f67155081d707d4799393d3b1e2bebeaa34)) + +### [2.33.5](https://github.com/filebrowser/filebrowser/compare/v2.33.4...v2.33.5) (2025-06-24) + + +### Features + +* update languages for project File Browser ([#5190](https://github.com/filebrowser/filebrowser/issues/5190)) ([f330764](https://github.com/filebrowser/filebrowser/commit/f33076462a133935ca97fb6c7345303fe350e167)) + + +### Bug Fixes + +* actually register the czech language ([#5189](https://github.com/filebrowser/filebrowser/issues/5189)) ([0268506](https://github.com/filebrowser/filebrowser/commit/0268506f80d33d2d31e38055e12530241d27a11b)) + +### [2.33.4](https://github.com/filebrowser/filebrowser/compare/v2.33.3...v2.33.4) (2025-06-22) + + +### Features + +* translation updates for project File Browser ([#5179](https://github.com/filebrowser/filebrowser/issues/5179)) ([f714e71](https://github.com/filebrowser/filebrowser/commit/f714e71a356c2301f394d651c9b6c467440508e3)) + +### [2.33.3](https://github.com/filebrowser/filebrowser/compare/v2.33.2...v2.33.3) (2025-06-22) + + +### Bug Fixes + +* keep command behavior in Dockerfile ([7c0c782](https://github.com/filebrowser/filebrowser/commit/7c0c7820efbbed2f0499353cc76ecb85d00ff7c3)) +* update search hotkey in help prompt ([#5178](https://github.com/filebrowser/filebrowser/issues/5178)) ([2741616](https://github.com/filebrowser/filebrowser/commit/2741616473636d40b7e9f14c9906ada08d328c3c)) + +### [2.33.2](https://github.com/filebrowser/filebrowser/compare/v2.33.1...v2.33.2) (2025-06-21) + + +### Bug Fixes + +* create user dir on signup ([0ca8059](https://github.com/filebrowser/filebrowser/commit/0ca8059d8dea4fe079146471ce4f24acc96021f2)) + +### [2.33.1](https://github.com/filebrowser/filebrowser/compare/v2.33.0...v2.33.1) (2025-06-21) + + +### Bug Fixes + +* downloadUrl of file preview ([#3728](https://github.com/filebrowser/filebrowser/issues/3728)) ([8a14018](https://github.com/filebrowser/filebrowser/commit/8a14018861fe581672bbd27cdc3ae5691f70a108)) +* remove auth query parameter from download and preview links ([cbb7124](https://github.com/filebrowser/filebrowser/commit/cbb712484d3bdabc033acaf3b696ef4f5865813d)) +* search uses ctrl+shift+f instead of hijacking browser's ctrl+f ([#4638](https://github.com/filebrowser/filebrowser/issues/4638)) ([a02b297](https://github.com/filebrowser/filebrowser/commit/a02b2972ebde2a58806ad1377bad46e748b63166)) + +## [2.33.0](https://github.com/filebrowser/filebrowser/compare/v2.32.3...v2.33.0) (2025-06-18) + + +### Features + +* improved docker image volumes and permissions ([#5160](https://github.com/filebrowser/filebrowser/issues/5160)) ([2e26393](https://github.com/filebrowser/filebrowser/commit/2e26393a022df0eaa9e08727407aba8b997aa728)) + +### [2.32.3](https://github.com/filebrowser/filebrowser/compare/v2.32.2...v2.32.3) (2025-06-17) + +### [2.32.2](https://github.com/filebrowser/filebrowser/compare/v2.32.1...v2.32.2) (2025-06-17) + + +### Features + +* updated for project File Browser ([#5159](https://github.com/filebrowser/filebrowser/issues/5159)) ([c34c0af](https://github.com/filebrowser/filebrowser/commit/c34c0afecf3242b16ad5d5584cd90a6ad323361c)) + +### [2.32.1](https://github.com/filebrowser/filebrowser/compare/v2.32.0...v2.32.1) (2025-06-16) + + +### Features + +* add Vietnamese translation ([#3840](https://github.com/filebrowser/filebrowser/issues/3840)) ([56b80b6](https://github.com/filebrowser/filebrowser/commit/56b80b6d9b4710538765ba7df5da1f03898f6b81)) +* improve pt-br translations with new keys and refinements ([#4903](https://github.com/filebrowser/filebrowser/issues/4903)) ([a882fb6](https://github.com/filebrowser/filebrowser/commit/a882fb6c85ab6ccc845ed0bf3908d8e5e60ce346)) +* update translation ko.json ([#3852](https://github.com/filebrowser/filebrowser/issues/3852)) ([d9ebd65](https://github.com/filebrowser/filebrowser/commit/d9ebd65ffcf9b2166fec708d51849796d12b16e0)) + + +### Bug Fixes + +* err shadowing lint ([c606a01](https://github.com/filebrowser/filebrowser/commit/c606a01a2d20932fb32ee896234d57631f8c47e4)) +* generate random admin password on quick setup ([a46acba](https://github.com/filebrowser/filebrowser/commit/a46acba5f92ee044661880d6ae349e289d984328)), closes [#3646](https://github.com/filebrowser/filebrowser/issues/3646) +* imports lint ([54b91b8](https://github.com/filebrowser/filebrowser/commit/54b91b8ff0b8ee1f02f72425ab97d27a5d942fc3)) +* set videojs locale ([#3742](https://github.com/filebrowser/filebrowser/issues/3742)) ([71a8f56](https://github.com/filebrowser/filebrowser/commit/71a8f5662c207e3cd4ee714a5b5a961121f510cd)) + + +### Build + +* **deps-dev:** bump vite from 6.0.11 to 6.1.6 in /frontend ([#3886](https://github.com/filebrowser/filebrowser/issues/3886)) ([5355629](https://github.com/filebrowser/filebrowser/commit/5355629fd1e7bd85ee3222fca22da899ba23ea95)) +* **deps:** bump golang.org/x/crypto from 0.31.0 to 0.35.0 ([#3865](https://github.com/filebrowser/filebrowser/issues/3865)) ([0ba9505](https://github.com/filebrowser/filebrowser/commit/0ba9505a19cb369653fc9f8260dc02fcc6587629)) +* **deps:** bump golang.org/x/net from 0.33.0 to 0.38.0 ([#3869](https://github.com/filebrowser/filebrowser/issues/3869)) ([cfea84f](https://github.com/filebrowser/filebrowser/commit/cfea84fd5e7ec9c1d2366293e5db12baaa4e3a81)) +* **deps:** bump vue-i18n from 11.0.1 to 11.1.2 in /frontend ([#3786](https://github.com/filebrowser/filebrowser/issues/3786)) ([35d1c09](https://github.com/filebrowser/filebrowser/commit/35d1c092434b80b22c89a614a02122e9f5965b39)) + +## [2.32.0](https://github.com/filebrowser/filebrowser/compare/v2.31.2...v2.32.0) (2025-01-31) + + +### Features + +* create user on proxy authentication if user does not exist ([#3569](https://github.com/filebrowser/filebrowser/issues/3569)) ([209acf2](https://github.com/filebrowser/filebrowser/commit/209acf2429b06e2e8d78218937c59fd7e7edd1be)) + + +### Bug Fixes + +* add proper healthcheck for S6 containers ([#3691](https://github.com/filebrowser/filebrowser/issues/3691)) ([045064f](https://github.com/filebrowser/filebrowser/commit/045064f8b8bf9f86058e877448085e38da8b3f2e)) +* disk usage refreshing ([#3692](https://github.com/filebrowser/filebrowser/issues/3692)) ([bbdd313](https://github.com/filebrowser/filebrowser/commit/bbdd313705b8d253f0c47ad717a6e47b2f46e719)) +* Fix user creation on proxy auth ([#3666](https://github.com/filebrowser/filebrowser/issues/3666)) ([5300d00](https://github.com/filebrowser/filebrowser/commit/5300d00d2e7dbb80a252aff57e100113f02506c3)) +* prompts disappearing on copy / move / upload ([#3537](https://github.com/filebrowser/filebrowser/issues/3537)) ([d1c84a8](https://github.com/filebrowser/filebrowser/commit/d1c84a84123c77dede05c023b3697a432b56122c)) + + +### Refactorings + +* Fix eslint warnings ([#3698](https://github.com/filebrowser/filebrowser/issues/3698)) ([0201f9c](https://github.com/filebrowser/filebrowser/commit/0201f9c5c4dd2a4d5a3503e59cdb8045e8d3a91f)), closes [#3407](https://github.com/filebrowser/filebrowser/issues/3407) + + +### Build + +* **deps:** bump cross-spawn from 7.0.3 to 7.0.6 in /tools ([#3601](https://github.com/filebrowser/filebrowser/issues/3601)) ([25372ed](https://github.com/filebrowser/filebrowser/commit/25372edb5c0e616e82b76b5f523633af57d347e0)) +* **deps:** bump github.com/golang-jwt/jwt/v4 from 4.5.0 to 4.5.1 ([#3574](https://github.com/filebrowser/filebrowser/issues/3574)) ([2fdea73](https://github.com/filebrowser/filebrowser/commit/2fdea73430011846276a1cda52458f1d670f5ea7)) +* **deps:** bump golang.org/x/crypto from 0.26.0 to 0.31.0 ([#3634](https://github.com/filebrowser/filebrowser/issues/3634)) ([e92dbb4](https://github.com/filebrowser/filebrowser/commit/e92dbb4bb8b7894264fbf0a48a641712c3b68766)) +* **deps:** bump golang.org/x/net from 0.23.0 to 0.33.0 ([#3712](https://github.com/filebrowser/filebrowser/issues/3712)) ([1194cfe](https://github.com/filebrowser/filebrowser/commit/1194cfe0097a70399c1f06cf0f514b9d70fa463c)) +* **deps:** bump vue-i18n from 9.10.2 to 9.14.2 in /frontend ([#3618](https://github.com/filebrowser/filebrowser/issues/3618)) ([0659594](https://github.com/filebrowser/filebrowser/commit/065959451d3ba12019c6151274aa4e6904cdca99)) +* fix go releaser ([ba797cd](https://github.com/filebrowser/filebrowser/commit/ba797cda3135eddb9b7165dc5ceb932399cb54df)) +* update to node 22 and pnpm ([#3616](https://github.com/filebrowser/filebrowser/issues/3616)) ([d51a343](https://github.com/filebrowser/filebrowser/commit/d51a3438201274a1b826be1b775ca1035ade20c5)) + +### [2.31.2](https://github.com/filebrowser/filebrowser/compare/v2.31.1...v2.31.2) (2024-10-03) + + +### Bug Fixes + +* added whitespace before version ([#3510](https://github.com/filebrowser/filebrowser/issues/3510)) ([2b37e69](https://github.com/filebrowser/filebrowser/commit/2b37e696c9bde4d0c453de236a3555d982346bbb)) +* change location of custom init scripts ([#3493](https://github.com/filebrowser/filebrowser/issues/3493)) ([406d4f7](https://github.com/filebrowser/filebrowser/commit/406d4f78845a1684df7c9c457b208f4dd9b2a930)) +* files list alignment ([#3494](https://github.com/filebrowser/filebrowser/issues/3494)) ([64400ff](https://github.com/filebrowser/filebrowser/commit/64400ffda8b09f66b8662a3c9400235139800a4d)) +* german translation spelling typos ([#3469](https://github.com/filebrowser/filebrowser/issues/3469)) ([1e7c415](https://github.com/filebrowser/filebrowser/commit/1e7c41505fb6a3b9baa1534787492a186e09bcfb)) + + +### Build + +* **deps-dev:** bump vite from 5.2.7 to 5.4.6 in /frontend ([#3496](https://github.com/filebrowser/filebrowser/issues/3496)) ([ec7b643](https://github.com/filebrowser/filebrowser/commit/ec7b643e8e9499f7ff226ec7f8e63a9df9890352)) +* **deps:** bump rollup from 4.21.3 to 4.22.4 in /frontend ([#3504](https://github.com/filebrowser/filebrowser/issues/3504)) ([03d74ee](https://github.com/filebrowser/filebrowser/commit/03d74ee7582196c09720f8d488056339f06c446c)) + +### [2.31.1](https://github.com/filebrowser/filebrowser/compare/v2.31.0...v2.31.1) (2024-08-30) + + +### Bug Fixes + +* command not found in shell ([#3438](https://github.com/filebrowser/filebrowser/issues/3438)) ([121d9ab](https://github.com/filebrowser/filebrowser/commit/121d9abecdc7d4e923cfc5023519995938a6ccae)) + + +### Build + +* update to alpine 3.20 ([#3447](https://github.com/filebrowser/filebrowser/issues/3447)) ([7de6bc4](https://github.com/filebrowser/filebrowser/commit/7de6bc4a912b5734dd0df02ed8391e78619e2615)) + +## [2.31.0](https://github.com/filebrowser/filebrowser/compare/v2.30.0...v2.31.0) (2024-08-29) + + +### Features + +* add Czech translation ([#3416](https://github.com/filebrowser/filebrowser/issues/3416)) ([8e67a12](https://github.com/filebrowser/filebrowser/commit/8e67a12f260caefcbe419c2281025b9b15f02bf3)) +* Added epub preview. Resolves [#3375](https://github.com/filebrowser/filebrowser/issues/3375) ([#3376](https://github.com/filebrowser/filebrowser/issues/3376)) ([99a6382](https://github.com/filebrowser/filebrowser/commit/99a6382b320874e94f9bd74708f46dd9a7485d3c)) +* implement markdown file preview in Ace editor ([#3431](https://github.com/filebrowser/filebrowser/issues/3431)) ([b0f4604](https://github.com/filebrowser/filebrowser/commit/b0f4604f44e6a35e07df3000f106f523cd942cfc)) +* support mime type for epub extension ([#3425](https://github.com/filebrowser/filebrowser/issues/3425)) ([f6f7e5f](https://github.com/filebrowser/filebrowser/commit/f6f7e5fea3ff7073ee652008a51cb5445a6f3d5d)) + + +### Bug Fixes + +* clipboard copy in safari ([#3261](https://github.com/filebrowser/filebrowser/issues/3261)) ([1fccc5d](https://github.com/filebrowser/filebrowser/commit/1fccc5d649add2a56c55e75cf9dec4851e6d7cbf)) +* CSS selectors for listing icons ([#3277](https://github.com/filebrowser/filebrowser/issues/3277)) ([2a90cdf](https://github.com/filebrowser/filebrowser/commit/2a90cdfdaff8655c7cb1167c01994a0978dece8f)) +* fix catalan i18n file ([090272e](https://github.com/filebrowser/filebrowser/commit/090272e3b7c56a940c4aa2d28f860c574aa17d53)) +* fixing an issue where the upload indicator would "jump" around in the UI ([#3354](https://github.com/filebrowser/filebrowser/issues/3354)) ([7be5644](https://github.com/filebrowser/filebrowser/commit/7be564495226bc6846289a56edb8893511036c6e)) +* **frontend:** N files selected hint use i18n ([#3390](https://github.com/filebrowser/filebrowser/issues/3390)) ([10bf3cf](https://github.com/filebrowser/filebrowser/commit/10bf3cffbf8eb7d95fe4e1cc6acf1012329744b9)) +* pdf preview header ([#3274](https://github.com/filebrowser/filebrowser/issues/3274)) ([a838868](https://github.com/filebrowser/filebrowser/commit/a8388689f3019083f263845900f683ddc13884dc)) +* pull down to refresh within editor ([#3378](https://github.com/filebrowser/filebrowser/issues/3378)) ([21783ed](https://github.com/filebrowser/filebrowser/commit/21783ed91a13ad52afdb411e43faf14fb6ef6e42)) + + +### Build + +* bump go libs ([b596567](https://github.com/filebrowser/filebrowser/commit/b596567c6163d57eaefbf3e30d84cfca65c24cdf)) +* bump go version to 1.23.0 ([364fdaa](https://github.com/filebrowser/filebrowser/commit/364fdaaf0c1eace82ff8637d337cc1b32e5e9972)) +* bump golangci-lint to 1.60.3 ([a6347c8](https://github.com/filebrowser/filebrowser/commit/a6347c88586e584b4565277b0010fa9ff2576b1f)) +* **deps-dev:** bump braces from 3.0.2 to 3.0.3 in /frontend ([#3316](https://github.com/filebrowser/filebrowser/issues/3316)) ([e8589be](https://github.com/filebrowser/filebrowser/commit/e8589be6409a2b29edd44ee2edd3fbf6b2d72724)) +* **deps-dev:** bump ws from 8.16.0 to 8.17.1 in /frontend ([#3321](https://github.com/filebrowser/filebrowser/issues/3321)) ([c3465f9](https://github.com/filebrowser/filebrowser/commit/c3465f99136506d51b813be4f31b289e708da0ce)) +* **deps:** bump golang.org/x/image from 0.15.0 to 0.18.0 ([#3335](https://github.com/filebrowser/filebrowser/issues/3335)) ([30a8ddf](https://github.com/filebrowser/filebrowser/commit/30a8ddf113862e3de2c09547662b7f2af8a30dfe)) +* fix goreleaser file ([056cfa8](https://github.com/filebrowser/filebrowser/commit/056cfa8facdca4c397a6b245028d4c9d3f0ca518)) + +## [2.30.0](https://github.com/filebrowser/filebrowser/compare/v2.29.0...v2.30.0) (2024-05-19) + + +### Features + +* allow multi-select with SHIFT key in singleClick mode ([#3185](https://github.com/filebrowser/filebrowser/issues/3185)) ([2e47a03](https://github.com/filebrowser/filebrowser/commit/2e47a038d63de8f848b070578c1d71f765438a24)) +* Enhance MIME Type Detection for Additional File Extensions ([#3183](https://github.com/filebrowser/filebrowser/issues/3183)) ([be62f56](https://github.com/filebrowser/filebrowser/commit/be62f56782551e17d6d5dc23bc29cc56ef961a66)) + + +### Bug Fixes + +* add overlay for sidebar on mobile ([#3197](https://github.com/filebrowser/filebrowser/issues/3197)) ([3b48f75](https://github.com/filebrowser/filebrowser/commit/3b48f75301287fe94cbbacff184b4db03f37f7ea)) +* current folder name in page title ([#3200](https://github.com/filebrowser/filebrowser/issues/3200)) ([e336a25](https://github.com/filebrowser/filebrowser/commit/e336a25ad29ed8b956169d426992860a877ee551)) +* Fixing the inability to play MKV video files online and enhancing the auxiliary features of the VideoPlayer. ([#3181](https://github.com/filebrowser/filebrowser/issues/3181)) ([782375b](https://github.com/filebrowser/filebrowser/commit/782375b1cb4c4f954468c30ec277ce021c82b40d)) +* shell window size ([#3198](https://github.com/filebrowser/filebrowser/issues/3198)) ([4c5b612](https://github.com/filebrowser/filebrowser/commit/4c5b612cb2563817f9da50413c7cf9e89b4c4d4a)) +* The file type icon in the file list is sensitive to the case of the suffix name ([#3187](https://github.com/filebrowser/filebrowser/issues/3187)) ([a9c327c](https://github.com/filebrowser/filebrowser/commit/a9c327cc0687796a3c7bfafd4ddabf4342859e31)) + +## [2.29.0](https://github.com/filebrowser/filebrowser/compare/v2.28.0...v2.29.0) (2024-04-30) + + +### Features + +* Display Upload Progress as Percentage and File Size / Total File Size ([#3111](https://github.com/filebrowser/filebrowser/issues/3111)) ([236ca63](https://github.com/filebrowser/filebrowser/commit/236ca637f99e373adfeaaefc5db6af50bd15b6bf)) +* migrate to vue 3 ([#2689](https://github.com/filebrowser/filebrowser/issues/2689)) ([5100e58](https://github.com/filebrowser/filebrowser/commit/5100e587d73831ecdb5e3bd35a78fef96ad248a4)) + + +### Bug Fixes + +* abort upload behavior to properly handle server-side deletion and frontend state reset ([#3114](https://github.com/filebrowser/filebrowser/issues/3114)) ([434e49b](https://github.com/filebrowser/filebrowser/commit/434e49bf59e4ddf7ec90893fa3fd53faee8c9cbb)) +* apply proper zindex to modal dialogs ([#3172](https://github.com/filebrowser/filebrowser/issues/3172)) ([821f51e](https://github.com/filebrowser/filebrowser/commit/821f51ea5ad1f5c2eb72441bc761031cacee43e1)) +* correct list item selector ([#3126](https://github.com/filebrowser/filebrowser/issues/3126)) ([#3147](https://github.com/filebrowser/filebrowser/issues/3147)) ([22a05e1](https://github.com/filebrowser/filebrowser/commit/22a05e1f02a083cf7b630e16873dad0de89b7854)) +* don't redirect to login when no auth ([#3165](https://github.com/filebrowser/filebrowser/issues/3165)) ([da5a6e0](https://github.com/filebrowser/filebrowser/commit/da5a6e051faa80134c2adf4e621426cbdf046c88)) +* Frontend bug, administrators unable to delete users ([#3170](https://github.com/filebrowser/filebrowser/issues/3170)) ([bee71d9](https://github.com/filebrowser/filebrowser/commit/bee71d93fee137cdd807cd8f7716c7da0830fae7)) +* handle quotes in healthcheck.sh ([#3130](https://github.com/filebrowser/filebrowser/issues/3130)) ([18f04a7](https://github.com/filebrowser/filebrowser/commit/18f04a7d26186927f51f46354f3b2164a68f1b41)) +* the copy method in clipboard.ts ([#3177](https://github.com/filebrowser/filebrowser/issues/3177)) ([4786187](https://github.com/filebrowser/filebrowser/commit/4786187852b8eef07e40aa00cd159ccc1e7e79dc)) + + +### Build + +* bump go version to 1.22.1 ([bbd0abb](https://github.com/filebrowser/filebrowser/commit/bbd0abbdfdbb3ddf3326247b7c6d925751dfabcb)) +* bump go version to 1.22.2 ([#3158](https://github.com/filebrowser/filebrowser/issues/3158)) ([a9da7fd](https://github.com/filebrowser/filebrowser/commit/a9da7fd56c849b5a13133136b35ef5ebee622962)) +* **deps:** bump golang.org/x/net from 0.22.0 to 0.23.0 ([#3133](https://github.com/filebrowser/filebrowser/issues/3133)) ([6b77b8d](https://github.com/filebrowser/filebrowser/commit/6b77b8d683f7357ef71af678550e78910c10ddeb)) + +## [2.28.0](https://github.com/filebrowser/filebrowser/compare/v2.27.0...v2.28.0) (2024-04-01) + + +### Features + +* allow to configure if home directory is automatically created from cli ([#2963](https://github.com/filebrowser/filebrowser/issues/2963)) ([a4b089a](https://github.com/filebrowser/filebrowser/commit/a4b089a6dbf9821ecede428cd7d13e69c8b85231)) +* auto hiding header bar in preview to enlarge the preview window ([#3024](https://github.com/filebrowser/filebrowser/issues/3024)) ([d706506](https://github.com/filebrowser/filebrowser/commit/d70650689c34ce9f631fda6a453fd521faef22fa)) +* close editor when click escape key ([#2947](https://github.com/filebrowser/filebrowser/issues/2947)) ([70c8261](https://github.com/filebrowser/filebrowser/commit/70c826133b8578b8712e6db8f762a15a076cd9a9)) +* enable preview in shared folder ([#3055](https://github.com/filebrowser/filebrowser/issues/3055)) ([4c233c3](https://github.com/filebrowser/filebrowser/commit/4c233c3db39ea5a00d6e602ec0ecbddecb590877)) +* focus editor when opened ([#2946](https://github.com/filebrowser/filebrowser/issues/2946)) ([b19710e](https://github.com/filebrowser/filebrowser/commit/b19710efca6daa7af56dc211d0051d500d2eea22)) +* freezing the list in the background while previewing a file ([#3004](https://github.com/filebrowser/filebrowser/issues/3004)) ([e167c3e](https://github.com/filebrowser/filebrowser/commit/e167c3e1efed8b16be45d994a8d443fda1d8cf49)) +* prompt to confirm discard editor changes ([#2948](https://github.com/filebrowser/filebrowser/issues/2948)) ([fb1a09c](https://github.com/filebrowser/filebrowser/commit/fb1a09c7c172b913c12b30975ca545e505df0c05)) +* select multiple files with ctrl even with singleClick option ([#2953](https://github.com/filebrowser/filebrowser/issues/2953)) ([d49c3df](https://github.com/filebrowser/filebrowser/commit/d49c3dfacfc0ff07e620b3ad2700e64927b06235)) + + +### Bug Fixes + +* dashboard buttons position in rtl layout ([#2949](https://github.com/filebrowser/filebrowser/issues/2949)) ([2cfee21](https://github.com/filebrowser/filebrowser/commit/2cfee2183c98d0cb67fc4e9788644ed4278e25bc)) +* editor discard prompt ([#2990](https://github.com/filebrowser/filebrowser/issues/2990)) ([34a0817](https://github.com/filebrowser/filebrowser/commit/34a08170c894321d49bb843e259a0e59e2245998)) +* files and directories are created with the correct permissions ([#2966](https://github.com/filebrowser/filebrowser/issues/2966)) ([5c5ab6b](https://github.com/filebrowser/filebrowser/commit/5c5ab6b8750a5168f0ae2a26bd5de41e0b6d9637)) +* fix lint warnings ([#2976](https://github.com/filebrowser/filebrowser/issues/2976)) ([fe5ca74](https://github.com/filebrowser/filebrowser/commit/fe5ca74aa1e4257e5cb36f1de58daa0c3548319f)) +* **healthcheck:** use address configured if not empty ([#2938](https://github.com/filebrowser/filebrowser/issues/2938)) ([81cd8fc](https://github.com/filebrowser/filebrowser/commit/81cd8fc6d307b00af278beefcdbad4158a128fea)) +* keyboard shortcut to confirm prompts ([#2932](https://github.com/filebrowser/filebrowser/issues/2932)) ([ff9502f](https://github.com/filebrowser/filebrowser/commit/ff9502ff34790c46f31d175911cd51c9b62804fb)) +* moment locale ([#2952](https://github.com/filebrowser/filebrowser/issues/2952)) ([883383a](https://github.com/filebrowser/filebrowser/commit/883383a5715d82883c51138dfb547805dfad2a3c)) +* shell direction ([#2980](https://github.com/filebrowser/filebrowser/issues/2980)) ([6d7ba65](https://github.com/filebrowser/filebrowser/commit/6d7ba65faf576ee4ed095f3d0c41775b21e498de)) +* stay in the same position after renaming or deleting ([#3039](https://github.com/filebrowser/filebrowser/issues/3039)) ([cdf8def](https://github.com/filebrowser/filebrowser/commit/cdf8def3304315bef261da7f52f8599d90b1f0f0)) + + +### Build + +* **deps-dev:** bump vite from 4.4.12 to 4.5.2 in /frontend ([#2951](https://github.com/filebrowser/filebrowser/issues/2951)) ([bf36cc0](https://github.com/filebrowser/filebrowser/commit/bf36cc00f1369dd10a422f230ccabcbeefae1517)) +* **deps:** bump google.golang.org/protobuf from 1.31.0 to 1.33.0 ([#3045](https://github.com/filebrowser/filebrowser/issues/3045)) ([05bfae2](https://github.com/filebrowser/filebrowser/commit/05bfae264a7a477d1b7db582f06f4efb24d26ec9)) +* **deps:** bump google.golang.org/protobuf in /tools ([#3044](https://github.com/filebrowser/filebrowser/issues/3044)) ([7797a4e](https://github.com/filebrowser/filebrowser/commit/7797a4ef18038a877df31bd34f2ebf70d18823f8)) + +## [2.27.0](https://github.com/filebrowser/filebrowser/compare/v2.26.0...v2.27.0) (2024-01-02) + + +### Features + +* allow setting theme via cli ([#2881](https://github.com/filebrowser/filebrowser/issues/2881)) ([748af71](https://github.com/filebrowser/filebrowser/commit/748af7172ce96f0b66c394e88839bd57c194ffc7)) +* display image resolutions in file details ([#2830](https://github.com/filebrowser/filebrowser/issues/2830)) ([a09dfa8](https://github.com/filebrowser/filebrowser/commit/a09dfa8d9f190243d811a841de44c4abb4403d87)) +* make user session timeout configurable by flags ([#2845](https://github.com/filebrowser/filebrowser/issues/2845)) ([391a078](https://github.com/filebrowser/filebrowser/commit/391a078cd486e618c95a0c5850326076cbc025b6)) + + +### Bug Fixes + +* delete message when delete file from preview ([3264cea](https://github.com/filebrowser/filebrowser/commit/3264cea8307dca9ab5463dc81f2a10a817eb3d54)) +* fix typo ([#2843](https://github.com/filebrowser/filebrowser/issues/2843)) ([4dbc802](https://github.com/filebrowser/filebrowser/commit/4dbc802972c930f5f42fc27507fac35c28c42afd)) +* set correct port in docker healthcheck ([#2812](https://github.com/filebrowser/filebrowser/issues/2812)) ([d59ad59](https://github.com/filebrowser/filebrowser/commit/d59ad594b8649f57f61453b0dfbc350c57b690a2)) +* typo in build error [#2903](https://github.com/filebrowser/filebrowser/issues/2903) ([#2904](https://github.com/filebrowser/filebrowser/issues/2904)) ([c4e955a](https://github.com/filebrowser/filebrowser/commit/c4e955acf4a1a8f8e8e94f697ffc838515e69a60)) + + +### Build + +* **deps-dev:** bump vite from 4.4.9 to 4.4.12 in /frontend ([#2862](https://github.com/filebrowser/filebrowser/issues/2862)) ([fc2ee37](https://github.com/filebrowser/filebrowser/commit/fc2ee373536584d024f7def62f350bdbb712d927)) +* **deps:** bump golang.org/x/crypto from 0.14.0 to 0.17.0 ([#2890](https://github.com/filebrowser/filebrowser/issues/2890)) ([821fba4](https://github.com/filebrowser/filebrowser/commit/821fba41a25ba99d47641f01b10ac51960157888)) + +## [2.26.0](https://github.com/filebrowser/filebrowser/compare/v2.25.0...v2.26.0) (2023-11-02) + + +### Features + +* add modern greek translation ([#2778](https://github.com/filebrowser/filebrowser/issues/2778)) ([c3079d3](https://github.com/filebrowser/filebrowser/commit/c3079d30e22385d7e677f172324cd9cbab6487ce)) +* make user session timeout configurable ([#2753](https://github.com/filebrowser/filebrowser/issues/2753)) ([7fabadc](https://github.com/filebrowser/filebrowser/commit/7fabadc871ea91ea22fe9454e2ca4b33e5c211be)) + + +### Bug Fixes + +* avoid the front-end calling api/renew loop ([#2792](https://github.com/filebrowser/filebrowser/issues/2792)) ([edd808f](https://github.com/filebrowser/filebrowser/commit/edd808f124f4ada99bcbe4bca98ddbe20e5a424c)) +* disable static resource files listing ([da1fe7c](https://github.com/filebrowser/filebrowser/commit/da1fe7c9d76a9c6a25bfa19ebd6cf8023eff5d62)) +* display file size as base 2 (KiB instead of KB) ([#2779](https://github.com/filebrowser/filebrowser/issues/2779)) ([cdcd9a3](https://github.com/filebrowser/filebrowser/commit/cdcd9a313aa50c2e6806a182b6838462d42dcafe)) +* goreleaser yaml ([4d0a68e](https://github.com/filebrowser/filebrowser/commit/4d0a68e7875274f4c939f2bfa15739a9b0ecf70a)) +* revert fetchURL changes in auth (Fixes [#2729](https://github.com/filebrowser/filebrowser/issues/2729)) ([#2739](https://github.com/filebrowser/filebrowser/issues/2739)) ([bd3c194](https://github.com/filebrowser/filebrowser/commit/bd3c1941ff8289a5dae877e08f7e25fa9b2a92c5)) +* solve docker build failed issue ([#2797](https://github.com/filebrowser/filebrowser/issues/2797)) ([6a31af6](https://github.com/filebrowser/filebrowser/commit/6a31af6c0a144128af865d802c8039fa5250e946)) + + +### Build + +* **deps-dev:** bump postcss from 8.4.27 to 8.4.31 in /frontend ([#2749](https://github.com/filebrowser/filebrowser/issues/2749)) ([21d361a](https://github.com/filebrowser/filebrowser/commit/21d361ad308d109d2a6b323597019aaa09ce1781)) +* **deps:** bump @babel/traverse in /frontend ([#2775](https://github.com/filebrowser/filebrowser/issues/2775)) ([bb4bb50](https://github.com/filebrowser/filebrowser/commit/bb4bb508a9d71516e8fa80b3a6285fe002a059d2)) +* **deps:** bump golang.org/x/image from 0.5.0 to 0.10.0 ([#2800](https://github.com/filebrowser/filebrowser/issues/2800)) ([a744bd2](https://github.com/filebrowser/filebrowser/commit/a744bd224f0ff1efc53ab94481fa76ef68788df1)) +* **deps:** bump golang.org/x/net from 0.11.0 to 0.17.0 ([#2758](https://github.com/filebrowser/filebrowser/issues/2758)) ([d574fb6](https://github.com/filebrowser/filebrowser/commit/d574fb6d1af41ec31778b0f402674e5111a7875d)) +* fix deprecated goreleaser config options ([38f7788](https://github.com/filebrowser/filebrowser/commit/38f77882559133b9ff330cfb955a9d4ea4728cf8)) + +## [2.25.0](https://github.com/filebrowser/filebrowser/compare/v2.24.2...v2.25.0) (2023-09-14) + + +### Features + +* add new folder button to move/create dialogs ([#2667](https://github.com/filebrowser/filebrowser/issues/2667)) ([5994224](https://github.com/filebrowser/filebrowser/commit/599422446849fa37d5ab448bbf464afb7304b99d)) +* added shell resizing ([#2648](https://github.com/filebrowser/filebrowser/issues/2648)) ([584b706](https://github.com/filebrowser/filebrowser/commit/584b706b1e310297acc2580c60442ff5c11ae432)) +* implement abort upload functionality ([#2673](https://github.com/filebrowser/filebrowser/issues/2673)) ([a404fb0](https://github.com/filebrowser/filebrowser/commit/a404fb043da2573bf04385863b2d34b1f918b8e1)) +* implement upload speed calculation and ETA estimation ([#2677](https://github.com/filebrowser/filebrowser/issues/2677)) ([ecdd684](https://github.com/filebrowser/filebrowser/commit/ecdd684bf1d537a4591caa38348102b61dd51e5d)) + + +### Bug Fixes + +* refactor path resolution logic for project root ([#2674](https://github.com/filebrowser/filebrowser/issues/2674)) ([95fec7f](https://github.com/filebrowser/filebrowser/commit/95fec7f69430c108e5cf95c428db9d671cd97a94)) +* tus upload with cloudflare proxy ([36af01d](https://github.com/filebrowser/filebrowser/commit/36af01daa6e04005ce3d18985eebaeef06f7393d)), closes [#2593](https://github.com/filebrowser/filebrowser/issues/2593) + + +### Refactorings + +* migrate frontend tooling to vite 4 ([#2645](https://github.com/filebrowser/filebrowser/issues/2645)) ([8838a09](https://github.com/filebrowser/filebrowser/commit/8838a09cf5104deac22b6143050588040c6825e6)) + + +### Build + +* bump go version to 1.21.0 ([#2672](https://github.com/filebrowser/filebrowser/issues/2672)) ([2c97573](https://github.com/filebrowser/filebrowser/commit/2c97573301a1b13179678fb7f9bd8316539ecdff)) +* bump node version to 18 ([#2671](https://github.com/filebrowser/filebrowser/issues/2671)) ([70eba7e](https://github.com/filebrowser/filebrowser/commit/70eba7ecc9d19545c0899ae40eb3897a7c48562f)) + + +### Performance improvements + +* **backend:** optimize subtitles detection performance ([#2637](https://github.com/filebrowser/filebrowser/issues/2637)) ([374bbd3](https://github.com/filebrowser/filebrowser/commit/374bbd3ec199fddbe491ab2b74e520a10a73e54b)) + +### [2.24.2](https://github.com/filebrowser/filebrowser/compare/v2.24.1...v2.24.2) (2023-08-08) + + +### Bug Fixes + +* 403 error error when uploading ([#2598](https://github.com/filebrowser/filebrowser/issues/2598)) ([289c8e6](https://github.com/filebrowser/filebrowser/commit/289c8e6f32eb520cc711389f6b6a4ed94a73ecd4)) +* config init for branding.disableUsedPercentage ([#2576](https://github.com/filebrowser/filebrowser/issues/2576)) ([#2596](https://github.com/filebrowser/filebrowser/issues/2596)) ([ff1e0b8](https://github.com/filebrowser/filebrowser/commit/ff1e0b8185faf14b1f8e91830ca5e71e68ab672e)) + + +### Build + +* add riscv64 binary releases ([#2587](https://github.com/filebrowser/filebrowser/issues/2587)) ([0ac3968](https://github.com/filebrowser/filebrowser/commit/0ac39684f175487314e97403406f4d2c482e3d79)) + +### [2.24.1](https://github.com/filebrowser/filebrowser/compare/v2.24.0...v2.24.1) (2023-07-31) + + +### Bug Fixes + +* add directory creation code to partial upload handler ([#2575](https://github.com/filebrowser/filebrowser/issues/2575)) ([#2580](https://github.com/filebrowser/filebrowser/issues/2580)) ([912f27a](https://github.com/filebrowser/filebrowser/commit/912f27a9e3286ee4bf2a27b366a1d35b3b55799c)) +* resolved CSS rendering issue in Chrome browser ([#2582](https://github.com/filebrowser/filebrowser/issues/2582)) ([2a4a46c](https://github.com/filebrowser/filebrowser/commit/2a4a46c61a5d5376bea65b28d0eb6a7ec2fdf4e5)) + + +### Build + +* **backend:** upgrade golangci-lint to v1.53.3 ([efd41cc](https://github.com/filebrowser/filebrowser/commit/efd41cc4c147b8d2d5e61fb2642df8d934f49362)) + +## [2.24.0](https://github.com/filebrowser/filebrowser/compare/v2.23.0...v2.24.0) (2023-07-29) + + +### Features + +* add a healthcheck script that works with a dynamic port ([#2510](https://github.com/filebrowser/filebrowser/issues/2510)) ([ff4375c](https://github.com/filebrowser/filebrowser/commit/ff4375cf6ce849459889f892dd91304703c52dcd)) +* add a new setting that disables the display of the disk usage ([#2136](https://github.com/filebrowser/filebrowser/issues/2136)) ([428c1c6](https://github.com/filebrowser/filebrowser/commit/428c1c606d1b858ed0eb58b7c31f570bc6a9b792)) +* add Hungarian translation ([#2232](https://github.com/filebrowser/filebrowser/issues/2232)) ([11e9202](https://github.com/filebrowser/filebrowser/commit/11e92021607e12efff9fb2d5c8728483eee31199)) +* add option to copy download links from shares ([#2442](https://github.com/filebrowser/filebrowser/issues/2442)) ([a4ef02a](https://github.com/filebrowser/filebrowser/commit/a4ef02a47b53742a0ac1f639563b0c67116619c8)) +* integrate tus.io for resumable and chunked uploads ([#2145](https://github.com/filebrowser/filebrowser/issues/2145)) ([7b35815](https://github.com/filebrowser/filebrowser/commit/7b35815754690540f76e3ffe114eedb47cfd5c7e)) + + +### Bug Fixes + +* added an early return on non-existent items ([#2571](https://github.com/filebrowser/filebrowser/issues/2571)) ([2744f7d](https://github.com/filebrowser/filebrowser/commit/2744f7d5b9106c7c2eec69010e550e0939c23d80)) +* build on FreeBSD and non-Linux platforms ([#2332](https://github.com/filebrowser/filebrowser/issues/2332)) ([60d1e2d](https://github.com/filebrowser/filebrowser/commit/60d1e2d2913cce591fbee97337bd58310480269f)) +* error while using fallback of dir move ([#2349](https://github.com/filebrowser/filebrowser/issues/2349)) ([853ec90](https://github.com/filebrowser/filebrowser/commit/853ec906efbdee9013c5d34ed1d9b8fee88a6b29)) +* filter ANSI color for shell ([#2529](https://github.com/filebrowser/filebrowser/issues/2529)) ([9bcfa90](https://github.com/filebrowser/filebrowser/commit/9bcfa900f904fe683c8d9085947f57932bfe22a0)) +* goreleaser docker build ([051104b](https://github.com/filebrowser/filebrowser/commit/051104bfa061720d4402c612e61bb0fc80a946bf)) +* solve broken Docker build with alpine image ([#2486](https://github.com/filebrowser/filebrowser/issues/2486)) ([b8ee340](https://github.com/filebrowser/filebrowser/commit/b8ee3404ee480ef1fd439543ab6d46f318ff3647)) +* video preview click next or prev button subtitles not update ([#2423](https://github.com/filebrowser/filebrowser/issues/2423)) ([6744cd4](https://github.com/filebrowser/filebrowser/commit/6744cd47cef87e3a76a2190bdf123b6c2197fe6f)) +* xss vulnerability in /api/raw ([#2570](https://github.com/filebrowser/filebrowser/issues/2570)) ([#2572](https://github.com/filebrowser/filebrowser/issues/2572)) ([b508ac3](https://github.com/filebrowser/filebrowser/commit/b508ac3d4f7f0f75d6b49c99bdc661a6d2173f30)) + + +### Refactorings + +* replace username old focus logic with the autofocus attribute ([#2223](https://github.com/filebrowser/filebrowser/issues/2223)) ([2b2c108](https://github.com/filebrowser/filebrowser/commit/2b2c1085fb50ad68612ad438e527fd316d8aafee)) + + +### Build + +* **backend:** bump go version to 1.20.1 ([fa95299](https://github.com/filebrowser/filebrowser/commit/fa95299df4aa7e4c54d872e786a91ded5bdb01c1)) +* **backend:** bump go version to 1.20.6 ([9bf6b85](https://github.com/filebrowser/filebrowser/commit/9bf6b856e5411e635ba9102ff53dfe927183848e)) +* **deps-dev:** bump word-wrap from 1.2.3 to 1.2.4 in /frontend ([#2556](https://github.com/filebrowser/filebrowser/issues/2556)) ([bb34862](https://github.com/filebrowser/filebrowser/commit/bb3486286c0da112ad97456ad258ddcdfe17c154)) +* **deps:** bump minimatch from 3.0.4 to 3.1.2 in /tools ([#2561](https://github.com/filebrowser/filebrowser/issues/2561)) ([a664ba1](https://github.com/filebrowser/filebrowser/commit/a664ba1f9df45c7f6d03492c85466c5aa07c740e)) +* **deps:** bump semver from 5.7.1 to 5.7.2 in /tools ([#2546](https://github.com/filebrowser/filebrowser/issues/2546)) ([c2f1423](https://github.com/filebrowser/filebrowser/commit/c2f1423c02e4736f4c243c3164dc671879e065f3)) +* remove armv6-s6 docker target ([66dfbb3](https://github.com/filebrowser/filebrowser/commit/66dfbb303cf792b7b01650d0125d948ab8d81ddd)) +* remove armv7-s6 docker target ([4d77ce0](https://github.com/filebrowser/filebrowser/commit/4d77ce0955644551f891af3e4098c37e9cc37e40)) + +## [2.23.0](https://github.com/filebrowser/filebrowser/compare/v2.22.4...v2.23.0) (2022-11-05) + + +### Features + +* add rtl support ([#2178](https://github.com/filebrowser/filebrowser/issues/2178)) ([2c14146](https://github.com/filebrowser/filebrowser/commit/2c14146a314bb271be66a36c63b64852a2848e26)) +* hebrew translation ([#2168](https://github.com/filebrowser/filebrowser/issues/2168)) ([a49105d](https://github.com/filebrowser/filebrowser/commit/a49105db1d5f0d8f3d6641940ea86da959ffe006)) +* hook authentication method ([dda9a38](https://github.com/filebrowser/filebrowser/commit/dda9a389f387e94643a9a2ae56027260b210152a)) +* update Polish translation ([#2089](https://github.com/filebrowser/filebrowser/issues/2089)) ([57c99e0](https://github.com/filebrowser/filebrowser/commit/57c99e0e261b4ed4c2cf468ce3ab09f1a440b359)) + + +### Bug Fixes + +* missing video controls on mobile ([#2180](https://github.com/filebrowser/filebrowser/issues/2180)) ([a5757b9](https://github.com/filebrowser/filebrowser/commit/a5757b94e8ed492d454b9e427b7f45824cc56c5c)) +* modify the delete confirmation interface logic. ([#2138](https://github.com/filebrowser/filebrowser/issues/2138)) ([0401adf](https://github.com/filebrowser/filebrowser/commit/0401adf7f4dd76760fe26b5baee02ebc726b51a9)) + + +### Build + +* **deps:** bump ansi-html and webpack-dev-server in /frontend ([#2184](https://github.com/filebrowser/filebrowser/issues/2184)) ([3a0dace](https://github.com/filebrowser/filebrowser/commit/3a0dace9a93f9d57855801de548891010cf0830e)) +* **deps:** bump terser from 4.8.0 to 4.8.1 in /frontend ([#2054](https://github.com/filebrowser/filebrowser/issues/2054)) ([aaed985](https://github.com/filebrowser/filebrowser/commit/aaed985699b3c63092ecb02c8bc07634123360ab)) + +### [2.22.4](https://github.com/filebrowser/filebrowser/compare/v2.22.3...v2.22.4) (2022-07-18) + + +### Bug Fixes + +* disable cookie auth for non GET requests ([80030de](https://github.com/filebrowser/filebrowser/commit/80030dee32d161043766d57ba4e0ad0b0d99290b)) + + +### Build + +* **deps:** bump moment from 2.29.2 to 2.29.4 in /frontend ([#2036](https://github.com/filebrowser/filebrowser/issues/2036)) ([cb43770](https://github.com/filebrowser/filebrowser/commit/cb437700255e41ff559b9f5a99ab4290b2f8df87)) +* **deps:** bump shell-quote from 1.7.2 to 1.7.3 in /frontend ([#2025](https://github.com/filebrowser/filebrowser/issues/2025)) ([eaba7e5](https://github.com/filebrowser/filebrowser/commit/eaba7e5255f960141e0fc1557f87073df9f6d66a)) + +### [2.22.3](https://github.com/filebrowser/filebrowser/compare/v2.22.2...v2.22.3) (2022-07-05) + + +### Bug Fixes + +* use correct field name in user put api ([#2026](https://github.com/filebrowser/filebrowser/issues/2026)) ([d94acdd](https://github.com/filebrowser/filebrowser/commit/d94acdd89a0069fe87107024fd332a0d59a112fc)) + +### [2.22.2](https://github.com/filebrowser/filebrowser/compare/v2.22.1...v2.22.2) (2022-07-01) + + +### Bug Fixes + +* display disk capacity in a correct format ([#2013](https://github.com/filebrowser/filebrowser/issues/2013)) ([dec3d62](https://github.com/filebrowser/filebrowser/commit/dec3d629d42de567aa708154ebc4e03b5223608c)) +* don't calculate usage for files ([#1973](https://github.com/filebrowser/filebrowser/issues/1973)) ([577c0ef](https://github.com/filebrowser/filebrowser/commit/577c0efa9cff13628d5e3bac710ef568a00949e0)), closes [#1972](https://github.com/filebrowser/filebrowser/issues/1972) [#1967](https://github.com/filebrowser/filebrowser/issues/1967) +* preview url building fix ([#1976](https://github.com/filebrowser/filebrowser/issues/1976)) ([dcf0bc6](https://github.com/filebrowser/filebrowser/commit/dcf0bc65bfcfc7df3804d7392598a92019468cf7)) + + +### Build + +* **backend:** upgrade golangci-lint to 1.46.2 ([#1991](https://github.com/filebrowser/filebrowser/issues/1991)) ([8118afd](https://github.com/filebrowser/filebrowser/commit/8118afd0ac0d25f4503c98879369764c35e7408e)) + +### [2.22.1](https://github.com/filebrowser/filebrowser/compare/v2.22.0...v2.22.1) (2022-06-06) + + +### Bug Fixes + +* use correct basepath prefix for preview urls ([#1971](https://github.com/filebrowser/filebrowser/issues/1971)) ([1e7d3b2](https://github.com/filebrowser/filebrowser/commit/1e7d3b25c283c556d98c65f1c2f46db4e4178995)) + + +### Build + +* **backend:** bump go version to 1.8.3 ([b16982d](https://github.com/filebrowser/filebrowser/commit/b16982df0f7da9eedb678455298b42ac55c86666)) + +## [2.22.0](https://github.com/filebrowser/filebrowser/compare/v2.21.1...v2.22.0) (2022-06-03) + + +### Features + +* add branding to the window title ([#1850](https://github.com/filebrowser/filebrowser/issues/1850)) ([f8dfbf7](https://github.com/filebrowser/filebrowser/commit/f8dfbf7eeecf3ee99ce906276777676f44e81e34)) +* add disk usage information to the sidebar ([d1d8e3e](https://github.com/filebrowser/filebrowser/commit/d1d8e3e3405381b01317fe07ae729d70219415a7)) +* automatically focus username field on login page ([596c732](https://github.com/filebrowser/filebrowser/commit/596c73288f5b53bd7e79ab8046136dc75ff078b9)) +* invalid symlink icon ([b14b911](https://github.com/filebrowser/filebrowser/commit/b14b9114f837cacf9f7788e88c503142a81585be)) +* page title localization ([8a43413](https://github.com/filebrowser/filebrowser/commit/8a43413f888440dc11b11c509abff45f706033d8)) + + +### Bug Fixes + +* allow CSP inline styling ([5da9d74](https://github.com/filebrowser/filebrowser/commit/5da9d74da62c69c431361bcaf0c07dc1da237ea8)) +* disable autocapitalize of login input (closes [#1910](https://github.com/filebrowser/filebrowser/issues/1910)) ([aed3af5](https://github.com/filebrowser/filebrowser/commit/aed3af58384697dc3de30f1450b837b0b74e4fa6)) +* drag-and-drop folder upload ([e677c78](https://github.com/filebrowser/filebrowser/commit/e677c78471f09f8d2c21d63d7388e908924aa6d9)) +* expired token error ([c3bd118](https://github.com/filebrowser/filebrowser/commit/c3bd1188aa396cbf00c593d259a9da0eddeeea3b)) +* folder info on upload list ([d1d7b23](https://github.com/filebrowser/filebrowser/commit/d1d7b23da6cc0c9a2f2f3e17021ec4f13ea557dd)) +* network error object message ([fc209f6](https://github.com/filebrowser/filebrowser/commit/fc209f64deff7a2793980d11ee738f7140c444cf)) +* set correct scope when user home creation is enabled ([02730bb](https://github.com/filebrowser/filebrowser/commit/02730bb9bfa3bfbfa251bb4736fc4c08d33609ab)) + + +### Build + +* **backend:** bump dependency versions ([7c9a75e](https://github.com/filebrowser/filebrowser/commit/7c9a75e72588f92d58fb58d32cdac352bce73b20)) +* **deps:** bump async from 2.6.3 to 2.6.4 in /frontend ([#1933](https://github.com/filebrowser/filebrowser/issues/1933)) ([e5fa96b](https://github.com/filebrowser/filebrowser/commit/e5fa96b666eac2e46a02bde832488baca5f2cd6d)) +* **deps:** bump eventsource from 1.1.0 to 1.1.1 in /frontend ([dd50369](https://github.com/filebrowser/filebrowser/commit/dd503695a1a8119a631643414d3a9070890f3f3c)) +* **deps:** bump minimist from 1.2.5 to 1.2.6 in /frontend ([#1889](https://github.com/filebrowser/filebrowser/issues/1889)) ([a74c72d](https://github.com/filebrowser/filebrowser/commit/a74c72db451207e1275988f3d208fa6d6f0468a9)) +* **deps:** bump minimist from 1.2.5 to 1.2.6 in /tools ([#1891](https://github.com/filebrowser/filebrowser/issues/1891)) ([f5b1e10](https://github.com/filebrowser/filebrowser/commit/f5b1e106183fb2192063a72fd195fc8c181ba8f9)) +* **deps:** bump moment from 2.29.1 to 2.29.2 in /frontend ([#1900](https://github.com/filebrowser/filebrowser/issues/1900)) ([040584c](https://github.com/filebrowser/filebrowser/commit/040584c86563d869c7a05887ef1f781bce653033)) +* **deps:** bump url-parse from 1.5.7 to 1.5.10 in /frontend ([#1841](https://github.com/filebrowser/filebrowser/issues/1841)) ([b2ad3f7](https://github.com/filebrowser/filebrowser/commit/b2ad3f73686a2abaa4fc62963fba6f83c9da9b5e)) +* **frontend:** bump node version from 14 to 16 ([ac3ead8](https://github.com/filebrowser/filebrowser/commit/ac3ead8dcef9c64c6be8b5cbbceee143b2cc77a8)) +* upgrade go version to 1.18.1 ([6bd34c7](https://github.com/filebrowser/filebrowser/commit/6bd34c76324780c1edd8625d5b22f5a84990852b)) + +### [2.21.1](https://github.com/filebrowser/filebrowser/compare/v2.21.0...v2.21.1) (2022-02-22) + + +### Bug Fixes + +* display user scope for admin users ([#1834](https://github.com/filebrowser/filebrowser/issues/1834)) ([6366cf0](https://github.com/filebrowser/filebrowser/commit/6366cf0b181f13eac38f69f1760d6f6f0586a5d1)) + +## [2.21.0](https://github.com/filebrowser/filebrowser/compare/v2.20.1...v2.21.0) (2022-02-21) + + +### Features + +* add colorized file type icons ([2948589](https://github.com/filebrowser/filebrowser/commit/2948589fcde6d1dca7f3ea52a621d8213fa3300c)) +* add gallery view mode ([8888b9f](https://github.com/filebrowser/filebrowser/commit/8888b9f44640394df9e3583db4392472d7027a4b)) +* add Ukrainian translation / update Russian translation ([#1753](https://github.com/filebrowser/filebrowser/issues/1753)) ([665e458](https://github.com/filebrowser/filebrowser/commit/665e45889cd333f1e3500e4bf38d15d229c9fe2a)) +* add upload file list with progress ([#1825](https://github.com/filebrowser/filebrowser/issues/1825)) ([cf85404](https://github.com/filebrowser/filebrowser/commit/cf85404dd25cd7fdd73aa32878b4dc5f85ee3e96)) +* smaller column width to fit 2 columns in landscape mobiles ([7870e89](https://github.com/filebrowser/filebrowser/commit/7870e89bc04f1494f2705795476b5f1c9d621e38)) +* use real image path to calculate cache key ([c198723](https://github.com/filebrowser/filebrowser/commit/c1987237d05adcce77c614e5247a181ae5cdfacd)) + + +### Bug Fixes + +* correctly handle non-ascii passwords for shared resources ([c782f21](https://github.com/filebrowser/filebrowser/commit/c782f21b0fa4511a15e7015117d075eaf5ea332c)) +* don't expose scope for non-admin users ([0942fc7](https://github.com/filebrowser/filebrowser/commit/0942fc7042fd949cce91855169d0bcf16eb75771)) +* open all the pdf files correctly ([#1742](https://github.com/filebrowser/filebrowser/issues/1742)) ([949f0f2](https://github.com/filebrowser/filebrowser/commit/949f0f277f6004904b3edfa716a8365ec93fa0fa)) + + +### Build + +* **deps:** bump browserslist from 4.16.3 to 4.19.1 in /frontend ([8089007](https://github.com/filebrowser/filebrowser/commit/80890075e802e2a4217edbb01d6417122d702f5e)) +* **deps:** bump dns-packet from 1.3.1 to 1.3.4 in /frontend ([a73d7f1](https://github.com/filebrowser/filebrowser/commit/a73d7f14b787935c6ebe525dba64b65f8ed733e2)) +* **deps:** bump follow-redirects from 1.13.3 to 1.14.8 in /frontend ([f1f7f17](https://github.com/filebrowser/filebrowser/commit/f1f7f17ade8d40fc6cfb22c79960bce299876b56)) +* **deps:** bump hosted-git-info from 2.8.8 to 2.8.9 in /frontend ([e7659ea](https://github.com/filebrowser/filebrowser/commit/e7659ea36bdf780ce17005f7170a2fef02a2d5e5)) +* **deps:** bump path-parse from 1.0.6 to 1.0.7 in /frontend ([c014966](https://github.com/filebrowser/filebrowser/commit/c01496624a7ebfc8a7c256bd919a400367281cbb)) +* **deps:** bump postcss from 7.0.35 to 7.0.39 in /frontend ([9182d33](https://github.com/filebrowser/filebrowser/commit/9182d33e1cc375473fb18989a92d20252884f096)) +* **deps:** bump ssri from 6.0.1 to 6.0.2 in /frontend ([3717186](https://github.com/filebrowser/filebrowser/commit/371718634b11f32e68165f31c51b6b1139c829ec)) +* **deps:** bump tar from 6.1.0 to 6.1.11 in /frontend ([010d16f](https://github.com/filebrowser/filebrowser/commit/010d16fc1d8f0200e5662943aef17ee89c5877b7)) +* **deps:** bump url-parse from 1.5.1 to 1.5.4 in /frontend ([8906408](https://github.com/filebrowser/filebrowser/commit/8906408a8f0ed86d1e11ea90fc573b36815c9c0d)) +* **deps:** bump url-parse from 1.5.4 to 1.5.7 in /frontend ([228ebea](https://github.com/filebrowser/filebrowser/commit/228ebea66cc871b33459406590a80ef906298e7d)) +* **deps:** bump ws from 6.2.1 to 6.2.2 in /frontend ([73c8073](https://github.com/filebrowser/filebrowser/commit/73c80732d934bc8802a6d7c7a559cad37df405f0)) + +### [2.20.1](https://github.com/filebrowser/filebrowser/compare/v2.20.0...v2.20.1) (2021-12-21) + + +### Build + +* revert to using the default alpine based docker image ([46d8046](https://github.com/filebrowser/filebrowser/commit/46d80464d2a67927b06a11b83fb137ad364a90ed)) + +## [2.20.0](https://github.com/filebrowser/filebrowser/compare/v2.19.0...v2.20.0) (2021-12-20) + + +### Features + +* detect multiple subtitle languages ([#1723](https://github.com/filebrowser/filebrowser/issues/1723)) ([c2e03bb](https://github.com/filebrowser/filebrowser/commit/c2e03bbfab97fc6716bcdd59158e9d5129bf0ea7)) +* use linuxserver based docker image ([b8f35ce](https://github.com/filebrowser/filebrowser/commit/b8f35ce9322c2b0dbf954cfd3ff584bc9f742fdd)) + + +### Bug Fixes + +* set correct default database path in the config ([988d3e5](https://github.com/filebrowser/filebrowser/commit/988d3e5bdd224509ddc2f08444560e3087e9c67d)) +* upgrade vulnerable versions of the library ([6eb3ab0](https://github.com/filebrowser/filebrowser/commit/6eb3ab063509a015ad630ab704ae3791461d0982)) + + +### Build + +* refactor makefile ([f81857a](https://github.com/filebrowser/filebrowser/commit/f81857acce25936a700945db5ef4af545eaeb1cf)) +* remove deprecated goreleaser use_buildx param ([4d1b9dd](https://github.com/filebrowser/filebrowser/commit/4d1b9dd2112002a93bb26cece07dcfd81c31dc2c)) + +## [2.19.0](https://github.com/filebrowser/filebrowser/compare/v2.18.0...v2.19.0) (2021-11-24) + + +### Features + +* prefetch previous and next images in preview. ([#1627](https://github.com/filebrowser/filebrowser/issues/1627)) ([7401d16](https://github.com/filebrowser/filebrowser/commit/7401d16e457bb232fd7dd7ef427e8960d465705c)) + + +### Bug Fixes + +* empty file listing on share ([e082397](https://github.com/filebrowser/filebrowser/commit/e08239781f61e7bb25d9b8c5c6cce90f34621a76)) +* relative font sizes ([c29698d](https://github.com/filebrowser/filebrowser/commit/c29698dffac769077ab7c7869569a902979ee3d7)) + +## [2.18.0](https://github.com/filebrowser/filebrowser/compare/v2.17.2...v2.18.0) (2021-10-31) + + +### Features + +* add ability to select file modified time format ([#1536](https://github.com/filebrowser/filebrowser/issues/1536)) ([0426629](https://github.com/filebrowser/filebrowser/commit/0426629a59c712849570d3e29956948ae7725a4a)) +* add manifest theme color param ([#1542](https://github.com/filebrowser/filebrowser/issues/1542)) ([0358e42](https://github.com/filebrowser/filebrowser/commit/0358e42d2c206732fffa77714f5a66f4fe50a69d)) + + +### Bug Fixes + +* back button behaviour in preview ([#1573](https://github.com/filebrowser/filebrowser/issues/1573)) ([deabc80](https://github.com/filebrowser/filebrowser/commit/deabc80fd7670983039dfcd29531b45002ca5d9e)) +* fix sidebar navigation on mobile devices ([#1618](https://github.com/filebrowser/filebrowser/issues/1618)) ([f09bf3e](https://github.com/filebrowser/filebrowser/commit/f09bf3e1d076b27d29ba8a91cf448a99993bc444)) +* search box is misaligned when the browser preferred font size is other than 16px ([#1613](https://github.com/filebrowser/filebrowser/issues/1613)) ([6f345be](https://github.com/filebrowser/filebrowser/commit/6f345be3e47ba57ecc1eb9a62587ab949078c125)) +* security issue in command runner (closes [#1621](https://github.com/filebrowser/filebrowser/issues/1621)) ([74b7cd8](https://github.com/filebrowser/filebrowser/commit/74b7cd8e81840537a8206317344f118093153e8d)) +* set correct editor height regardless of preferred font size ([#1614](https://github.com/filebrowser/filebrowser/issues/1614)) ([ddd4ffa](https://github.com/filebrowser/filebrowser/commit/ddd4ffa4caa6b292a3a644ecd897aba1237c7503)) +* zoom pics when dlclick at first time ([#1561](https://github.com/filebrowser/filebrowser/issues/1561)) ([b6a51be](https://github.com/filebrowser/filebrowser/commit/b6a51bed516814944f8aa41440652242d57824c5)) + +### [2.17.2](https://github.com/filebrowser/filebrowser/compare/v2.17.1...v2.17.2) (2021-08-27) + + +### Bug Fixes + +* bug with inlineLink not creating url properly ([#1515](https://github.com/filebrowser/filebrowser/issues/1515)) ([43a4609](https://github.com/filebrowser/filebrowser/commit/43a460993c3f0d158b876db4b20caa7963e9f361)) + +### [2.17.1](https://github.com/filebrowser/filebrowser/compare/v2.17.0...v2.17.1) (2021-08-23) + + +### Bug Fixes + +* internal server error if --disable-preview-resize flag is set (closes [#1510](https://github.com/filebrowser/filebrowser/issues/1510)) ([4c3099a](https://github.com/filebrowser/filebrowser/commit/4c3099a086c206dcb3bc70ee8c8da02eee61c30b)) + +## [2.17.0](https://github.com/filebrowser/filebrowser/compare/v2.16.1...v2.17.0) (2021-08-21) + + +### Features + +* open file option on preview ([76add9e](https://github.com/filebrowser/filebrowser/commit/76add9e5274b0373c6b983e3b20e387a14ea6c9e)) + + +### Bug Fixes + +* 401 error in share view open file button ([#1495](https://github.com/filebrowser/filebrowser/issues/1495)) ([25c8788](https://github.com/filebrowser/filebrowser/commit/25c87883908babde073390a2e2320a8e5880a87c)) +* escape quote on index template ([23d646c](https://github.com/filebrowser/filebrowser/commit/23d646c456876d06cf48e71c1e57b69de99511f0)), closes [#1501](https://github.com/filebrowser/filebrowser/issues/1501) +* file caching directive ([c63cc5a](https://github.com/filebrowser/filebrowser/commit/c63cc5a2d25909cc4e2f2e7235f276ec66c32bf2)) + +### [2.16.1](https://github.com/filebrowser/filebrowser/compare/v2.16.0...v2.16.1) (2021-08-04) + + +### Bug Fixes + +* check symlink target type (closes [#1488](https://github.com/filebrowser/filebrowser/issues/1488)) ([76b466f](https://github.com/filebrowser/filebrowser/commit/76b466f6492e74cf13e66a33e7e5f597ac92b240)) + +## [2.16.0](https://github.com/filebrowser/filebrowser/compare/v2.15.0...v2.16.0) (2021-07-26) + + +### Features + +* browser cache directives ([190cb99](https://github.com/filebrowser/filebrowser/commit/190cb99a79a0d438eca2da13539f8c6449ad73ac)) +* display error messages on settings ([6032038](https://github.com/filebrowser/filebrowser/commit/603203848a8b2221158088b6d849609db4c0c46c)) +* file name on page title ([16a34de](https://github.com/filebrowser/filebrowser/commit/16a34defc02554a77c6ac47b9e17e69d098a09fe)) +* gzip encoding for static js files ([aa172b8](https://github.com/filebrowser/filebrowser/commit/aa172b8bb5f17d5f5cb9666bfb5ee650d8091fb5)) +* loading spinner on views navigation ([976eb55](https://github.com/filebrowser/filebrowser/commit/976eb5583dae474125fd7ddec5dc19b6c291f98f)) +* message for connection error ([5e6f14b](https://github.com/filebrowser/filebrowser/commit/5e6f14b5dcb9c5efdf526f1346e09c2d0b2f6974)) +* mod time title on file info ([7d1e030](https://github.com/filebrowser/filebrowser/commit/7d1e03075d2c27148f60813defa0f68403d1d3c2)) +* open file option on share ([1c25f6e](https://github.com/filebrowser/filebrowser/commit/1c25f6ee69bd71eed82af7020006d0e27537a967)) +* show more button on share ([ba8c09f](https://github.com/filebrowser/filebrowser/commit/ba8c09f454feeadf4a1e97547a34151a81b389d5)) +* support for IE11 browser ([7ec24d9](https://github.com/filebrowser/filebrowser/commit/7ec24d9d7794fa37825f64ca2d1575f568fb1362)) + + +### Bug Fixes + +* break resource create/update handlers on error (closes [#1464](https://github.com/filebrowser/filebrowser/issues/1464)) ([5072bbb](https://github.com/filebrowser/filebrowser/commit/5072bbb2cbf5b29d041629faa8367f15e4d145a2)) +* copying files with special characters ([20ebbf6](https://github.com/filebrowser/filebrowser/commit/20ebbf6611b734371426fb1b9cb5e388be90bf7e)) +* delete image cache when moving ([8973c45](https://github.com/filebrowser/filebrowser/commit/8973c4598ff817647f1f1ad6ee36480054cd2776)) +* don't remove files on unsuccessful updates (closes [#1456](https://github.com/filebrowser/filebrowser/issues/1456)) ([6b19ab6](https://github.com/filebrowser/filebrowser/commit/6b19ab6613b12be7f075299cd98f4b41d43827c7)) +* failure on broken symlink deletion ([8650d2f](https://github.com/filebrowser/filebrowser/commit/8650d2ffe7a29cbafa800efcecbf6a61598a9f0c)) +* inconsistent double click on listing item ([ba7e71a](https://github.com/filebrowser/filebrowser/commit/ba7e71a7c3b0cc71012e5adf94b1c642e554972e)) +* no items displayed on file listing ([18889ad](https://github.com/filebrowser/filebrowser/commit/18889ad725f7f7e5a7e3f7abcf156487556dbeaf)) +* omit file content ([209f9fa](https://github.com/filebrowser/filebrowser/commit/209f9fa77f751054512355f2b74b9b7258465d0b)) +* short commit sha and typo fix in Makefile ([#1411](https://github.com/filebrowser/filebrowser/issues/1411)) ([46ee595](https://github.com/filebrowser/filebrowser/commit/46ee59538914dc2859f0da6b32e2d062d0a01b10)) + +## [2.15.0](https://github.com/filebrowser/filebrowser/compare/v2.14.1...v2.15.0) (2021-04-06) + + +### Features + +* add EXIF thumbnail support for JPEG files ([#1234](https://github.com/filebrowser/filebrowser/issues/1234)) ([7dd5b34](https://github.com/filebrowser/filebrowser/commit/7dd5b34d425dfbc2782152310483cbecf85c800a)) +* dynamic autoplay on previewer ([a76e01d](https://github.com/filebrowser/filebrowser/commit/a76e01d2b78a785f3665a8b3532c7cc566bfabce)) +* dynamic item count on file listing ([6c8ee96](https://github.com/filebrowser/filebrowser/commit/6c8ee96e6a21fae5d4608bdc7a5c5a161d7dafd3)) +* dynamic zoom limit on previewer ([e410272](https://github.com/filebrowser/filebrowser/commit/e410272e6be6a0b660efe8d4eee6c6e9dd834cc5)) + + +### Bug Fixes + +* buttons without permission on header ([1516d99](https://github.com/filebrowser/filebrowser/commit/1516d9932bf9926ac8b4cb3e738a5f51e80d5b1d)) +* check modify permission on file overwrite ([59f9964](https://github.com/filebrowser/filebrowser/commit/59f9964e80c8233775f27be33a4c16a31bfe848a)) +* empty archive name on directory download ([2697093](https://github.com/filebrowser/filebrowser/commit/2697093ac151f74eea3022951d128acfe04d1dcf)) +* empty text file on editor ([e9baf0c](https://github.com/filebrowser/filebrowser/commit/e9baf0c4b688fab291cdc842ec464c7a7a816499)) +* error causes panic on upload ([e1a6f59](https://github.com/filebrowser/filebrowser/commit/e1a6f593e1824e7fa4345a61dff5b1bb8cd22d05)) +* hidden editor header on Safari ([b521dec](https://github.com/filebrowser/filebrowser/commit/b521dec8f9b14dd92248c429e902ebc639046389)) +* image quality switch on previewer ([c0d85f3](https://github.com/filebrowser/filebrowser/commit/c0d85f3d85926c8790757bf142140d19455ae8ca)) +* list item interactions on share ([87f1881](https://github.com/filebrowser/filebrowser/commit/87f1881b429877a740ea84a8e783ad4103248289)) +* missing bold variation for Roboto font ([98d79b8](https://github.com/filebrowser/filebrowser/commit/98d79b8ed955df5691a306d709b4ab60d91da408)) +* mouse wheel zoom on previewer ([fcb115f](https://github.com/filebrowser/filebrowser/commit/fcb115f42d33db2be7a4d428ec53d65d6050320b)) +* no header button animations on file listing ([fe80730](https://github.com/filebrowser/filebrowser/commit/fe80730bb135b38e4d9de470c75cbe10b1aec201)) + +### [2.14.1](https://github.com/filebrowser/filebrowser/compare/v2.14.0...v2.14.1) (2021-03-21) + + +### Bug Fixes + +* display public routes with header proxy auth ([da54bd6](https://github.com/filebrowser/filebrowser/commit/da54bd6c214d7ee39b71d710ddfe6dd25fc4e5d6)) + +## [2.14.0](https://github.com/filebrowser/filebrowser/compare/v2.13.0...v2.14.0) (2021-03-21) + + +### Features + +* add health check handler ([a721dc1](https://github.com/filebrowser/filebrowser/commit/a721dc1f314732e60d331a1a7da97d06e0e8b613)) + + +### Bug Fixes + +* hide dotfile error on share ([5f4a031](https://github.com/filebrowser/filebrowser/commit/5f4a0317ab5685fe4a558df74e604c12e04a1c10)) +* prefix handling on http router ([93a35ad](https://github.com/filebrowser/filebrowser/commit/93a35ad2516accdcb9735db509550979d01de2c3)) +* qr code url on share ([22f4be8](https://github.com/filebrowser/filebrowser/commit/22f4be8f54162b7cf494177705ffb8b09117bd01)) +* text file detection on editor ([eeadc53](https://github.com/filebrowser/filebrowser/commit/eeadc532fe6057969b3c1a4726f236851b154cfa)) + +## [2.13.0](https://github.com/filebrowser/filebrowser/compare/v2.12.1...v2.13.0) (2021-03-14) + + +### Features + +* dual pane settings view ([db5aad8](https://github.com/filebrowser/filebrowser/commit/db5aad8eb679cfe1b1ace5142cf342951217f0f7)) +* improved settings navbar ([5b28aa0](https://github.com/filebrowser/filebrowser/commit/5b28aa0848710b9d3ee02a2aa912856395f48bd2)) +* improved sharing prompt ([1819377](https://github.com/filebrowser/filebrowser/commit/18193778971e27d18b5a35df8c2d0e2953b48111)) +* increased header button counter size ([4fb832c](https://github.com/filebrowser/filebrowser/commit/4fb832c0422107e16f22b7aa928224f36de4978f)) +* larger previewer content ([62fff5c](https://github.com/filebrowser/filebrowser/commit/62fff5ca60da1f887c1f95fa4808d3753596dab2)) + + +### Bug Fixes + +* archive contains parent path on Windows ([54f3570](https://github.com/filebrowser/filebrowser/commit/54f35701a2bd5cb7ec0628ca9789047072c073db)) +* check rules on http resource handlers ([5bf1554](https://github.com/filebrowser/filebrowser/commit/5bf15548d0ad147acfad5000277531be2671f7ce)) +* download current dir on file listing ([488d980](https://github.com/filebrowser/filebrowser/commit/488d98045e7476ed11e53c13d9498a9db3165bbc)) +* encoded file path on share ([7955e07](https://github.com/filebrowser/filebrowser/commit/7955e0720baef3710106c7e69bbbf078d5489220)) +* full file path on share ([e017a19](https://github.com/filebrowser/filebrowser/commit/e017a199850e19dd51b960ba59402c215fd8f1af)) +* header dropdown icon color on previewer ([f8df76f](https://github.com/filebrowser/filebrowser/commit/f8df76f52684f10722ce123fec2c90e321ddf103)) +* item dragging on file listing ([326b35a](https://github.com/filebrowser/filebrowser/commit/326b35a7ac7871afcdf892ca150349665b7f6379)) +* modified time on info prompt ([11ebaec](https://github.com/filebrowser/filebrowser/commit/11ebaec5f0671ec02ebe55d4a73a514bce3a6713)) +* root path name on archive ([426b38b](https://github.com/filebrowser/filebrowser/commit/426b38bb3362d2d477d0d8aa27d880664d537431)) +* stuck icon on header button ([6a734c0](https://github.com/filebrowser/filebrowser/commit/6a734c01391b437c2842f5d97fb63f29a0017510)) +* update image cache when replacing ([81b6f4d](https://github.com/filebrowser/filebrowser/commit/81b6f4d6f6a01886583016f61f4f1951a59f244d)) +* wait for async command exit ([#1326](https://github.com/filebrowser/filebrowser/issues/1326)) ([6d5ceae](https://github.com/filebrowser/filebrowser/commit/6d5ceae8b454edd749b3b65c88aacc0a31ce9215)) + + +### Refactorings + +* migrate from rice to embed.FS ([fc55061](https://github.com/filebrowser/filebrowser/commit/fc5506179a64e9e2f57f7b6d6cce4b95f5ebc235)) + +### [2.12.1](https://github.com/filebrowser/filebrowser/compare/v2.12.0...v2.12.1) (2021-03-07) + + +### Bug Fixes + +* add missing default config into the docker image ([7358b3f](https://github.com/filebrowser/filebrowser/commit/7358b3fe3178c20007b4b5ef5c03705badd538c4)) + +## [2.12.0](https://github.com/filebrowser/filebrowser/compare/v2.11.0...v2.12.0) (2021-03-04) + + +### Features + +* add homebrew tap ([2d2c598](https://github.com/filebrowser/filebrowser/commit/2d2c598fa6bd1ecaf39c542182890c8dd9b1cad0)) +* added tiff files preview support ([#1222](https://github.com/filebrowser/filebrowser/issues/1222)) ([e8c9d1c](https://github.com/filebrowser/filebrowser/commit/e8c9d1c53989b4b52f6fba2a8ac41ae612c03a7c)) +* allow disabling file detections by reading header ([#1175](https://github.com/filebrowser/filebrowser/issues/1175)) ([6914063](https://github.com/filebrowser/filebrowser/commit/6914063853a8a3f3cecfa4b21f223820c2a0b7df)) +* allow to password protect shares ([#1252](https://github.com/filebrowser/filebrowser/issues/1252)) ([d8f415f](https://github.com/filebrowser/filebrowser/commit/d8f415f8abd0c4301803bd968c54429dd3fe4b59)) +* build multi-arch docker images ([cf4836d](https://github.com/filebrowser/filebrowser/commit/cf4836dc757ef79ad615179bb7a6c7bbd3b09c2c)) +* share management delete confirm ([#1212](https://github.com/filebrowser/filebrowser/issues/1212)) ([b600b11](https://github.com/filebrowser/filebrowser/commit/b600b11415fd1fb90ff2f5136be95a9c737ae1cb)) + + +### Bug Fixes + +* don't allow to remove root user ([019ce80](https://github.com/filebrowser/filebrowser/commit/019ce80fc529a0437984fdc3d1ab6916f34dd594)) +* double click to zoom pics in phone's browser ([#1274](https://github.com/filebrowser/filebrowser/issues/1274)) ([f1b7bd5](https://github.com/filebrowser/filebrowser/commit/f1b7bd59f67e719b7bfd203b0d7ec016fd21ab49)) +* environmental variables not expanded in command ([#1241](https://github.com/filebrowser/filebrowser/issues/1241)) ([f3afd5c](https://github.com/filebrowser/filebrowser/commit/f3afd5cb79d6ad8b9cc8d54cb8fc2344b7c07d3d)) +* fetch resource api once when sorting (closes [#1172](https://github.com/filebrowser/filebrowser/issues/1172)) ([#1202](https://github.com/filebrowser/filebrowser/issues/1202)) ([05bb7c8](https://github.com/filebrowser/filebrowser/commit/05bb7c85531349f3e9d1d8a523bb1243587b2ebc)) + + +### Build + +* use make for building the project ([#1304](https://github.com/filebrowser/filebrowser/issues/1304)) ([23f8464](https://github.com/filebrowser/filebrowser/commit/23f84642e6c1e07f89f98d2c1bb6fc9da36cc71c)) + +## [2.11.0](https://github.com/filebrowser/filebrowser/compare/v2.10.0...v2.11.0) (2020-12-28) + + +### Features + +* add sharing management ([#1178](https://github.com/filebrowser/filebrowser/issues/1178)) (closes [#1000](https://github.com/filebrowser/filebrowser/issues/1000)) ([677bce3](https://github.com/filebrowser/filebrowser/commit/677bce376b024d9ff38f34e74243034fe5a1ec3c)) +* download shared subdirectory ([#1184](https://github.com/filebrowser/filebrowser/issues/1184)) ([fb5b28d](https://github.com/filebrowser/filebrowser/commit/fb5b28d9cbdee10d38fcd719b9fd832121be58ef)) + + +### Bug Fixes + +* check user input to prevent permission elevation ([#1196](https://github.com/filebrowser/filebrowser/issues/1196)) (closes [#1195](https://github.com/filebrowser/filebrowser/issues/1195)) ([f62806f](https://github.com/filebrowser/filebrowser/commit/f62806f6c9e9c7f392d1b747d65b8fe40b313e89)) +* delete extra remove prefix ([#1186](https://github.com/filebrowser/filebrowser/issues/1186)) ([7a5298a](https://github.com/filebrowser/filebrowser/commit/7a5298a7556f7dcc52f59b8ea76d040d3ddc3d12)) +* move files between different volumes (closes [#1177](https://github.com/filebrowser/filebrowser/issues/1177)) ([58835b7](https://github.com/filebrowser/filebrowser/commit/58835b7e535cc96e1c8a5d85821c1545743ca757)) +* recaptcha race condition ([#1176](https://github.com/filebrowser/filebrowser/issues/1176)) ([ac3673e](https://github.com/filebrowser/filebrowser/commit/ac3673e111afac6616af9650ca07028b6c27e6cd)) + +## [2.10.0](https://github.com/filebrowser/filebrowser/compare/v2.9.0...v2.10.0) (2020-11-24) + + +### Features + +* add hide dotfiles param ([#1148](https://github.com/filebrowser/filebrowser/issues/1148)) ([10e399b](https://github.com/filebrowser/filebrowser/commit/10e399b3c3dbdcfb4465a9d4138e1da6bae0873d)) +* add single click mode ([#1139](https://github.com/filebrowser/filebrowser/issues/1139)) ([e8b4e9a](https://github.com/filebrowser/filebrowser/commit/e8b4e9af46d6e99dbeb965dd9727d9ed017d52a2)) +* automatically jump to the next photo when deleting while previewing ([#1143](https://github.com/filebrowser/filebrowser/issues/1143)) ([9515cee](https://github.com/filebrowser/filebrowser/commit/9515ceeb42e5ef5267400220a2082dec775e843d)) +* shared folder file listing ([e119bc5](https://github.com/filebrowser/filebrowser/commit/e119bc55ea82cefcbcc0571650107dfd5d73f570)) +* shared item information ([36cacdf](https://github.com/filebrowser/filebrowser/commit/36cacdf598e4e09f064c8ace0ca7a6c24b23028e)) + + +### Bug Fixes + +* empty folder in archive ([7096b3d](https://github.com/filebrowser/filebrowser/commit/7096b3dab92441981c9964e4a6175af0a255d2be)) +* fix hanging when reading a named pipe file (closes [#1155](https://github.com/filebrowser/filebrowser/issues/1155)) ([586d198](https://github.com/filebrowser/filebrowser/commit/586d198d47b525eeccc6fe587573a3ad83adb4f6)) +* previewer title overflow ([4e48ffc](https://github.com/filebrowser/filebrowser/commit/4e48ffc14d09dabeea12dc495144277db62b5b7d)) +* resource rename action invalid path ([1ce3068](https://github.com/filebrowser/filebrowser/commit/1ce3068a99c80c153fd41359255d173bce6e79e8)) + +## [2.9.0](https://github.com/filebrowser/filebrowser/compare/v2.8.0...v2.9.0) (2020-10-21) + + +### Features + +* support WKWebview custom protocol ([#1113](https://github.com/filebrowser/filebrowser/issues/1113)) ([0ac80e8](https://github.com/filebrowser/filebrowser/commit/0ac80e8387a69924284259bde448af2813d84ed1)) + + +### Bug Fixes + +* allow start from Windows explorer ([f2c4e78](https://github.com/filebrowser/filebrowser/commit/f2c4e78381610879eda5316d38a999c89df6c14a)) +* file upload missing path slash ([5e27ba5](https://github.com/filebrowser/filebrowser/commit/5e27ba5c8c1be603c6ae7fec8de48e3532dea1f7)) +* preview case sensitive file extension ([05bff54](https://github.com/filebrowser/filebrowser/commit/05bff54b71543fd232f1089c40504d0cbfd106be)) +* search missing path slash ([2bd163d](https://github.com/filebrowser/filebrowser/commit/2bd163d92a856d65c8d4615e37898470c1edf2f4)) + +## [2.8.0](https://github.com/filebrowser/filebrowser/compare/v2.7.0...v2.8.0) (2020-10-05) + + +### Features + +* add disable exec flag ([#1090](https://github.com/filebrowser/filebrowser/issues/1090)) ([97693cc](https://github.com/filebrowser/filebrowser/commit/97693cc6117ce1c956baede91de5dd48b904e175)) + + +### Bug Fixes + +* empty commands setting ([c6d4fcd](https://github.com/filebrowser/filebrowser/commit/c6d4fcd08f5f1531c2cef514dc86019e23e7289f)) +* file upload path encoding ([babd778](https://github.com/filebrowser/filebrowser/commit/babd7783afe85b790e1c558375d7b5013b2d366f)) +* fix empty command name ([#1106](https://github.com/filebrowser/filebrowser/issues/1106)) ([36fb9f5](https://github.com/filebrowser/filebrowser/commit/36fb9f562a2c005ca4390fdebde0b4690201dff9)) +* fix panic when accessing nonexistent .js file in static path ([#1105](https://github.com/filebrowser/filebrowser/issues/1105)) ([ad99bf1](https://github.com/filebrowser/filebrowser/commit/ad99bf180197e0e6d82231a86457585de16366a8)) +* preview key shortcut conflict ([dd7b9dd](https://github.com/filebrowser/filebrowser/commit/dd7b9ddd8546361060ef99e838a691b2fc6c495a)) +* search results absolute url ([26d62e4](https://github.com/filebrowser/filebrowser/commit/26d62e411716a5eb9a5a703e47484cfb3fbf3bd0)) + +## [2.7.0](https://github.com/filebrowser/filebrowser/compare/v2.6.2...v2.7.0) (2020-09-11) + + +### Features + +* add --socket-perm flag to control unix socket file permissions (closes [#1060](https://github.com/filebrowser/filebrowser/issues/1060)) ([65ac734](https://github.com/filebrowser/filebrowser/commit/65ac73414fadc4686c94803a93ff319e8f7ce9d1)) +* preview mobile dropdown ([7787344](https://github.com/filebrowser/filebrowser/commit/778734419de314d4cb64d07109bbab73f8e2e42a)) +* preview size button ([3d2cb83](https://github.com/filebrowser/filebrowser/commit/3d2cb838d111ee61047599f49e76de80c821f341)) +* put selected files in the root of the archive (closes [#1065](https://github.com/filebrowser/filebrowser/issues/1065)) ([8142b32](https://github.com/filebrowser/filebrowser/commit/8142b32f3865eccd3331328e0d087f805d186ed5)) + +### [2.6.2](https://github.com/filebrowser/filebrowser/compare/v2.6.1...v2.6.2) (2020-08-05) + +### [2.6.1](https://github.com/filebrowser/filebrowser/compare/v2.6.0...v2.6.1) (2020-07-28) + + +### Bug Fixes + +* delete cached previews when deleting file ([f5d02cd](https://github.com/filebrowser/filebrowser/commit/f5d02cdde97923b963878abf5a300393b9feb348)) +* escape special characters in preview url (closes [#1002](https://github.com/filebrowser/filebrowser/issues/1002)) ([c9340af](https://github.com/filebrowser/filebrowser/commit/c9340af8d045671ad3338c5d2d887c335ab92de4)) + +## [2.6.0](https://github.com/filebrowser/filebrowser/compare/v2.5.0...v2.6.0) (2020-07-27) + + +### Features + +* add lazy load of image thumbnails ([bc00165](https://github.com/filebrowser/filebrowser/commit/bc001650944ae963b12b5b2538a68de7cd0d8f82)) +* add param to disable img resizing ([aa78e3a](https://github.com/filebrowser/filebrowser/commit/aa78e3ab1fcae6f618e811ba4e315a7a209f9df2)) +* cache resized images ([95bc929](https://github.com/filebrowser/filebrowser/commit/95bc92955f391ece22c40d9592f2a3e6e26907b9)) +* limit image resize workers ([94ef596](https://github.com/filebrowser/filebrowser/commit/94ef59602fb50fc21b1164feda90a3b9aeb5e972)) + + +### Bug Fixes + +* conflict handling on upload button ([f228fa5](https://github.com/filebrowser/filebrowser/commit/f228fa55408824618e9f0879da67c86d22b0d324)) +* drop feedback ([f2d2c1c](https://github.com/filebrowser/filebrowser/commit/f2d2c1cbf85fba3edffb7b079f121ed3f0bc1e02)) +* missing error message ([d9be370](https://github.com/filebrowser/filebrowser/commit/d9be370e2474b8070fa58db920c9481270cc4a48)) +* parent verification on copy ([727c63b](https://github.com/filebrowser/filebrowser/commit/727c63b98e2964d0960d25914c296570f6c79478)) +* path separator inconsistency on rename ([34dfb49](https://github.com/filebrowser/filebrowser/commit/34dfb49b719c948e709a4639b4af2c5cb73b3887)) + +## [2.5.0](https://github.com/filebrowser/filebrowser/compare/v2.4.0...v2.5.0) (2020-07-17) + + +### Features + +* add previewer title and loading indicator ([716396a](https://github.com/filebrowser/filebrowser/commit/716396a726329f0ba42fc34167dd07497c5bf47c)) +* duplicate files in the same directory ([43526d9](https://github.com/filebrowser/filebrowser/commit/43526d9d1a8c837245e3f5059e0b4737583eeaeb)) +* file copy, move and paste conflict checking ([eed9da1](https://github.com/filebrowser/filebrowser/commit/eed9da1471723ed3fbe6c00b1d6362b1c5fd8b04)) +* rename option on replace prompt ([2636f87](https://github.com/filebrowser/filebrowser/commit/2636f876ab8f88eea6d9548de524ca2339eb0843)) +* upload queue ([6ec6a23](https://github.com/filebrowser/filebrowser/commit/6ec6a2386173410f5cab9941dbf1bacb6b70ddd2)) + + +### Bug Fixes + +* blinking previewer ([9a2ebba](https://github.com/filebrowser/filebrowser/commit/9a2ebbabe2e9f0c292701d33f36f9b7a457b1164)) +* dark theme colors ([b3b6445](https://github.com/filebrowser/filebrowser/commit/b3b644527d5673e16e61d404ff58a3c7bd6b6637)) +* directory conflict checking ([7e5beef](https://github.com/filebrowser/filebrowser/commit/7e5beeff464e75ab185c430cd96e7cc67209ccc1)) +* prompt before closing window ([194030f](https://github.com/filebrowser/filebrowser/commit/194030fcfcf54a2cf5e2f8ececcbb4754474d8f8)) +* remove incomplete uploaded files ([0727496](https://github.com/filebrowser/filebrowser/commit/0727496601a9918c8131c56f62419bfac7ac589a)) +* reset clipboard after pasting cutted files ([10570ad](https://github.com/filebrowser/filebrowser/commit/10570ade442b573ebe00af08369e28b1b0688df6)) ## [2.4.0](https://github.com/filebrowser/filebrowser/compare/v2.3.0...v2.4.0) (2020-07-07) diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md new file mode 100644 index 00000000..28bdc607 --- /dev/null +++ b/CODE-OF-CONDUCT.md @@ -0,0 +1,46 @@ +# Code of Conduct + +## Contributor Covenant Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hacdias@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.4, available at [https://contributor-covenant.org/version/1/4](https://contributor-covenant.org/version/1/4). + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..f576a9f6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,115 @@ +# Building File Browser + +This project is archived on 2026-09-01. Pull requests are not accepted and no further changes are merged. This document is kept as build documentation for anyone wishing to build the project from source. + +## Project Structure + +The backend side of the application is written in [Go](https://golang.org/), while the frontend (located on a subdirectory of the same name) is written in [Vue.js](https://vuejs.org/). Due to the tight coupling required by some features, basic knowledge of both Go and Vue.js is recommended. + +* Learn Go: [https://github.com/golang/go/wiki/Learn](https://github.com/golang/go/wiki/Learn) +* Learn Vue.js: [https://vuejs.org/guide/introduction.html](https://vuejs.org/guide/introduction.html) + +We encourage you to use git to manage your fork. To clone the main repository, just run: + +```bash +git clone https://github.com/filebrowser/filebrowser +``` + +We use [Taskfile](https://taskfile.dev/) to manage the different processes (building, releasing, etc) automatically. + +## Build + +You can fully build the project in order to produce a binary by running: + +```bash +task build +``` + +## Development + +For development, there are a few things to have in mind. + +### Frontend + +We use [Node.js](https://nodejs.org/en/) on the frontend to manage the build process. Prepare the frontend environment: + +```bash +# From the root of the repo, go to frontend/ +cd frontend + +# Install the dependencies +pnpm install +``` + +If you just want to develop the backend, you can create a static build of the frontend: + +```bash +pnpm run build +``` + +If you want to develop the frontend, start a development server which watches for changes: + +```bash +pnpm run dev +``` + +Please note that you need to access File Browser's interface through the development server of the frontend. + +### Backend + +First prepare the backend environment by downloading all required dependencies: + +```bash +go mod download +``` + +You can now build or run File Browser as any other Go project: + +```bash +# Build +go build + +# Run +go run . +``` + +## Documentation + +Documentation lives in [`docs`](docs) as plain Markdown and is no longer built into a site. The command line reference in [`docs/cli`](docs/cli) is generated from the commands themselves: + +```bash +task docs:cli:generate +``` + +## Release + +To make a release, just run: + +```bash +task release +``` + +## Translations + +The Transifex integration stopped on 2026-09-01 and translations submitted there no longer reach this repository. Locale files live in [`frontend/src/i18n`](frontend/src/i18n) and can be edited directly. + +## Authentication Provider + +To build a new authentication provider, you need to implement the [Auther interface](https://github.com/filebrowser/filebrowser/blob/master/auth/auth.go), whose method will be called on the login page after the user has submitted their login data. + +```go +// Auther is the authentication interface. +type Auther interface { + // Auth is called to authenticate a request. + Auth(r *http.Request, s *users.Storage, root string) (*users.User, error) +} +``` + +After implementing the interface you should: + +1. Add it to [`auth` directory](https://github.com/filebrowser/filebrowser/blob/master/auth). +2. Add it to the [configuration parser](https://github.com/filebrowser/filebrowser/blob/master/cmd/config.go) for the CLI. +3. Add it to the [`authBackend.Get`](https://github.com/filebrowser/filebrowser/blob/master/storage/bolt/auth.go). + +If you need to add more flags, please update the function `addConfigFlags`. + diff --git a/Dockerfile b/Dockerfile index 549bd136..92bbe1d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,46 @@ -FROM alpine:latest as alpine -RUN apk --update add ca-certificates -RUN apk --update add mailcap +## Multistage build: First stage fetches dependencies +FROM alpine:3.23 AS fetcher -FROM scratch -COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt -COPY --from=alpine /etc/mime.types /etc/mime.types +# install and copy ca-certificates, mailcap, and tini-static; download JSON.sh +RUN apk update && \ + apk --no-cache add ca-certificates mailcap tini-static && \ + wget -O /JSON.sh https://raw.githubusercontent.com/dominictarr/JSON.sh/0d5e5c77365f63809bf6e77ef44a1f34b0e05840/JSON.sh + +## Second stage: Use lightweight BusyBox image for final runtime environment +FROM busybox:1.37.0-musl + +# Define non-root user UID and GID +ENV UID=1000 +ENV GID=1000 + +# Create user group and user +RUN addgroup -g $GID user && \ + adduser -D -u $UID -G user user + +# Copy binary, scripts, and configurations into image with proper ownership +COPY --chown=user:user filebrowser /bin/filebrowser +COPY --chown=user:user docker/common/ / +COPY --chown=user:user docker/alpine/ / +COPY --chown=user:user --from=fetcher /sbin/tini-static /bin/tini +COPY --from=fetcher /JSON.sh /JSON.sh +COPY --from=fetcher /etc/ca-certificates.conf /etc/ca-certificates.conf +COPY --from=fetcher /etc/ca-certificates /etc/ca-certificates +COPY --from=fetcher /etc/mime.types /etc/mime.types +COPY --from=fetcher /etc/ssl /etc/ssl + +# Create data directories, set ownership, and ensure healthcheck script is executable +RUN mkdir -p /config /database /srv && \ + chown -R user:user /config /database /srv \ + && chmod +x /healthcheck.sh + +# Define healthcheck script +HEALTHCHECK --start-period=2s --interval=5s --timeout=3s CMD /healthcheck.sh + +# Set the user, volumes and exposed ports +USER user + +VOLUME /srv /config /database -VOLUME /srv EXPOSE 80 -COPY .docker.json /.filebrowser.json -COPY filebrowser /filebrowser - -ENTRYPOINT [ "/filebrowser" ] +ENTRYPOINT [ "tini", "--", "/init.sh" ] diff --git a/Dockerfile.alpine b/Dockerfile.alpine deleted file mode 100644 index e5d35107..00000000 --- a/Dockerfile.alpine +++ /dev/null @@ -1,11 +0,0 @@ -FROM alpine:latest as alpine -RUN apk --update add ca-certificates -RUN apk --update add mailcap - -VOLUME /srv -EXPOSE 80 - -COPY .docker.json /.filebrowser.json -COPY filebrowser /filebrowser - -ENTRYPOINT [ "/filebrowser" ] diff --git a/Dockerfile.debian b/Dockerfile.debian deleted file mode 100644 index 42f120d5..00000000 --- a/Dockerfile.debian +++ /dev/null @@ -1,9 +0,0 @@ -FROM debian:buster - -VOLUME /srv -EXPOSE 80 - -COPY .docker.json /.filebrowser.json -COPY filebrowser /filebrowser - -ENTRYPOINT [ "/filebrowser" ] diff --git a/Dockerfile.s6 b/Dockerfile.s6 new file mode 100644 index 00000000..8b363cb3 --- /dev/null +++ b/Dockerfile.s6 @@ -0,0 +1,24 @@ +FROM ghcr.io/linuxserver/baseimage-alpine:3.23 + +RUN apk update && \ + apk --no-cache add ca-certificates mailcap jq libcap + +# Make user and create necessary directories +RUN mkdir -p /config /database /srv && \ + chown -R abc:abc /config /database /srv + +# Copy files and set permissions +COPY filebrowser /bin/filebrowser +COPY docker/common/ / +COPY docker/s6/ / + +RUN chown -R abc:abc /bin/filebrowser /defaults healthcheck.sh && \ + setcap 'cap_net_bind_service=+ep' /bin/filebrowser + +# Define healthcheck script +HEALTHCHECK --start-period=2s --interval=5s --timeout=3s CMD /healthcheck.sh + +# Set the volumes and exposed ports +VOLUME /srv /config /database + +EXPOSE 80 diff --git a/LICENSE b/LICENSE index 6011a2a4..c8db89a2 100644 --- a/LICENSE +++ b/LICENSE @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 File Browser contributors + Copyright 2018 File Browser Contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 32b33b8c..a22795e2 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,36 @@ +> [!WARNING] +> +> **File Browser is archived on 2026-09-01**. The last planned release has already shipped. There will be no further releases, bug fixes, or security fixes. +

- +

-![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif) +File Browser provides a file managing interface within a specified directory and it can be used to upload, delete, preview and edit your files. It is a **create-your-own-cloud**-kind of software where you can just install it on your server, direct it to a path and access your files through a nice web interface. -[![Travis](https://img.shields.io/travis/com/filebrowser/filebrowser.svg?style=flat-square)](https://travis-ci.com/filebrowser/filebrowser) -[![Go Report Card](https://goreportcard.com/badge/github.com/filebrowser/filebrowser?style=flat-square)](https://goreportcard.com/report/github.com/filebrowser/filebrowser) -[![Documentation](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/filebrowser/filebrowser) -[![Version](https://img.shields.io/github/release/filebrowser/filebrowser.svg?style=flat-square)](https://github.com/filebrowser/filebrowser/releases/latest) -[![Chat IRC](https://img.shields.io/badge/freenode-%23filebrowser-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23filebrowser) +**Background:** [Goodbye File Browser, for Real This Time](https://hacdias.com/2026/07/28/filebrowser/), July 2026. -filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app or as a middleware. +## Security -## Features +Published advisories are listed under [security advisories](https://github.com/filebrowser/filebrowser/security/advisories), +and reporting instructions are in [SECURITY.md](SECURITY.md). Two known issue classes +remain unaddressed and will not be fixed: -Please refer to our docs at [https://filebrowser.org/features](https://filebrowser.org/features) +- **Command execution, runner, and hooks.** This feature is plagued with vulnerabilities across many published advisories, and would need a full rewrite to be made safe. It is disabled by default; if you re-enable it with `--disable-exec=false`, treat the ability to run commands as equivalent to shell access on the host. Background: [#5199](https://github.com/filebrowser/filebrowser/issues/5199). +- **Session and JWT handling.** Sessions are self-contained JWTs rather than server-side identifiers, so they cannot be revoked, which means that logout, password changes, and renewal leave previously issued tokens valid until they expire, and the same refresh token can be redeemed repeatedly. Assume a leaked token is valid until expiry. Background: [#5216](https://github.com/filebrowser/filebrowser/issues/5216). -## Install +If you keep running File Browser, treat it as unmaintained software: -For installation instructions please refer to our docs at [https://filebrowser.org/installation](https://filebrowser.org/installation). +- **Do not expose it directly to the internet.** Put it behind a reverse proxy that terminates TLS and performs its own authentication. +- **Keep the command runner disabled.** It is off by default, so leave it off. See [#5199](https://github.com/filebrowser/filebrowser/issues/5199) and [`docs/command-execution.md`](docs/command-execution.md). +- **Run it unprivileged, inside a container**, with only the directory you intend to serve mounted into it. -## Configuration +## Documentation -[Authentication Method](https://filebrowser.org/configuration/authentication-method) - You can change the way the user authenticates with the filebrowser server +Documentation on how to install, configure, and build this project lives in [`docs`](docs) in this repository. -[Commander Runner](https://filebrowser.org/configuration/command-runner) - The command runner is a feature that enables you to execute any shell command you want before or after a certain event. +[CONTRIBUTING.md](CONTRIBUTING.md) documents how to build and develop the project, which remains useful to anyone forking it. -[Custom Branding](https://filebrowser.org/configuration/custom-branding) - You can customize your File Browser installation by change its name to any other you want, by adding a global custom style sheet and by using your own logotype if you want. +## License -## Contributing - -If you're interested in contributing to this project, our docs are best places to start [https://filebrowser.org/contributing](https://filebrowser.org/contributing). +[Apache License 2.0](LICENSE) © File Browser Contributors diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..f9a2989d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,30 @@ +# Security Policy + +## Supported Versions + +No version receives security fixes. The last planned release has already shipped and no further changes will be merged. + +| Version | Supported | +| ------- | --------- | +| 2.x | ❌ | +| < 2.0 | ❌ | + +## Before Reporting + +This project is being wound down. To avoid duplicates, first check the [existing advisories](https://github.com/filebrowser/filebrowser/security/advisories) and open issues, and confirm: + +- **It concerns this project, not a fork.** Reports about code, features, or endpoints that don't exist here belong to the relevant fork. +- **It isn't an already-known class** that remains unaddressed. Those are listed under [Security](README.md#security) in the README; reports covering them are likely to be closed as duplicates. + +## Reporting a Vulnerability + +Until 2026-09-01, report privately via the [Security](https://github.com/filebrowser/filebrowser/security) page. After that date this repository is read-only and reports can no longer be submitted. + +Please include, where possible: + +- The commit the issue was found at +- A plaintext proof of concept (no binaries) +- Steps to reproduce +- Recommended remediation, if any + +No fix will ship for any report: the last planned release has already shipped and no further changes will be merged. Reports may still be published as advisories so that people running File Browser can assess their exposure. diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 00000000..b1f81d43 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,57 @@ +version: '3' + +tasks: + build:frontend: + desc: Build frontend assets + dir: frontend + cmds: + - pnpm install --frozen-lockfile + - pnpm run build + + build:backend: + desc: Build backend binary + cmds: + - go build -ldflags='-s -w -X "github.com/filebrowser/filebrowser/v2/version.Version={{.VERSION}}" -X "github.com/filebrowser/filebrowser/v2/version.CommitSHA={{.GIT_COMMIT}}"' -o filebrowser . + vars: + GIT_COMMIT: + sh: git log -n 1 --format=%h + VERSION: + sh: git describe --tags --abbrev=0 --match=v* | cut -c 2- + + build: + desc: Build both frontend and backend + cmds: + - task: build:frontend + - task: build:backend + + release:make: + internal: true + prompt: Do you wish to proceed? + cmds: + - pnpm dlx commit-and-tag-version -s + + release:dry-run: + internal: true + cmds: + - pnpm dlx commit-and-tag-version --dry-run --skip + + release: + desc: Create a new release + cmds: + - task: docs:cli:generate + - git add docs/cli + - | + if [[ `git status docs/cli --porcelain` ]]; then + git commit -m 'chore(docs): update CLI documentation' + fi + - task: release:dry-run + - task: release:make + + docs:cli:generate: + cmds: + - rm -rf docs/cli + - mkdir -p docs/cli + - go run . docs + generates: + - docs/cli + diff --git a/auth/auth.go b/auth/auth.go index 72dc8f41..53d5d839 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -3,13 +3,14 @@ package auth import ( "net/http" + "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/users" ) // Auther is the authentication interface. type Auther interface { // Auth is called to authenticate a request. - Auth(r *http.Request, s *users.Storage, root string) (*users.User, error) + Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) // LoginPage indicates if this auther needs a login page. LoginPage() bool } diff --git a/auth/hook.go b/auth/hook.go new file mode 100644 index 00000000..6653cd9b --- /dev/null +++ b/auth/hook.go @@ -0,0 +1,288 @@ +package auth + +import ( + "encoding/json" + "errors" + "fmt" + "log" + "net/http" + "os" + "os/exec" + "slices" + "strings" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" + "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +// MethodHookAuth is used to identify hook auth. +const MethodHookAuth settings.AuthMethod = "hook" + +type hookCred struct { + Password string `json:"password"` + Username string `json:"username"` +} + +// HookAuth is a hook implementation of an Auther. +type HookAuth struct { + Users users.Store `json:"-"` + Settings *settings.Settings `json:"-"` + Server *settings.Server `json:"-"` + Cred hookCred `json:"-"` + Fields hookFields `json:"-"` + Command string `json:"command"` +} + +// Auth authenticates the user via a json in content body. +func (a *HookAuth) Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) { + var cred hookCred + + if r.Body == nil { + return nil, os.ErrPermission + } + + err := json.NewDecoder(r.Body).Decode(&cred) + if err != nil { + return nil, os.ErrPermission + } + + a.Users = usr + a.Settings = stg + a.Server = srv + a.Cred = cred + + action, err := a.RunCommand() + if err != nil { + return nil, err + } + + switch action { + case "auth": + u, err := a.SaveUser() + if err != nil { + return nil, err + } + return u, nil + case "block": + return nil, os.ErrPermission + case "pass": + u, err := a.Users.Get(a.Server.Root, a.Server.FollowExternalSymlinks, a.Cred.Username) + if err != nil || !users.CheckPwd(a.Cred.Password, u.Password) { + return nil, os.ErrPermission + } + return u, nil + default: + return nil, fmt.Errorf("invalid hook action: %s", action) + } +} + +// LoginPage tells that hook auth requires a login page. +func (a *HookAuth) LoginPage() bool { + return true +} + +// RunCommand starts the hook command and returns the action +func (a *HookAuth) RunCommand() (string, error) { + command := strings.Split(a.Command, " ") + + cmd := exec.Command(command[0], command[1:]...) + cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username)) + cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password)) + out, err := cmd.Output() + if err != nil { + return "", err + } + + a.GetValues(string(out)) + + return a.Fields.Values["hook.action"], nil +} + +// GetValues creates a map with values from the key-value format string +func (a *HookAuth) GetValues(s string) { + m := map[string]string{} + + // make line breaks consistent on Windows platform + s = strings.ReplaceAll(s, "\r\n", "\n") + + // iterate input lines + for val := range strings.Lines(s) { + v := strings.SplitN(val, "=", 2) + + // skips non key and value format + if len(v) != 2 { + continue + } + + fieldKey := strings.TrimSpace(v[0]) + fieldValue := strings.TrimSpace(v[1]) + + if a.Fields.IsValid(fieldKey) { + m[fieldKey] = fieldValue + } + } + + a.Fields.Values = m +} + +// SaveUser updates the existing user or creates a new one when not found +func (a *HookAuth) SaveUser() (*users.User, error) { + u, err := a.Users.Get(a.Server.Root, a.Server.FollowExternalSymlinks, a.Cred.Username) + if err != nil && !errors.Is(err, fberrors.ErrNotExist) { + return nil, err + } + + if u == nil { + pass, err := users.ValidateAndHashPwd(a.Cred.Password, a.Settings.MinimumPasswordLength) + if err != nil { + return nil, err + } + + // create user with the provided credentials + d := &users.User{ + Username: a.Cred.Username, + Password: pass, + Scope: a.Settings.Defaults.Scope, + Locale: a.Settings.Defaults.Locale, + ViewMode: a.Settings.Defaults.ViewMode, + SingleClick: a.Settings.Defaults.SingleClick, + RedirectAfterCopyMove: a.Settings.Defaults.RedirectAfterCopyMove, + Sorting: a.Settings.Defaults.Sorting, + Perm: a.Settings.Defaults.Perm, + Commands: a.Settings.Defaults.Commands, + DateFormat: a.Settings.Defaults.DateFormat, + HideDotfiles: a.Settings.Defaults.HideDotfiles, + } + u = a.GetUser(d) + + // A scope explicitly returned by the hook takes precedence over the + // automatic per-user home directory derivation. + _, explicitScope := a.Fields.Values["user.scope"] + derivedScope, err := a.Settings.CreateUserHome(u, a.Server.Root, explicitScope) + if err != nil { + return nil, err + } + log.Printf("user: %s, home dir: [%s].", u.Username, u.Scope) + + if err := a.Users.SaveProvisioned(u, derivedScope); err != nil { + return nil, err + } + } else if p := !users.CheckPwd(a.Cred.Password, u.Password); len(a.Fields.Values) > 1 || p { + u = a.GetUser(u) + + // update the password when it doesn't match the current + if p { + pass, err := users.ValidateAndHashPwd(a.Cred.Password, a.Settings.MinimumPasswordLength) + if err != nil { + return nil, err + } + u.Password = pass + } + + // update user with provided fields + err := a.Users.Update(u) + if err != nil { + return nil, err + } + } + + return u, nil +} + +// GetUser returns a User filled with hook values or provided defaults +func (a *HookAuth) GetUser(d *users.User) *users.User { + // adds all permissions when user is admin + isAdmin := a.Fields.GetBoolean("user.perm.admin", d.Perm.Admin) + perms := users.Permissions{ + Admin: isAdmin, + Execute: isAdmin || a.Fields.GetBoolean("user.perm.execute", d.Perm.Execute), + Create: isAdmin || a.Fields.GetBoolean("user.perm.create", d.Perm.Create), + Rename: isAdmin || a.Fields.GetBoolean("user.perm.rename", d.Perm.Rename), + Modify: isAdmin || a.Fields.GetBoolean("user.perm.modify", d.Perm.Modify), + Delete: isAdmin || a.Fields.GetBoolean("user.perm.delete", d.Perm.Delete), + Share: isAdmin || a.Fields.GetBoolean("user.perm.share", d.Perm.Share), + Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download), + } + user := users.User{ + ID: d.ID, + Username: d.Username, + Password: d.Password, + Scope: a.Fields.GetString("user.scope", d.Scope), + Locale: a.Fields.GetString("user.locale", d.Locale), + ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))), + SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick), + RedirectAfterCopyMove: a.Fields.GetBoolean("user.redirectAfterCopyMove", d.RedirectAfterCopyMove), + Sorting: files.Sorting{ + Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc), + By: a.Fields.GetString("user.sorting.by", d.Sorting.By), + }, + Commands: a.Fields.GetArray("user.commands", d.Commands), + DateFormat: a.Fields.GetBoolean("user.dateFormat", d.DateFormat), + HideDotfiles: a.Fields.GetBoolean("user.hideDotfiles", d.HideDotfiles), + Perm: perms, + LockPassword: true, + } + + return &user +} + +// hookFields is used to access fields from the hook +type hookFields struct { + Values map[string]string +} + +// validHookFields contains names of the fields that can be used +var validHookFields = []string{ + "hook.action", + "user.scope", + "user.locale", + "user.viewMode", + "user.singleClick", + "user.redirectAfterCopyMove", + "user.sorting.by", + "user.sorting.asc", + "user.commands", + "user.hideDotfiles", + "user.perm.admin", + "user.perm.execute", + "user.perm.create", + "user.perm.rename", + "user.perm.modify", + "user.perm.delete", + "user.perm.share", + "user.perm.download", +} + +// IsValid checks if the provided field is on the valid fields list +func (hf *hookFields) IsValid(field string) bool { + return slices.Contains(validHookFields, field) +} + +// GetString returns the string value or provided default +func (hf *hookFields) GetString(k, dv string) string { + val, ok := hf.Values[k] + if ok { + return val + } + return dv +} + +// GetBoolean returns the bool value or provided default +func (hf *hookFields) GetBoolean(k string, dv bool) bool { + val, ok := hf.Values[k] + if ok { + return val == "true" + } + return dv +} + +// GetArray returns the array value or provided default +func (hf *hookFields) GetArray(k string, dv []string) []string { + val, ok := hf.Values[k] + if ok && strings.TrimSpace(val) != "" { + return strings.Split(val, " ") + } + return dv +} diff --git a/auth/hook_test.go b/auth/hook_test.go new file mode 100644 index 00000000..10819759 --- /dev/null +++ b/auth/hook_test.go @@ -0,0 +1,156 @@ +package auth + +import ( + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +// writeHookScript writes a POSIX shell script to a temp file and returns its +// path, marking it executable. +func writeHookScript(t *testing.T, body string) string { + t.Helper() + path := filepath.Join(t.TempDir(), "hook.sh") + if err := os.WriteFile(path, []byte("#!/bin/sh\n"+body), 0o700); err != nil { + t.Fatalf("failed to write hook script: %v", err) + } + return path +} + +// TestRunCommandNoCredentialInjection ensures that attacker-controlled +// credentials submitted at the unauthenticated login endpoint cannot be +// injected into the hook command string. Credentials must only ever reach the +// hook through the USERNAME/PASSWORD environment variables, never via string +// substitution into the command itself (CWE-78/CWE-88). +func TestRunCommandNoCredentialInjection(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("uses POSIX shell") + } + + marker := filepath.Join(t.TempDir(), "pwned") + + // The hook simply blocks. If the credential were ever interpolated into the + // command string and evaluated by a shell, the embedded `touch` would + // create the marker file. + script := writeHookScript(t, "echo hook.action=block\n") + + a := &HookAuth{ + Command: script, + Cred: hookCred{ + Username: `"; touch ` + marker + `; #`, + Password: `$(touch ` + marker + `)`, + }, + } + + action, err := a.RunCommand() + if err != nil { + t.Fatalf("RunCommand returned error: %v", err) + } + if action != "block" { + t.Fatalf("expected action %q, got %q", "block", action) + } + if _, err := os.Stat(marker); err == nil { + t.Fatalf("credential injection executed: marker file %q was created", marker) + } +} + +// TestRunCommandReceivesCredentialsViaEnv verifies the supported contract: the +// hook receives credentials through the USERNAME and PASSWORD environment +// variables. +func TestRunCommandReceivesCredentialsViaEnv(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("uses POSIX shell") + } + + script := writeHookScript(t, `if [ "$USERNAME" = alice ] && [ "$PASSWORD" = secret ]; then + echo hook.action=auth +else + echo hook.action=block +fi +`) + + a := &HookAuth{ + Command: script, + Cred: hookCred{ + Username: "alice", + Password: "secret", + }, + } + + action, err := a.RunCommand() + if err != nil { + t.Fatalf("RunCommand returned error: %v", err) + } + if action != "auth" { + t.Fatalf("expected action %q, got %q", "auth", action) + } +} + +// newHookAuth builds a HookAuth for a freshly provisioned user with the given +// parsed hook fields (hook.action=auth is added automatically). +func newHookAuth(store *mockUserStore, s *settings.Settings, srv *settings.Server, username string, fields map[string]string) *HookAuth { + fields["hook.action"] = "auth" + return &HookAuth{ + Users: store, + Settings: s, + Server: srv, + Cred: hookCred{Username: username, Password: "a-strong-password"}, + Fields: hookFields{Values: fields}, + } +} + +// With CreateUserDir enabled and no explicit scope from the hook, a provisioned +// hook user must receive its own home directory rather than the server root. +func TestHookSaveUserCreateUserDirIsolatesScope(t *testing.T) { + t.Parallel() + + store := &mockUserStore{users: make(map[string]*users.User)} + srv := &settings.Server{Root: t.TempDir()} + s := &settings.Settings{ + Key: []byte("key"), + CreateUserDir: true, + UserHomeBasePath: "/users", + Defaults: settings.UserDefaults{ + Scope: ".", + Perm: users.Permissions{Create: true}, + }, + } + + u, err := newHookAuth(store, s, srv, "alice", map[string]string{}).SaveUser() + if err != nil { + t.Fatalf("SaveUser error: %v", err) + } + if u.Scope != "/users/alice" { + t.Errorf("hook user without explicit scope: expected /users/alice, got %q", u.Scope) + } +} + +// A scope explicitly returned by the hook takes precedence over the automatic +// per-user home directory derivation. +func TestHookSaveUserRespectsExplicitScope(t *testing.T) { + t.Parallel() + + store := &mockUserStore{users: make(map[string]*users.User)} + srv := &settings.Server{Root: t.TempDir()} + s := &settings.Settings{ + Key: []byte("key"), + CreateUserDir: true, + UserHomeBasePath: "/users", + Defaults: settings.UserDefaults{ + Scope: ".", + Perm: users.Permissions{Create: true}, + }, + } + + u, err := newHookAuth(store, s, srv, "teamlead", map[string]string{"user.scope": "/shared/team"}).SaveUser() + if err != nil { + t.Fatalf("SaveUser error: %v", err) + } + if u.Scope != "/shared/team" { + t.Errorf("explicit hook scope should win, got %q", u.Scope) + } +} diff --git a/auth/json.go b/auth/json.go index 641b73cd..be8ad1dc 100644 --- a/auth/json.go +++ b/auth/json.go @@ -14,6 +14,10 @@ import ( // MethodJSONAuth is used to identify json auth. const MethodJSONAuth settings.AuthMethod = "json" +// dummyHash is used to prevent user enumeration timing attacks. +// It MUST be a valid bcrypt hash. +const dummyHash = "$2a$10$O4mEMeOL/nit6zqe.WQXauLRbRlzb3IgLHsa26Pf0N/GiU9b.wK1m" + type jsonCred struct { Password string `json:"password"` Username string `json:"username"` @@ -26,7 +30,7 @@ type JSONAuth struct { } // Auth authenticates the user via a json in content body. -func (a JSONAuth) Auth(r *http.Request, sto *users.Storage, root string) (*users.User, error) { +func (a JSONAuth) Auth(r *http.Request, usr users.Store, _ *settings.Settings, srv *settings.Server) (*users.User, error) { var cred jsonCred if r.Body == nil { @@ -39,8 +43,8 @@ func (a JSONAuth) Auth(r *http.Request, sto *users.Storage, root string) (*users } // If ReCaptcha is enabled, check the code. - if a.ReCaptcha != nil && len(a.ReCaptcha.Secret) > 0 { - ok, err := a.ReCaptcha.Ok(cred.ReCaptcha) //nolint:shadow + if a.ReCaptcha != nil && a.ReCaptcha.Secret != "" { + ok, err := a.ReCaptcha.Ok(cred.ReCaptcha) if err != nil { return nil, err @@ -51,8 +55,18 @@ func (a JSONAuth) Auth(r *http.Request, sto *users.Storage, root string) (*users } } - u, err := sto.Get(root, cred.Username) - if err != nil || !users.CheckPwd(cred.Password, u.Password) { + u, err := usr.Get(srv.Root, srv.FollowExternalSymlinks, cred.Username) + + hash := dummyHash + if err == nil { + hash = u.Password + } + + if !users.CheckPwd(cred.Password, hash) { + return nil, os.ErrPermission + } + + if err != nil { return nil, os.ErrPermission } diff --git a/auth/none.go b/auth/none.go index 7e47baf7..30ea7129 100644 --- a/auth/none.go +++ b/auth/none.go @@ -14,8 +14,8 @@ const MethodNoAuth settings.AuthMethod = "noauth" type NoAuth struct{} // Auth uses authenticates user 1. -func (a NoAuth) Auth(r *http.Request, sto *users.Storage, root string) (*users.User, error) { - return sto.Get(root, uint(1)) +func (a NoAuth) Auth(_ *http.Request, usr users.Store, _ *settings.Settings, srv *settings.Server) (*users.User, error) { + return usr.Get(srv.Root, srv.FollowExternalSymlinks, uint(1)) } // LoginPage tells that no auth doesn't require a login page. diff --git a/auth/proxy.go b/auth/proxy.go index 21d072c7..5550f102 100644 --- a/auth/proxy.go +++ b/auth/proxy.go @@ -1,10 +1,10 @@ package auth import ( + "errors" "net/http" - "os" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/users" ) @@ -18,14 +18,48 @@ type ProxyAuth struct { } // Auth authenticates the user via an HTTP header. -func (a ProxyAuth) Auth(r *http.Request, sto *users.Storage, root string) (*users.User, error) { +func (a ProxyAuth) Auth(r *http.Request, usr users.Store, setting *settings.Settings, srv *settings.Server) (*users.User, error) { username := r.Header.Get(a.Header) - user, err := sto.Get(root, username) - if err == errors.ErrNotExist { - return nil, os.ErrPermission + user, err := usr.Get(srv.Root, srv.FollowExternalSymlinks, username) + if errors.Is(err, fberrors.ErrNotExist) { + return a.createUser(usr, setting, srv, username) + } + return user, err +} + +func (a ProxyAuth) createUser(usr users.Store, setting *settings.Settings, srv *settings.Server, username string) (*users.User, error) { + const randomPasswordLength = settings.DefaultMinimumPasswordLength + 10 + pwd, err := users.RandomPwd(randomPasswordLength) + if err != nil { + return nil, err } - return user, err + var hashedRandomPassword string + hashedRandomPassword, err = users.ValidateAndHashPwd(pwd, setting.MinimumPasswordLength) + if err != nil { + return nil, err + } + + user := &users.User{ + Username: username, + Password: hashedRandomPassword, + LockPassword: true, + } + setting.Defaults.Apply(user) + user.Perm.Admin = false + user.Perm.Execute = false + user.Commands = []string{} + + var derivedScope bool + if derivedScope, err = setting.CreateUserHome(user, srv.Root, false); err != nil { + return nil, err + } + + if err = usr.SaveProvisioned(user, derivedScope); err != nil { + return nil, err + } + + return user, nil } // LoginPage tells that proxy auth doesn't require a login page. diff --git a/auth/proxy_test.go b/auth/proxy_test.go new file mode 100644 index 00000000..5d9b5ace --- /dev/null +++ b/auth/proxy_test.go @@ -0,0 +1,142 @@ +package auth + +import ( + "net/http" + "strings" + "testing" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +type mockUserStore struct { + users map[string]*users.User +} + +func (m *mockUserStore) Get(_ string, _ bool, id interface{}) (*users.User, error) { + if v, ok := id.(string); ok { + if u, ok := m.users[v]; ok { + return u, nil + } + } + return nil, fberrors.ErrNotExist +} + +func (m *mockUserStore) GetByScope(scope string) (*users.User, error) { + for _, u := range m.users { + if strings.EqualFold(u.Scope, scope) { + return u, nil + } + } + return nil, fberrors.ErrNotExist +} + +func (m *mockUserStore) Gets(_ string, _ bool) ([]*users.User, error) { return nil, nil } +func (m *mockUserStore) Update(_ *users.User, _ ...string) error { return nil } +func (m *mockUserStore) Save(user *users.User) error { + m.users[user.Username] = user + return nil +} + +func (m *mockUserStore) SaveProvisioned(user *users.User, derivedScope bool) error { + if derivedScope { + if _, err := m.GetByScope(user.Scope); err == nil { + return fberrors.ErrExist + } + } + return m.Save(user) +} + +func (m *mockUserStore) Delete(_ interface{}) error { return nil } +func (m *mockUserStore) LastUpdate(_ uint) int64 { return 0 } + +func TestProxyAuthCreateUserRestrictsDefaults(t *testing.T) { + t.Parallel() + + store := &mockUserStore{users: make(map[string]*users.User)} + srv := &settings.Server{Root: t.TempDir()} + + s := &settings.Settings{ + Key: []byte("key"), + AuthMethod: MethodProxyAuth, + Defaults: settings.UserDefaults{ + Perm: users.Permissions{ + Admin: true, + Execute: true, + Create: true, + Rename: true, + Modify: true, + Delete: true, + Share: true, + Download: true, + }, + Commands: []string{"git", "ls", "cat", "id"}, + }, + } + + auth := ProxyAuth{Header: "X-Remote-User"} + req, _ := http.NewRequest(http.MethodGet, "/", http.NoBody) + req.Header.Set("X-Remote-User", "newproxyuser") + + user, err := auth.Auth(req, store, s, srv) + if err != nil { + t.Fatalf("Auth() error: %v", err) + } + + if user.Perm.Admin { + t.Error("auto-provisioned proxy user should not have Admin permission") + } + if user.Perm.Execute { + t.Error("auto-provisioned proxy user should not have Execute permission") + } + if len(user.Commands) != 0 { + t.Errorf("auto-provisioned proxy user should have empty Commands, got %v", user.Commands) + } + if !user.Perm.Create { + t.Error("auto-provisioned proxy user should retain Create permission from defaults") + } +} + +// With CreateUserDir enabled, two distinct proxy-authenticated users must each +// receive their own home directory instead of both inheriting the server root. +func TestProxyAuthCreateUserDirIsolatesScope(t *testing.T) { + t.Parallel() + + store := &mockUserStore{users: make(map[string]*users.User)} + srv := &settings.Server{Root: t.TempDir()} + s := &settings.Settings{ + Key: []byte("key"), + AuthMethod: MethodProxyAuth, + CreateUserDir: true, + UserHomeBasePath: "/users", + Defaults: settings.UserDefaults{ + Scope: ".", + Perm: users.Permissions{Create: true}, + }, + } + + auth := ProxyAuth{Header: "X-Remote-User"} + provision := func(name string) *users.User { + req, _ := http.NewRequest(http.MethodGet, "/", http.NoBody) + req.Header.Set("X-Remote-User", name) + u, err := auth.Auth(req, store, s, srv) + if err != nil { + t.Fatalf("Auth(%q) error: %v", name, err) + } + return u + } + + alice := provision("alice") + bob := provision("bob") + + if alice.Scope == "/" || bob.Scope == "/" { + t.Fatalf("provisioned users inherited the server root: alice=%q bob=%q", alice.Scope, bob.Scope) + } + if alice.Scope == bob.Scope { + t.Fatalf("distinct users must get distinct scopes, both got %q", alice.Scope) + } + if alice.Scope != "/users/alice" { + t.Errorf("expected /users/alice, got %q", alice.Scope) + } +} diff --git a/branding/banner.png b/branding/banner.png new file mode 100644 index 00000000..9a533bfc Binary files /dev/null and b/branding/banner.png differ diff --git a/branding/banner.svg b/branding/banner.svg new file mode 100644 index 00000000..85de7525 --- /dev/null +++ b/branding/banner.svg @@ -0,0 +1 @@ +File Browser diff --git a/branding/icon.png b/branding/icon.png new file mode 100644 index 00000000..ba267bc0 Binary files /dev/null and b/branding/icon.png differ diff --git a/branding/icon.svg b/branding/icon.svg new file mode 100644 index 00000000..df65444a --- /dev/null +++ b/branding/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/branding/logo.png b/branding/logo.png new file mode 100644 index 00000000..22225604 Binary files /dev/null and b/branding/logo.png differ diff --git a/branding/logo.svg b/branding/logo.svg new file mode 100644 index 00000000..dac88ae2 --- /dev/null +++ b/branding/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cmd/cmd.go b/cmd/cmd.go index 18f52337..2dc02107 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1,12 +1,6 @@ package cmd -import ( - "log" -) - // Execute executes the commands. -func Execute() { - if err := rootCmd.Execute(); err != nil { - log.Fatal(err) - } +func Execute() error { + return rootCmd.Execute() } diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go new file mode 100644 index 00000000..91a9c632 --- /dev/null +++ b/cmd/cmd_test.go @@ -0,0 +1,61 @@ +package cmd + +import ( + "testing" + + "github.com/samber/lo" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + + "github.com/filebrowser/filebrowser/v2/auth" + "github.com/filebrowser/filebrowser/v2/settings" +) + +// TestEnvCollisions ensures that there are no collisions in the produced environment +// variable names for all commands and their flags. +func TestEnvCollisions(t *testing.T) { + testEnvCollisions(t, rootCmd) +} + +func testEnvCollisions(t *testing.T, cmd *cobra.Command) { + for _, cmd := range cmd.Commands() { + testEnvCollisions(t, cmd) + } + + replacements := generateEnvKeyReplacements(cmd) + envVariables := []string{} + + for i := range replacements { + if i%2 != 0 { + envVariables = append(envVariables, replacements[i]) + } + } + + duplicates := lo.FindDuplicates(envVariables) + + if len(duplicates) > 0 { + t.Errorf("Found duplicate environment variable keys for command %q: %v", cmd.Name(), duplicates) + } +} + +// TestGetSettingsFollowExternalSymlinks ensures that the followExternalSymlinks +// flag is persisted to the server config when set via "config set". +func TestGetSettingsFollowExternalSymlinks(t *testing.T) { + flags := pflag.NewFlagSet("test", pflag.ContinueOnError) + addConfigFlags(flags) + + if err := flags.Parse([]string{"--followExternalSymlinks"}); err != nil { + t.Fatal(err) + } + + set := &settings.Settings{AuthMethod: auth.MethodJSONAuth} + ser := &settings.Server{} + + if _, err := getSettings(flags, set, ser, &auth.JSONAuth{}, false); err != nil { + t.Fatal(err) + } + + if !ser.FollowExternalSymlinks { + t.Error("expected FollowExternalSymlinks to be persisted as true") + } +} diff --git a/cmd/cmds_add.go b/cmd/cmds_add.go index 5706817b..a209b83f 100644 --- a/cmd/cmds_add.go +++ b/cmd/cmds_add.go @@ -14,14 +14,19 @@ var cmdsAddCmd = &cobra.Command{ Use: "add ", Short: "Add a command to run on a specific event", Long: `Add a command to run on a specific event.`, - Args: cobra.MinimumNArgs(2), //nolint:mnd - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) + Args: cobra.MinimumNArgs(2), + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { + s, err := st.Settings.Get() + if err != nil { + return err + } command := strings.Join(args[1:], " ") s.Commands[args[0]] = append(s.Commands[args[0]], command) - err = d.store.Settings.Save(s) - checkErr(err) + err = st.Settings.Save(s) + if err != nil { + return err + } printEvents(s.Commands) - }, pythonConfig{}), + return nil + }, storeOptions{}), } diff --git a/cmd/cmds_ls.go b/cmd/cmds_ls.go index 71f36382..694be178 100644 --- a/cmd/cmds_ls.go +++ b/cmd/cmds_ls.go @@ -14,10 +14,16 @@ var cmdsLsCmd = &cobra.Command{ Short: "List all commands for each event", Long: `List all commands for each event.`, Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - evt := mustGetString(cmd.Flags(), "event") + RunE: withStore(func(cmd *cobra.Command, _ []string, st *store) error { + s, err := st.Settings.Get() + if err != nil { + return err + } + + evt, err := cmd.Flags().GetString("event") + if err != nil { + return err + } if evt == "" { printEvents(s.Commands) @@ -27,5 +33,7 @@ var cmdsLsCmd = &cobra.Command{ show["after_"+evt] = s.Commands["after_"+evt] printEvents(show) } - }, pythonConfig{}), + + return nil + }, storeOptions{}), } diff --git a/cmd/cmds_rm.go b/cmd/cmds_rm.go index dc0c06f5..861f495f 100644 --- a/cmd/cmds_rm.go +++ b/cmd/cmds_rm.go @@ -23,7 +23,7 @@ You can also specify an optional parameter (index_end) so you can remove all commands from 'index' to 'index_end', including 'index_end'.`, Args: func(cmd *cobra.Command, args []string) error { - if err := cobra.RangeArgs(2, 3)(cmd, args); err != nil { //nolint:mnd + if err := cobra.RangeArgs(2, 3)(cmd, args); err != nil { return err } @@ -35,22 +35,31 @@ including 'index_end'.`, return nil }, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { + s, err := st.Settings.Get() + if err != nil { + return err + } evt := args[0] i, err := strconv.Atoi(args[1]) - checkErr(err) + if err != nil { + return err + } f := i - if len(args) == 3 { //nolint:mnd + if len(args) == 3 { f, err = strconv.Atoi(args[2]) - checkErr(err) + if err != nil { + return err + } } s.Commands[evt] = append(s.Commands[evt][:i], s.Commands[evt][f+1:]...) - err = d.store.Settings.Save(s) - checkErr(err) + err = st.Settings.Save(s) + if err != nil { + return err + } printEvents(s.Commands) - }, pythonConfig{}), + return nil + }, storeOptions{}), } diff --git a/cmd/config.go b/cmd/config.go index 8b69e7b7..b292f01d 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -2,7 +2,7 @@ package cmd import ( "encoding/json" - nerrors "errors" + "errors" "fmt" "os" "strings" @@ -12,7 +12,7 @@ import ( "github.com/spf13/pflag" "github.com/filebrowser/filebrowser/v2/auth" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/settings" ) @@ -30,24 +30,44 @@ var configCmd = &cobra.Command{ func addConfigFlags(flags *pflag.FlagSet) { addServerFlags(flags) addUserFlags(flags) + flags.BoolP("signup", "s", false, "allow users to signup") + flags.Bool("hideLoginButton", false, "hide login button from public pages") + flags.Bool("createUserDir", false, "generate user's home directory automatically") + flags.Uint("minimumPasswordLength", settings.DefaultMinimumPasswordLength, "minimum password length for new users") flags.String("shell", "", "shell command to which other commands should be appended") + // NB: these are string so they can be presented as octal in the help text + // as that's the conventional representation for modes in Unix. + flags.String("fileMode", fmt.Sprintf("%O", settings.DefaultFileMode), "mode bits that new files are created with") + flags.String("dirMode", fmt.Sprintf("%O", settings.DefaultDirMode), "mode bits that new directories are created with") + flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type") flags.String("auth.header", "", "HTTP header for auth.method=proxy") + flags.String("auth.command", "", "command for auth.method=hook") + flags.String("auth.logoutPage", "", "url of custom logout page") flags.String("recaptcha.host", "https://www.google.com", "use another host for ReCAPTCHA. recaptcha.net might be useful in China") flags.String("recaptcha.key", "", "ReCaptcha site key") flags.String("recaptcha.secret", "", "ReCaptcha secret") flags.String("branding.name", "", "replace 'File Browser' by this name") + flags.String("branding.theme", "", "set the theme") + flags.String("branding.color", "", "set the theme color") flags.String("branding.files", "", "path to directory with images and custom styles") flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links") + flags.Bool("branding.disableUsedPercentage", false, "disable used disk percentage graph") + + flags.Uint64("tus.chunkSize", settings.DefaultTusChunkSize, "the tus chunk size") + flags.Uint16("tus.retryCount", settings.DefaultTusRetryCount, "the tus retry count") } -//nolint:gocyclo -func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, auth.Auther) { - method := settings.AuthMethod(mustGetString(flags, "auth.method")) +func getAuthMethod(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, map[string]interface{}, error) { + methodStr, err := flags.GetString("auth.method") + if err != nil { + return "", nil, err + } + method := settings.AuthMethod(methodStr) var defaultAuther map[string]interface{} if len(defaults) > 0 { @@ -58,79 +78,143 @@ func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings. method = def.AuthMethod case auth.Auther: ms, err := json.Marshal(def) - checkErr(err) + if err != nil { + return "", nil, err + } err = json.Unmarshal(ms, &defaultAuther) - checkErr(err) + if err != nil { + return "", nil, err + } } } } } - var auther auth.Auther - if method == auth.MethodProxyAuth { - header := mustGetString(flags, "auth.header") - - if header == "" { - header = defaultAuther["header"].(string) - } - - if header == "" { - checkErr(nerrors.New("you must set the flag 'auth.header' for method 'proxy'")) - } - - auther = &auth.ProxyAuth{Header: header} - } - - if method == auth.MethodNoAuth { - auther = &auth.NoAuth{} - } - - if method == auth.MethodJSONAuth { - jsonAuth := &auth.JSONAuth{} - host := mustGetString(flags, "recaptcha.host") - key := mustGetString(flags, "recaptcha.key") - secret := mustGetString(flags, "recaptcha.secret") - - if key == "" { - if kmap, ok := defaultAuther["recaptcha"].(map[string]interface{}); ok { - key = kmap["key"].(string) - } - } - - if secret == "" { - if smap, ok := defaultAuther["recaptcha"].(map[string]interface{}); ok { - secret = smap["secret"].(string) - } - } - - if key != "" && secret != "" { - jsonAuth.ReCaptcha = &auth.ReCaptcha{ - Host: host, - Key: key, - Secret: secret, - } - } - auther = jsonAuth - } - - if auther == nil { - panic(errors.ErrInvalidAuthMethod) - } - - return method, auther + return method, defaultAuther, nil } -func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Auther) { +func getProxyAuth(flags *pflag.FlagSet, defaultAuther map[string]interface{}) (auth.Auther, error) { + header, err := flags.GetString("auth.header") + if err != nil { + return nil, err + } + + if header == "" && defaultAuther != nil { + header = defaultAuther["header"].(string) + } + + if header == "" { + return nil, errors.New("you must set the flag 'auth.header' for method 'proxy'") + } + + return &auth.ProxyAuth{Header: header}, nil +} + +func getNoAuth() auth.Auther { + return &auth.NoAuth{} +} + +func getJSONAuth(flags *pflag.FlagSet, defaultAuther map[string]interface{}) (auth.Auther, error) { + jsonAuth := &auth.JSONAuth{} + host, err := flags.GetString("recaptcha.host") + if err != nil { + return nil, err + } + + key, err := flags.GetString("recaptcha.key") + if err != nil { + return nil, err + } + + secret, err := flags.GetString("recaptcha.secret") + if err != nil { + return nil, err + } + + if key == "" { + if kmap, ok := defaultAuther["recaptcha"].(map[string]interface{}); ok { + key = kmap["key"].(string) + } + } + + if secret == "" { + if smap, ok := defaultAuther["recaptcha"].(map[string]interface{}); ok { + secret = smap["secret"].(string) + } + } + + if key != "" && secret != "" { + jsonAuth.ReCaptcha = &auth.ReCaptcha{ + Host: host, + Key: key, + Secret: secret, + } + } + return jsonAuth, nil +} + +func getHookAuth(flags *pflag.FlagSet, defaultAuther map[string]interface{}) (auth.Auther, error) { + command, err := flags.GetString("auth.command") + if err != nil { + return nil, err + } + if command == "" { + command = defaultAuther["command"].(string) + } + + if command == "" { + return nil, errors.New("you must set the flag 'auth.command' for method 'hook'") + } + + return &auth.HookAuth{Command: command}, nil +} + +func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, auth.Auther, error) { + method, defaultAuther, err := getAuthMethod(flags, defaults...) + if err != nil { + return "", nil, err + } + + var auther auth.Auther + switch method { + case auth.MethodProxyAuth: + auther, err = getProxyAuth(flags, defaultAuther) + case auth.MethodNoAuth: + auther = getNoAuth() + case auth.MethodJSONAuth: + auther, err = getJSONAuth(flags, defaultAuther) + case auth.MethodHookAuth: + auther, err = getHookAuth(flags, defaultAuther) + default: + return "", nil, fberrors.ErrInvalidAuthMethod + } + + if err != nil { + return "", nil, err + } + + return method, auther, nil +} + +func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Auther) error { w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) fmt.Fprintf(w, "Sign up:\t%t\n", set.Signup) + fmt.Fprintf(w, "Hide Login Button:\t%t\n", set.HideLoginButton) fmt.Fprintf(w, "Create User Dir:\t%t\n", set.CreateUserDir) - fmt.Fprintf(w, "Auth method:\t%s\n", set.AuthMethod) + fmt.Fprintf(w, "Logout Page:\t%s\n", set.LogoutPage) + fmt.Fprintf(w, "Minimum Password Length:\t%d\n", set.MinimumPasswordLength) + fmt.Fprintf(w, "Auth Method:\t%s\n", set.AuthMethod) fmt.Fprintf(w, "Shell:\t%s\t\n", strings.Join(set.Shell, " ")) + fmt.Fprintln(w, "\nBranding:") fmt.Fprintf(w, "\tName:\t%s\n", set.Branding.Name) fmt.Fprintf(w, "\tFiles override:\t%s\n", set.Branding.Files) fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal) + fmt.Fprintf(w, "\tDisable used disk percentage graph:\t%t\n", set.Branding.DisableUsedPercentage) + fmt.Fprintf(w, "\tColor:\t%s\n", set.Branding.Color) + fmt.Fprintf(w, "\tTheme:\t%s\n", set.Branding.Theme) + fmt.Fprintln(w, "\nServer:") fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log) fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port) @@ -140,14 +224,34 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\tAddress:\t%s\n", ser.Address) fmt.Fprintf(w, "\tTLS Cert:\t%s\n", ser.TLSCert) fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey) + fmt.Fprintf(w, "\tToken Expiration Time:\t%s\n", ser.TokenExpirationTime) + fmt.Fprintf(w, "\tExec Enabled:\t%t\n", ser.EnableExec) + fmt.Fprintf(w, "\tThumbnails Enabled:\t%t\n", ser.EnableThumbnails) + fmt.Fprintf(w, "\tResize Preview:\t%t\n", ser.ResizePreview) + fmt.Fprintf(w, "\tType Detection by Header:\t%t\n", ser.TypeDetectionByHeader) + fmt.Fprintf(w, "\tFollow External Symlinks:\t%t\n", ser.FollowExternalSymlinks) + + fmt.Fprintln(w, "\nTUS:") + fmt.Fprintf(w, "\tChunk size:\t%d\n", set.Tus.ChunkSize) + fmt.Fprintf(w, "\tRetry count:\t%d\n", set.Tus.RetryCount) + fmt.Fprintln(w, "\nDefaults:") fmt.Fprintf(w, "\tScope:\t%s\n", set.Defaults.Scope) + fmt.Fprintf(w, "\tDateFormat:\t%t\n", set.Defaults.DateFormat) + fmt.Fprintf(w, "\tHideDotfiles:\t%t\n", set.Defaults.HideDotfiles) fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale) fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode) + fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick) + fmt.Fprintf(w, "\tRedirect after Copy/Move:\t%t\n", set.Defaults.RedirectAfterCopyMove) + fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode) + fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode) fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " ")) + fmt.Fprintf(w, "\tAce editor syntax highlighting theme:\t%s\n", set.Defaults.AceEditorTheme) + fmt.Fprintf(w, "\tSorting:\n") fmt.Fprintf(w, "\t\tBy:\t%s\n", set.Defaults.Sorting.By) fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.Defaults.Sorting.Asc) + fmt.Fprintf(w, "\tPermissions:\n") fmt.Fprintf(w, "\t\tAdmin:\t%t\n", set.Defaults.Perm.Admin) fmt.Fprintf(w, "\t\tExecute:\t%t\n", set.Defaults.Perm.Execute) @@ -157,9 +261,135 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\t\tDelete:\t%t\n", set.Defaults.Perm.Delete) fmt.Fprintf(w, "\t\tShare:\t%t\n", set.Defaults.Perm.Share) fmt.Fprintf(w, "\t\tDownload:\t%t\n", set.Defaults.Perm.Download) + w.Flush() b, err := json.MarshalIndent(auther, "", " ") - checkErr(err) + if err != nil { + return err + } fmt.Printf("\nAuther configuration (raw):\n\n%s\n\n", string(b)) + return nil +} + +func getSettings(flags *pflag.FlagSet, set *settings.Settings, ser *settings.Server, auther auth.Auther, all bool) (auth.Auther, error) { + errs := []error{} + hasAuth := false + + visit := func(flag *pflag.Flag) { + var err error + + switch flag.Name { + // Server flags from [addServerFlags] + case "address": + ser.Address, err = flags.GetString(flag.Name) + case "log": + ser.Log, err = flags.GetString(flag.Name) + case "port": + ser.Port, err = flags.GetString(flag.Name) + case "cert": + ser.TLSCert, err = flags.GetString(flag.Name) + case "key": + ser.TLSKey, err = flags.GetString(flag.Name) + case "root": + ser.Root, err = flags.GetString(flag.Name) + case "socket": + ser.Socket, err = flags.GetString(flag.Name) + case "baseURL": + ser.BaseURL, err = flags.GetString(flag.Name) + case "tokenExpirationTime": + ser.TokenExpirationTime, err = flags.GetString(flag.Name) + case "disableThumbnails": + ser.EnableThumbnails, err = flags.GetBool(flag.Name) + ser.EnableThumbnails = !ser.EnableThumbnails + case "disablePreviewResize": + ser.ResizePreview, err = flags.GetBool(flag.Name) + ser.ResizePreview = !ser.ResizePreview + case "disableExec": + ser.EnableExec, err = flags.GetBool(flag.Name) + ser.EnableExec = !ser.EnableExec + case "disableTypeDetectionByHeader": + ser.TypeDetectionByHeader, err = flags.GetBool(flag.Name) + ser.TypeDetectionByHeader = !ser.TypeDetectionByHeader + case "disableImageResolutionCalc": + ser.ImageResolutionCal, err = flags.GetBool(flag.Name) + ser.ImageResolutionCal = !ser.ImageResolutionCal + case "followExternalSymlinks": + ser.FollowExternalSymlinks, err = flags.GetBool(flag.Name) + + // Settings flags from [addConfigFlags] + case "signup": + set.Signup, err = flags.GetBool(flag.Name) + case "hideLoginButton": + set.HideLoginButton, err = flags.GetBool(flag.Name) + case "createUserDir": + set.CreateUserDir, err = flags.GetBool(flag.Name) + case "minimumPasswordLength": + set.MinimumPasswordLength, err = flags.GetUint(flag.Name) + case "shell": + var shell string + shell, err = flags.GetString(flag.Name) + if err == nil { + set.Shell = convertCmdStrToCmdArray(shell) + } + case "fileMode": + set.FileMode, err = getAndParseFileMode(flags, flag.Name) + case "dirMode": + set.DirMode, err = getAndParseFileMode(flags, flag.Name) + case "auth.method": + hasAuth = true + case "auth.logoutPage": + set.LogoutPage, err = flags.GetString(flag.Name) + case "branding.name": + set.Branding.Name, err = flags.GetString(flag.Name) + case "branding.theme": + set.Branding.Theme, err = flags.GetString(flag.Name) + case "branding.color": + set.Branding.Color, err = flags.GetString(flag.Name) + case "branding.files": + set.Branding.Files, err = flags.GetString(flag.Name) + case "branding.disableExternal": + set.Branding.DisableExternal, err = flags.GetBool(flag.Name) + case "branding.disableUsedPercentage": + set.Branding.DisableUsedPercentage, err = flags.GetBool(flag.Name) + case "tus.chunkSize": + set.Tus.ChunkSize, err = flags.GetUint64(flag.Name) + case "tus.retryCount": + set.Tus.RetryCount, err = flags.GetUint16(flag.Name) + } + + if err != nil { + errs = append(errs, err) + } + } + + if all { + flags.VisitAll(visit) + } else { + flags.Visit(visit) + } + + err := errors.Join(errs...) + if err != nil { + return nil, err + } + + err = getUserDefaults(flags, &set.Defaults, all) + if err != nil { + return nil, err + } + + if all { + set.AuthMethod, auther, err = getAuthentication(flags) + if err != nil { + return nil, err + } + } else { + set.AuthMethod, auther, err = getAuthentication(flags, hasAuth, set, auther) + if err != nil { + return nil, err + } + } + + return auther, nil } diff --git a/cmd/config_cat.go b/cmd/config_cat.go index eca56dd1..b8d2f48f 100644 --- a/cmd/config_cat.go +++ b/cmd/config_cat.go @@ -13,13 +13,19 @@ var configCatCmd = &cobra.Command{ Short: "Prints the configuration", Long: `Prints the configuration.`, Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - set, err := d.store.Settings.Get() - checkErr(err) - ser, err := d.store.Settings.GetServer() - checkErr(err) - auther, err := d.store.Auth.Get(set.AuthMethod) - checkErr(err) - printSettings(ser, set, auther) - }, pythonConfig{}), + RunE: withStore(func(_ *cobra.Command, _ []string, st *store) error { + set, err := st.Settings.Get() + if err != nil { + return err + } + ser, err := st.Settings.GetServer() + if err != nil { + return err + } + auther, err := st.Auth.Get(set.AuthMethod) + if err != nil { + return err + } + return printSettings(ser, set, auther) + }, storeOptions{}), } diff --git a/cmd/config_export.go b/cmd/config_export.go index 9d6450f9..b19c10b6 100644 --- a/cmd/config_export.go +++ b/cmd/config_export.go @@ -15,15 +15,21 @@ var configExportCmd = &cobra.Command{ json or yaml file. This exported configuration can be changed, and imported again with 'config import' command.`, Args: jsonYamlArg, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - settings, err := d.store.Settings.Get() - checkErr(err) + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { + settings, err := st.Settings.Get() + if err != nil { + return err + } - server, err := d.store.Settings.GetServer() - checkErr(err) + server, err := st.Settings.GetServer() + if err != nil { + return err + } - auther, err := d.store.Auth.Get(settings.AuthMethod) - checkErr(err) + auther, err := st.Auth.Get(settings.AuthMethod) + if err != nil { + return err + } data := &settingsFile{ Settings: settings, @@ -32,6 +38,9 @@ and imported again with 'config import' command.`, } err = marshal(args[0], data) - checkErr(err) - }, pythonConfig{}), + if err != nil { + return err + } + return nil + }, storeOptions{}), } diff --git a/cmd/config_import.go b/cmd/config_import.go index 7871a9f8..8019bbb8 100644 --- a/cmd/config_import.go +++ b/cmd/config_import.go @@ -3,7 +3,6 @@ package cmd import ( "encoding/json" "errors" - "path/filepath" "reflect" "github.com/spf13/cobra" @@ -34,59 +33,88 @@ database. The path must be for a json or yaml file.`, Args: jsonYamlArg, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { var key []byte - if d.hadDB { - settings, err := d.store.Settings.Get() - checkErr(err) + var err error + if st.databaseExisted { + settings, settingErr := st.Settings.Get() + if settingErr != nil { + return settingErr + } key = settings.Key } else { key = generateKey() } file := settingsFile{} - err := unmarshal(args[0], &file) - checkErr(err) + err = unmarshal(args[0], &file) + if err != nil { + return err + } + + if file.Settings == nil || file.Server == nil { + return errors.New("invalid configuration file: 'settings' or 'server' fields are missing. Please ensure you are importing a file generated by the 'config export' command") + } file.Settings.Key = key - err = d.store.Settings.Save(file.Settings) - checkErr(err) - - err = d.store.Settings.SaveServer(file.Server) - checkErr(err) - - var rawAuther interface{} - if filepath.Ext(args[0]) != ".json" { //nolint:goconst - rawAuther = cleanUpInterfaceMap(file.Auther.(map[interface{}]interface{})) - } else { - rawAuther = file.Auther + err = st.Settings.Save(file.Settings) + if err != nil { + return err } + err = st.Settings.SaveServer(file.Server) + if err != nil { + return err + } + + var rawAuther = file.Auther + var auther auth.Auther + var autherErr error switch file.Settings.AuthMethod { case auth.MethodJSONAuth: - auther = getAuther(auth.JSONAuth{}, rawAuther).(*auth.JSONAuth) + var a interface{} + a, autherErr = getAuther(auth.JSONAuth{}, rawAuther) + auther = a.(*auth.JSONAuth) case auth.MethodNoAuth: - auther = getAuther(auth.NoAuth{}, rawAuther).(*auth.NoAuth) + var a interface{} + a, autherErr = getAuther(auth.NoAuth{}, rawAuther) + auther = a.(*auth.NoAuth) case auth.MethodProxyAuth: - auther = getAuther(auth.ProxyAuth{}, rawAuther).(*auth.ProxyAuth) + var a interface{} + a, autherErr = getAuther(auth.ProxyAuth{}, rawAuther) + auther = a.(*auth.ProxyAuth) + case auth.MethodHookAuth: + var a interface{} + a, autherErr = getAuther(&auth.HookAuth{}, rawAuther) + auther = a.(*auth.HookAuth) default: - checkErr(errors.New("invalid auth method")) + return errors.New("invalid auth method") } - err = d.store.Auth.Save(auther) - checkErr(err) + if autherErr != nil { + return autherErr + } - printSettings(file.Server, file.Settings, auther) - }, pythonConfig{allowNoDB: true}), + err = st.Auth.Save(auther) + if err != nil { + return err + } + + return printSettings(file.Server, file.Settings, auther) + }, storeOptions{allowsNoDatabase: true}), } -func getAuther(sample auth.Auther, data interface{}) interface{} { +func getAuther(sample auth.Auther, data interface{}) (interface{}, error) { authType := reflect.TypeOf(sample) auther := reflect.New(authType).Interface() bytes, err := json.Marshal(data) - checkErr(err) + if err != nil { + return nil, err + } err = json.Unmarshal(bytes, &auther) - checkErr(err) - return auther + if err != nil { + return nil, err + } + return auther, nil } diff --git a/cmd/config_init.go b/cmd/config_init.go index 86a69914..359d02a3 100644 --- a/cmd/config_init.go +++ b/cmd/config_init.go @@ -2,7 +2,6 @@ package cmd import ( "fmt" - "strings" "github.com/spf13/cobra" @@ -23,48 +22,40 @@ this options can be changed in the future with the command to the defaults when creating new users and you don't override the options.`, Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - defaults := settings.UserDefaults{} + RunE: withStore(func(cmd *cobra.Command, _ []string, st *store) error { flags := cmd.Flags() - getUserDefaults(flags, &defaults, true) - authMethod, auther := getAuthentication(flags) - s := &settings.Settings{ - Key: generateKey(), - Signup: mustGetBool(flags, "signup"), - Shell: strings.Split(strings.TrimSpace(mustGetString(flags, "shell")), " "), - AuthMethod: authMethod, - Defaults: defaults, - Branding: settings.Branding{ - Name: mustGetString(flags, "branding.name"), - DisableExternal: mustGetBool(flags, "branding.disableExternal"), - Files: mustGetString(flags, "branding.files"), - }, + // Initialize config + s := &settings.Settings{Key: generateKey()} + ser := &settings.Server{} + + // Fill config with options + auther, err := getSettings(flags, s, ser, nil, true) + if err != nil { + return err } - ser := &settings.Server{ - Address: mustGetString(flags, "address"), - Socket: mustGetString(flags, "socket"), - Root: mustGetString(flags, "root"), - BaseURL: mustGetString(flags, "baseurl"), - TLSKey: mustGetString(flags, "key"), - TLSCert: mustGetString(flags, "cert"), - Port: mustGetString(flags, "port"), - Log: mustGetString(flags, "log"), + // Save updated config + err = st.Settings.Save(s) + if err != nil { + return err } - err := d.store.Settings.Save(s) - checkErr(err) - err = d.store.Settings.SaveServer(ser) - checkErr(err) - err = d.store.Auth.Save(auther) - checkErr(err) + err = st.Settings.SaveServer(ser) + if err != nil { + return err + } + + err = st.Auth.Save(auther) + if err != nil { + return err + } fmt.Printf(` Congratulations! You've set up your database to use with File Browser. -Now add your first user via 'filebrowser users new' and then you just +Now add your first user via 'filebrowser users add' and then you just need to call the main command to boot up the server. `) - printSettings(ser, s, auther) - }, pythonConfig{noDB: true}), + return printSettings(ser, s, auther) + }, storeOptions{expectsNoDatabase: true}), } diff --git a/cmd/config_set.go b/cmd/config_set.go index 9b49b234..df357a02 100644 --- a/cmd/config_set.go +++ b/cmd/config_set.go @@ -1,10 +1,7 @@ package cmd import ( - "strings" - "github.com/spf13/cobra" - "github.com/spf13/pflag" ) func init() { @@ -18,63 +15,47 @@ var configSetCmd = &cobra.Command{ Long: `Updates the configuration. Set the flags for the options you want to change. Other options will remain unchanged.`, Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + RunE: withStore(func(cmd *cobra.Command, _ []string, st *store) error { flags := cmd.Flags() - set, err := d.store.Settings.Get() - checkErr(err) - ser, err := d.store.Settings.GetServer() - checkErr(err) + // Read existing config + set, err := st.Settings.Get() + if err != nil { + return err + } - hasAuth := false - flags.Visit(func(flag *pflag.Flag) { - switch flag.Name { - case "baseurl": - ser.BaseURL = mustGetString(flags, flag.Name) - case "root": - ser.Root = mustGetString(flags, flag.Name) - case "socket": - ser.Socket = mustGetString(flags, flag.Name) - case "cert": - ser.TLSCert = mustGetString(flags, flag.Name) - case "key": - ser.TLSKey = mustGetString(flags, flag.Name) - case "address": - ser.Address = mustGetString(flags, flag.Name) - case "port": - ser.Port = mustGetString(flags, flag.Name) - case "log": - ser.Log = mustGetString(flags, flag.Name) - case "signup": - set.Signup = mustGetBool(flags, flag.Name) - case "auth.method": - hasAuth = true - case "shell": - set.Shell = strings.Split(strings.TrimSpace(mustGetString(flags, flag.Name)), " ") - case "branding.name": - set.Branding.Name = mustGetString(flags, flag.Name) - case "branding.disableExternal": - set.Branding.DisableExternal = mustGetBool(flags, flag.Name) - case "branding.files": - set.Branding.Files = mustGetString(flags, flag.Name) - } - }) + ser, err := st.Settings.GetServer() + if err != nil { + return err + } - getUserDefaults(flags, &set.Defaults, false) + auther, err := st.Auth.Get(set.AuthMethod) + if err != nil { + return err + } - // read the defaults - auther, err := d.store.Auth.Get(set.AuthMethod) - checkErr(err) + // Get updated config + auther, err = getSettings(flags, set, ser, auther, false) + if err != nil { + return err + } - // check if there are new flags for existing auth method - set.AuthMethod, auther = getAuthentication(flags, hasAuth, set, auther) + // Save updated config + err = st.Auth.Save(auther) + if err != nil { + return err + } - err = d.store.Auth.Save(auther) - checkErr(err) - err = d.store.Settings.Save(set) - checkErr(err) - err = d.store.Settings.SaveServer(ser) - checkErr(err) - printSettings(ser, set, auther) - }, pythonConfig{}), + err = st.Settings.Save(set) + if err != nil { + return err + } + + err = st.Settings.SaveServer(ser) + if err != nil { + return err + } + + return printSettings(ser, set, auther) + }, storeOptions{}), } diff --git a/cmd/docs.go b/cmd/docs.go index 9ebb9573..15cc73c3 100644 --- a/cmd/docs.go +++ b/cmd/docs.go @@ -3,137 +3,80 @@ package cmd import ( "bytes" "fmt" - "io" "os" - "path/filepath" - "sort" + "path" + "regexp" "strings" "github.com/spf13/cobra" - "github.com/spf13/pflag" + "github.com/spf13/cobra/doc" ) func init() { rootCmd.AddCommand(docsCmd) - docsCmd.Flags().StringP("path", "p", "./docs", "path to save the docs") -} - -func printToc(names []string) { - for i, name := range names { - name = strings.TrimSuffix(name, filepath.Ext(name)) - name = strings.Replace(name, "-", " ", -1) - names[i] = name - } - - sort.Strings(names) - - toc := "" - for _, name := range names { - toc += "* [" + name + "](cli/" + strings.Replace(name, " ", "-", -1) + ".md)\n" - } - - fmt.Println(toc) + docsCmd.Flags().String("out", "docs/cli", "directory to write the docs to") } var docsCmd = &cobra.Command{ Use: "docs", Hidden: true, Args: cobra.NoArgs, - Run: func(cmd *cobra.Command, args []string) { - dir := mustGetString(cmd.Flags(), "path") - generateDocs(rootCmd, dir) - names := []string{} + RunE: func(cmd *cobra.Command, _ []string) error { + outputDir, err := cmd.Flags().GetString("out") + if err != nil { + return err + } - err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if err != nil || info.IsDir() { + tempDir, err := os.MkdirTemp(os.TempDir(), "filebrowser-docs-") + if err != nil { + return err + } + defer os.RemoveAll(tempDir) + + rootCmd.Root().DisableAutoGenTag = true + + err = doc.GenMarkdownTreeCustom(cmd.Root(), tempDir, func(_ string) string { + return "" + }, func(s string) string { + return s + }) + if err != nil { + return err + } + + entries, err := os.ReadDir(tempDir) + if err != nil { + return err + } + + headerRegex := regexp.MustCompile(`(?m)^(##)(.*)$`) + linkRegex := regexp.MustCompile(`\(filebrowser(.*)\.md\)`) + + fmt.Println("Generated Documents:") + + for _, entry := range entries { + srcPath := path.Join(tempDir, entry.Name()) + dstPath := path.Join(outputDir, strings.ReplaceAll(entry.Name(), "_", "-")) + + data, err := os.ReadFile(srcPath) + if err != nil { return err } - if !strings.HasPrefix(info.Name(), "filebrowser") { - return nil + data = headerRegex.ReplaceAll(data, []byte("#$2")) + data = linkRegex.ReplaceAllFunc(data, func(b []byte) []byte { + return bytes.ReplaceAll(b, []byte("_"), []byte("-")) + }) + data = bytes.ReplaceAll(data, []byte("## SEE ALSO"), []byte("## See Also")) + + err = os.WriteFile(dstPath, data, 0666) + if err != nil { + return err } - names = append(names, info.Name()) - return nil - }) - - checkErr(err) - printToc(names) - }, -} - -func generateDocs(cmd *cobra.Command, dir string) { - for _, c := range cmd.Commands() { - if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { - continue + fmt.Println("- " + dstPath) } - generateDocs(c, dir) - } - - basename := strings.Replace(cmd.CommandPath(), " ", "-", -1) + ".md" - filename := filepath.Join(dir, basename) - f, err := os.Create(filename) - checkErr(err) - defer f.Close() - generateMarkdown(cmd, f) -} - -func generateMarkdown(cmd *cobra.Command, w io.Writer) { - cmd.InitDefaultHelpCmd() - cmd.InitDefaultHelpFlag() - - buf := new(bytes.Buffer) - name := cmd.CommandPath() - - short := cmd.Short - long := cmd.Long - if long == "" { - long = short - } - - buf.WriteString("---\ndescription: " + short + "\n---\n\n") - buf.WriteString("# " + name + "\n\n") - buf.WriteString("## Synopsis\n\n") - buf.WriteString(long + "\n\n") - - if cmd.Runnable() { - buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine())) - } - - if len(cmd.Example) > 0 { - buf.WriteString("## Examples\n\n") - buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example)) - } - - printOptions(buf, cmd) - _, err := buf.WriteTo(w) - checkErr(err) -} - -func generateFlagsTable(fs *pflag.FlagSet, buf io.StringWriter) { - _, _ = buf.WriteString("| Name | Shorthand | Usage |\n") - _, _ = buf.WriteString("|------|-----------|-------|\n") - - fs.VisitAll(func(f *pflag.Flag) { - _, _ = buf.WriteString("|" + f.Name + "|" + f.Shorthand + "|" + f.Usage + "|\n") - }) -} - -func printOptions(buf *bytes.Buffer, cmd *cobra.Command) { - flags := cmd.NonInheritedFlags() - flags.SetOutput(buf) - if flags.HasAvailableFlags() { - buf.WriteString("## Options\n\n") - generateFlagsTable(flags, buf) - buf.WriteString("\n") - } - - parentFlags := cmd.InheritedFlags() - parentFlags.SetOutput(buf) - if parentFlags.HasAvailableFlags() { - buf.WriteString("### Inherited\n\n") - generateFlagsTable(parentFlags, buf) - buf.WriteString("\n") - } + return nil + }, } diff --git a/cmd/hash.go b/cmd/hash.go index 1d472a3c..3e7d8cdc 100644 --- a/cmd/hash.go +++ b/cmd/hash.go @@ -17,9 +17,12 @@ var hashCmd = &cobra.Command{ Short: "Hashes a password", Long: `Hashes a password using bcrypt algorithm.`, Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { + RunE: func(_ *cobra.Command, args []string) error { pwd, err := users.HashPwd(args[0]) - checkErr(err) + if err != nil { + return err + } fmt.Println(pwd) + return nil }, } diff --git a/cmd/root.go b/cmd/root.go index 8f23e95c..0c6c973b 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,9 +1,12 @@ package cmd import ( + "context" "crypto/tls" "errors" - "io/ioutil" + "fmt" + "io" + "io/fs" "log" "net" "net/http" @@ -12,41 +15,88 @@ import ( "path/filepath" "strings" "syscall" + "time" - homedir "github.com/mitchellh/go-homedir" + "github.com/spf13/afero" "github.com/spf13/cobra" "github.com/spf13/pflag" - v "github.com/spf13/viper" + "github.com/spf13/viper" lumberjack "gopkg.in/natefinch/lumberjack.v2" "github.com/filebrowser/filebrowser/v2/auth" + "github.com/filebrowser/filebrowser/v2/diskcache" + "github.com/filebrowser/filebrowser/v2/frontend" fbhttp "github.com/filebrowser/filebrowser/v2/http" + "github.com/filebrowser/filebrowser/v2/img" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/storage" "github.com/filebrowser/filebrowser/v2/users" ) var ( - cfgFile string + flagNamesMigrations = map[string]string{ + "file-mode": "fileMode", + "dir-mode": "dirMode", + "hide-login-button": "hideLoginButton", + "create-user-dir": "createUserDir", + "minimum-password-length": "minimumPasswordLength", + "socket-perm": "socketPerm", + "disable-thumbnails": "disableThumbnails", + "disable-preview-resize": "disablePreviewResize", + "disable-exec": "disableExec", + "disable-type-detection-by-header": "disableTypeDetectionByHeader", + "img-processors": "imageProcessors", + "cache-dir": "cacheDir", + "redis-cache-url": "redisCacheUrl", + "token-expiration-time": "tokenExpirationTime", + "baseurl": "baseURL", + } + + warnedFlags = map[string]bool{} ) +// TODO(remove): remove after July 2026. +func migrateFlagNames(_ *pflag.FlagSet, name string) pflag.NormalizedName { + if newName, ok := flagNamesMigrations[name]; ok { + + if !warnedFlags[name] { + warnedFlags[name] = true + log.Printf("DEPRECATION NOTICE: Flag --%s has been deprecated, use --%s instead\n", name, newName) + } + + name = newName + } + + return pflag.NormalizedName(name) +} + func init() { - cobra.OnInitialize(initConfig) + rootCmd.SilenceUsage = true + rootCmd.SetGlobalNormalizationFunc(migrateFlagNames) + + cobra.MousetrapHelpText = "" rootCmd.SetVersionTemplate("File Browser version {{printf \"%s\" .Version}}\n") - flags := rootCmd.Flags() + // Flags available across the whole program persistent := rootCmd.PersistentFlags() - - persistent.StringVarP(&cfgFile, "config", "c", "", "config file path") + persistent.StringP("config", "c", "", "config file path") persistent.StringP("database", "d", "./filebrowser.db", "database path") - flags.Bool("noauth", false, "use the noauth auther when using quick setup") - flags.String("username", "admin", "username for the first user when using quick config") - flags.String("password", "", "hashed password for the first user when using quick config (default \"admin\")") + // Runtime flags for the root command + flags := rootCmd.Flags() + flags.Bool("noauth", false, "use the noauth auther when using quick setup") + flags.String("username", "admin", "username for the first user when using quick setup") + flags.String("password", "", "hashed password for the first user when using quick setup") + flags.Uint32("socketPerm", 0666, "unix socket file permissions") + flags.String("cacheDir", "", "file cache directory (disabled if empty)") + flags.String("redisCacheUrl", "", "redis cache URL (for multi-instance deployments), e.g. redis://user:pass@host:port") + flags.Int("imageProcessors", 4, "image processors count") addServerFlags(flags) } +// addServerFlags adds server related flags to the given FlagSet. These flags are available +// in both the root command, config set and config init commands. func addServerFlags(flags *pflag.FlagSet) { flags.StringP("address", "a", "127.0.0.1", "address to listen on") flags.StringP("log", "l", "stdout", "log output") @@ -55,14 +105,21 @@ func addServerFlags(flags *pflag.FlagSet) { flags.StringP("key", "k", "", "tls key") flags.StringP("root", "r", ".", "root to prepend to relative paths") flags.String("socket", "", "socket to listen to (cannot be used with address, port, cert nor key flags)") - flags.StringP("baseurl", "b", "", "base url") + flags.StringP("baseURL", "b", "", "base url") + flags.String("tokenExpirationTime", "2h", "user session timeout") + flags.Bool("disableThumbnails", false, "disable image thumbnails") + flags.Bool("disablePreviewResize", false, "disable resize of image previews") + flags.Bool("disableExec", true, "disables Command Runner feature") + flags.Bool("disableTypeDetectionByHeader", false, "disables type detection by reading file headers") + flags.Bool("disableImageResolutionCalc", false, "disables image resolution calculation by reading image files") + flags.Bool("followExternalSymlinks", false, "follow symlinks whose target is outside the user scope (unsafe)") } var rootCmd = &cobra.Command{ Use: "filebrowser", Short: "A stylish web-based file browser", Long: `File Browser CLI lets you create the database to use with File Browser, -manage your users and all the configurations without acessing the +manage your users and all the configurations without accessing the web interface. If you've never run File Browser, you'll need to have a database for @@ -70,44 +127,80 @@ it. Don't worry: you don't need to setup a separate database server. We're using Bolt DB which is a single file database and all managed by ourselves. -For this specific command, all the flags you have available (except -"config" for the configuration file), can be given either through -environment variables or configuration files. +For this command, all flags are available as environmental variables, +except for "--config", which specifies the configuration file to use. +The environment variables are prefixed by "FB_" followed by the flag name in +UPPER_SNAKE_CASE. For example, the flag "--disablePreviewResize" is available +as FB_DISABLE_PREVIEW_RESIZE. -If you don't set "config", it will look for a configuration file called -.filebrowser.{json, toml, yaml, yml} in the following directories: +If "--config" is not specified, File Browser will look for a configuration +file named .filebrowser.{json, toml, yaml, yml} in the following directories: - ./ - $HOME/ - /etc/filebrowser/ +**Note:** Only the options listed below can be set via the config file or +environment variables. Other configuration options live exclusively in the +database and so they must be set by the "config set" or "config +import" commands. + The precedence of the configuration values are as follows: -- flags -- environment variables -- configuration file -- database values -- defaults - -The environment variables are prefixed by "FB_" followed by the option -name in caps. So to set "database" via an env variable, you should -set FB_DATABASE. +- Flags +- Environment variables +- Configuration file +- Database values +- Defaults Also, if the database path doesn't exist, File Browser will enter into -the quick setup mode and a new database will be bootstraped and a new +the quick setup mode and a new database will be bootstrapped and a new user created with the credentials from options "username" and "password".`, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - log.Println(cfgFile) - - if !d.hadDB { - quickSetup(cmd.Flags(), d) + RunE: withViperAndStore(func(_ *cobra.Command, _ []string, v *viper.Viper, st *store) error { + if !st.databaseExisted { + err := quickSetup(v, st.Storage) + if err != nil { + return err + } } - server := getRunParams(cmd.Flags(), d.store) + // build img service + imgWorkersCount := v.GetInt("imageProcessors") + if imgWorkersCount < 1 { + return errors.New("image resize workers count could not be < 1") + } + imageService := img.New(imgWorkersCount) + + var fileCache diskcache.Interface = diskcache.NewNoOp() + cacheDir := v.GetString("cacheDir") + if cacheDir != "" { + if err := os.MkdirAll(cacheDir, 0700); err != nil { + return fmt.Errorf("can't make directory %s: %w", cacheDir, err) + } + fileCache = diskcache.New(afero.NewOsFs(), cacheDir) + } + + redisCacheURL := v.GetString("redisCacheUrl") + uploadCache, err := fbhttp.NewUploadCache(redisCacheURL) + if err != nil { + return fmt.Errorf("failed to initialize upload cache: %w", err) + } + + server, err := getServerSettings(v, st.Storage) + if err != nil { + return err + } setupLog(server.Log) + log.Println("NOTICE: File Browser is being wound down.") + log.Println("NOTICE: The project is archived on 2026-09-01, after which there will be no") + log.Println("NOTICE: further releases and no security fixes. Known unfixed issues are at") + log.Println("NOTICE: https://github.com/filebrowser/filebrowser/security/advisories") + root, err := filepath.Abs(server.Root) - checkErr(err) + if err != nil { + return err + } server.Root = root adr := server.Address + ":" + server.Port @@ -117,87 +210,162 @@ user created with the credentials from options "username" and "password".`, switch { case server.Socket != "": listener, err = net.Listen("unix", server.Socket) - checkErr(err) + if err != nil { + return err + } + socketPerm := v.GetUint32("socketPerm") + err = os.Chmod(server.Socket, os.FileMode(socketPerm)) + if err != nil { + return err + } case server.TLSKey != "" && server.TLSCert != "": - cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey) //nolint:shadow - checkErr(err) - listener, err = tls.Listen("tcp", adr, &tls.Config{Certificates: []tls.Certificate{cer}}) //nolint:shadow - checkErr(err) + cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey) + if err != nil { + return err + } + listener, err = tls.Listen("tcp", adr, &tls.Config{ + MinVersion: tls.VersionTLS12, + Certificates: []tls.Certificate{cer}}, + ) + if err != nil { + return err + } default: - listener, err = net.Listen("tcp", adr) //nolint:shadow - checkErr(err) + listener, err = net.Listen("tcp", adr) + if err != nil { + return err + } } - sigc := make(chan os.Signal, 1) - signal.Notify(sigc, os.Interrupt, syscall.SIGTERM) - go cleanupHandler(listener, sigc) + assetsFs, err := fs.Sub(frontend.Assets(), "dist") + if err != nil { + panic(err) + } - handler, err := fbhttp.NewHandler(d.store, server) - checkErr(err) + handler, err := fbhttp.NewHandler(imageService, fileCache, uploadCache, st.Storage, server, assetsFs) + if err != nil { + return err + } defer listener.Close() log.Println("Listening on", listener.Addr().String()) - if err := http.Serve(listener, handler); err != nil { - log.Fatal(err) + srv := &http.Server{ + Handler: handler, + ReadHeaderTimeout: 60 * time.Second, } - }, pythonConfig{allowNoDB: true}), + + go func() { + if err := srv.Serve(listener); !errors.Is(err, http.ErrServerClosed) { + log.Fatalf("HTTP server error: %v", err) + } + + log.Println("Stopped serving new connections.") + }() + + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, + os.Interrupt, + syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGTERM, + syscall.SIGQUIT, + ) + sig := <-sigc + log.Println("Got signal:", sig) + + shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second) + defer shutdownRelease() + + if err := srv.Shutdown(shutdownCtx); err != nil { + log.Fatalf("HTTP shutdown error: %v", err) + } + log.Println("Graceful shutdown complete.") + + return nil + }, storeOptions{allowsNoDatabase: true}), } -func cleanupHandler(listener net.Listener, c chan os.Signal) { //nolint:interfacer - sig := <-c - log.Printf("Caught signal %s: shutting down.", sig) - listener.Close() - os.Exit(0) -} - -//nolint:gocyclo -func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { +func getServerSettings(v *viper.Viper, st *storage.Storage) (*settings.Server, error) { server, err := st.Settings.GetServer() - checkErr(err) - - if val, set := getParamB(flags, "root"); set { - server.Root = val - } - - if val, set := getParamB(flags, "baseurl"); set { - server.BaseURL = val - } - - if val, set := getParamB(flags, "log"); set { - server.Log = val + if err != nil { + return nil, err } isSocketSet := false isAddrSet := false - if val, set := getParamB(flags, "address"); set { - server.Address = val - isAddrSet = isAddrSet || set + if v.IsSet("address") { + server.Address = v.GetString("address") + isAddrSet = true } - if val, set := getParamB(flags, "port"); set { - server.Port = val - isAddrSet = isAddrSet || set + if v.IsSet("log") { + server.Log = v.GetString("log") } - if val, set := getParamB(flags, "key"); set { - server.TLSKey = val - isAddrSet = isAddrSet || set + if v.IsSet("port") { + server.Port = v.GetString("port") + isAddrSet = true } - if val, set := getParamB(flags, "cert"); set { - server.TLSCert = val - isAddrSet = isAddrSet || set + if v.IsSet("cert") { + server.TLSCert = v.GetString("cert") + isAddrSet = true } - if val, set := getParamB(flags, "socket"); set { - server.Socket = val - isSocketSet = isSocketSet || set + if v.IsSet("key") { + server.TLSKey = v.GetString("key") + isAddrSet = true + } + + if v.IsSet("root") { + server.Root = v.GetString("root") + } + + if v.IsSet("socket") { + server.Socket = v.GetString("socket") + isSocketSet = true + } + + if v.IsSet("baseURL") { + server.BaseURL = v.GetString("baseURL") + // TODO(remove): remove after July 2026. + } else if v := os.Getenv("FB_BASEURL"); v != "" { + log.Println("DEPRECATION NOTICE: Environment variable FB_BASEURL has been deprecated, use FB_BASE_URL instead") + server.BaseURL = v + } + + if v.IsSet("tokenExpirationTime") { + server.TokenExpirationTime = v.GetString("tokenExpirationTime") + } + + if v.IsSet("disableThumbnails") { + server.EnableThumbnails = !v.GetBool("disableThumbnails") + } + + if v.IsSet("disablePreviewResize") { + server.ResizePreview = !v.GetBool("disablePreviewResize") + } + + if v.IsSet("disableTypeDetectionByHeader") { + server.TypeDetectionByHeader = !v.GetBool("disableTypeDetectionByHeader") + } + + if v.IsSet("disableImageResolutionCalc") { + server.ImageResolutionCal = !v.GetBool("disableImageResolutionCalc") + } + + if v.IsSet("disableExec") { + server.EnableExec = !v.GetBool("disableExec") + } + + if v.IsSet("followExternalSymlinks") { + server.FollowExternalSymlinks = v.GetBool("followExternalSymlinks") } if isAddrSet && isSocketSet { - checkErr(errors.New("--socket flag cannot be used with --address, --port, --key nor --cert")) + return nil, errors.New("--socket flag cannot be used with --address, --port, --key nor --cert") } // Do not use saved Socket if address was manually set. @@ -205,36 +373,33 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { server.Socket = "" } - return server -} - -// getParamB returns a parameter as a string and a boolean to tell if it is different from the default -// -// NOTE: we could simply bind the flags to viper and use IsSet. -// Although there is a bug on Viper that always returns true on IsSet -// if a flag is binded. Our alternative way is to manually check -// the flag and then the value from env/config/gotten by viper. -// https://github.com/spf13/viper/pull/331 -func getParamB(flags *pflag.FlagSet, key string) (string, bool) { - value, _ := flags.GetString(key) - - // If set on Flags, use it. - if flags.Changed(key) { - return value, true + if server.EnableExec { + log.Println("WARNING: Command Runner feature enabled!") + log.Println("WARNING: This feature has known security vulnerabilities and should not") + log.Println("WARNING: you fully understand the risks involved. For more information") + log.Println("WARNING: read https://github.com/filebrowser/filebrowser/issues/5199") } - // If set through viper (env, config), return it. - if v.IsSet(key) { - return v.GetString(key), true + if server.FollowExternalSymlinks { + log.Println("WARNING: Following external symlinks enabled!") + log.Println("WARNING: Symlinks pointing outside a user's scope will be followed,") + log.Println("WARNING: which can expose files outside that scope. Only enable this if") + log.Println("WARNING: you fully understand and trust the contents of every user scope.") } - // Otherwise use default value on flags. - return value, false -} + if set, err := st.Settings.Get(); err == nil && set.Signup { + scope := strings.TrimSpace(set.Defaults.Scope) + scopeIsRoot := scope == "" || scope == "." || scope == "/" -func getParam(flags *pflag.FlagSet, key string) string { - val, _ := getParamB(flags, key) - return val + if !set.CreateUserDir && scopeIsRoot { + log.Println("WARNING: Signup is enabled without createUserDir and the default scope is") + log.Println("WARNING: the server root, so every self-registered user can read, modify and") + log.Println("WARNING: delete all files File Browser serves, including other users' files.") + log.Println("WARNING: Enable createUserDir, or set a default scope other than the root.") + } + } + + return server, nil } func setupLog(logMethod string) { @@ -244,7 +409,7 @@ func setupLog(logMethod string) { case "stderr": log.SetOutput(os.Stderr) case "": - log.SetOutput(ioutil.Discard) + log.SetOutput(io.Discard) default: log.SetOutput(&lumberjack.Logger{ Filename: logMethod, @@ -255,14 +420,22 @@ func setupLog(logMethod string) { } } -func quickSetup(flags *pflag.FlagSet, d pythonData) { +func quickSetup(v *viper.Viper, s *storage.Storage) error { + log.Println("Performing quick setup") + set := &settings.Settings{ - Key: generateKey(), - Signup: false, - CreateUserDir: false, + Key: generateKey(), + Signup: false, + HideLoginButton: true, + CreateUserDir: false, + MinimumPasswordLength: settings.DefaultMinimumPasswordLength, + UserHomeBasePath: settings.DefaultUsersHomeBasePath, Defaults: settings.UserDefaults{ - Scope: ".", - Locale: "en", + Scope: ".", + Locale: "en", + SingleClick: false, + RedirectAfterCopyMove: true, + AceEditorTheme: v.GetString("defaults.aceEditorTheme"), Perm: users.Permissions{ Admin: false, Execute: true, @@ -274,40 +447,73 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { Download: true, }, }, + AuthMethod: "", + Branding: settings.Branding{}, + Tus: settings.Tus{ + ChunkSize: settings.DefaultTusChunkSize, + RetryCount: settings.DefaultTusRetryCount, + }, + Commands: nil, + Shell: nil, + Rules: nil, } var err error - if _, noauth := getParamB(flags, "noauth"); noauth { + if v.GetBool("noauth") { set.AuthMethod = auth.MethodNoAuth - err = d.store.Auth.Save(&auth.NoAuth{}) + err = s.Auth.Save(&auth.NoAuth{}) } else { set.AuthMethod = auth.MethodJSONAuth - err = d.store.Auth.Save(&auth.JSONAuth{}) + err = s.Auth.Save(&auth.JSONAuth{}) + } + if err != nil { + return err } - checkErr(err) - err = d.store.Settings.Save(set) - checkErr(err) + err = s.Settings.Save(set) + if err != nil { + return err + } ser := &settings.Server{ - BaseURL: getParam(flags, "baseurl"), - Port: getParam(flags, "port"), - Log: getParam(flags, "log"), - TLSKey: getParam(flags, "key"), - TLSCert: getParam(flags, "cert"), - Address: getParam(flags, "address"), - Root: getParam(flags, "root"), + BaseURL: v.GetString("baseURL"), + Port: v.GetString("port"), + Log: v.GetString("log"), + TLSKey: v.GetString("key"), + TLSCert: v.GetString("cert"), + Address: v.GetString("address"), + Root: v.GetString("root"), + TokenExpirationTime: v.GetString("tokenExpirationTime"), + EnableThumbnails: !v.GetBool("disableThumbnails"), + ResizePreview: !v.GetBool("disablePreviewResize"), + EnableExec: !v.GetBool("disableExec"), + TypeDetectionByHeader: !v.GetBool("disableTypeDetectionByHeader"), + ImageResolutionCal: !v.GetBool("disableImageResolutionCalc"), + FollowExternalSymlinks: v.GetBool("followExternalSymlinks"), } - err = d.store.Settings.SaveServer(ser) - checkErr(err) + err = s.Settings.SaveServer(ser) + if err != nil { + return err + } - username := getParam(flags, "username") - password := getParam(flags, "password") + username := v.GetString("username") + password := v.GetString("password") if password == "" { - password, err = users.HashPwd("admin") - checkErr(err) + var pwd string + pwd, err = users.RandomPwd(set.MinimumPasswordLength) + if err != nil { + return err + } + + log.Printf("User '%s' initialized with randomly generated password: %s\n", username, pwd) + password, err = users.ValidateAndHashPwd(pwd, set.MinimumPasswordLength) + if err != nil { + return err + } + } else { + log.Printf("User '%s' initialize wth user-provided password\n", username) } if username == "" || password == "" { @@ -323,32 +529,5 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { set.Defaults.Apply(user) user.Perm.Admin = true - err = d.store.Users.Save(user) - checkErr(err) -} - -func initConfig() { - if cfgFile == "" { - home, err := homedir.Dir() - checkErr(err) - v.AddConfigPath(".") - v.AddConfigPath(home) - v.AddConfigPath("/etc/filebrowser/") - v.SetConfigName(".filebrowser") - } else { - v.SetConfigFile(cfgFile) - } - - v.SetEnvPrefix("FB") - v.AutomaticEnv() - v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - - if err := v.ReadInConfig(); err != nil { - if _, ok := err.(v.ConfigParseError); ok { - panic(err) - } - cfgFile = "No config file used" - } else { - cfgFile = "Using config file: " + v.ConfigFileUsed() - } + return s.Users.Save(user) } diff --git a/cmd/rule_rm.go b/cmd/rule_rm.go index 60b98c93..8ed8f151 100644 --- a/cmd/rule_rm.go +++ b/cmd/rule_rm.go @@ -40,27 +40,29 @@ including 'index_end'.`, return nil }, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + RunE: withStore(func(cmd *cobra.Command, args []string, st *store) error { i, err := strconv.Atoi(args[0]) - checkErr(err) + if err != nil { + return err + } f := i - if len(args) == 2 { //nolint:mnd + if len(args) == 2 { f, err = strconv.Atoi(args[1]) - checkErr(err) + if err != nil { + return err + } } - user := func(u *users.User) { + user := func(u *users.User) error { u.Rules = append(u.Rules[:i], u.Rules[f+1:]...) - err := d.store.Users.Save(u) - checkErr(err) + return st.Users.Save(u) } - global := func(s *settings.Settings) { + global := func(s *settings.Settings) error { s.Rules = append(s.Rules[:i], s.Rules[f+1:]...) - err := d.store.Settings.Save(s) - checkErr(err) + return st.Settings.Save(s) } - runRules(d.store, cmd, user, global) - }, pythonConfig{}), + return runRules(st.Storage, cmd, user, global) + }, storeOptions{}), } diff --git a/cmd/rules.go b/cmd/rules.go index 3bf91dd1..f3e00bb6 100644 --- a/cmd/rules.go +++ b/cmd/rules.go @@ -29,41 +29,63 @@ rules.`, Args: cobra.NoArgs, } -func runRules(st *storage.Storage, cmd *cobra.Command, usersFn func(*users.User), globalFn func(*settings.Settings)) { - id := getUserIdentifier(cmd.Flags()) +func runRules(st *storage.Storage, cmd *cobra.Command, usersFn func(*users.User) error, globalFn func(*settings.Settings) error) error { + id, err := getUserIdentifier(cmd.Flags()) + if err != nil { + return err + } if id != nil { - user, err := st.Users.Get("", id) - checkErr(err) + var user *users.User + user, err = st.Users.Get("", false, id) + if err != nil { + return err + } if usersFn != nil { - usersFn(user) + err = usersFn(user) + if err != nil { + return err + } } printRules(user.Rules, id) - return + return nil } s, err := st.Settings.Get() - checkErr(err) + if err != nil { + return err + } if globalFn != nil { - globalFn(s) + err = globalFn(s) + if err != nil { + return err + } } printRules(s.Rules, id) + return nil } -func getUserIdentifier(flags *pflag.FlagSet) interface{} { - id := mustGetUint(flags, "id") - username := mustGetString(flags, "username") - - if id != 0 { - return id - } else if username != "" { - return username +func getUserIdentifier(flags *pflag.FlagSet) (interface{}, error) { + id, err := flags.GetUint("id") + if err != nil { + return nil, err } - return nil + username, err := flags.GetString("username") + if err != nil { + return nil, err + } + + if id != 0 { + return id, nil + } else if username != "" { + return username, nil + } + + return nil, nil } func printRules(rulez []rules.Rule, id interface{}) { diff --git a/cmd/rules_add.go b/cmd/rules_add.go index fcdc7fb4..3b34d940 100644 --- a/cmd/rules_add.go +++ b/cmd/rules_add.go @@ -21,9 +21,19 @@ var rulesAddCmd = &cobra.Command{ Short: "Add a global rule or user rule", Long: `Add a global rule or user rule.`, Args: cobra.ExactArgs(1), - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - allow := mustGetBool(cmd.Flags(), "allow") - regex := mustGetBool(cmd.Flags(), "regex") + RunE: withStore(func(cmd *cobra.Command, args []string, st *store) error { + flags := cmd.Flags() + + allow, err := flags.GetBool("allow") + if err != nil { + return err + } + + regex, err := flags.GetBool("regex") + if err != nil { + return err + } + exp := args[0] if regex { @@ -41,18 +51,16 @@ var rulesAddCmd = &cobra.Command{ rule.Path = exp } - user := func(u *users.User) { + user := func(u *users.User) error { u.Rules = append(u.Rules, rule) - err := d.store.Users.Save(u) - checkErr(err) + return st.Users.Save(u) } - global := func(s *settings.Settings) { + global := func(s *settings.Settings) error { s.Rules = append(s.Rules, rule) - err := d.store.Settings.Save(s) - checkErr(err) + return st.Settings.Save(s) } - runRules(d.store, cmd, user, global) - }, pythonConfig{}), + return runRules(st.Storage, cmd, user, global) + }, storeOptions{}), } diff --git a/cmd/rules_ls.go b/cmd/rules_ls.go index e0e5f8f8..9aa073d0 100644 --- a/cmd/rules_ls.go +++ b/cmd/rules_ls.go @@ -13,7 +13,7 @@ var rulesLsCommand = &cobra.Command{ Short: "List global rules or user specific rules", Long: `List global rules or user specific rules.`, Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - runRules(d.store, cmd, nil, nil) - }, pythonConfig{}), + RunE: withStore(func(cmd *cobra.Command, _ []string, st *store) error { + return runRules(st.Storage, cmd, nil, nil) + }, storeOptions{}), } diff --git a/cmd/upgrade.go b/cmd/upgrade.go deleted file mode 100644 index 9f747c9c..00000000 --- a/cmd/upgrade.go +++ /dev/null @@ -1,31 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" - - "github.com/filebrowser/filebrowser/v2/storage/bolt/importer" -) - -func init() { - rootCmd.AddCommand(upgradeCmd) - - upgradeCmd.Flags().String("old.database", "", "") - upgradeCmd.Flags().String("old.config", "", "") - _ = upgradeCmd.MarkFlagRequired("old.database") -} - -var upgradeCmd = &cobra.Command{ - Use: "upgrade", - Short: "Upgrades an old configuration", - Long: `Upgrades an old configuration. This command DOES NOT -import share links because they are incompatible with -this version.`, - Args: cobra.NoArgs, - Run: func(cmd *cobra.Command, args []string) { - flags := cmd.Flags() - oldDB := mustGetString(flags, "old.database") - oldConf := mustGetString(flags, "old.config") - err := importer.Import(oldDB, oldConf, getParam(flags, "database")) - checkErr(err) - }, -} diff --git a/cmd/users.go b/cmd/users.go index 9ef0da18..639c2ef3 100644 --- a/cmd/users.go +++ b/cmd/users.go @@ -27,15 +27,17 @@ var usersCmd = &cobra.Command{ func printUsers(usrs []*users.User) { w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) - fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock") + fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tRed. After C/M\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock") for _, u := range usrs { - fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n", + fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n", u.ID, u.Username, u.Scope, u.Locale, u.ViewMode, + u.SingleClick, + u.RedirectAfterCopyMove, u.Perm.Admin, u.Perm.Execute, u.Perm.Create, @@ -52,7 +54,7 @@ func printUsers(usrs []*users.User) { } func parseUsernameOrID(arg string) (username string, id uint) { - id64, err := strconv.ParseUint(arg, 10, 0) + id64, err := strconv.ParseUint(arg, 10, 64) if err != nil { return arg, 0 } @@ -75,50 +77,75 @@ func addUserFlags(flags *pflag.FlagSet) { flags.String("scope", ".", "scope for users") flags.String("locale", "en", "locale for users") flags.String("viewMode", string(users.ListViewMode), "view mode for users") + flags.Bool("singleClick", false, "use single clicks only") + flags.Bool("redirectAfterCopyMove", false, "redirect to destination after copy/move") + flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)") + flags.Bool("hideDotfiles", false, "hide dotfiles in file listings") + flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users") } -func getViewMode(flags *pflag.FlagSet) users.ViewMode { - viewMode := users.ViewMode(mustGetString(flags, "viewMode")) - if viewMode != users.ListViewMode && viewMode != users.MosaicViewMode { - checkErr(errors.New("view mode must be \"" + string(users.ListViewMode) + "\" or \"" + string(users.MosaicViewMode) + "\"")) +func getAndParseViewMode(flags *pflag.FlagSet) (users.ViewMode, error) { + viewModeStr, err := flags.GetString("viewMode") + if err != nil { + return "", err } - return viewMode + + viewMode := users.ViewMode(viewModeStr) + if viewMode != users.ListViewMode && viewMode != users.MosaicViewMode { + return "", errors.New("view mode must be \"" + string(users.ListViewMode) + "\" or \"" + string(users.MosaicViewMode) + "\"") + } + + return viewMode, nil } -//nolint:gocyclo -func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all bool) { +func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all bool) error { + errs := []error{} + visit := func(flag *pflag.Flag) { + var err error switch flag.Name { case "scope": - defaults.Scope = mustGetString(flags, flag.Name) + defaults.Scope, err = flags.GetString(flag.Name) case "locale": - defaults.Locale = mustGetString(flags, flag.Name) + defaults.Locale, err = flags.GetString(flag.Name) case "viewMode": - defaults.ViewMode = getViewMode(flags) + defaults.ViewMode, err = getAndParseViewMode(flags) + case "singleClick": + defaults.SingleClick, err = flags.GetBool(flag.Name) + case "redirectAfterCopyMove": + defaults.RedirectAfterCopyMove, err = flags.GetBool(flag.Name) + case "aceEditorTheme": + defaults.AceEditorTheme, err = flags.GetString(flag.Name) case "perm.admin": - defaults.Perm.Admin = mustGetBool(flags, flag.Name) + defaults.Perm.Admin, err = flags.GetBool(flag.Name) case "perm.execute": - defaults.Perm.Execute = mustGetBool(flags, flag.Name) + defaults.Perm.Execute, err = flags.GetBool(flag.Name) case "perm.create": - defaults.Perm.Create = mustGetBool(flags, flag.Name) + defaults.Perm.Create, err = flags.GetBool(flag.Name) case "perm.rename": - defaults.Perm.Rename = mustGetBool(flags, flag.Name) + defaults.Perm.Rename, err = flags.GetBool(flag.Name) case "perm.modify": - defaults.Perm.Modify = mustGetBool(flags, flag.Name) + defaults.Perm.Modify, err = flags.GetBool(flag.Name) case "perm.delete": - defaults.Perm.Delete = mustGetBool(flags, flag.Name) + defaults.Perm.Delete, err = flags.GetBool(flag.Name) case "perm.share": - defaults.Perm.Share = mustGetBool(flags, flag.Name) + defaults.Perm.Share, err = flags.GetBool(flag.Name) case "perm.download": - defaults.Perm.Download = mustGetBool(flags, flag.Name) + defaults.Perm.Download, err = flags.GetBool(flag.Name) case "commands": - commands, err := flags.GetStringSlice(flag.Name) - checkErr(err) - defaults.Commands = commands + defaults.Commands, err = flags.GetStringSlice(flag.Name) case "sorting.by": - defaults.Sorting.By = mustGetString(flags, flag.Name) + defaults.Sorting.By, err = flags.GetString(flag.Name) case "sorting.asc": - defaults.Sorting.Asc = mustGetBool(flags, flag.Name) + defaults.Sorting.Asc, err = flags.GetBool(flag.Name) + case "dateFormat": + defaults.DateFormat, err = flags.GetBool(flag.Name) + case "hideDotfiles": + defaults.HideDotfiles, err = flags.GetBool(flag.Name) + } + + if err != nil { + errs = append(errs, err) } } @@ -127,4 +154,6 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all } else { flags.Visit(visit) } + + return errors.Join(errs...) } diff --git a/cmd/users_add.go b/cmd/users_add.go index d3b8f825..daf59aa3 100644 --- a/cmd/users_add.go +++ b/cmd/users_add.go @@ -15,37 +15,68 @@ var usersAddCmd = &cobra.Command{ Use: "add ", Short: "Create a new user", Long: `Create a new user and add it to the database.`, - Args: cobra.ExactArgs(2), //nolint:mnd - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - getUserDefaults(cmd.Flags(), &s.Defaults, false) + Args: cobra.ExactArgs(2), + RunE: withStore(func(cmd *cobra.Command, args []string, st *store) error { + flags := cmd.Flags() + s, err := st.Settings.Get() + if err != nil { + return err + } + err = getUserDefaults(flags, &s.Defaults, false) + if err != nil { + return err + } - password, err := users.HashPwd(args[1]) - checkErr(err) + password, err := users.ValidateAndHashPwd(args[1], s.MinimumPasswordLength) + if err != nil { + return err + } user := &users.User{ - Username: args[0], - Password: password, - LockPassword: mustGetBool(cmd.Flags(), "lockPassword"), + Username: args[0], + Password: password, + } + + user.LockPassword, err = flags.GetBool("lockPassword") + if err != nil { + return err + } + + user.DateFormat, err = flags.GetBool("dateFormat") + if err != nil { + return err + } + + user.HideDotfiles, err = flags.GetBool("hideDotfiles") + if err != nil { + return err } s.Defaults.Apply(user) - servSettings, err := d.store.Settings.GetServer() - checkErr(err) + servSettings, err := st.Settings.GetServer() + if err != nil { + return err + } // since getUserDefaults() polluted s.Defaults.Scope // which makes the Scope not the one saved in the db // we need the right s.Defaults.Scope here - s2, err := d.store.Settings.Get() - checkErr(err) + s2, err := st.Settings.Get() + if err != nil { + return err + } userHome, err := s2.MakeUserDir(user.Username, user.Scope, servSettings.Root) - checkErr(err) + if err != nil { + return err + } user.Scope = userHome - err = d.store.Users.Save(user) - checkErr(err) + err = st.Users.Save(user) + if err != nil { + return err + } printUsers([]*users.User{user}) - }, pythonConfig{}), + return nil + }, storeOptions{}), } diff --git a/cmd/users_export.go b/cmd/users_export.go index c0160f68..768c381f 100644 --- a/cmd/users_export.go +++ b/cmd/users_export.go @@ -14,11 +14,16 @@ var usersExportCmd = &cobra.Command{ Long: `Export all users to a json or yaml file. Please indicate the path to the file where you want to write the users.`, Args: jsonYamlArg, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - list, err := d.store.Users.Gets("") - checkErr(err) + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { + list, err := st.Users.Gets("", false) + if err != nil { + return err + } err = marshal(args[0], list) - checkErr(err) - }, pythonConfig{}), + if err != nil { + return err + } + return nil + }, storeOptions{}), } diff --git a/cmd/users_find.go b/cmd/users_find.go index b1b03bc1..fc91af86 100644 --- a/cmd/users_find.go +++ b/cmd/users_find.go @@ -16,17 +16,17 @@ var usersFindCmd = &cobra.Command{ Short: "Find a user by username or id", Long: `Find a user by username or id. If no flag is set, all users will be printed.`, Args: cobra.ExactArgs(1), - Run: findUsers, + RunE: findUsers, } var usersLsCmd = &cobra.Command{ Use: "ls", Short: "List all users.", Args: cobra.NoArgs, - Run: findUsers, + RunE: findUsers, } -var findUsers = python(func(cmd *cobra.Command, args []string, d pythonData) { +var findUsers = withStore(func(_ *cobra.Command, args []string, st *store) error { var ( list []*users.User user *users.User @@ -36,16 +36,19 @@ var findUsers = python(func(cmd *cobra.Command, args []string, d pythonData) { if len(args) == 1 { username, id := parseUsernameOrID(args[0]) if username != "" { - user, err = d.store.Users.Get("", username) + user, err = st.Users.Get("", false, username) } else { - user, err = d.store.Users.Get("", id) + user, err = st.Users.Get("", false, id) } list = []*users.User{user} } else { - list, err = d.store.Users.Gets("") + list, err = st.Users.Gets("", false) } - checkErr(err) + if err != nil { + return err + } printUsers(list) -}, pythonConfig{}) + return nil +}, storeOptions{}) diff --git a/cmd/users_import.go b/cmd/users_import.go index 236e9cea..0db3704f 100644 --- a/cmd/users_import.go +++ b/cmd/users_import.go @@ -25,50 +25,71 @@ file. You can use this command to import new users to your installation. For that, just don't place their ID on the files list or set it to 0.`, Args: jsonYamlArg, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + RunE: withStore(func(cmd *cobra.Command, args []string, st *store) error { + flags := cmd.Flags() fd, err := os.Open(args[0]) - checkErr(err) + if err != nil { + return err + } defer fd.Close() list := []*users.User{} err = unmarshal(args[0], &list) - checkErr(err) - - for _, user := range list { - err = user.Clean("") - checkErr(err) + if err != nil { + return err } - if mustGetBool(cmd.Flags(), "replace") { - oldUsers, err := d.store.Users.Gets("") - checkErr(err) - - err = marshal("users.backup.json", list) - checkErr(err) - - for _, user := range oldUsers { - err = d.store.Users.Delete(user.ID) - checkErr(err) + for _, user := range list { + err = user.Clean("", false) + if err != nil { + return err } } - overwrite := mustGetBool(cmd.Flags(), "overwrite") + replace, err := flags.GetBool("replace") + if err != nil { + return err + } + + if replace { + oldUsers, userImportErr := st.Users.Gets("", false) + if userImportErr != nil { + return userImportErr + } + + err = marshal("users.backup.json", list) + if err != nil { + return err + } + + for _, user := range oldUsers { + err = st.Users.Delete(user.ID) + if err != nil { + return err + } + } + } + + overwrite, err := flags.GetBool("overwrite") + if err != nil { + return err + } for _, user := range list { - onDB, err := d.store.Users.Get("", user.ID) + onDB, err := st.Users.Get("", false, user.ID) // User exists in DB. if err == nil { if !overwrite { - checkErr(errors.New("user " + strconv.Itoa(int(user.ID)) + " is already registred")) + return errors.New("user " + strconv.Itoa(int(user.ID)) + " is already registered") } // If the usernames mismatch, check if there is another one in the DB // with the new username. If there is, print an error and cancel the // operation if user.Username != onDB.Username { - if conflictuous, err := d.store.Users.Get("", user.Username); err == nil { //nolint:shadow - checkErr(usernameConflictError(user.Username, conflictuous.ID, user.ID)) + if conflictuous, err := st.Users.Get("", false, user.Username); err == nil { + return usernameConflictError(user.Username, conflictuous.ID, user.ID) } } } else { @@ -77,13 +98,16 @@ list or set it to 0.`, user.ID = 0 } - err = d.store.Users.Save(user) - checkErr(err) + err = st.Users.Save(user) + if err != nil { + return err + } } - }, pythonConfig{}), + return nil + }, storeOptions{}), } func usernameConflictError(username string, originalID, newID uint) error { - return fmt.Errorf(`can't import user with ID %d and username "%s" because the username is already registred with the user %d`, + return fmt.Errorf(`can't import user with ID %d and username "%s" because the username is already registered with the user %d`, newID, username, originalID) } diff --git a/cmd/users_rm.go b/cmd/users_rm.go index e3fef01b..492a55c3 100644 --- a/cmd/users_rm.go +++ b/cmd/users_rm.go @@ -15,17 +15,20 @@ var usersRmCmd = &cobra.Command{ Short: "Delete a user by username or id", Long: `Delete a user by username or id`, Args: cobra.ExactArgs(1), - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + RunE: withStore(func(_ *cobra.Command, args []string, st *store) error { username, id := parseUsernameOrID(args[0]) var err error if username != "" { - err = d.store.Users.Delete(username) + err = st.Users.Delete(username) } else { - err = d.store.Users.Delete(id) + err = st.Users.Delete(id) } - checkErr(err) + if err != nil { + return err + } fmt.Println("user deleted successfully") - }, pythonConfig{}), + return nil + }, storeOptions{}), } diff --git a/cmd/users_update.go b/cmd/users_update.go index 040dabd5..12484342 100644 --- a/cmd/users_update.go +++ b/cmd/users_update.go @@ -21,53 +21,91 @@ var usersUpdateCmd = &cobra.Command{ Long: `Updates an existing user. Set the flags for the options you want to change.`, Args: cobra.ExactArgs(1), - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - username, id := parseUsernameOrID(args[0]) + RunE: withStore(func(cmd *cobra.Command, args []string, st *store) error { flags := cmd.Flags() - password := mustGetString(flags, "password") - newUsername := mustGetString(flags, "username") + username, id := parseUsernameOrID(args[0]) + password, err := flags.GetString("password") + if err != nil { + return err + } + + newUsername, err := flags.GetString("username") + if err != nil { + return err + } + + s, err := st.Settings.Get() + if err != nil { + return err + } var ( - err error user *users.User ) - if id != 0 { - user, err = d.store.Users.Get("", id) + user, err = st.Users.Get("", false, id) } else { - user, err = d.store.Users.Get("", username) + user, err = st.Users.Get("", false, username) + } + if err != nil { + return err } - - checkErr(err) defaults := settings.UserDefaults{ - Scope: user.Scope, - Locale: user.Locale, - ViewMode: user.ViewMode, - Perm: user.Perm, - Sorting: user.Sorting, - Commands: user.Commands, + Scope: user.Scope, + Locale: user.Locale, + ViewMode: user.ViewMode, + SingleClick: user.SingleClick, + RedirectAfterCopyMove: user.RedirectAfterCopyMove, + Perm: user.Perm, + Sorting: user.Sorting, + Commands: user.Commands, } - getUserDefaults(flags, &defaults, false) + + err = getUserDefaults(flags, &defaults, false) + if err != nil { + return err + } + user.Scope = defaults.Scope user.Locale = defaults.Locale user.ViewMode = defaults.ViewMode + user.SingleClick = defaults.SingleClick + user.RedirectAfterCopyMove = defaults.RedirectAfterCopyMove user.Perm = defaults.Perm user.Commands = defaults.Commands user.Sorting = defaults.Sorting - user.LockPassword = mustGetBool(flags, "lockPassword") + user.LockPassword, err = flags.GetBool("lockPassword") + if err != nil { + return err + } + + user.DateFormat, err = flags.GetBool("dateFormat") + if err != nil { + return err + } + + user.HideDotfiles, err = flags.GetBool("hideDotfiles") + if err != nil { + return err + } if newUsername != "" { user.Username = newUsername } if password != "" { - user.Password, err = users.HashPwd(password) - checkErr(err) + user.Password, err = users.ValidateAndHashPwd(password, s.MinimumPasswordLength) + if err != nil { + return err + } } - err = d.store.Users.Update(user) - checkErr(err) + err = st.Users.Update(user) + if err != nil { + return err + } printUsers([]*users.User{user}) - }, pythonConfig{}), + return nil + }, storeOptions{}), } diff --git a/cmd/utils.go b/cmd/utils.go index bd5ec2f3..3ae29b27 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -3,64 +3,50 @@ package cmd import ( "encoding/json" "errors" - "fmt" + "io/fs" "log" "os" "path/filepath" + "strconv" + "strings" - "github.com/asdine/storm" + "github.com/asdine/storm/v3" + homedir "github.com/mitchellh/go-homedir" + "github.com/samber/lo" "github.com/spf13/cobra" "github.com/spf13/pflag" - yaml "gopkg.in/yaml.v2" + "github.com/spf13/viper" + yaml "gopkg.in/yaml.v3" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/storage" "github.com/filebrowser/filebrowser/v2/storage/bolt" ) -func checkErr(err error) { +const databasePermissions = 0640 + +func getAndParseFileMode(flags *pflag.FlagSet, name string) (fs.FileMode, error) { + mode, err := flags.GetString(name) if err != nil { - log.Fatal(err) + return 0, err } -} -func mustGetString(flags *pflag.FlagSet, flag string) string { - s, err := flags.GetString(flag) - checkErr(err) - return s -} + b, err := strconv.ParseUint(mode, 0, 32) + if err != nil { + return 0, err + } -func mustGetBool(flags *pflag.FlagSet, flag string) bool { - b, err := flags.GetBool(flag) - checkErr(err) - return b -} - -func mustGetUint(flags *pflag.FlagSet, flag string) uint { - b, err := flags.GetUint(flag) - checkErr(err) - return b + return fs.FileMode(b), nil } func generateKey() []byte { k, err := settings.GenerateKey() - checkErr(err) + if err != nil { + panic(err) + } return k } -type cobraFunc func(cmd *cobra.Command, args []string) -type pythonFunc func(cmd *cobra.Command, args []string, data pythonData) - -type pythonConfig struct { - noDB bool - allowNoDB bool -} - -type pythonData struct { - hadDB bool - store *storage.Storage -} - func dbExists(path string) (bool, error) { stat, err := os.Stat(path) if err == nil { @@ -71,7 +57,7 @@ func dbExists(path string) (bool, error) { d := filepath.Dir(path) _, err = os.Stat(d) if os.IsNotExist(err) { - if err := os.MkdirAll(d, 0700); err != nil { //nolint:shadow + if err := os.MkdirAll(d, 0700); err != nil { return false, err } return false, nil @@ -81,34 +67,143 @@ func dbExists(path string) (bool, error) { return false, err } -func python(fn pythonFunc, cfg pythonConfig) cobraFunc { - return func(cmd *cobra.Command, args []string) { - data := pythonData{hadDB: true} +// Generate the replacements for all environment variables. This allows to +// use FB_BRANDING_DISABLE_EXTERNAL environment variables, even when the +// option name is branding.disableExternal. +func generateEnvKeyReplacements(cmd *cobra.Command) []string { + replacements := []string{} - path := getParam(cmd.Flags(), "database") - exists, err := dbExists(path) + cmd.Flags().VisitAll(func(f *pflag.Flag) { + oldName := strings.ToUpper(f.Name) + newName := strings.ToUpper(lo.SnakeCase(f.Name)) + replacements = append(replacements, oldName, newName) + }) + return replacements +} + +func initViper(cmd *cobra.Command) (*viper.Viper, error) { + v := viper.New() + + // Get config file from flag + cfgFile, err := cmd.Flags().GetString("config") + if err != nil { + return nil, err + } + + // Configuration file + if cfgFile == "" { + home, err := homedir.Dir() if err != nil { - panic(err) - } else if exists && cfg.noDB { - log.Fatal(path + " already exists") - } else if !exists && !cfg.noDB && !cfg.allowNoDB { - log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.") + return nil, err + } + v.AddConfigPath(".") + v.AddConfigPath(home) + v.AddConfigPath("/etc/filebrowser/") + v.SetConfigName(".filebrowser") + } else { + v.SetConfigFile(cfgFile) + } + + // Environment variables + v.SetEnvPrefix("FB") + v.AutomaticEnv() + v.SetEnvKeyReplacer(strings.NewReplacer(generateEnvKeyReplacements(cmd)...)) + + // Bind the flags + err = v.BindPFlags(cmd.Flags()) + if err != nil { + return nil, err + } + + // Read in configuration + if err := v.ReadInConfig(); err != nil { + + if errors.As(err, &viper.ConfigParseError{}) { + return nil, err } - data.hadDB = exists - db, err := storm.Open(path) - checkErr(err) - defer db.Close() - data.store, err = bolt.NewStorage(db) - checkErr(err) - fn(cmd, args, data) + log.Println("No config file used") + } else { + log.Printf("Using config file: %s", v.ConfigFileUsed()) } + + // Return Viper + return v, nil +} + +type store struct { + *storage.Storage + databaseExisted bool +} + +type storeOptions struct { + expectsNoDatabase bool + allowsNoDatabase bool +} + +type cobraFunc func(cmd *cobra.Command, args []string) error + +// withViperAndStore initializes Viper and the storage.Store and passes them to the callback function. +// This function should only be used by [withStore] and the root command. No other command should call +// this function directly. +func withViperAndStore(fn func(cmd *cobra.Command, args []string, v *viper.Viper, store *store) error, options storeOptions) cobraFunc { + return func(cmd *cobra.Command, args []string) error { + v, err := initViper(cmd) + if err != nil { + return err + } + + path, err := filepath.Abs(v.GetString("database")) + if err != nil { + return err + } + + exists, err := dbExists(path) + switch { + case err != nil: + return err + case exists && options.expectsNoDatabase: + log.Fatal(path + " already exists") + case !exists && !options.expectsNoDatabase && !options.allowsNoDatabase: + log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.") + case !exists && !options.expectsNoDatabase: + log.Println("WARNING: filebrowser.db can't be found. Initialing in " + strings.TrimSuffix(path, "filebrowser.db")) + } + + log.Println("Using database: " + path) + + db, err := storm.Open(path, storm.BoltOptions(databasePermissions, nil)) + if err != nil { + return err + } + defer db.Close() + + storage, err := bolt.NewStorage(db) + if err != nil { + return err + } + + store := &store{ + Storage: storage, + databaseExisted: exists, + } + + return fn(cmd, args, v, store) + } +} + +func withStore(fn func(cmd *cobra.Command, args []string, store *store) error, options storeOptions) cobraFunc { + return withViperAndStore(func(cmd *cobra.Command, args []string, _ *viper.Viper, store *store) error { + return fn(cmd, args, store) + }, options) } func marshal(filename string, data interface{}) error { fd, err := os.Create(filename) - checkErr(err) + if err != nil { + return err + } defer fd.Close() switch ext := filepath.Ext(filename); ext { @@ -116,7 +211,7 @@ func marshal(filename string, data interface{}) error { encoder := json.NewEncoder(fd) encoder.SetIndent("", " ") return encoder.Encode(data) - case ".yml", ".yaml": //nolint:goconst + case ".yml", ".yaml": encoder := yaml.NewEncoder(fd) return encoder.Encode(data) default: @@ -126,7 +221,9 @@ func marshal(filename string, data interface{}) error { func unmarshal(filename string, data interface{}) error { fd, err := os.Open(filename) - checkErr(err) + if err != nil { + return err + } defer fd.Close() switch ext := filepath.Ext(filename); ext { @@ -152,29 +249,14 @@ func jsonYamlArg(cmd *cobra.Command, args []string) error { } } -func cleanUpInterfaceMap(in map[interface{}]interface{}) map[string]interface{} { - result := make(map[string]interface{}) - for k, v := range in { - result[fmt.Sprintf("%v", k)] = cleanUpMapValue(v) - } - return result -} - -func cleanUpInterfaceArray(in []interface{}) []interface{} { - result := make([]interface{}, len(in)) - for i, v := range in { - result[i] = cleanUpMapValue(v) - } - return result -} - -func cleanUpMapValue(v interface{}) interface{} { - switch v := v.(type) { - case []interface{}: - return cleanUpInterfaceArray(v) - case map[interface{}]interface{}: - return cleanUpInterfaceMap(v) - default: - return v +// convertCmdStrToCmdArray checks if cmd string is blank (whitespace included) +// then returns empty string array, else returns the split word array of cmd. +// This is to ensure the result will never be []string{""} +func convertCmdStrToCmdArray(cmd string) []string { + var cmdArray []string + trimmedCmdStr := strings.TrimSpace(cmd) + if trimmedCmdStr != "" { + cmdArray = strings.Split(trimmedCmdStr, " ") } + return cmdArray } diff --git a/cmd/version.go b/cmd/version.go index 5877505e..fe770792 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -15,7 +15,7 @@ func init() { var versionCmd = &cobra.Command{ Use: "version", Short: "Print the version number", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { fmt.Println("File Browser v" + version.Version + "/" + version.CommitSHA) }, } diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 00000000..0865c60f --- /dev/null +++ b/compose.yaml @@ -0,0 +1,32 @@ +services: + filebrowser: + container_name: filebrowser + image: filebrowser/filebrowser:latest + networks: + - filebrowser + ports: + - 8000:80 + volumes: + - filebrowser:/flux/vault + environment: + - FB_REDIS_CACHE_URL=redis://default:filebrowser@redis:6379 # Use rediss:// for ssl + + redis: + container_name: redis + image: redis:latest + networks: + - filebrowser + command: + - sh + - -c + - | + cat > /tmp/users.acl <filebrowser ~* +@all + EOF + redis-server --aclfile /tmp/users.acl + +networks: + filebrowser: + +volumes: + filebrowser: diff --git a/diskcache/cache.go b/diskcache/cache.go new file mode 100644 index 00000000..2a2eff3d --- /dev/null +++ b/diskcache/cache.go @@ -0,0 +1,11 @@ +package diskcache + +import ( + "context" +) + +type Interface interface { + Store(ctx context.Context, key string, value []byte) error + Load(ctx context.Context, key string) (value []byte, exist bool, err error) + Delete(ctx context.Context, key string) error +} diff --git a/diskcache/file_cache.go b/diskcache/file_cache.go new file mode 100644 index 00000000..b2979e4b --- /dev/null +++ b/diskcache/file_cache.go @@ -0,0 +1,110 @@ +package diskcache + +import ( + "context" + "crypto/sha1" + "encoding/hex" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "sync" + + "github.com/spf13/afero" +) + +type FileCache struct { + fs afero.Fs + + // granular locks + scopedLocks struct { + sync.Mutex + sync.Once + locks map[string]sync.Locker + } +} + +func New(fs afero.Fs, root string) *FileCache { + return &FileCache{ + fs: afero.NewBasePathFs(fs, root), + } +} + +func (f *FileCache) Store(_ context.Context, key string, value []byte) error { + mu := f.getScopedLocks(key) + mu.Lock() + defer mu.Unlock() + + fileName := f.getFileName(key) + if err := f.fs.MkdirAll(filepath.Dir(fileName), 0700); err != nil { + return err + } + + if err := afero.WriteFile(f.fs, fileName, value, 0700); err != nil { + return err + } + + return nil +} + +func (f *FileCache) Load(_ context.Context, key string) (value []byte, exist bool, err error) { + r, ok, err := f.open(key) + if err != nil || !ok { + return nil, ok, err + } + defer r.Close() + + value, err = io.ReadAll(r) + if err != nil { + return nil, false, err + } + return value, true, nil +} + +func (f *FileCache) Delete(_ context.Context, key string) error { + mu := f.getScopedLocks(key) + mu.Lock() + defer mu.Unlock() + + fileName := f.getFileName(key) + if err := f.fs.Remove(fileName); err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + return nil +} + +func (f *FileCache) open(key string) (afero.File, bool, error) { + fileName := f.getFileName(key) + file, err := f.fs.Open(fileName) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil, false, nil + } + return nil, false, err + } + + return file, true, nil +} + +// getScopedLocks pull lock from the map if found or create a new one +func (f *FileCache) getScopedLocks(key string) (lock sync.Locker) { + f.scopedLocks.Do(func() { f.scopedLocks.locks = map[string]sync.Locker{} }) + + f.scopedLocks.Lock() + lock, ok := f.scopedLocks.locks[key] + if !ok { + lock = &sync.Mutex{} + f.scopedLocks.locks[key] = lock + } + f.scopedLocks.Unlock() + + return lock +} + +func (f *FileCache) getFileName(key string) string { + hasher := sha1.New() + _, _ = hasher.Write([]byte(key)) + hash := hex.EncodeToString(hasher.Sum(nil)) + return fmt.Sprintf("%s/%s/%s", hash[:1], hash[1:3], hash) +} diff --git a/diskcache/file_cache_test.go b/diskcache/file_cache_test.go new file mode 100644 index 00000000..c6c750c0 --- /dev/null +++ b/diskcache/file_cache_test.go @@ -0,0 +1,55 @@ +package diskcache + +import ( + "context" + "path/filepath" + "testing" + + "github.com/spf13/afero" + "github.com/stretchr/testify/require" +) + +func TestFileCache(t *testing.T) { + ctx := context.Background() + const ( + key = "key" + value = "some text" + newValue = "new text" + cacheRoot = "/cache" + cachedFilePath = "a/62/a62f2225bf70bfaccbc7f1ef2a397836717377de" + ) + + fs := afero.NewMemMapFs() + cache := New(fs, "/cache") + + // store new key + err := cache.Store(ctx, key, []byte(value)) + require.NoError(t, err) + checkValue(ctx, t, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, value) + + // update existing key + err = cache.Store(ctx, key, []byte(newValue)) + require.NoError(t, err) + checkValue(ctx, t, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, newValue) + + // delete key + err = cache.Delete(ctx, key) + require.NoError(t, err) + exists, err := afero.Exists(fs, filepath.Join(cacheRoot, cachedFilePath)) + require.NoError(t, err) + require.False(t, exists) +} + +func checkValue(ctx context.Context, t *testing.T, fs afero.Fs, fileFullPath string, cache *FileCache, key, wantValue string) { + t.Helper() + // check actual file content + b, err := afero.ReadFile(fs, fileFullPath) + require.NoError(t, err) + require.Equal(t, wantValue, string(b)) + + // check cache content + b, ok, err := cache.Load(ctx, key) + require.NoError(t, err) + require.True(t, ok) + require.Equal(t, wantValue, string(b)) +} diff --git a/diskcache/noop_cache.go b/diskcache/noop_cache.go new file mode 100644 index 00000000..faeaf07a --- /dev/null +++ b/diskcache/noop_cache.go @@ -0,0 +1,24 @@ +package diskcache + +import ( + "context" +) + +type NoOp struct { +} + +func NewNoOp() *NoOp { + return &NoOp{} +} + +func (n *NoOp) Store(_ context.Context, _ string, _ []byte) error { + return nil +} + +func (n *NoOp) Load(_ context.Context, _ string) (value []byte, exist bool, err error) { + return nil, false, nil +} + +func (n *NoOp) Delete(_ context.Context, _ string) error { + return nil +} diff --git a/docker/alpine/healthcheck.sh b/docker/alpine/healthcheck.sh new file mode 100644 index 00000000..f86550dc --- /dev/null +++ b/docker/alpine/healthcheck.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +PORT=${FB_PORT:-$(cat /config/settings.json | sh /JSON.sh | grep '\["port"\]' | awk '{print $2}')} +ADDRESS=${FB_ADDRESS:-$(cat /config/settings.json | sh /JSON.sh | grep '\["address"\]' | awk '{print $2}' | sed 's/"//g')} +ADDRESS=${ADDRESS:-localhost} + +wget -q --spider http://$ADDRESS:$PORT/health || exit 1 diff --git a/docker/alpine/init.sh b/docker/alpine/init.sh new file mode 100755 index 00000000..a4ac72ae --- /dev/null +++ b/docker/alpine/init.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +# Ensure configuration exists +if [ ! -f "/config/settings.json" ]; then + cp -a /defaults/settings.json /config/settings.json +fi + +# Extract config file path from arguments +config_file="" +next_is_config=0 +for arg in "$@"; do + if [ "$next_is_config" -eq 1 ]; then + config_file="$arg" + break + fi + case "$arg" in + -c|--config) + next_is_config=1 + ;; + -c=*|--config=*) + config_file="${arg#*=}" + break + ;; + esac +done + +# If no config argument is provided, set the default and add it to the args +if [ -z "$config_file" ]; then + config_file="/config/settings.json" + set -- --config=/config/settings.json "$@" +fi + +exec filebrowser "$@" diff --git a/.docker.json b/docker/common/defaults/settings.json similarity index 67% rename from .docker.json rename to docker/common/defaults/settings.json index 8e7472df..cf7fb4ee 100644 --- a/.docker.json +++ b/docker/common/defaults/settings.json @@ -3,6 +3,6 @@ "baseURL": "", "address": "", "log": "stdout", - "database": "/database.db", + "database": "/database/filebrowser.db", "root": "/srv" } diff --git a/docker/common/healthcheck.sh b/docker/common/healthcheck.sh new file mode 100755 index 00000000..3984adb6 --- /dev/null +++ b/docker/common/healthcheck.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +PORT=${FB_PORT:-$(jq -r .port /config/settings.json)} +ADDRESS=${FB_ADDRESS:-$(jq -r .address /config/settings.json)} +ADDRESS=${ADDRESS:-localhost} + +wget -q --spider http://$ADDRESS:$PORT/health || exit 1 diff --git a/docker/s6/custom-cont-init.d/20-config b/docker/s6/custom-cont-init.d/20-config new file mode 100755 index 00000000..a4ba52cf --- /dev/null +++ b/docker/s6/custom-cont-init.d/20-config @@ -0,0 +1,12 @@ +#!/usr/bin/with-contenv bash + +# Ensure configuration exists +if [ ! -f "/config/settings.json" ]; then + cp -a /defaults/settings.json /config/settings.json +fi + +# permissions +chown abc:abc \ + /config/settings.json \ + /database \ + /srv diff --git a/docker/s6/etc/services.d/filebrowser/run b/docker/s6/etc/services.d/filebrowser/run new file mode 100755 index 00000000..f4f2fb8e --- /dev/null +++ b/docker/s6/etc/services.d/filebrowser/run @@ -0,0 +1,3 @@ +#!/usr/bin/with-contenv bash + +exec s6-setuidgid abc filebrowser -c /config/settings.json; diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..38d17b5d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,49 @@ +

+ +

+ +> [!WARNING] +> +> **File Browser is archived on 2026-09-01.** There will be no further releases and no security fixes. Existing releases and Docker images stay online. For the known unaddressed security issues and hardening guidance, read the [README](../README.md#security). + +File Browser provides a file managing interface within a specified directory and it can be used to upload, delete, preview and edit your files. It is a **create-your-own-cloud**-kind of software where you can just install it on your server, direct it to a path and access your files through a nice web interface. + +![Preview](static/example.gif) + +## Contents + +- [Installation](installation.md) +- [Customization](customization.md) +- [Authentication](authentication.md) +- [Command Execution](command-execution.md) +- [Deployment](deployment.md) +- [Troubleshooting](troubleshooting.md) +- [Command Line Usage](cli/filebrowser.md) + +Project-level documents live in the repository root: [README](../README.md), [Building File Browser](../CONTRIBUTING.md), [Security Policy](../SECURITY.md), [Code of Conduct](../CODE-OF-CONDUCT.md), [Changelog](../CHANGELOG.md) and [License](../LICENSE). + +## Features + +- **Easy Login System** + + ![Login screen](static/1.jpg) + +- **Sleek Interface** + + ![File listing](static/2.jpg) + +- **User Management** + + ![User management](static/3.jpg) + +- **File Editing** + + ![File editor](static/4.jpg) + +- **Custom Commands** + + ![Command runner](static/5.jpg) + +- **Customization** + + ![Customization settings](static/6.jpg) diff --git a/docs/authentication.md b/docs/authentication.md new file mode 100644 index 00000000..c67b38d1 --- /dev/null +++ b/docs/authentication.md @@ -0,0 +1,167 @@ +# Authentication + +There are three possible authentication methods. Each one of them has its own capabilities and specification. Adding another authentication method is described in [Building File Browser](../CONTRIBUTING.md#authentication-provider). + +## JSON Auth (default) + +We call it JSON Authentication but it is just the default authentication method and the one that is provided by default if you don't make any changes. It is set by default, but if you've made changes before you can revert to using JSON auth: + +```sh +filebrowser config set --auth.method=json +``` + +This method can also be extended with **reCAPTCHA** verification during login: + +```sh +filebrowser config set --auth.method=json \ + --recaptcha.key site-key \ + --recaptcha.secret private-key +``` + +By default, we use [Google's reCAPTCHA](https://developers.google.com/recaptcha/docs/display) service. If you live in China, or want to use other provider, you can change the host with the following command: + +```sh +filebrowser config set --recaptcha.host https://recaptcha.net +``` + +Where `https://recaptcha.net` is any provider you want. + +## Proxy Header + +If you have a reverse proxy you want to use to login your users, you do it via our `proxy` authentication method. To configure this method, your proxy must send an HTTP header containing the username of the logged in user: + +```sh +filebrowser config set --auth.method=proxy --auth.header=X-My-Header +``` + +Where `X-My-Header` is the HTTP header provided by your proxy with the username. + +> [!WARNING] +> +> File Browser will blindly trust the provided header. If the proxy can be bypassed, an attacker could simply attach the header and get admin access. Please ensure that File Browser is not accessible from untrusted networks, and that the proxy is correctly configured to strip/overwrite the header from client requests. + +## Hook Authentication + +The Hook Authentication method in FileBrowser allows developers to delegate user authentication to an external script or program. Instead of validating credentials internally, FileBrowser sends the username and password to a custom command defined by the administrator. This command receives the credentials through environment variables and returns key‑value pairs indicating whether the user should be authenticated, blocked, or passed through. + +The hook’s output controls user permissions, scope, locale, and other attributes, making it a powerful and extensible authentication mechanism. + +> [!WARNING] +> +> The submitted username and password are attacker-controlled and are handed to your hook command as the `USERNAME` and `PASSWORD` environment variables. File Browser runs the command directly, without a shell, so the values themselves are inert. However, your script must treat them as untrusted: always quote them (`"$USERNAME"`, `"$PASSWORD"`) and never pass them unquoted to a shell, `eval`, `bash -c`, command substitution, or backticks. A hook script that shell-evaluates these values turns any login request into remote code execution. + +For example, the following code delegates filebrowser authentication to a PowerShell script on Windows. You can configure any command (for example, a script in Python, Node.js, etc.). + +```sh +filebrowser config set --auth.method=hook --auth.command="powershell.exe -File C:\route\to\your\script\auth.ps1" +``` + +This is the code for the auth.ps1 script + +```sh +param() + +# Get FileBrowser credentials from environment variables +$username = $env:USERNAME +$password = $env:PASSWORD + +# Users dictionary (for testing purposes only) +$users = @{ + "admin" = "kideW48v7-SdE*" + "test" = "2sDd3-etrytñK" +} + +# Check if the user exists in the dictionary and verify the password +if ($users.ContainsKey($username) -and $users[$username] -eq $password) { + + # Successful authentication + Write-Output "hook.action=auth" # Hook action (in this case, "auth", is required for successful authentication) + + Write-Output "user.perm.admin=true" # Set admin role (all permissions) + #You can also define specific permissions like this: + Write-Output "user.perm.execute=true" + Write-Output "user.perm.create=true" + Write-Output "user.perm.rename=true" + Write-Output "user.perm.modify=true" + Write-Output "user.perm.delete=true" + Write-Output "user.perm.share=true" + Write-Output "user.perm.download=true" + + Write-Output "user.locale=es" # Set language + Write-Output "user.viewMode=list" # Set view mode + Write-Output "user.scope=/" # Set FileBrowser scope + Write-Output "user.singleClick=true" # Set single click user configuration + Write-Output "user.hideDotfiles=false" # Set hide dot files user configuration + + #Set other configuration +} else { + # Block authentication + Write-Output "hook.action=block" +} +``` + +### Hook Output Format + +A hook authentication script must output a series of key–value pairs, one per line, using the format: + +``` +key=value +``` + +FileBrowser reads these lines and applies the corresponding authentication action and user configuration. + +#### Required Fields + +The hook must output one of the following actions: + +| Key | Description | +|--------|------------ | +| hook.action=auth | Authenticates the user. FileBrowser will create or update the user if needed. | +| hook.action=block | Rejects authentication. The login attempt fails. | +| hook.action=pass | Delegates authentication to FileBrowser’s internal password validation. | + +For most custom authentication flows, auth or block are used. + +Example of a successful authentication: + +```sh +hook.action=auth +``` + +#### Optional User Fields + +When `hook.action=auth` is returned, the hook may also define additional user attributes. These fields override FileBrowser defaults and allow full customization of the authenticated user. + +1. Permissions +``` +user.perm.admin=true +user.perm.execute=true +user.perm.create=true +user.perm.rename=true +user.perm.modify=true +user.perm.delete=true +user.perm.share=true +user.perm.download=true +``` +> Setting user.perm.admin=true automatically enables all permissions. + +2. User Interface and Behavior +``` +user.locale=es +user.viewMode=list +user.singleClick=true +user.hideDotfiles=false +``` + +3. User Scope +``` +user.scope=/ +``` + +## No Authentication + +We also provide a no authentication mechanism for users that want to use File Browser privately such in a home network. By setting this authentication method, the user with **id 1** will be used as the default users. Creating more users won't have any effect. + +```sh +filebrowser config set --auth.method=noauth +``` diff --git a/docs/cli/filebrowser-cmds-add.md b/docs/cli/filebrowser-cmds-add.md new file mode 100644 index 00000000..fc064ea9 --- /dev/null +++ b/docs/cli/filebrowser-cmds-add.md @@ -0,0 +1,29 @@ +# filebrowser cmds add + +Add a command to run on a specific event + +## Synopsis + +Add a command to run on a specific event. + +``` +filebrowser cmds add [flags] +``` + +## Options + +``` + -h, --help help for add +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser cmds](filebrowser-cmds.md) - Command runner management utility + diff --git a/docs/cli/filebrowser-cmds-ls.md b/docs/cli/filebrowser-cmds-ls.md new file mode 100644 index 00000000..136df2e8 --- /dev/null +++ b/docs/cli/filebrowser-cmds-ls.md @@ -0,0 +1,30 @@ +# filebrowser cmds ls + +List all commands for each event + +## Synopsis + +List all commands for each event. + +``` +filebrowser cmds ls [flags] +``` + +## Options + +``` + -e, --event string event name, without 'before' or 'after' + -h, --help help for ls +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser cmds](filebrowser-cmds.md) - Command runner management utility + diff --git a/docs/cli/filebrowser-cmds-rm.md b/docs/cli/filebrowser-cmds-rm.md new file mode 100644 index 00000000..837813b9 --- /dev/null +++ b/docs/cli/filebrowser-cmds-rm.md @@ -0,0 +1,37 @@ +# filebrowser cmds rm + +Removes a command from an event hooker + +## Synopsis + +Removes a command from an event hooker. The provided index +is the same that's printed when you run 'cmds ls'. Note +that after each removal/addition, the index of the +commands change. So be careful when removing them after each +other. + +You can also specify an optional parameter (index_end) so +you can remove all commands from 'index' to 'index_end', +including 'index_end'. + +``` +filebrowser cmds rm [index_end] [flags] +``` + +## Options + +``` + -h, --help help for rm +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser cmds](filebrowser-cmds.md) - Command runner management utility + diff --git a/docs/cli/filebrowser-cmds.md b/docs/cli/filebrowser-cmds.md new file mode 100644 index 00000000..bc61418b --- /dev/null +++ b/docs/cli/filebrowser-cmds.md @@ -0,0 +1,28 @@ +# filebrowser cmds + +Command runner management utility + +## Synopsis + +Command runner management utility. + +## Options + +``` + -h, --help help for cmds +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser +* [filebrowser cmds add](filebrowser-cmds-add.md) - Add a command to run on a specific event +* [filebrowser cmds ls](filebrowser-cmds-ls.md) - List all commands for each event +* [filebrowser cmds rm](filebrowser-cmds-rm.md) - Removes a command from an event hooker + diff --git a/docs/cli/filebrowser-completion-bash.md b/docs/cli/filebrowser-completion-bash.md new file mode 100644 index 00000000..e4c8963a --- /dev/null +++ b/docs/cli/filebrowser-completion-bash.md @@ -0,0 +1,50 @@ +# filebrowser completion bash + +Generate the autocompletion script for bash + +## Synopsis + +Generate the autocompletion script for the bash shell. + +This script depends on the 'bash-completion' package. +If it is not installed already, you can install it via your OS's package manager. + +To load completions in your current shell session: + + source <(filebrowser completion bash) + +To load completions for every new session, execute once: + +### Linux: + + filebrowser completion bash > /etc/bash_completion.d/filebrowser + +### macOS: + + filebrowser completion bash > $(brew --prefix)/etc/bash_completion.d/filebrowser + +You will need to start a new shell for this setup to take effect. + + +``` +filebrowser completion bash +``` + +## Options + +``` + -h, --help help for bash + --no-descriptions disable completion descriptions +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser completion](filebrowser-completion.md) - Generate the autocompletion script for the specified shell + diff --git a/docs/cli/filebrowser-completion-fish.md b/docs/cli/filebrowser-completion-fish.md new file mode 100644 index 00000000..e8297aa1 --- /dev/null +++ b/docs/cli/filebrowser-completion-fish.md @@ -0,0 +1,41 @@ +# filebrowser completion fish + +Generate the autocompletion script for fish + +## Synopsis + +Generate the autocompletion script for the fish shell. + +To load completions in your current shell session: + + filebrowser completion fish | source + +To load completions for every new session, execute once: + + filebrowser completion fish > ~/.config/fish/completions/filebrowser.fish + +You will need to start a new shell for this setup to take effect. + + +``` +filebrowser completion fish [flags] +``` + +## Options + +``` + -h, --help help for fish + --no-descriptions disable completion descriptions +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser completion](filebrowser-completion.md) - Generate the autocompletion script for the specified shell + diff --git a/docs/cli/filebrowser-completion-powershell.md b/docs/cli/filebrowser-completion-powershell.md new file mode 100644 index 00000000..21f84c4c --- /dev/null +++ b/docs/cli/filebrowser-completion-powershell.md @@ -0,0 +1,38 @@ +# filebrowser completion powershell + +Generate the autocompletion script for powershell + +## Synopsis + +Generate the autocompletion script for powershell. + +To load completions in your current shell session: + + filebrowser completion powershell | Out-String | Invoke-Expression + +To load completions for every new session, add the output of the above command +to your powershell profile. + + +``` +filebrowser completion powershell [flags] +``` + +## Options + +``` + -h, --help help for powershell + --no-descriptions disable completion descriptions +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser completion](filebrowser-completion.md) - Generate the autocompletion script for the specified shell + diff --git a/docs/cli/filebrowser-completion-zsh.md b/docs/cli/filebrowser-completion-zsh.md new file mode 100644 index 00000000..f54794b0 --- /dev/null +++ b/docs/cli/filebrowser-completion-zsh.md @@ -0,0 +1,52 @@ +# filebrowser completion zsh + +Generate the autocompletion script for zsh + +## Synopsis + +Generate the autocompletion script for the zsh shell. + +If shell completion is not already enabled in your environment you will need +to enable it. You can execute the following once: + + echo "autoload -U compinit; compinit" >> ~/.zshrc + +To load completions in your current shell session: + + source <(filebrowser completion zsh) + +To load completions for every new session, execute once: + +### Linux: + + filebrowser completion zsh > "${fpath[1]}/_filebrowser" + +### macOS: + + filebrowser completion zsh > $(brew --prefix)/share/zsh/site-functions/_filebrowser + +You will need to start a new shell for this setup to take effect. + + +``` +filebrowser completion zsh [flags] +``` + +## Options + +``` + -h, --help help for zsh + --no-descriptions disable completion descriptions +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser completion](filebrowser-completion.md) - Generate the autocompletion script for the specified shell + diff --git a/docs/cli/filebrowser-completion.md b/docs/cli/filebrowser-completion.md new file mode 100644 index 00000000..b2c6bdc1 --- /dev/null +++ b/docs/cli/filebrowser-completion.md @@ -0,0 +1,31 @@ +# filebrowser completion + +Generate the autocompletion script for the specified shell + +## Synopsis + +Generate the autocompletion script for filebrowser for the specified shell. +See each sub-command's help for details on how to use the generated script. + + +## Options + +``` + -h, --help help for completion +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser +* [filebrowser completion bash](filebrowser-completion-bash.md) - Generate the autocompletion script for bash +* [filebrowser completion fish](filebrowser-completion-fish.md) - Generate the autocompletion script for fish +* [filebrowser completion powershell](filebrowser-completion-powershell.md) - Generate the autocompletion script for powershell +* [filebrowser completion zsh](filebrowser-completion-zsh.md) - Generate the autocompletion script for zsh + diff --git a/docs/cli/filebrowser-config-cat.md b/docs/cli/filebrowser-config-cat.md new file mode 100644 index 00000000..952580fd --- /dev/null +++ b/docs/cli/filebrowser-config-cat.md @@ -0,0 +1,29 @@ +# filebrowser config cat + +Prints the configuration + +## Synopsis + +Prints the configuration. + +``` +filebrowser config cat [flags] +``` + +## Options + +``` + -h, --help help for cat +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser config](filebrowser-config.md) - Configuration management utility + diff --git a/docs/cli/filebrowser-config-export.md b/docs/cli/filebrowser-config-export.md new file mode 100644 index 00000000..141d4e8e --- /dev/null +++ b/docs/cli/filebrowser-config-export.md @@ -0,0 +1,31 @@ +# filebrowser config export + +Export the configuration to a file + +## Synopsis + +Export the configuration to a file. The path must be for a +json or yaml file. This exported configuration can be changed, +and imported again with 'config import' command. + +``` +filebrowser config export [flags] +``` + +## Options + +``` + -h, --help help for export +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser config](filebrowser-config.md) - Configuration management utility + diff --git a/docs/cli/filebrowser-config-import.md b/docs/cli/filebrowser-config-import.md new file mode 100644 index 00000000..871da341 --- /dev/null +++ b/docs/cli/filebrowser-config-import.md @@ -0,0 +1,36 @@ +# filebrowser config import + +Import a configuration file + +## Synopsis + +Import a configuration file. This will replace all the existing +configuration. Can be used with or without unexisting databases. + +If used with a nonexisting database, a key will be generated +automatically. Otherwise the key will be kept the same as in the +database. + +The path must be for a json or yaml file. + +``` +filebrowser config import [flags] +``` + +## Options + +``` + -h, --help help for import +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser config](filebrowser-config.md) - Configuration management utility + diff --git a/docs/cli/filebrowser-config-init.md b/docs/cli/filebrowser-config-init.md new file mode 100644 index 00000000..c4e463cc --- /dev/null +++ b/docs/cli/filebrowser-config-init.md @@ -0,0 +1,90 @@ +# filebrowser config init + +Initialize a new database + +## Synopsis + +Initialize a new database to use with File Browser. All of +this options can be changed in the future with the command +'filebrowser config set'. The user related flags apply +to the defaults when creating new users and you don't +override the options. + +``` +filebrowser config init [flags] +``` + +## Options + +``` + --aceEditorTheme string ace editor's syntax highlighting theme for users + -a, --address string address to listen on (default "127.0.0.1") + --auth.command string command for auth.method=hook + --auth.header string HTTP header for auth.method=proxy + --auth.logoutPage string url of custom logout page + --auth.method string authentication type (default "json") + -b, --baseURL string base url + --branding.color string set the theme color + --branding.disableExternal disable external links such as GitHub links + --branding.disableUsedPercentage disable used disk percentage graph + --branding.files string path to directory with images and custom styles + --branding.name string replace 'File Browser' by this name + --branding.theme string set the theme + -t, --cert string tls certificate + --commands strings a list of the commands a user can execute + --createUserDir generate user's home directory automatically + --dateFormat use date format (true for absolute time, false for relative) + --dirMode string mode bits that new directories are created with (default "0o750") + --disableExec disables Command Runner feature (default true) + --disableImageResolutionCalc disables image resolution calculation by reading image files + --disablePreviewResize disable resize of image previews + --disableThumbnails disable image thumbnails + --disableTypeDetectionByHeader disables type detection by reading file headers + --fileMode string mode bits that new files are created with (default "0o640") + --followExternalSymlinks follow symlinks whose target is outside the user scope (unsafe) + -h, --help help for init + --hideDotfiles hide dotfiles in file listings + --hideLoginButton hide login button from public pages + -k, --key string tls key + --locale string locale for users (default "en") + --lockPassword lock password + -l, --log string log output (default "stdout") + --minimumPasswordLength uint minimum password length for new users (default 12) + --perm.admin admin perm for users + --perm.create create perm for users (default true) + --perm.delete delete perm for users (default true) + --perm.download download perm for users (default true) + --perm.execute execute perm for users (default true) + --perm.modify modify perm for users (default true) + --perm.rename rename perm for users (default true) + --perm.share share perm for users (default true) + -p, --port string port to listen on (default "8080") + --recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com") + --recaptcha.key string ReCaptcha site key + --recaptcha.secret string ReCaptcha secret + --redirectAfterCopyMove redirect to destination after copy/move + -r, --root string root to prepend to relative paths (default ".") + --scope string scope for users (default ".") + --shell string shell command to which other commands should be appended + -s, --signup allow users to signup + --singleClick use single clicks only + --socket string socket to listen to (cannot be used with address, port, cert nor key flags) + --sorting.asc sorting by ascending order + --sorting.by string sorting mode (name, size or modified) (default "name") + --tokenExpirationTime string user session timeout (default "2h") + --tus.chunkSize uint the tus chunk size (default 10485760) + --tus.retryCount uint16 the tus retry count (default 5) + --viewMode string view mode for users (default "list") +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser config](filebrowser-config.md) - Configuration management utility + diff --git a/docs/cli/filebrowser-config-set.md b/docs/cli/filebrowser-config-set.md new file mode 100644 index 00000000..0b8684e0 --- /dev/null +++ b/docs/cli/filebrowser-config-set.md @@ -0,0 +1,87 @@ +# filebrowser config set + +Updates the configuration + +## Synopsis + +Updates the configuration. Set the flags for the options +you want to change. Other options will remain unchanged. + +``` +filebrowser config set [flags] +``` + +## Options + +``` + --aceEditorTheme string ace editor's syntax highlighting theme for users + -a, --address string address to listen on (default "127.0.0.1") + --auth.command string command for auth.method=hook + --auth.header string HTTP header for auth.method=proxy + --auth.logoutPage string url of custom logout page + --auth.method string authentication type (default "json") + -b, --baseURL string base url + --branding.color string set the theme color + --branding.disableExternal disable external links such as GitHub links + --branding.disableUsedPercentage disable used disk percentage graph + --branding.files string path to directory with images and custom styles + --branding.name string replace 'File Browser' by this name + --branding.theme string set the theme + -t, --cert string tls certificate + --commands strings a list of the commands a user can execute + --createUserDir generate user's home directory automatically + --dateFormat use date format (true for absolute time, false for relative) + --dirMode string mode bits that new directories are created with (default "0o750") + --disableExec disables Command Runner feature (default true) + --disableImageResolutionCalc disables image resolution calculation by reading image files + --disablePreviewResize disable resize of image previews + --disableThumbnails disable image thumbnails + --disableTypeDetectionByHeader disables type detection by reading file headers + --fileMode string mode bits that new files are created with (default "0o640") + --followExternalSymlinks follow symlinks whose target is outside the user scope (unsafe) + -h, --help help for set + --hideDotfiles hide dotfiles in file listings + --hideLoginButton hide login button from public pages + -k, --key string tls key + --locale string locale for users (default "en") + --lockPassword lock password + -l, --log string log output (default "stdout") + --minimumPasswordLength uint minimum password length for new users (default 12) + --perm.admin admin perm for users + --perm.create create perm for users (default true) + --perm.delete delete perm for users (default true) + --perm.download download perm for users (default true) + --perm.execute execute perm for users (default true) + --perm.modify modify perm for users (default true) + --perm.rename rename perm for users (default true) + --perm.share share perm for users (default true) + -p, --port string port to listen on (default "8080") + --recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com") + --recaptcha.key string ReCaptcha site key + --recaptcha.secret string ReCaptcha secret + --redirectAfterCopyMove redirect to destination after copy/move + -r, --root string root to prepend to relative paths (default ".") + --scope string scope for users (default ".") + --shell string shell command to which other commands should be appended + -s, --signup allow users to signup + --singleClick use single clicks only + --socket string socket to listen to (cannot be used with address, port, cert nor key flags) + --sorting.asc sorting by ascending order + --sorting.by string sorting mode (name, size or modified) (default "name") + --tokenExpirationTime string user session timeout (default "2h") + --tus.chunkSize uint the tus chunk size (default 10485760) + --tus.retryCount uint16 the tus retry count (default 5) + --viewMode string view mode for users (default "list") +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser config](filebrowser-config.md) - Configuration management utility + diff --git a/docs/cli/filebrowser-config.md b/docs/cli/filebrowser-config.md new file mode 100644 index 00000000..b87dbf07 --- /dev/null +++ b/docs/cli/filebrowser-config.md @@ -0,0 +1,30 @@ +# filebrowser config + +Configuration management utility + +## Synopsis + +Configuration management utility. + +## Options + +``` + -h, --help help for config +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser +* [filebrowser config cat](filebrowser-config-cat.md) - Prints the configuration +* [filebrowser config export](filebrowser-config-export.md) - Export the configuration to a file +* [filebrowser config import](filebrowser-config-import.md) - Import a configuration file +* [filebrowser config init](filebrowser-config-init.md) - Initialize a new database +* [filebrowser config set](filebrowser-config-set.md) - Updates the configuration + diff --git a/docs/cli/filebrowser-hash.md b/docs/cli/filebrowser-hash.md new file mode 100644 index 00000000..9d480547 --- /dev/null +++ b/docs/cli/filebrowser-hash.md @@ -0,0 +1,29 @@ +# filebrowser hash + +Hashes a password + +## Synopsis + +Hashes a password using bcrypt algorithm. + +``` +filebrowser hash [flags] +``` + +## Options + +``` + -h, --help help for hash +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser + diff --git a/docs/cli/filebrowser-rules-add.md b/docs/cli/filebrowser-rules-add.md new file mode 100644 index 00000000..2fd2efaf --- /dev/null +++ b/docs/cli/filebrowser-rules-add.md @@ -0,0 +1,33 @@ +# filebrowser rules add + +Add a global rule or user rule + +## Synopsis + +Add a global rule or user rule. + +``` +filebrowser rules add [flags] +``` + +## Options + +``` + -a, --allow indicates this is an allow rule + -h, --help help for add + -r, --regex indicates this is a regex rule +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") + -i, --id uint id of user to which the rules apply + -u, --username string username of user to which the rules apply +``` + +## See Also + +* [filebrowser rules](filebrowser-rules.md) - Rules management utility + diff --git a/docs/cli/filebrowser-rules-ls.md b/docs/cli/filebrowser-rules-ls.md new file mode 100644 index 00000000..8a9cc6eb --- /dev/null +++ b/docs/cli/filebrowser-rules-ls.md @@ -0,0 +1,31 @@ +# filebrowser rules ls + +List global rules or user specific rules + +## Synopsis + +List global rules or user specific rules. + +``` +filebrowser rules ls [flags] +``` + +## Options + +``` + -h, --help help for ls +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") + -i, --id uint id of user to which the rules apply + -u, --username string username of user to which the rules apply +``` + +## See Also + +* [filebrowser rules](filebrowser-rules.md) - Rules management utility + diff --git a/docs/cli/filebrowser-rules-rm.md b/docs/cli/filebrowser-rules-rm.md new file mode 100644 index 00000000..1870afbb --- /dev/null +++ b/docs/cli/filebrowser-rules-rm.md @@ -0,0 +1,40 @@ +# filebrowser rules rm + +Remove a global rule or user rule + +## Synopsis + +Remove a global rule or user rule. The provided index +is the same that's printed when you run 'rules ls'. Note +that after each removal/addition, the index of the +commands change. So be careful when removing them after each +other. + +You can also specify an optional parameter (index_end) so +you can remove all commands from 'index' to 'index_end', +including 'index_end'. + +``` +filebrowser rules rm [index_end] [flags] +``` + +## Options + +``` + -h, --help help for rm + --index uint index of rule to remove +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") + -i, --id uint id of user to which the rules apply + -u, --username string username of user to which the rules apply +``` + +## See Also + +* [filebrowser rules](filebrowser-rules.md) - Rules management utility + diff --git a/docs/cli/filebrowser-rules.md b/docs/cli/filebrowser-rules.md new file mode 100644 index 00000000..cc8386d0 --- /dev/null +++ b/docs/cli/filebrowser-rules.md @@ -0,0 +1,34 @@ +# filebrowser rules + +Rules management utility + +## Synopsis + +On each subcommand you'll have available at least two flags: +"username" and "id". You must either set only one of them +or none. If you set one of them, the command will apply to +an user, otherwise it will be applied to the global set or +rules. + +## Options + +``` + -h, --help help for rules + -i, --id uint id of user to which the rules apply + -u, --username string username of user to which the rules apply +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser +* [filebrowser rules add](filebrowser-rules-add.md) - Add a global rule or user rule +* [filebrowser rules ls](filebrowser-rules-ls.md) - List global rules or user specific rules +* [filebrowser rules rm](filebrowser-rules-rm.md) - Remove a global rule or user rule + diff --git a/docs/cli/filebrowser-users-add.md b/docs/cli/filebrowser-users-add.md new file mode 100644 index 00000000..b433315b --- /dev/null +++ b/docs/cli/filebrowser-users-add.md @@ -0,0 +1,49 @@ +# filebrowser users add + +Create a new user + +## Synopsis + +Create a new user and add it to the database. + +``` +filebrowser users add [flags] +``` + +## Options + +``` + --aceEditorTheme string ace editor's syntax highlighting theme for users + --commands strings a list of the commands a user can execute + --dateFormat use date format (true for absolute time, false for relative) + -h, --help help for add + --hideDotfiles hide dotfiles in file listings + --locale string locale for users (default "en") + --lockPassword lock password + --perm.admin admin perm for users + --perm.create create perm for users (default true) + --perm.delete delete perm for users (default true) + --perm.download download perm for users (default true) + --perm.execute execute perm for users (default true) + --perm.modify modify perm for users (default true) + --perm.rename rename perm for users (default true) + --perm.share share perm for users (default true) + --redirectAfterCopyMove redirect to destination after copy/move + --scope string scope for users (default ".") + --singleClick use single clicks only + --sorting.asc sorting by ascending order + --sorting.by string sorting mode (name, size or modified) (default "name") + --viewMode string view mode for users (default "list") +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-export.md b/docs/cli/filebrowser-users-export.md new file mode 100644 index 00000000..e513a453 --- /dev/null +++ b/docs/cli/filebrowser-users-export.md @@ -0,0 +1,30 @@ +# filebrowser users export + +Export all users to a file. + +## Synopsis + +Export all users to a json or yaml file. Please indicate the +path to the file where you want to write the users. + +``` +filebrowser users export [flags] +``` + +## Options + +``` + -h, --help help for export +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-find.md b/docs/cli/filebrowser-users-find.md new file mode 100644 index 00000000..19ed3924 --- /dev/null +++ b/docs/cli/filebrowser-users-find.md @@ -0,0 +1,29 @@ +# filebrowser users find + +Find a user by username or id + +## Synopsis + +Find a user by username or id. If no flag is set, all users will be printed. + +``` +filebrowser users find [flags] +``` + +## Options + +``` + -h, --help help for find +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-import.md b/docs/cli/filebrowser-users-import.md new file mode 100644 index 00000000..efc185fc --- /dev/null +++ b/docs/cli/filebrowser-users-import.md @@ -0,0 +1,34 @@ +# filebrowser users import + +Import users from a file + +## Synopsis + +Import users from a file. The path must be for a json or yaml +file. You can use this command to import new users to your +installation. For that, just don't place their ID on the files +list or set it to 0. + +``` +filebrowser users import [flags] +``` + +## Options + +``` + -h, --help help for import + --overwrite overwrite users with the same id/username combo + --replace replace the entire user base +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-ls.md b/docs/cli/filebrowser-users-ls.md new file mode 100644 index 00000000..59a4f8fe --- /dev/null +++ b/docs/cli/filebrowser-users-ls.md @@ -0,0 +1,25 @@ +# filebrowser users ls + +List all users. + +``` +filebrowser users ls [flags] +``` + +## Options + +``` + -h, --help help for ls +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-rm.md b/docs/cli/filebrowser-users-rm.md new file mode 100644 index 00000000..0e3b3035 --- /dev/null +++ b/docs/cli/filebrowser-users-rm.md @@ -0,0 +1,29 @@ +# filebrowser users rm + +Delete a user by username or id + +## Synopsis + +Delete a user by username or id + +``` +filebrowser users rm [flags] +``` + +## Options + +``` + -h, --help help for rm +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users-update.md b/docs/cli/filebrowser-users-update.md new file mode 100644 index 00000000..89a37a1e --- /dev/null +++ b/docs/cli/filebrowser-users-update.md @@ -0,0 +1,52 @@ +# filebrowser users update + +Updates an existing user + +## Synopsis + +Updates an existing user. Set the flags for the +options you want to change. + +``` +filebrowser users update [flags] +``` + +## Options + +``` + --aceEditorTheme string ace editor's syntax highlighting theme for users + --commands strings a list of the commands a user can execute + --dateFormat use date format (true for absolute time, false for relative) + -h, --help help for update + --hideDotfiles hide dotfiles in file listings + --locale string locale for users (default "en") + --lockPassword lock password + -p, --password string new password + --perm.admin admin perm for users + --perm.create create perm for users (default true) + --perm.delete delete perm for users (default true) + --perm.download download perm for users (default true) + --perm.execute execute perm for users (default true) + --perm.modify modify perm for users (default true) + --perm.rename rename perm for users (default true) + --perm.share share perm for users (default true) + --redirectAfterCopyMove redirect to destination after copy/move + --scope string scope for users (default ".") + --singleClick use single clicks only + --sorting.asc sorting by ascending order + --sorting.by string sorting mode (name, size or modified) (default "name") + -u, --username string new username + --viewMode string view mode for users (default "list") +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser users](filebrowser-users.md) - Users management utility + diff --git a/docs/cli/filebrowser-users.md b/docs/cli/filebrowser-users.md new file mode 100644 index 00000000..63d82bc1 --- /dev/null +++ b/docs/cli/filebrowser-users.md @@ -0,0 +1,32 @@ +# filebrowser users + +Users management utility + +## Synopsis + +Users management utility. + +## Options + +``` + -h, --help help for users +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser +* [filebrowser users add](filebrowser-users-add.md) - Create a new user +* [filebrowser users export](filebrowser-users-export.md) - Export all users to a file. +* [filebrowser users find](filebrowser-users-find.md) - Find a user by username or id +* [filebrowser users import](filebrowser-users-import.md) - Import users from a file +* [filebrowser users ls](filebrowser-users-ls.md) - List all users. +* [filebrowser users rm](filebrowser-users-rm.md) - Delete a user by username or id +* [filebrowser users update](filebrowser-users-update.md) - Updates an existing user + diff --git a/docs/cli/filebrowser-version.md b/docs/cli/filebrowser-version.md new file mode 100644 index 00000000..ec3596c5 --- /dev/null +++ b/docs/cli/filebrowser-version.md @@ -0,0 +1,25 @@ +# filebrowser version + +Print the version number + +``` +filebrowser version [flags] +``` + +## Options + +``` + -h, --help help for version +``` + +## Options inherited from parent commands + +``` + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") +``` + +## See Also + +* [filebrowser](filebrowser.md) - A stylish web-based file browser + diff --git a/docs/cli/filebrowser.md b/docs/cli/filebrowser.md new file mode 100644 index 00000000..266516bf --- /dev/null +++ b/docs/cli/filebrowser.md @@ -0,0 +1,89 @@ +# filebrowser + +A stylish web-based file browser + +## Synopsis + +File Browser CLI lets you create the database to use with File Browser, +manage your users and all the configurations without accessing the +web interface. + +If you've never run File Browser, you'll need to have a database for +it. Don't worry: you don't need to setup a separate database server. +We're using Bolt DB which is a single file database and all managed +by ourselves. + +For this command, all flags are available as environmental variables, +except for "--config", which specifies the configuration file to use. +The environment variables are prefixed by "FB_" followed by the flag name in +UPPER_SNAKE_CASE. For example, the flag "--disablePreviewResize" is available +as FB_DISABLE_PREVIEW_RESIZE. + +If "--config" is not specified, File Browser will look for a configuration +file named .filebrowser.{json, toml, yaml, yml} in the following directories: + +- ./ +- $HOME/ +- /etc/filebrowser/ + +**Note:** Only the options listed below can be set via the config file or +environment variables. Other configuration options live exclusively in the +database and so they must be set by the "config set" or "config +import" commands. + +The precedence of the configuration values are as follows: + +- Flags +- Environment variables +- Configuration file +- Database values +- Defaults + +Also, if the database path doesn't exist, File Browser will enter into +the quick setup mode and a new database will be bootstrapped and a new +user created with the credentials from options "username" and "password". + +``` +filebrowser [flags] +``` + +## Options + +``` + -a, --address string address to listen on (default "127.0.0.1") + -b, --baseURL string base url + --cacheDir string file cache directory (disabled if empty) + -t, --cert string tls certificate + -c, --config string config file path + -d, --database string database path (default "./filebrowser.db") + --disableExec disables Command Runner feature (default true) + --disableImageResolutionCalc disables image resolution calculation by reading image files + --disablePreviewResize disable resize of image previews + --disableThumbnails disable image thumbnails + --disableTypeDetectionByHeader disables type detection by reading file headers + --followExternalSymlinks follow symlinks whose target is outside the user scope (unsafe) + -h, --help help for filebrowser + --imageProcessors int image processors count (default 4) + -k, --key string tls key + -l, --log string log output (default "stdout") + --noauth use the noauth auther when using quick setup + --password string hashed password for the first user when using quick setup + -p, --port string port to listen on (default "8080") + --redisCacheUrl string redis cache URL (for multi-instance deployments), e.g. redis://user:pass@host:port + -r, --root string root to prepend to relative paths (default ".") + --socket string socket to listen to (cannot be used with address, port, cert nor key flags) + --socketPerm uint32 unix socket file permissions (default 438) + --tokenExpirationTime string user session timeout (default "2h") + --username string username for the first user when using quick setup (default "admin") +``` + +## See Also + +* [filebrowser cmds](filebrowser-cmds.md) - Command runner management utility +* [filebrowser completion](filebrowser-completion.md) - Generate the autocompletion script for the specified shell +* [filebrowser config](filebrowser-config.md) - Configuration management utility +* [filebrowser hash](filebrowser-hash.md) - Hashes a password +* [filebrowser rules](filebrowser-rules.md) - Rules management utility +* [filebrowser users](filebrowser-users.md) - Users management utility +* [filebrowser version](filebrowser-version.md) - Print the version number + diff --git a/docs/command-execution.md b/docs/command-execution.md new file mode 100644 index 00000000..454c67b6 --- /dev/null +++ b/docs/command-execution.md @@ -0,0 +1,54 @@ +# Command Execution + +> [!CAUTION] +> +> The **hook runner** and **interactive shell** functionalities have been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199). + +## Hook Runner + +The hook runner is a feature that enables you to execute any shell command you want before or after a certain event. Right now, these are the events: + +* Copy +* Rename +* Upload +* Delete +* Save + +Also, during the execution of the commands set for those hooks, there will be some environment variables available to help you perform your commands: + +* `FILE` with the full absolute path to the changed file. +* `SCOPE` with the path to user's scope. +* `TRIGGER` with the name of the event. +* `USERNAME` with the user's username. +* `DESTINATION` with the absolute path to the destination. Only used for **copy** and **rename.** + +At this moment, you can edit the commands via the command line interface, using the following commands \(please check the flag `--help` to know more about them\): + +```bash +filebrowser cmds add before_copy "echo $FILE" +filebrowser cmds rm before_copy 0 +filebrowser cmds ls +``` + +Or you can use the web interface to manage them via **Settings** → **Global Settings**. + +## Interactive Shell + +Within File Browser you can toggle the shell (`< >` icon at the top right) and this will open a shell command window at the bottom of the screen. This functionality can be turned on using the environment variable `FB_DISABLE_EXEC=false` or the flag `--disable-exec=false`. + +By default no commands are available as the command list is empty. To enable commands these need to either be done on a per-user basis (including for the Admin user). + +You can do this by adding them in Settings > User Management > (edit user) > Commands or to *apply to all new users created from that point forward* they can be set in Settings > Global Settings + +> [!NOTE] +> +> If using a proxy manager then remember to enable websockets support for the File Browser proxy + +> [!NOTE] +> +> If using Docker and you want to add a new command that is not in the base image then you will need to build a custom Docker image using `filebrowser/filebrowser` as a base image. For example to add 7z: +> +> ```docker +> FROM filebrowser/filebrowser +> RUN sudo apt install p7zip-full +> ``` diff --git a/docs/customization.md b/docs/customization.md new file mode 100644 index 00000000..054da7ab --- /dev/null +++ b/docs/customization.md @@ -0,0 +1,45 @@ +# Customization + +You can customize the styles, branding and icons of your File Browser instance in order to give it a personal touch. + +## Custom Branding + +You can customize File Browser to use your own branding. This includes the following: + +- **Name**: the name of the instance that shows up on the tab title, login pages, and some other places. +- **Disable External Links**: disables all external links, except to the documentation. +- **Disable Used Percentage**: disables the disk usage information on the sidebar. +- **Branding Folder**: directory which can contain two items: + - `custom.css`, containing a global stylesheet to apply to all users. + - `img`, a directory which can replace all the [default logotypes](https://github.com/filebrowser/filebrowser/tree/master/frontend/public/img) from the application. + +This can be configured by the administrator user, under **Settings → Global Settings**. You can also update the configuration directly using the [CLI](cli/filebrowser-config-set.md): + +```sh +filebrowser config set --branding.name "My Name" \ + --branding.files "/abs/path/to/my/dir" \ + --branding.disableExternal +``` + +> [!NOTE] +> +> If you are using Docker, you need to mount a volume with the `branding` directory in order for it to be accessible from within the container. + +### Custom Icons + +To replace the default logotype and favicons, you need to create an `img` directory under the branding directory. The structure of this directory must mimic the one from the [default logotypes](https://github.com/filebrowser/filebrowser/tree/master/frontend/public/img): + +``` +img/ + logo.svg + icons/ + favicon.ico + favicon.svg + (...) +``` + +Note that there are different versions of the same favicon in multiple sizes. To replace all of them, you need to add versions for all of them. You can use the [Real Favicon Generator](https://realfavicongenerator.net/) to generate these for you from your base image. + +> [!NOTE] +> +> The icons are cached by the browser, so you may not see your changes immediately. You can address this by clearing your browser's cache. diff --git a/docs/deployment.md b/docs/deployment.md new file mode 100644 index 00000000..57676004 --- /dev/null +++ b/docs/deployment.md @@ -0,0 +1,46 @@ +## Self-Registration (Signup) + +File Browser allows you to enable user self-registration (signup). This can be enabled via **Settings → Global Settings**, or with `filebrowser config set --signup`. Self-registered users inherit the configured **user defaults**, including the scope. + +> [!WARNING] +> +> By default, the user scope is the server's root, so a self-registered user could read, +> modify, and delete every file File Browser serves. To prevent this, either: +> +> a. Enable `createUserDir` so each user gets their own directory; or +> b. If users are meant to share files, set the default scope to something other than the root. + +## Fail2ban + +File Browser does not natively support protection against brute force attacks. Therefore, we suggest using something like [fail2ban](https://github.com/fail2ban/fail2ban), which takes care of that by tracking the logs of your File Browser instance. For more information on how fail2ban works, please refer to their [wiki](https://github.com/fail2ban/fail2ban/wiki). + +### Filter Configuration + +An example filter configuration targeted at matching File Browser's logs. + +```ini +[INCLUDES] +before = common.conf + +[Definition] +datepattern = `^%%Y\/%%m\/%%d %%H:%%M:%%S` +failregex = `\/api\/login: 403 *` +``` + +### Jail Configuration + +An example jail configuration. You should fill it with the path of the logs of File Browser, as well as the port where it is running at. + +```ini +[filebrowser] + +enabled = true +port = [your_port] +filter = filebrowser +logpath = [your_log_path] +maxretry = 10 +bantime = 10m +findtime = 10m +banaction = iptables-allports +banaction_allports = iptables-allports +``` diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..4a603f53 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,93 @@ +# Installation + +File Browser is a single binary and can be used as standalone executable. However, it is also available as a [Docker](https://www.docker.com) image. The installation and first time setup is quite straightforward independently of which system you use. + +## Binary + +The quickest and easiest way to install File Browser is to use a package manager, or our download script, which automatically fetches the latest version of File Browser for your platform. Alternatively, you can manually download the binary from the [releases page](https://github.com/filebrowser/filebrowser/releases). + +### Brew + +```sh +brew tap filebrowser/tap +brew install filebrowser +filebrowser -r /path/to/your/files +``` + +### Unix + +```sh +curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash +filebrowser -r /path/to/your/files +``` + +### Windows + +```sh +iwr -useb https://raw.githubusercontent.com/filebrowser/get/master/get.ps1 | iex +filebrowser -r /path/to/your/files +``` + +File Browser is now up and running. Read the ["First Boot"](#first-boot) section for more information. + +## Docker + +File Browser is available as two different Docker images, which can be found on [Docker Hub](https://hub.docker.com/r/filebrowser/filebrowser): a [bare Alpine image](#bare-alpine-image) and an [S6 Overlay image](#s6-overlay-image). + +### Bare Alpine Image + +```sh +docker run \ + -v filebrowser_data:/srv \ + -v filebrowser_database:/database \ + -v filebrowser_config:/config \ + -p 8080:80 \ + filebrowser/filebrowser +``` + +Where `filebrowser_data`, `filebrowser_database` and `filebrowser_config` are Docker [volumes](https://docs.docker.com/engine/storage/volumes/), where the data, database and configuration will be stored, respectively. The default configuration and database will be automatically initialized. + +The default user that runs File Browser inside the container has UID 1000 and GID 1000. If, for one reason or another, you want to run the Docker container with a different user, please consult Docker's [user documentation](https://docs.docker.com/engine/containers/run/#user). + +> [!NOTE] +> +> When using [bind mounts](https://docs.docker.com/engine/storage/bind-mounts/), that is, when you mount a path on the host in the container, you must manually ensure that they have the correct **permissions**. Docker does not do this automatically for you. The host directories must be readable and writable by the user running inside the container. You can use the [`chown`](https://linux.die.net/man/1/chown) command to change the owner of those paths. + +File Browser is now up and running. Read the ["First Boot"](#first-boot) section for more information. + +### S6 Overlay Image + +The `s6` image is based on LinuxServer and leverages the [s6-overlay](https://github.com/just-containers/s6-overlay) system for a standard, highly customizable image. It should be used as follows: + +```shell +docker run \ + -v /path/to/srv:/srv \ + -v /path/to/database:/database \ + -v /path/to/config:/config \ + -e PUID=$(id -u) \ + -e PGID=$(id -g) \ + -p 8080:80 \ + filebrowser/filebrowser:s6 +``` + +Where: + +- `/path/to/srv` contains the files root directory for File Browser +- `/path/to/config` contains a `settings.json` file +- `/path/to/database` contains a `filebrowser.db` file + +Both `settings.json` and `filebrowser.db` will automatically be initialized if they don't exist. + +File Browser is now up and running. Read the ["First Boot"](#first-boot) section for more information. + +## First Boot + +Your instance is now up and running. File Browser will automatically bootstrap a database, in which the configuration and the users are stored. You can find the address in which your instance is running, as well as the randomly generated password for the user `admin`, in the console logs. + +> [!WARNING] +> +> The automatically generated password for the user `admin` is only displayed once. If you fail to remember it, you will need to manually delete the database and start File Browser again. + +Although this is the fastest way to bootstrap an instance, we recommend you to take a look at other possible options, by checking [`config init`](cli/filebrowser-config-init.md) and [`config set`](cli/filebrowser-config-set.md), to make the installation as safe and customized as it can be. + +If your goal is to have a public-facing deployment, we recommend taking a look at the [deployment](deployment.md) page for more information on how you can secure your installation. diff --git a/docs/static/1.jpg b/docs/static/1.jpg new file mode 100644 index 00000000..413e50ad Binary files /dev/null and b/docs/static/1.jpg differ diff --git a/docs/static/2.jpg b/docs/static/2.jpg new file mode 100644 index 00000000..88c791eb Binary files /dev/null and b/docs/static/2.jpg differ diff --git a/docs/static/3.jpg b/docs/static/3.jpg new file mode 100644 index 00000000..34ba26f7 Binary files /dev/null and b/docs/static/3.jpg differ diff --git a/docs/static/4.jpg b/docs/static/4.jpg new file mode 100644 index 00000000..542c98df Binary files /dev/null and b/docs/static/4.jpg differ diff --git a/docs/static/5.jpg b/docs/static/5.jpg new file mode 100644 index 00000000..1c2efba9 Binary files /dev/null and b/docs/static/5.jpg differ diff --git a/docs/static/6.jpg b/docs/static/6.jpg new file mode 100644 index 00000000..0c65a03e Binary files /dev/null and b/docs/static/6.jpg differ diff --git a/docs/static/example.gif b/docs/static/example.gif new file mode 100644 index 00000000..1387a0cd Binary files /dev/null and b/docs/static/example.gif differ diff --git a/docs/static/favicon.png b/docs/static/favicon.png new file mode 100644 index 00000000..14793ffb Binary files /dev/null and b/docs/static/favicon.png differ diff --git a/docs/static/logo.png b/docs/static/logo.png new file mode 100644 index 00000000..22225604 Binary files /dev/null and b/docs/static/logo.png differ diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 00000000..a994957e --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,9 @@ +# Troubleshooting + +## Session Timeout + +By default, user sessions expire after **2 hours**. If you're uploading large files over slower connections, you may need to increase this timeout to prevent sessions from expiring mid-upload. You can configure the session timeout using the `tokenExpirationTime` setting. + +You can either set this option during runtime by using the flag `--tokenExpirationTime`, the environment variable `FB_TOKEN_EXPIRATION_TIME`, or in your configuration file. If you want to persist this to the configuration, please use [`filebrowser config set`](cli/filebrowser-config-set.md). + +Valid duration formats include `"2h"`, `"30m"`, `"24h"`, or combinations like `"2h30m"`. diff --git a/errors/errors.go b/errors/errors.go index 592cabe3..99236ec1 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -1,19 +1,35 @@ -package errors +package fberrors -import "errors" +import ( + "errors" + "fmt" +) var ( - ErrEmptyKey = errors.New("empty key") - ErrExist = errors.New("the resource already exists") - ErrNotExist = errors.New("the resource does not exist") - ErrEmptyPassword = errors.New("password is empty") - ErrEmptyUsername = errors.New("username is empty") - ErrEmptyRequest = errors.New("empty request") - ErrScopeIsRelative = errors.New("scope is a relative path") - ErrInvalidDataType = errors.New("invalid data type") - ErrIsDirectory = errors.New("file is directory") - ErrInvalidOption = errors.New("invalid option") - ErrInvalidAuthMethod = errors.New("invalid auth method") - ErrPermissionDenied = errors.New("permission denied") - ErrInvalidRequestParams = errors.New("invalid request params") + ErrEmptyKey = errors.New("empty key") + ErrExist = errors.New("the resource already exists") + ErrNotExist = errors.New("the resource does not exist") + ErrEmptyPassword = errors.New("password is empty") + ErrEasyPassword = errors.New("password is too easy") + ErrEmptyUsername = errors.New("username is empty") + ErrEmptyRequest = errors.New("empty request") + ErrScopeIsRelative = errors.New("scope is a relative path") + ErrInvalidDataType = errors.New("invalid data type") + ErrIsDirectory = errors.New("file is directory") + ErrInvalidOption = errors.New("invalid option") + ErrInvalidAuthMethod = errors.New("invalid auth method") + ErrPermissionDenied = errors.New("permission denied") + ErrInvalidRequestParams = errors.New("invalid request params") + ErrSourceIsParent = errors.New("source is parent") + ErrRootUserDeletion = errors.New("the sole admin can't be deleted") + ErrCurrentPasswordIncorrect = errors.New("the current password is incorrect") + ErrShareRequiresDownload = errors.New("permission to share requires permission to download") ) + +type ErrShortPassword struct { + MinimumLength uint +} + +func (e ErrShortPassword) Error() string { + return fmt.Sprintf("password is too short, minimum length is %d", e.MinimumLength) +} diff --git a/files/case.go b/files/case.go new file mode 100644 index 00000000..24f06bb2 --- /dev/null +++ b/files/case.go @@ -0,0 +1,34 @@ +package files + +import ( + "path/filepath" + "runtime" + "strings" + + "github.com/spf13/afero" +) + +// CaseInsensitive reports whether the filesystem backing root treats file names +// case-insensitively, as NTFS, APFS, HFS+, exFAT and CIFS do. It creates a +// probe file and looks it up under a different case, mirroring how git detects +// core.ignoreCase. +// +// It probes rather than inferring from runtime.GOOS because neither direction +// holds: macOS can be formatted case-sensitively, and a Linux host commonly +// serves a case-insensitive mount. When the root cannot be written to, it falls +// back to the host's usual default rather than assuming case-sensitivity, since +// a read-only root is still exposed to the disclosure this guards against. +func CaseInsensitive(fs afero.Fs, root string) bool { + probe, err := afero.TempFile(fs, root, "fb-case-probe-") + if err != nil { + return runtime.GOOS == "windows" || runtime.GOOS == "darwin" + } + + name := probe.Name() + probe.Close() + defer fs.Remove(name) //nolint:errcheck + + dir, base := filepath.Split(name) + _, err = fs.Stat(filepath.Join(dir, strings.ToUpper(base))) + return err == nil +} diff --git a/files/case_test.go b/files/case_test.go new file mode 100644 index 00000000..8feb708c --- /dev/null +++ b/files/case_test.go @@ -0,0 +1,44 @@ +package files + +import ( + "strings" + "testing" + + "github.com/spf13/afero" +) + +// MemMapFs keys its entries by exact name, so it is case-sensitive. +func TestCaseInsensitiveReportsCaseSensitiveFs(t *testing.T) { + fs := afero.NewMemMapFs() + if err := fs.MkdirAll("/root", 0o755); err != nil { + t.Fatal(err) + } + + if CaseInsensitive(fs, "/root") { + t.Error("CaseInsensitive() = true for a case-sensitive filesystem; want false") + } + assertNoProbeLeft(t, fs, "/root") +} + +// Whatever the verdict, the probe file must not be left behind in the user's +// data directory. +func TestCaseInsensitiveRemovesProbe(t *testing.T) { + root := t.TempDir() + fs := afero.NewOsFs() + + t.Logf("CaseInsensitive(%s) = %v", root, CaseInsensitive(fs, root)) + assertNoProbeLeft(t, fs, root) +} + +func assertNoProbeLeft(t *testing.T, fs afero.Fs, root string) { + t.Helper() + entries, err := afero.ReadDir(fs, root) + if err != nil { + t.Fatal(err) + } + for _, e := range entries { + if strings.HasPrefix(e.Name(), "fb-case-probe-") { + t.Errorf("probe file left behind: %s", e.Name()) + } + } +} diff --git a/files/file.go b/files/file.go index 5abf0792..4102c3c4 100644 --- a/files/file.go +++ b/files/file.go @@ -1,87 +1,103 @@ package files import ( - "crypto/md5" //nolint:gosec - "crypto/sha1" //nolint:gosec + "crypto/md5" + "crypto/sha1" "crypto/sha256" "crypto/sha512" "encoding/hex" + "errors" "hash" + "image" "io" + "io/fs" "log" "mime" "net/http" "os" "path" "path/filepath" + "regexp" + "sort" "strings" "time" - "github.com/spf13/afero" - - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/rules" + "github.com/spf13/afero" +) + +var ( + reSubDirs = regexp.MustCompile("(?i)^sub(s|titles)$") + reSubExts = regexp.MustCompile("(?i)(.vtt|.srt|.ass|.ssa)$") ) // FileInfo describes a file. type FileInfo struct { *Listing - Fs afero.Fs `json:"-"` - Path string `json:"path"` - Name string `json:"name"` - Size int64 `json:"size"` - Extension string `json:"extension"` - ModTime time.Time `json:"modified"` - Mode os.FileMode `json:"mode"` - IsDir bool `json:"isDir"` - Type string `json:"type"` - Subtitles []string `json:"subtitles,omitempty"` - Content string `json:"content,omitempty"` - Checksums map[string]string `json:"checksums,omitempty"` + Fs afero.Fs `json:"-"` + Path string `json:"path"` + Name string `json:"name"` + Size int64 `json:"size"` + Extension string `json:"extension"` + ModTime time.Time `json:"modified"` + Mode os.FileMode `json:"mode"` + IsDir bool `json:"isDir"` + IsSymlink bool `json:"isSymlink"` + Type string `json:"type"` + Subtitles []string `json:"subtitles,omitempty"` + Content string `json:"content,omitempty"` + Checksums map[string]string `json:"checksums,omitempty"` + Token string `json:"token,omitempty"` + currentDir []os.FileInfo `json:"-"` + Resolution *ImageResolution `json:"resolution,omitempty"` } // FileOptions are the options when getting a file info. type FileOptions struct { - Fs afero.Fs - Path string - Modify bool - Expand bool - Checker rules.Checker + Fs afero.Fs + Path string + Modify bool + Expand bool + ReadHeader bool + CalcImgRes bool + Token string + Checker rules.Checker + Content bool +} + +type ImageResolution struct { + Width int `json:"width"` + Height int `json:"height"` } // NewFileInfo creates a File object from a path and a given user. This File // object will be automatically filled depending on if it is a directory // or a file. If it's a video file, it will also detect any subtitles. -func NewFileInfo(opts FileOptions) (*FileInfo, error) { +func NewFileInfo(opts *FileOptions) (*FileInfo, error) { if !opts.Checker.Check(opts.Path) { return nil, os.ErrPermission } - info, err := opts.Fs.Stat(opts.Path) + file, err := stat(opts) if err != nil { return nil, err } - file := &FileInfo{ - Fs: opts.Fs, - Path: opts.Path, - Name: info.Name(), - ModTime: info.ModTime(), - Mode: info.Mode(), - IsDir: info.IsDir(), - Size: info.Size(), - Extension: filepath.Ext(info.Name()), + // Do not expose the name of root directory. + if file.Path == "/" { + file.Name = "" } if opts.Expand { if file.IsDir { - if err := file.readListing(opts.Checker); err != nil { //nolint:shadow + if err := file.readListing(opts.Checker, opts.ReadHeader, opts.CalcImgRes); err != nil { return nil, err } return file, nil } - err = file.detectType(opts.Modify, true) + err = file.detectType(opts.Modify, opts.Content, true, opts.CalcImgRes) if err != nil { return nil, err } @@ -90,11 +106,70 @@ func NewFileInfo(opts FileOptions) (*FileInfo, error) { return file, err } +func stat(opts *FileOptions) (*FileInfo, error) { + var file *FileInfo + + if lstaterFs, ok := opts.Fs.(afero.Lstater); ok { + info, _, err := lstaterFs.LstatIfPossible(opts.Path) + if err != nil { + return nil, err + } + file = &FileInfo{ + Fs: opts.Fs, + Path: opts.Path, + Name: info.Name(), + ModTime: info.ModTime(), + Mode: info.Mode(), + IsDir: info.IsDir(), + IsSymlink: IsSymlink(info.Mode()), + Size: info.Size(), + Extension: filepath.Ext(info.Name()), + Token: opts.Token, + } + } + + // regular file + if file != nil && !file.IsSymlink { + return file, nil + } + + // fs doesn't support afero.Lstater interface or the file is a symlink + info, err := opts.Fs.Stat(opts.Path) + if err != nil { + // can't follow symlink + if file != nil && file.IsSymlink { + return file, nil + } + return nil, err + } + + // set correct file size in case of symlink + if file != nil && file.IsSymlink { + file.Size = info.Size() + file.IsDir = info.IsDir() + return file, nil + } + + file = &FileInfo{ + Fs: opts.Fs, + Path: opts.Path, + Name: info.Name(), + ModTime: info.ModTime(), + Mode: info.Mode(), + IsDir: info.IsDir(), + Size: info.Size(), + Extension: filepath.Ext(info.Name()), + Token: opts.Token, + } + + return file, nil +} + // Checksum checksums a given File for a given User, using a specific // algorithm. The checksums data is saved on File object. func (i *FileInfo) Checksum(algo string) error { if i.IsDir { - return errors.ErrIsDirectory + return fberrors.ErrIsDirectory } if i.Checksums == nil { @@ -109,7 +184,6 @@ func (i *FileInfo) Checksum(algo string) error { var h hash.Hash - //nolint:gosec switch algo { case "md5": h = md5.New() @@ -120,7 +194,7 @@ func (i *FileInfo) Checksum(algo string) error { case "sha512": h = sha512.New() default: - return errors.ErrInvalidOption + return fberrors.ErrInvalidOption } _, err = io.Copy(h, reader) @@ -132,32 +206,38 @@ func (i *FileInfo) Checksum(algo string) error { return nil } -//nolint:goconst -//TODO: use constants -func (i *FileInfo) detectType(modify, saveContent bool) error { +func (i *FileInfo) RealPath() string { + if realPathFs, ok := i.Fs.(interface { + RealPath(name string) (fPath string, err error) + }); ok { + realPath, err := realPathFs.RealPath(i.Path) + if err == nil { + return realPath + } + } + + return i.Path +} + +func (i *FileInfo) detectType(modify, saveContent, readHeader bool, calcImgRes bool) error { + if IsNamedPipe(i.Mode) { + i.Type = "blob" + return nil + } // failing to detect the type should not return error. // imagine the situation where a file in a dir with thousands // of files couldn't be opened: we'd have immediately // a 500 even though it doesn't matter. So we just log it. - reader, err := i.Fs.Open(i.Path) - if err != nil { - log.Print(err) - i.Type = "blob" - return nil - } - defer reader.Close() - - buffer := make([]byte, 512) - n, err := reader.Read(buffer) - if err != nil && err != io.EOF { - log.Print(err) - i.Type = "blob" - return nil - } mimetype := mime.TypeByExtension(i.Extension) - if mimetype == "" { - mimetype = http.DetectContentType(buffer[:n]) + + var buffer []byte + if readHeader { + buffer = i.readFirstBytes() + + if mimetype == "" { + mimetype = http.DetectContentType(buffer) + } } switch { @@ -170,11 +250,19 @@ func (i *FileInfo) detectType(modify, saveContent bool) error { return nil case strings.HasPrefix(mimetype, "image"): i.Type = "image" + if calcImgRes { + resolution, err := calculateImageResolution(i.Fs, i.Path) + if err != nil { + log.Printf("Error calculating image resolution: %v", err) + } else { + i.Resolution = resolution + } + } return nil - case isBinary(buffer[:n], n) || i.Size > 10*1024*1024: // 10 MB - i.Type = "blob" + case strings.HasSuffix(mimetype, "pdf"): + i.Type = "pdf" return nil - default: + case (strings.HasPrefix(mimetype, "text") || !isBinary(buffer)) && i.Size <= 10*1024*1024: // 10 MB i.Type = "text" if !modify { @@ -190,11 +278,56 @@ func (i *FileInfo) detectType(modify, saveContent bool) error { i.Content = string(content) } + return nil + default: + i.Type = "blob" } return nil } +func calculateImageResolution(fSys afero.Fs, filePath string) (*ImageResolution, error) { + file, err := fSys.Open(filePath) + if err != nil { + return nil, err + } + defer func() { + if cErr := file.Close(); cErr != nil { + log.Printf("Failed to close file: %v", cErr) + } + }() + + config, _, err := image.DecodeConfig(file) + if err != nil { + return nil, err + } + + return &ImageResolution{ + Width: config.Width, + Height: config.Height, + }, nil +} + +func (i *FileInfo) readFirstBytes() []byte { + reader, err := i.Fs.Open(i.Path) + if err != nil { + log.Print(err) + i.Type = "blob" + return nil + } + defer reader.Close() + + buffer := make([]byte, 512) + n, err := reader.Read(buffer) + if err != nil && !errors.Is(err, io.EOF) { + log.Print(err) + i.Type = "blob" + return nil + } + + return buffer[:n] +} + func (i *FileInfo) detectSubtitles() { if i.Type != "video" { return @@ -203,17 +336,62 @@ func (i *FileInfo) detectSubtitles() { i.Subtitles = []string{} ext := filepath.Ext(i.Path) - // TODO: detect multiple languages. Base.Lang.vtt + // detect multiple languages. Base*.vtt + parentDir := strings.TrimRight(i.Path, i.Name) + var dir []os.FileInfo + if len(i.currentDir) > 0 { + dir = i.currentDir + } else { + var err error + dir, err = afero.ReadDir(i.Fs, parentDir) + if err != nil { + return + } + } - fPath := strings.TrimSuffix(i.Path, ext) + ".vtt" - if _, err := i.Fs.Stat(fPath); err == nil { - i.Subtitles = append(i.Subtitles, fPath) + base := strings.TrimSuffix(i.Name, ext) + for _, f := range dir { + // load all supported subtitles from subs directories + // should cover all instances of subtitle distributions + // like tv-shows with multiple episodes in single dir + if f.IsDir() && reSubDirs.MatchString(f.Name()) { + subsDir := path.Join(parentDir, f.Name()) + i.loadSubtitles(subsDir, base, true) + } else if isSubtitleMatch(f, base) { + i.addSubtitle(path.Join(parentDir, f.Name())) + } } } -func (i *FileInfo) readListing(checker rules.Checker) error { - afs := &afero.Afero{Fs: i.Fs} - dir, err := afs.ReadDir(i.Path) +func (i *FileInfo) loadSubtitles(subsPath, baseName string, recursive bool) { + dir, err := afero.ReadDir(i.Fs, subsPath) + if err == nil { + for _, f := range dir { + if isSubtitleMatch(f, "") { + i.addSubtitle(path.Join(subsPath, f.Name())) + } else if f.IsDir() && recursive && strings.HasPrefix(f.Name(), baseName) { + subsDir := path.Join(subsPath, f.Name()) + i.loadSubtitles(subsDir, baseName, false) + } + } + } +} + +func IsSupportedSubtitle(fileName string) bool { + return reSubExts.MatchString(fileName) +} + +func isSubtitleMatch(f fs.FileInfo, baseName string) bool { + return !f.IsDir() && strings.HasPrefix(f.Name(), baseName) && + IsSupportedSubtitle(f.Name()) +} + +func (i *FileInfo) addSubtitle(fPath string) { + i.Subtitles = append(i.Subtitles, fPath) +} + +func (i *FileInfo) readListing(checker rules.Checker, readHeader bool, calcImgRes bool) error { + dir, err := readDir(i.Fs, i.Path) if err != nil { return err } @@ -232,24 +410,46 @@ func (i *FileInfo) readListing(checker rules.Checker) error { continue } - if strings.HasPrefix(f.Mode().String(), "L") { - // It's a symbolic link. We try to follow it. If it doesn't work, - // we stay with the link information instead if the target's. + isSymlink, isInvalidLink := false, false + if IsSymlink(f.Mode()) { + isSymlink = true + // It's a symbolic link. We try to follow it. The scoped filesystem + // refuses to dereference a link whose target escapes the scope + // (permission error); such a link is omitted from the listing + // entirely so it cannot leak the target's metadata. Any other + // failure means a broken link, which we surface as an invalid link + // rather than the target's information. info, err := i.Fs.Stat(fPath) - if err == nil { + switch { + case err == nil: f = info + case errors.Is(err, os.ErrPermission): + continue + default: + isInvalidLink = true } } file := &FileInfo{ - Fs: i.Fs, - Name: name, - Size: f.Size(), - ModTime: f.ModTime(), - Mode: f.Mode(), - IsDir: f.IsDir(), - Extension: filepath.Ext(name), - Path: fPath, + Fs: i.Fs, + Name: name, + Size: f.Size(), + ModTime: f.ModTime(), + Mode: f.Mode(), + IsDir: f.IsDir(), + IsSymlink: isSymlink, + Extension: filepath.Ext(name), + Path: fPath, + currentDir: dir, + } + + if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") && calcImgRes { + resolution, err := calculateImageResolution(file.Fs, file.Path) + if err != nil { + log.Printf("Error calculating resolution for image %s: %v", file.Path, err) + } else { + file.Resolution = resolution + } } if file.IsDir { @@ -257,9 +457,13 @@ func (i *FileInfo) readListing(checker rules.Checker) error { } else { listing.NumFiles++ - err := file.detectType(true, false) - if err != nil { - return err + if isInvalidLink { + file.Type = "invalid_link" + } else { + err := file.detectType(true, false, readHeader, calcImgRes) + if err != nil { + return err + } } } @@ -269,3 +473,56 @@ func (i *FileInfo) readListing(checker rules.Checker) error { i.Listing = listing return nil } + +func readDir(afs afero.Fs, dirname string) ([]os.FileInfo, error) { + dir, err := afero.ReadDir(afs, dirname) + if err == nil { + return dir, nil + } + + dir, fallbackErr := readDirNames(afs, dirname) + if fallbackErr != nil { + return nil, err + } + + return dir, nil +} + +func readDirNames(afs afero.Fs, dirname string) ([]os.FileInfo, error) { + file, err := afs.Open(dirname) + if err != nil { + return nil, err + } + + names, err := file.Readdirnames(-1) + if closeErr := file.Close(); err == nil && closeErr != nil { + err = closeErr + } + if err != nil { + return nil, err + } + + sort.Strings(names) + dir := make([]os.FileInfo, 0, len(names)) + for _, name := range names { + fPath := path.Join(dirname, name) + info, err := lstatIfPossible(afs, fPath) + if err != nil { + log.Printf("Skipping inaccessible file %s: %v", fPath, err) + continue + } + + dir = append(dir, info) + } + + return dir, nil +} + +func lstatIfPossible(afs afero.Fs, name string) (os.FileInfo, error) { + if lstaterFs, ok := afs.(afero.Lstater); ok { + info, _, err := lstaterFs.LstatIfPossible(name) + return info, err + } + + return afs.Stat(name) +} diff --git a/files/file_test.go b/files/file_test.go new file mode 100644 index 00000000..45b114f6 --- /dev/null +++ b/files/file_test.go @@ -0,0 +1,347 @@ +package files + +import ( + "os" + "path" + "path/filepath" + "testing" + + "github.com/spf13/afero" +) + +func TestScopedFs(t *testing.T) { + t.Run("path inside scope is allowed", func(t *testing.T) { + scope := t.TempDir() + if err := os.WriteFile(filepath.Join(scope, "file.txt"), []byte("x"), 0o644); err != nil { + t.Fatal(err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + if _, err := fs.Stat("/file.txt"); err != nil { + t.Fatalf("expected in-scope file to be accessible, got %v", err) + } + }) + + t.Run("new file inside scope can be created", func(t *testing.T) { + scope := t.TempDir() + fs := NewScopedFs(afero.NewOsFs(), scope) + + f, err := fs.OpenFile("/does-not-exist-yet.txt", os.O_RDWR|os.O_CREATE, 0o644) + if err != nil { + t.Fatalf("expected to create a new in-scope file, got %v", err) + } + _ = f.Close() + }) + + // Regression for #5975: when the scope resolves to the filesystem root, + // root+separator used to be "//", which no path matched, so every write + // was rejected with os.ErrPermission (HTTP 403). + t.Run("filesystem root scope allows access", func(t *testing.T) { + f := filepath.Join(t.TempDir(), "file.txt") + if err := os.WriteFile(f, []byte("x"), 0o644); err != nil { + t.Fatal(err) + } + fs := NewScopedFs(afero.NewOsFs(), "/") + + if _, err := fs.Stat(f); err != nil { + t.Fatalf("expected a path under root scope to be accessible, got %v", err) + } + }) + + t.Run("escaping symlink to a sibling is rejected", func(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "srv") + sibling := filepath.Join(base, "srvother") + for _, d := range []string{scope, sibling} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + if err := os.WriteFile(filepath.Join(sibling, "secret.txt"), []byte("secret"), 0o644); err != nil { + t.Fatal(err) + } + // A symlink lexically inside the scope pointing at a sibling directory + // must not be followed for reads or stats. + if err := os.Symlink(sibling, filepath.Join(scope, "escape")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + if _, err := fs.Stat("/escape"); !os.IsPermission(err) { + t.Fatalf("expected stat of escaping symlink to be rejected, got %v", err) + } + if _, err := fs.Open("/escape/secret.txt"); !os.IsPermission(err) { + t.Fatalf("expected read through escaping symlink to be rejected, got %v", err) + } + }) + + t.Run("symlink whose target stays within scope is allowed", func(t *testing.T) { + scope := t.TempDir() + if err := os.MkdirAll(filepath.Join(scope, "real"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "real", "f.txt"), []byte("x"), 0o644); err != nil { + t.Fatal(err) + } + if err := os.Symlink(filepath.Join(scope, "real"), filepath.Join(scope, "link")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + if _, err := fs.Stat("/link/f.txt"); err != nil { + t.Fatalf("expected in-scope symlink target to be accessible, got %v", err) + } + }) + + // Regression for the dangling-symlink write escape (GHSA-8wc8-hf36-mjh9 / + // GHSA-fh54-6rfh-r8f3): a symlink whose target does not exist yet must not be + // followed for writes. Previously within() validated the link's in-scope + // parent directory, so OpenFile(O_CREATE) dereferenced the link and created + // the file at its out-of-scope target. + t.Run("write through a dangling escaping symlink is rejected", func(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "scope") + outside := filepath.Join(base, "outside") + for _, d := range []string{scope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + outsideTarget := filepath.Join(outside, "created.txt") // does not exist yet + if err := os.Symlink(outsideTarget, filepath.Join(scope, "evil")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + f, err := fs.OpenFile("/evil", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o644) + if err == nil { + _ = f.Close() + t.Fatal("VULNERABLE: write through a dangling escaping symlink was allowed") + } + if !os.IsPermission(err) { + t.Fatalf("expected permission error, got %v", err) + } + if _, statErr := os.Stat(outsideTarget); statErr == nil { + t.Fatal("VULNERABLE: file was created outside the scope") + } + }) + + // A dangling *relative* symlink that lives under an escaping directory + // symlink must be resolved against the link's real directory, not its lexical + // parent. Otherwise the symlinked ancestor can shift the computed target back + // into scope while the real OS write lands outside it. + t.Run("write through a dangling relative symlink under a symlinked dir is rejected", func(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "scope") + outside := filepath.Join(base, "outside") + for _, d := range []string{scope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + // An escaping directory symlink inside the scope: /scope/m -> /base/outside. + if err := os.Symlink(outside, filepath.Join(scope, "m")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + // A relative dangling symlink inside the escaping dir whose target, + // resolved against the real directory (/base/outside), is /base/escaped — + // outside the scope. + if err := os.Symlink("../escaped", filepath.Join(outside, "evil")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + f, err := fs.OpenFile("/m/evil", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o644) + if err == nil { + _ = f.Close() + t.Fatal("VULNERABLE: write through a dangling relative symlink under a symlinked dir was allowed") + } + if !os.IsPermission(err) { + t.Fatalf("expected permission error, got %v", err) + } + if _, statErr := os.Stat(filepath.Join(base, "escaped")); statErr == nil { + t.Fatal("VULNERABLE: file was created outside the scope") + } + }) + + // Regression for the symlink-following delete escape (GHSA-hq4g-mpch-f9vp / + // GHSA-fmm7-x4gx-8jhr): Remove/RemoveAll used to skip guard(), so RemoveAll + // followed a symlinked ancestor escaping the scope and deleted an + // out-of-scope file. + t.Run("RemoveAll through an escaping symlink is rejected", func(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "scope") + outside := filepath.Join(base, "outside") + for _, d := range []string{scope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + victim := filepath.Join(outside, "victim.txt") + if err := os.WriteFile(victim, []byte("keep"), 0o644); err != nil { + t.Fatal(err) + } + if err := os.Symlink(outside, filepath.Join(scope, "link")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + if err := fs.RemoveAll("/link/victim.txt"); !os.IsPermission(err) { + t.Fatalf("expected RemoveAll through escaping symlink to be rejected, got %v", err) + } + if _, statErr := os.Stat(victim); statErr != nil { + t.Fatalf("VULNERABLE: out-of-scope victim file was deleted: %v", statErr) + } + }) + + // The guard added for the delete escape must not break legitimate deletes of + // in-scope files. + t.Run("RemoveAll of an in-scope file is allowed", func(t *testing.T) { + scope := t.TempDir() + target := filepath.Join(scope, "deleteme.txt") + if err := os.WriteFile(target, []byte("x"), 0o644); err != nil { + t.Fatal(err) + } + fs := NewScopedFs(afero.NewOsFs(), scope) + + if err := fs.RemoveAll("/deleteme.txt"); err != nil { + t.Fatalf("expected in-scope RemoveAll to succeed, got %v", err) + } + if _, statErr := os.Stat(target); statErr == nil { + t.Fatal("expected in-scope file to be deleted") + } + }) +} + +// stat must reject a regular file reached through a symlinked ancestor that +// escapes the scope (GHSA-hf77-9m7w-fq8q), while still serving in-scope files. +func TestStatRejectsLinkedAncestorEscape(t *testing.T) { + scope := t.TempDir() + if err := os.MkdirAll(filepath.Join(scope, "shared"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(filepath.Join(scope, "private"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "private", "secret.txt"), []byte("secret"), 0o600); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "shared", "ok.txt"), []byte("ok"), 0o600); err != nil { + t.Fatal(err) + } + if err := os.Symlink(filepath.Join(scope, "private"), filepath.Join(scope, "shared", "link")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + // Filesystem scoped to the shared directory, as a public share would be. + bfs := NewScopedFs(afero.NewOsFs(), filepath.Join(scope, "shared")) + + if _, err := stat(&FileOptions{Fs: bfs, Path: "/link/secret.txt"}); !os.IsPermission(err) { + t.Fatalf("expected permission error for linked-ancestor escape, got %v", err) + } + if _, err := stat(&FileOptions{Fs: bfs, Path: "/ok.txt"}); err != nil { + t.Fatalf("expected in-scope file to be served, got %v", err) + } +} + +type allowAllChecker struct{} + +func (allowAllChecker) Check(string) bool { + return true +} + +type inaccessibleChildFs struct { + afero.Fs + child string +} + +func (fs inaccessibleChildFs) Open(name string) (afero.File, error) { + file, err := fs.Fs.Open(name) + if err != nil { + return nil, err + } + + if path.Clean(name) == "/" { + return inaccessibleChildDir{File: file}, nil + } + + return file, nil +} + +func (fs inaccessibleChildFs) Stat(name string) (os.FileInfo, error) { + if path.Clean(name) == fs.child { + return nil, os.ErrPermission + } + + return fs.Fs.Stat(name) +} + +func (fs inaccessibleChildFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + if path.Clean(name) == fs.child { + return nil, false, os.ErrPermission + } + + if lstater, ok := fs.Fs.(afero.Lstater); ok { + return lstater.LstatIfPossible(name) + } + + info, err := fs.Fs.Stat(name) + return info, false, err +} + +type inaccessibleChildDir struct { + afero.File +} + +func (dir inaccessibleChildDir) Readdir(int) ([]os.FileInfo, error) { + return nil, os.ErrPermission +} + +func TestReadListingSkipsInaccessibleChildren(t *testing.T) { + memFs := afero.NewMemMapFs() + for _, dir := range []string{"/media", "/proton-mount"} { + if err := memFs.Mkdir(dir, 0o755); err != nil { + t.Fatal(err) + } + } + + file, err := NewFileInfo(&FileOptions{ + Fs: inaccessibleChildFs{Fs: memFs, child: "/proton-mount"}, + Path: "/", + Expand: true, + Checker: allowAllChecker{}, + }) + if err != nil { + t.Fatal(err) + } + + if file.Listing == nil { + t.Fatal("expected root listing") + } + + if got := len(file.Items); got != 1 { + t.Fatalf("expected one accessible child, got %d", got) + } + + if got := file.Items[0].Name; got != "media" { + t.Fatalf("expected accessible child to be listed, got %q", got) + } + + if got := file.NumDirs; got != 1 { + t.Fatalf("expected one listed directory, got %d", got) + } +} + +func TestFileInfoRealPathUsesScopedFsRealPath(t *testing.T) { + root := t.TempDir() + file := &FileInfo{ + Fs: NewScopedFs(afero.NewOsFs(), root), + Path: "/root/downloads", + } + + got := file.RealPath() + want := filepath.Join(root, "root", "downloads") + if got != want { + t.Fatalf("got %q, want %q", got, want) + } +} diff --git a/files/fs_test.go b/files/fs_test.go new file mode 100644 index 00000000..5974b20a --- /dev/null +++ b/files/fs_test.go @@ -0,0 +1,121 @@ +package files + +import ( + "os" + "path/filepath" + "testing" + + "github.com/spf13/afero" +) + +// TestNewFs verifies that NewFs picks the right implementation and that the +// follow-external-symlinks toggle flips whether a symlink pointing outside the +// scope is honored. +func TestNewFs(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "srv") + outside := filepath.Join(base, "outside") + for _, d := range []string{scope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + if err := os.WriteFile(filepath.Join(outside, "secret.txt"), []byte("secret"), 0o644); err != nil { + t.Fatal(err) + } + // A symlink lexically inside the scope whose target resolves outside it. + if err := os.Symlink(outside, filepath.Join(scope, "escape")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + t.Run("disabled returns a ScopedFs that rejects the escaping symlink", func(t *testing.T) { + fs := NewFs(afero.NewOsFs(), scope, false) + if _, ok := fs.(*ScopedFs); !ok { + t.Fatalf("expected *ScopedFs, got %T", fs) + } + if _, err := fs.Stat("/escape"); !os.IsPermission(err) { + t.Fatalf("expected stat of escaping symlink to be rejected, got %v", err) + } + }) + + t.Run("enabled returns a BasePathFs that follows the escaping symlink", func(t *testing.T) { + fs := NewFs(afero.NewOsFs(), scope, true) + if _, ok := fs.(*afero.BasePathFs); !ok { + t.Fatalf("expected *afero.BasePathFs, got %T", fs) + } + if _, err := fs.Stat("/escape"); err != nil { + t.Fatalf("expected escaping symlink to be followed, got %v", err) + } + b, err := afero.ReadFile(fs, "/escape/secret.txt") + if err != nil { + t.Fatalf("expected to read through escaping symlink, got %v", err) + } + if string(b) != "secret" { + t.Fatalf("got %q, want %q", b, "secret") + } + + // The link must also appear in a directory listing (the symptom in #5998). + entries, err := afero.ReadDir(fs, "/") + if err != nil { + t.Fatal(err) + } + var found bool + for _, e := range entries { + if e.Name() == "escape" { + found = true + } + } + if !found { + t.Fatal("expected escaping symlink to appear in the listing") + } + }) +} + +// TestBasePath verifies BasePath extracts the underlying *afero.BasePathFs from +// either filesystem NewFs may return, so User.FullPath keeps working. +func TestBasePath(t *testing.T) { + root := t.TempDir() + osFs := afero.NewOsFs() + + for _, tc := range []struct { + name string + followExternal bool + }{ + {"ScopedFs", false}, + {"BasePathFs", true}, + } { + t.Run(tc.name, func(t *testing.T) { + fs := NewFs(osFs, root, tc.followExternal) + base := BasePath(fs) + if base == nil { + t.Fatalf("expected non-nil base for %T", fs) + } + got := afero.FullBaseFsPath(base, "/x") + want := filepath.Join(root, "x") + if got != want { + t.Fatalf("FullBaseFsPath: got %q, want %q", got, want) + } + }) + } + + if got := BasePath(osFs); got != nil { + t.Fatalf("expected nil base for a plain OsFs, got %v", got) + } +} + +// TestFileInfoRealPathUsesBasePathFsRealPath mirrors +// TestFileInfoRealPathUsesScopedFsRealPath for the follow-external-symlinks case, +// where the user filesystem is a bare BasePathFs. +func TestFileInfoRealPathUsesBasePathFsRealPath(t *testing.T) { + root := t.TempDir() + file := &FileInfo{ + Fs: NewFs(afero.NewOsFs(), root, true), + Path: "/root/downloads", + } + + got := file.RealPath() + want := filepath.Join(root, "root", "downloads") + if got != want { + t.Fatalf("got %q, want %q", got, want) + } +} diff --git a/files/listing.go b/files/listing.go index 448d7e9c..ad60e51e 100644 --- a/files/listing.go +++ b/files/listing.go @@ -16,10 +16,8 @@ type Listing struct { } // ApplySort applies the sort order using .Order and .Sort -//nolint:goconst func (l Listing) ApplySort() { // Check '.Order' to know how to sort - // TODO: use enum if !l.Sorting.Asc { switch l.Sorting.By { case "name": diff --git a/files/mime.go b/files/mime.go new file mode 100644 index 00000000..baa4d6d5 --- /dev/null +++ b/files/mime.go @@ -0,0 +1,608 @@ +package files + +// This file contains code primarily sourced from:: +// github.com/kataras/iris + +import ( + "mime" +) + +const ( + // ContentBinaryHeaderValue header value for binary data. + ContentBinaryHeaderValue = "application/octet-stream" + // ContentWebassemblyHeaderValue header value for web assembly files. + ContentWebassemblyHeaderValue = "application/wasm" + // ContentHTMLHeaderValue is the string of text/html response header's content type value. + ContentHTMLHeaderValue = "text/html" + // ContentJSONHeaderValue header value for JSON data. + ContentJSONHeaderValue = "application/json" + // ContentJSONProblemHeaderValue header value for JSON API problem error. + // Read more at: https://tools.ietf.org/html/rfc7807 + ContentJSONProblemHeaderValue = "application/problem+json" + // ContentXMLProblemHeaderValue header value for XML API problem error. + // Read more at: https://tools.ietf.org/html/rfc7807 + ContentXMLProblemHeaderValue = "application/problem+xml" + // ContentJavascriptHeaderValue header value for JSONP & Javascript data. + ContentJavascriptHeaderValue = "text/javascript" + // ContentTextHeaderValue header value for Text data. + ContentTextHeaderValue = "text/plain" + // ContentXMLHeaderValue header value for XML data. + ContentXMLHeaderValue = "text/xml" + // ContentXMLUnreadableHeaderValue obsolete header value for XML. + ContentXMLUnreadableHeaderValue = "application/xml" + // ContentMarkdownHeaderValue custom key/content type, the real is the text/html. + ContentMarkdownHeaderValue = "text/markdown" + // ContentYAMLHeaderValue header value for YAML data. + ContentYAMLHeaderValue = "application/x-yaml" + // ContentYAMLTextHeaderValue header value for YAML plain text. + ContentYAMLTextHeaderValue = "text/yaml" + // ContentProtobufHeaderValue header value for Protobuf messages data. + ContentProtobufHeaderValue = "application/x-protobuf" + // ContentMsgPackHeaderValue header value for MsgPack data. + ContentMsgPackHeaderValue = "application/msgpack" + // ContentMsgPack2HeaderValue alternative header value for MsgPack data. + ContentMsgPack2HeaderValue = "application/x-msgpack" + // ContentFormHeaderValue header value for post form data. + ContentFormHeaderValue = "application/x-www-form-urlencoded" + // ContentFormMultipartHeaderValue header value for post multipart form data. + ContentFormMultipartHeaderValue = "multipart/form-data" + // ContentMultipartRelatedHeaderValue header value for multipart related data. + ContentMultipartRelatedHeaderValue = "multipart/related" + // ContentGRPCHeaderValue Content-Type header value for gRPC. + ContentGRPCHeaderValue = "application/grpc" +) + +var types = map[string]string{ + ".3dm": "x-world/x-3dmf", + ".3dmf": "x-world/x-3dmf", + ".7z": "application/x-7z-compressed", + ".a": "application/octet-stream", + ".aab": "application/x-authorware-bin", + ".aam": "application/x-authorware-map", + ".aas": "application/x-authorware-seg", + ".abc": "text/vndabc", + ".ace": "application/x-ace-compressed", + ".acgi": "text/html", + ".afl": "video/animaflex", + ".ai": "application/postscript", + ".aif": "audio/aiff", + ".aifc": "audio/aiff", + ".aiff": "audio/aiff", + ".aim": "application/x-aim", + ".aip": "text/x-audiosoft-intra", + ".alz": "application/x-alz-compressed", + ".ani": "application/x-navi-animation", + ".aos": "application/x-nokia-9000-communicator-add-on-software", + ".aps": "application/mime", + ".apk": "application/vnd.android.package-archive", + ".arc": "application/x-arc-compressed", + ".arj": "application/arj", + ".art": "image/x-jg", + ".asf": "video/x-ms-asf", + ".asm": "text/x-asm", + ".asp": "text/asp", + ".asx": "application/x-mplayer2", + ".au": "audio/basic", + ".avi": "video/x-msvideo", + ".avs": "video/avs-video", + ".bcpio": "application/x-bcpio", + ".bin": "application/mac-binary", + ".bmp": "image/bmp", + ".boo": "application/book", + ".book": "application/book", + ".boz": "application/x-bzip2", + ".bsh": "application/x-bsh", + ".bz2": "application/x-bzip2", + ".bz": "application/x-bzip", + ".c++": ContentTextHeaderValue, + ".c": "text/x-c", + ".cab": "application/vnd.ms-cab-compressed", + ".cat": "application/vndms-pkiseccat", + ".cc": "text/x-c", + ".ccad": "application/clariscad", + ".cco": "application/x-cocoa", + ".cdf": "application/cdf", + ".cer": "application/pkix-cert", + ".cha": "application/x-chat", + ".chat": "application/x-chat", + ".chrt": "application/vnd.kde.kchart", + ".class": "application/java", + ".com": ContentTextHeaderValue, + ".conf": ContentTextHeaderValue, + ".cpio": "application/x-cpio", + ".cpp": "text/x-c", + ".cpt": "application/mac-compactpro", + ".crl": "application/pkcs-crl", + ".crt": "application/pkix-cert", + ".crx": "application/x-chrome-extension", + ".csh": "text/x-scriptcsh", + ".css": "text/css", + ".csv": "text/csv", + ".cxx": ContentTextHeaderValue, + ".dar": "application/x-dar", + ".dcr": "application/x-director", + ".deb": "application/x-debian-package", + ".deepv": "application/x-deepv", + ".def": ContentTextHeaderValue, + ".der": "application/x-x509-ca-cert", + ".dif": "video/x-dv", + ".dir": "application/x-director", + ".divx": "video/divx", + ".dl": "video/dl", + ".dmg": "application/x-apple-diskimage", + ".doc": "application/msword", + ".dot": "application/msword", + ".dp": "application/commonground", + ".drw": "application/drafting", + ".dump": "application/octet-stream", + ".dv": "video/x-dv", + ".dvi": "application/x-dvi", + ".dwf": "drawing/x-dwf=(old)", + ".dwg": "application/acad", + ".dxf": "application/dxf", + ".dxr": "application/x-director", + ".el": "text/x-scriptelisp", + ".elc": "application/x-bytecodeelisp=(compiled=elisp)", + ".eml": "message/rfc822", + ".env": "application/x-envoy", + ".eps": "application/postscript", + ".es": "application/x-esrehber", + ".etx": "text/x-setext", + ".evy": "application/envoy", + ".exe": "application/octet-stream", + ".f77": "text/x-fortran", + ".f90": "text/x-fortran", + ".f": "text/x-fortran", + ".fdf": "application/vndfdf", + ".fif": "application/fractals", + ".fli": "video/fli", + ".flo": "image/florian", + ".flv": "video/x-flv", + ".flx": "text/vndfmiflexstor", + ".fmf": "video/x-atomic3d-feature", + ".for": "text/x-fortran", + ".fpx": "image/vndfpx", + ".frl": "application/freeloader", + ".funk": "audio/make", + ".g3": "image/g3fax", + ".g": ContentTextHeaderValue, + ".gif": "image/gif", + ".gl": "video/gl", + ".gsd": "audio/x-gsm", + ".gsm": "audio/x-gsm", + ".gsp": "application/x-gsp", + ".gss": "application/x-gss", + ".gtar": "application/x-gtar", + ".gz": "application/x-compressed", + ".gzip": "application/x-gzip", + ".h": "text/x-h", + ".hdf": "application/x-hdf", + ".help": "application/x-helpfile", + ".hgl": "application/vndhp-hpgl", + ".hh": "text/x-h", + ".hlb": "text/x-script", + ".hlp": "application/hlp", + ".hpg": "application/vndhp-hpgl", + ".hpgl": "application/vndhp-hpgl", + ".hqx": "application/binhex", + ".hta": "application/hta", + ".htc": "text/x-component", + ".htm": "text/html", + ".html": "text/html", + ".htmls": "text/html", + ".htt": "text/webviewhtml", + ".htx": "text/html", + ".ice": "x-conference/x-cooltalk", + ".ico": "image/x-icon", + ".ics": "text/calendar", + ".icz": "text/calendar", + ".idc": ContentTextHeaderValue, + ".ief": "image/ief", + ".iefs": "image/ief", + ".iges": "application/iges", + ".igs": "application/iges", + ".ima": "application/x-ima", + ".imap": "application/x-httpd-imap", + ".inf": "application/inf", + ".ins": "application/x-internett-signup", + ".ip": "application/x-ip2", + ".isu": "video/x-isvideo", + ".it": "audio/it", + ".iv": "application/x-inventor", + ".ivr": "i-world/i-vrml", + ".ivy": "application/x-livescreen", + ".jam": "audio/x-jam", + ".jav": "text/x-java-source", + ".java": "text/x-java-source", + ".jcm": "application/x-java-commerce", + ".jfif-tbnl": "image/jpeg", + ".jfif": "image/jpeg", + ".jnlp": "application/x-java-jnlp-file", + ".jpe": "image/jpeg", + ".jpeg": "image/jpeg", + ".jpg": "image/jpeg", + ".jps": "image/x-jps", + ".js": ContentJavascriptHeaderValue, + ".mjs": ContentJavascriptHeaderValue, + ".json": ContentJSONHeaderValue, + ".vue": ContentJavascriptHeaderValue, + ".jut": "image/jutvision", + ".kar": "audio/midi", + ".karbon": "application/vnd.kde.karbon", + ".kfo": "application/vnd.kde.kformula", + ".flw": "application/vnd.kde.kivio", + ".kml": "application/vnd.google-earth.kml+xml", + ".kmz": "application/vnd.google-earth.kmz", + ".kon": "application/vnd.kde.kontour", + ".kpr": "application/vnd.kde.kpresenter", + ".kpt": "application/vnd.kde.kpresenter", + ".ksp": "application/vnd.kde.kspread", + ".kwd": "application/vnd.kde.kword", + ".kwt": "application/vnd.kde.kword", + ".ksh": "text/x-scriptksh", + ".la": "audio/nspaudio", + ".lam": "audio/x-liveaudio", + ".latex": "application/x-latex", + ".lha": "application/lha", + ".lhx": "application/octet-stream", + ".list": ContentTextHeaderValue, + ".lma": "audio/nspaudio", + ".log": ContentTextHeaderValue, + ".lsp": "text/x-scriptlisp", + ".lst": ContentTextHeaderValue, + ".lsx": "text/x-la-asf", + ".ltx": "application/x-latex", + ".lzh": "application/octet-stream", + ".lzx": "application/lzx", + ".m1v": "video/mpeg", + ".m2a": "audio/mpeg", + ".m2v": "video/mpeg", + ".m3u": "audio/x-mpegurl", + ".m": "text/x-m", + ".man": "application/x-troff-man", + ".manifest": "text/cache-manifest", + ".map": "application/x-navimap", + ".mar": ContentTextHeaderValue, + ".mbd": "application/mbedlet", + ".mc$": "application/x-magic-cap-package-10", + ".mcd": "application/mcad", + ".mcf": "text/mcf", + ".mcp": "application/netmc", + ".me": "application/x-troff-me", + ".mht": "message/rfc822", + ".mhtml": "message/rfc822", + ".mid": "application/x-midi", + ".midi": "application/x-midi", + ".mif": "application/x-frame", + ".mime": "message/rfc822", + ".mjf": "audio/x-vndaudioexplosionmjuicemediafile", + ".mjpg": "video/x-motion-jpeg", + ".mm": "application/base64", + ".mme": "application/base64", + ".mod": "audio/mod", + ".moov": "video/quicktime", + ".mov": "video/quicktime", + ".movie": "video/x-sgi-movie", + ".mp2": "audio/mpeg", + ".mp3": "audio/mpeg", + ".mp4": "video/mp4", + ".mpa": "audio/mpeg", + ".mpc": "application/x-project", + ".mpe": "video/mpeg", + ".mpeg": "video/mpeg", + ".mpg": "video/mpeg", + ".mpga": "audio/mpeg", + ".mpp": "application/vndms-project", + ".mpt": "application/x-project", + ".mpv": "application/x-project", + ".mpx": "application/x-project", + ".mrc": "application/marc", + ".ms": "application/x-troff-ms", + ".mv": "video/x-sgi-movie", + ".my": "audio/make", + ".mzz": "application/x-vndaudioexplosionmzz", + ".nap": "image/naplps", + ".naplps": "image/naplps", + ".nc": "application/x-netcdf", + ".ncm": "application/vndnokiaconfiguration-message", + ".nif": "image/x-niff", + ".niff": "image/x-niff", + ".nix": "application/x-mix-transfer", + ".nsc": "application/x-conference", + ".nvd": "application/x-navidoc", + ".o": "application/octet-stream", + ".oda": "application/oda", + ".odb": "application/vnd.oasis.opendocument.database", + ".odc": "application/vnd.oasis.opendocument.chart", + ".odf": "application/vnd.oasis.opendocument.formula", + ".odg": "application/vnd.oasis.opendocument.graphics", + ".odi": "application/vnd.oasis.opendocument.image", + ".odm": "application/vnd.oasis.opendocument.text-master", + ".odp": "application/vnd.oasis.opendocument.presentation", + ".ods": "application/vnd.oasis.opendocument.spreadsheet", + ".odt": "application/vnd.oasis.opendocument.text", + ".oga": "audio/ogg", + ".ogg": "audio/ogg", + ".ogv": "video/ogg", + ".omc": "application/x-omc", + ".omcd": "application/x-omcdatamaker", + ".omcr": "application/x-omcregerator", + ".otc": "application/vnd.oasis.opendocument.chart-template", + ".otf": "application/vnd.oasis.opendocument.formula-template", + ".otg": "application/vnd.oasis.opendocument.graphics-template", + ".oth": "application/vnd.oasis.opendocument.text-web", + ".oti": "application/vnd.oasis.opendocument.image-template", + ".otm": "application/vnd.oasis.opendocument.text-master", + ".otp": "application/vnd.oasis.opendocument.presentation-template", + ".ots": "application/vnd.oasis.opendocument.spreadsheet-template", + ".ott": "application/vnd.oasis.opendocument.text-template", + ".p10": "application/pkcs10", + ".p12": "application/pkcs-12", + ".p7a": "application/x-pkcs7-signature", + ".p7c": "application/pkcs7-mime", + ".p7m": "application/pkcs7-mime", + ".p7r": "application/x-pkcs7-certreqresp", + ".p7s": "application/pkcs7-signature", + ".p": "text/x-pascal", + ".part": "application/pro_eng", + ".pas": "text/pascal", + ".pbm": "image/x-portable-bitmap", + ".pcl": "application/vndhp-pcl", + ".pct": "image/x-pict", + ".pcx": "image/x-pcx", + ".pdb": "chemical/x-pdb", + ".pdf": "application/pdf", + ".pfunk": "audio/make", + ".pgm": "image/x-portable-graymap", + ".pic": "image/pict", + ".pict": "image/pict", + ".pkg": "application/x-newton-compatible-pkg", + ".pko": "application/vndms-pkipko", + ".pl": "text/x-scriptperl", + ".plx": "application/x-pixclscript", + ".pm4": "application/x-pagemaker", + ".pm5": "application/x-pagemaker", + ".pm": "text/x-scriptperl-module", + ".png": "image/png", + ".pnm": "application/x-portable-anymap", + ".pot": "application/mspowerpoint", + ".pov": "model/x-pov", + ".ppa": "application/vndms-powerpoint", + ".ppm": "image/x-portable-pixmap", + ".pps": "application/mspowerpoint", + ".ppt": "application/mspowerpoint", + ".ppz": "application/mspowerpoint", + ".pre": "application/x-freelance", + ".prt": "application/pro_eng", + ".ps": "application/postscript", + ".psd": "application/octet-stream", + ".pvu": "paleovu/x-pv", + ".pwz": "application/vndms-powerpoint", + ".py": "text/x-scriptphyton", + ".pyc": "application/x-bytecodepython", + ".qcp": "audio/vndqcelp", + ".qd3": "x-world/x-3dmf", + ".qd3d": "x-world/x-3dmf", + ".qif": "image/x-quicktime", + ".qt": "video/quicktime", + ".qtc": "video/x-qtc", + ".qti": "image/x-quicktime", + ".qtif": "image/x-quicktime", + ".ra": "audio/x-pn-realaudio", + ".ram": "audio/x-pn-realaudio", + ".rar": "application/x-rar-compressed", + ".ras": "application/x-cmu-raster", + ".rast": "image/cmu-raster", + ".rexx": "text/x-scriptrexx", + ".rf": "image/vndrn-realflash", + ".rgb": "image/x-rgb", + ".rm": "application/vndrn-realmedia", + ".rmi": "audio/mid", + ".rmm": "audio/x-pn-realaudio", + ".rmp": "audio/x-pn-realaudio", + ".rng": "application/ringing-tones", + ".rnx": "application/vndrn-realplayer", + ".roff": "application/x-troff", + ".rp": "image/vndrn-realpix", + ".rpm": "audio/x-pn-realaudio-plugin", + ".rt": "text/vndrn-realtext", + ".rtf": "text/richtext", + ".rtx": "text/richtext", + ".rv": "video/vndrn-realvideo", + ".s": "text/x-asm", + ".s3m": "audio/s3m", + ".s7z": "application/x-7z-compressed", + ".saveme": "application/octet-stream", + ".sbk": "application/x-tbook", + ".scm": "text/x-scriptscheme", + ".sdml": ContentTextHeaderValue, + ".sdp": "application/sdp", + ".sdr": "application/sounder", + ".sea": "application/sea", + ".set": "application/set", + ".sgm": "text/x-sgml", + ".sgml": "text/x-sgml", + ".sh": "text/x-scriptsh", + ".shar": "application/x-bsh", + ".shtml": "text/x-server-parsed-html", + ".sid": "audio/x-psid", + ".skd": "application/x-koan", + ".skm": "application/x-koan", + ".skp": "application/x-koan", + ".skt": "application/x-koan", + ".sit": "application/x-stuffit", + ".sitx": "application/x-stuffitx", + ".sl": "application/x-seelogo", + ".smi": "application/smil", + ".smil": "application/smil", + ".snd": "audio/basic", + ".sol": "application/solids", + ".spc": "text/x-speech", + ".spl": "application/futuresplash", + ".spr": "application/x-sprite", + ".sprite": "application/x-sprite", + ".spx": "audio/ogg", + ".src": "application/x-wais-source", + ".ssi": "text/x-server-parsed-html", + ".ssm": "application/streamingmedia", + ".sst": "application/vndms-pkicertstore", + ".step": "application/step", + ".stl": "application/sla", + ".stp": "application/step", + ".sv4cpio": "application/x-sv4cpio", + ".sv4crc": "application/x-sv4crc", + ".svf": "image/vnddwg", + ".svg": "image/svg+xml", + ".svr": "application/x-world", + ".swf": "application/x-shockwave-flash", + ".t": "application/x-troff", + ".talk": "text/x-speech", + ".tar": "application/x-tar", + ".tbk": "application/toolbook", + ".tcl": "text/x-scripttcl", + ".tcsh": "text/x-scripttcsh", + ".tex": "application/x-tex", + ".texi": "application/x-texinfo", + ".texinfo": "application/x-texinfo", + ".text": ContentTextHeaderValue, + ".tgz": "application/gnutar", + ".tif": "image/tiff", + ".tiff": "image/tiff", + ".tr": "application/x-troff", + ".tsi": "audio/tsp-audio", + ".tsp": "application/dsptype", + ".tsv": "text/tab-separated-values", + ".turbot": "image/florian", + ".txt": ContentTextHeaderValue, + ".uil": "text/x-uil", + ".uni": "text/uri-list", + ".unis": "text/uri-list", + ".unv": "application/i-deas", + ".uri": "text/uri-list", + ".uris": "text/uri-list", + ".ustar": "application/x-ustar", + ".uu": "text/x-uuencode", + ".uue": "text/x-uuencode", + ".vcd": "application/x-cdlink", + ".vcf": "text/x-vcard", + ".vcard": "text/x-vcard", + ".vcs": "text/x-vcalendar", + ".vda": "application/vda", + ".vdo": "video/vdo", + ".vew": "application/groupwise", + ".viv": "video/vivo", + ".vivo": "video/vivo", + ".vmd": "application/vocaltec-media-desc", + ".vmf": "application/vocaltec-media-file", + ".voc": "audio/voc", + ".vos": "video/vosaic", + ".vox": "audio/voxware", + ".vqe": "audio/x-twinvq-plugin", + ".vqf": "audio/x-twinvq", + ".vql": "audio/x-twinvq-plugin", + ".vrml": "application/x-vrml", + ".vrt": "x-world/x-vrt", + ".vsd": "application/x-visio", + ".vst": "application/x-visio", + ".vsw": "application/x-visio", + ".w60": "application/wordperfect60", + ".w61": "application/wordperfect61", + ".w6w": "application/msword", + ".wav": "audio/wav", + ".wb1": "application/x-qpro", + ".wbmp": "image/vnd.wap.wbmp", + ".web": "application/vndxara", + ".wiz": "application/msword", + ".wk1": "application/x-123", + ".wmf": "windows/metafile", + ".wml": "text/vnd.wap.wml", + ".wmlc": "application/vnd.wap.wmlc", + ".wmls": "text/vnd.wap.wmlscript", + ".wmlsc": "application/vnd.wap.wmlscriptc", + ".word": "application/msword", + ".wp5": "application/wordperfect", + ".wp6": "application/wordperfect", + ".wp": "application/wordperfect", + ".wpd": "application/wordperfect", + ".wq1": "application/x-lotus", + ".wri": "application/mswrite", + ".wrl": "application/x-world", + ".wrz": "model/vrml", + ".wsc": "text/scriplet", + ".wsrc": "application/x-wais-source", + ".wtk": "application/x-wintalk", + ".x-png": "image/png", + ".xbm": "image/x-xbitmap", + ".xdr": "video/x-amt-demorun", + ".xgz": "xgl/drawing", + ".xif": "image/vndxiff", + ".xl": "application/excel", + ".xla": "application/excel", + ".xlb": "application/excel", + ".xlc": "application/excel", + ".xld": "application/excel", + ".xlk": "application/excel", + ".xll": "application/excel", + ".xlm": "application/excel", + ".xls": "application/excel", + ".xlt": "application/excel", + ".xlv": "application/excel", + ".xlw": "application/excel", + ".xm": "audio/xm", + ".xml": ContentXMLHeaderValue, + ".xmz": "xgl/movie", + ".xpix": "application/x-vndls-xpix", + ".xpm": "image/x-xpixmap", + ".xsr": "video/x-amt-showrun", + ".xwd": "image/x-xwd", + ".xyz": "chemical/x-pdb", + ".z": "application/x-compress", + ".zip": "application/zip", + ".zoo": "application/octet-stream", + ".zsh": "text/x-scriptzsh", + ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".docm": "application/vnd.ms-word.document.macroEnabled.12", + ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + ".dotm": "application/vnd.ms-word.template.macroEnabled.12", + ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12", + ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + ".xltm": "application/vnd.ms-excel.template.macroEnabled.12", + ".xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12", + ".xlam": "application/vnd.ms-excel.addin.macroEnabled.12", + ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12", + ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", + ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template", + ".potm": "application/vnd.ms-powerpoint.template.macroEnabled.12", + ".ppam": "application/vnd.ms-powerpoint.addin.macroEnabled.12", + ".sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide", + ".sldm": "application/vnd.ms-powerpoint.slide.macroEnabled.12", + ".thmx": "application/vnd.ms-officetheme", + ".onetoc": "application/onenote", + ".onetoc2": "application/onenote", + ".onetmp": "application/onenote", + ".onepkg": "application/onenote", + ".xpi": "application/x-xpinstall", + ".wasm": "application/wasm", + ".m4a": "audio/mp4", + ".flac": "audio/x-flac", + ".amr": "audio/amr", + ".aac": "audio/aac", + ".opus": "video/ogg", + ".m4v": "video/mp4", + ".mkv": "video/x-matroska", + ".caf": "audio/x-caf", + ".m3u8": "application/x-mpegURL", + ".mpd": "application/dash+xml", + ".webp": "image/webp", + ".epub": "application/epub+zip", +} + +func init() { + for ext, typ := range types { + // skip errors + _ = mime.AddExtensionType(ext, typ) + } +} diff --git a/files/scoped.go b/files/scoped.go new file mode 100644 index 00000000..97ce32d0 --- /dev/null +++ b/files/scoped.go @@ -0,0 +1,253 @@ +package files + +import ( + "errors" + "io/fs" + "os" + "path/filepath" + "strings" + "time" + + "github.com/spf13/afero" +) + +// ScopedFs is an afero.Fs that confines every operation to a base directory and +// refuses to follow a symbolic link whose on-disk target resolves outside that +// base. It wraps an *afero.BasePathFs — which already provides the lexical +// confinement — and adds a per-operation scope check on every call that would +// dereference a symlink at the OS layer (open, stat, lstat, chmod, …). +type ScopedFs struct { + base *afero.BasePathFs +} + +var ( + _ afero.Fs = (*ScopedFs)(nil) + _ afero.Lstater = (*ScopedFs)(nil) +) + +// maxSymlinkHops bounds how many dangling symlinks within() will follow before +// giving up, so a pathological chain cannot loop forever. It mirrors the kernel +// MAXSYMLINKS limit; the operation is rejected once the bound is exceeded. +const maxSymlinkHops = 255 + +func NewScopedFs(source afero.Fs, path string) *ScopedFs { + if s, ok := source.(*ScopedFs); ok { + source = s.base + } + return &ScopedFs{base: afero.NewBasePathFs(source, path).(*afero.BasePathFs)} +} + +// NewFs builds a user filesystem rooted at path. When followExternal is true it +// returns a bare BasePathFs, so symlinks whose target resolves outside the scope +// are followed; otherwise it returns a ScopedFs that refuses to follow them. +func NewFs(source afero.Fs, path string, followExternal bool) afero.Fs { + if followExternal { + return afero.NewBasePathFs(source, path) + } + return NewScopedFs(source, path) +} + +// BasePath returns the underlying *afero.BasePathFs of a user filesystem built +// by NewFs, whether it is a *ScopedFs or a bare *afero.BasePathFs, or nil if it +// is neither. +func BasePath(fs afero.Fs) *afero.BasePathFs { + switch f := fs.(type) { + case *ScopedFs: + return f.BasePathFs() + case *afero.BasePathFs: + return f + } + return nil +} + +// BasePathFs returns the underlying *afero.BasePathFs. +func (s *ScopedFs) BasePathFs() *afero.BasePathFs { return s.base } + +// RealPath resolves a scoped path to the real on-disk path by delegating to +// the underlying BasePathFs. This is needed by callers that need the actual +// filesystem path (e.g. disk.UsageWithContext). +func (s *ScopedFs) RealPath(name string) (string, error) { + return s.base.RealPath(name) +} + +// guard returns an error if name's on-disk target resolves outside the scope. +func (s *ScopedFs) guard(name string) error { + ok, err := s.within(name) + if err != nil { + return err + } + if !ok { + return os.ErrPermission + } + return nil +} + +// within reports whether the on-disk target of p — after resolving any symbolic +// links — stays within the scoped root. It exists to stop a symlink that lives +// lexically inside the scope but points outside it from being followed for +// reads, writes, or shares. +// +// Paths that do not exist yet (e.g. a brand-new file being created) are +// validated against their nearest existing ancestor, so legitimate new files +// are always allowed. A dangling symlink — a link whose target does not exist +// yet — is the exception: it is followed to where it points and validated +// there, so a write cannot dereference the link to create a file outside the +// scope. +func (s *ScopedFs) within(p string) (bool, error) { + root, err := filepath.EvalSymlinks(afero.FullBaseFsPath(s.base, "/")) + if err != nil { + return false, err + } + + target := afero.FullBaseFsPath(s.base, p) + resolved, err := filepath.EvalSymlinks(target) + // When target does not resolve, work out where the operation would actually + // land. A non-existent regular path resolves to the file that would be + // created inside its containing directory, so walk up to the nearest + // existing ancestor and validate that. But when target itself is a dangling + // symlink, follow it one level instead: validating its lexical parent would + // wrongly accept a link pointing outside the scope, letting a write follow + // the link and create the file out of bounds. + for hops := 0; errors.Is(err, fs.ErrNotExist); { + if fi, lerr := os.Lstat(target); lerr == nil && fi.Mode()&os.ModeSymlink != 0 { + hops++ + if hops > maxSymlinkHops { + return false, os.ErrPermission + } + dest, rerr := os.Readlink(target) + if rerr != nil { + return false, rerr + } + if !filepath.IsAbs(dest) { + // Resolve the link relative to the directory that really contains + // it, not its lexical parent: a symlinked ancestor could otherwise + // shift the computed target back into scope while the real write + // lands outside it. The parent is guaranteed to resolve here + // because os.Lstat above already traversed it. + base, berr := filepath.EvalSymlinks(filepath.Dir(target)) + if berr != nil { + return false, berr + } + dest = filepath.Join(base, dest) + } + target = filepath.Clean(dest) + } else { + parent := filepath.Dir(target) + if parent == target { + break + } + target = parent + } + resolved, err = filepath.EvalSymlinks(target) + } + if err != nil { + return false, err + } + + // Compare against root with a trailing separator so a sibling like + // "/srvother" is not treated as being inside "/srv". When root is itself the + // filesystem boundary (e.g. "/"), it already ends in a separator, so avoid + // producing "//" — which no path would match — and accept any path under it. + prefix := root + if !strings.HasSuffix(prefix, string(filepath.Separator)) { + prefix += string(filepath.Separator) + } + + return resolved == root || strings.HasPrefix(resolved, prefix), nil +} + +func (s *ScopedFs) Create(name string) (afero.File, error) { + if err := s.guard(name); err != nil { + return nil, err + } + return s.base.Create(name) +} + +func (s *ScopedFs) Mkdir(name string, perm os.FileMode) error { + if err := s.guard(name); err != nil { + return err + } + return s.base.Mkdir(name, perm) +} + +func (s *ScopedFs) MkdirAll(path string, perm os.FileMode) error { + if err := s.guard(path); err != nil { + return err + } + return s.base.MkdirAll(path, perm) +} + +func (s *ScopedFs) Open(name string) (afero.File, error) { + if err := s.guard(name); err != nil { + return nil, err + } + return s.base.Open(name) +} + +func (s *ScopedFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) { + if err := s.guard(name); err != nil { + return nil, err + } + return s.base.OpenFile(name, flag, perm) +} + +func (s *ScopedFs) Remove(name string) error { + if err := s.guard(name); err != nil { + return err + } + return s.base.Remove(name) +} + +func (s *ScopedFs) RemoveAll(path string) error { + if err := s.guard(path); err != nil { + return err + } + return s.base.RemoveAll(path) +} + +func (s *ScopedFs) Rename(oldname, newname string) error { + if err := s.guard(oldname); err != nil { + return err + } + if err := s.guard(newname); err != nil { + return err + } + return s.base.Rename(oldname, newname) +} + +func (s *ScopedFs) Stat(name string) (os.FileInfo, error) { + if err := s.guard(name); err != nil { + return nil, err + } + return s.base.Stat(name) +} + +func (s *ScopedFs) Name() string { return "ScopedFs" } + +func (s *ScopedFs) Chmod(name string, mode os.FileMode) error { + if err := s.guard(name); err != nil { + return err + } + return s.base.Chmod(name, mode) +} + +func (s *ScopedFs) Chown(name string, uid, gid int) error { + if err := s.guard(name); err != nil { + return err + } + return s.base.Chown(name, uid, gid) +} + +func (s *ScopedFs) Chtimes(name string, atime, mtime time.Time) error { + if err := s.guard(name); err != nil { + return err + } + return s.base.Chtimes(name, atime, mtime) +} + +func (s *ScopedFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + if err := s.guard(name); err != nil { + return nil, false, err + } + return s.base.LstatIfPossible(name) +} diff --git a/files/utils.go b/files/utils.go index 519a5326..f4b0365d 100644 --- a/files/utils.go +++ b/files/utils.go @@ -1,10 +1,11 @@ package files import ( + "os" "unicode/utf8" ) -func isBinary(content []byte, _ int) bool { +func isBinary(content []byte) bool { maybeStr := string(content) runeCnt := utf8.RuneCount(content) runeIndex := 0 @@ -48,3 +49,11 @@ func isBinary(content []byte, _ int) bool { } return false } + +func IsNamedPipe(mode os.FileMode) bool { + return mode&os.ModeNamedPipe != 0 +} + +func IsSymlink(mode os.FileMode) bool { + return mode&os.ModeSymlink != 0 +} diff --git a/fileutils/copy.go b/fileutils/copy.go index 57c961da..6c80c5c9 100644 --- a/fileutils/copy.go +++ b/fileutils/copy.go @@ -1,6 +1,7 @@ package fileutils import ( + "io/fs" "os" "path" @@ -8,7 +9,7 @@ import ( ) // Copy copies a file or folder from one place to another. -func Copy(fs afero.Fs, src, dst string) error { +func Copy(afs afero.Fs, src, dst string, fileMode, dirMode fs.FileMode) error { if src = path.Clean("/" + src); src == "" { return os.ErrNotExist } @@ -26,14 +27,14 @@ func Copy(fs afero.Fs, src, dst string) error { return os.ErrInvalid } - info, err := fs.Stat(src) + info, err := afs.Stat(src) if err != nil { return err } if info.IsDir() { - return CopyDir(fs, src, dst) + return CopyDir(afs, src, dst, fileMode, dirMode) } - return CopyFile(fs, src, dst) + return CopyFile(afs, src, dst, fileMode, dirMode) } diff --git a/fileutils/copy_test.go b/fileutils/copy_test.go new file mode 100644 index 00000000..6899e032 --- /dev/null +++ b/fileutils/copy_test.go @@ -0,0 +1,124 @@ +package fileutils + +import ( + "os" + "path" + "path/filepath" + "testing" + + "github.com/filebrowser/filebrowser/v2/files" + "github.com/spf13/afero" +) + +// failingOpenFs wraps an afero.Fs and makes Open fail for one specific path, +// while every other operation (including Stat) is delegated unchanged. It +// simulates a directory that can be stat-ed but not opened/read — for example +// an unreadable sub-directory, or one whose permissions changed or that was +// removed after its parent was listed (a TOCTOU race) — encountered during a +// recursive copy. +type failingOpenFs struct { + afero.Fs + failOpen string +} + +func (f *failingOpenFs) Open(name string) (afero.File, error) { + if path.Clean(name) == path.Clean(f.failOpen) { + return nil, os.ErrPermission + } + return f.Fs.Open(name) +} + +// CopyDir is documented to keep going when it hits an error and to report the +// error afterwards. A sub-directory that cannot be opened must therefore yield +// an error (and leave the other, readable entries copied) rather than +// panicking on a nil directory handle. +func TestCopyDirUnreadableSubdirReturnsError(t *testing.T) { + mem := afero.NewMemMapFs() + if err := mem.MkdirAll("/srcdir/sub", 0o755); err != nil { + t.Fatal(err) + } + if err := afero.WriteFile(mem, "/srcdir/ok.txt", []byte("readable"), 0o644); err != nil { + t.Fatal(err) + } + + afs := &failingOpenFs{Fs: mem, failOpen: "/srcdir/sub"} + + err := Copy(afs, "/srcdir", "/dstdir", 0o644, 0o755) + if err == nil { + t.Fatal("expected an error when a sub-directory cannot be opened") + } + + // The readable sibling must still have been copied (continue-on-error). + data, readErr := afero.ReadFile(afs, "/dstdir/ok.txt") + if readErr != nil { + t.Fatalf("readable sibling was not copied: %v", readErr) + } + if string(data) != "readable" { + t.Fatalf("unexpected copied content: %q", string(data)) + } +} + +// Copying an in-scope directory that contains a symlink whose target escapes +// the user's scope must not dereference that symlink into the destination. +// Otherwise a scoped user could exfiltrate out-of-scope file content via the +// recursive copy path (GHSA-c2gv-wf5f-hjhh, an incomplete fix of +// GHSA-239w-m3h6-ch8v). +func TestCopyDoesNotDereferenceEscapingSymlink(t *testing.T) { + base := t.TempDir() + scope := filepath.Join(base, "scope") + if err := os.MkdirAll(filepath.Join(scope, "srcdir"), 0o755); err != nil { + t.Fatal(err) + } + + // A secret living outside the scope. + secret := filepath.Join(base, "secret.txt") + if err := os.WriteFile(secret, []byte("OUT-OF-SCOPE-SECRET"), 0o644); err != nil { + t.Fatal(err) + } + + // An escaping symlink planted inside the user's scope. + if err := os.Symlink(secret, filepath.Join(scope, "srcdir", "link.txt")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + afs := files.NewScopedFs(afero.NewOsFs(), scope) + + err := Copy(afs, "/srcdir", "/dstdir", 0o644, 0o755) + if err == nil { + t.Fatal("expected copy of a directory containing an escaping symlink to fail") + } + + // The escaping symlink's target content must not have landed in scope. + if data, readErr := afero.ReadFile(afs, "/dstdir/link.txt"); readErr == nil { + t.Fatalf("escaping symlink was dereferenced into scope: got %q", string(data)) + } +} + +// A symlink whose target stays within scope is legitimate and must still be +// copied (dereferenced) so the fix does not over-block normal usage. +func TestCopyAllowsInScopeSymlink(t *testing.T) { + scope := t.TempDir() + if err := os.MkdirAll(filepath.Join(scope, "srcdir", "real"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "srcdir", "real", "f.txt"), []byte("in-scope"), 0o644); err != nil { + t.Fatal(err) + } + if err := os.Symlink(filepath.Join(scope, "srcdir", "real", "f.txt"), filepath.Join(scope, "srcdir", "link.txt")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + afs := files.NewScopedFs(afero.NewOsFs(), scope) + + if err := Copy(afs, "/srcdir", "/dstdir", 0o644, 0o755); err != nil { + t.Fatalf("expected copy of an in-scope symlink to succeed, got: %v", err) + } + + data, err := afero.ReadFile(afs, "/dstdir/link.txt") + if err != nil { + t.Fatalf("expected in-scope symlink to be copied, got: %v", err) + } + if string(data) != "in-scope" { + t.Fatalf("unexpected copied content: %q", string(data)) + } +} diff --git a/fileutils/dir.go b/fileutils/dir.go index 07a3528e..4bd7c925 100644 --- a/fileutils/dir.go +++ b/fileutils/dir.go @@ -2,6 +2,7 @@ package fileutils import ( "errors" + "io/fs" "github.com/spf13/afero" ) @@ -9,20 +10,25 @@ import ( // CopyDir copies a directory from source to dest and all // of its sub-directories. It doesn't stop if it finds an error // during the copy. Returns an error if any. -func CopyDir(fs afero.Fs, source, dest string) error { +func CopyDir(afs afero.Fs, source, dest string, fileMode, dirMode fs.FileMode) error { // Get properties of source. - srcinfo, err := fs.Stat(source) + srcinfo, err := afs.Stat(source) if err != nil { return err } // Create the destination directory. - err = fs.MkdirAll(dest, srcinfo.Mode()) + err = afs.MkdirAll(dest, srcinfo.Mode()) if err != nil { return err } - dir, _ := fs.Open(source) + dir, err := afs.Open(source) + if err != nil { + return err + } + defer dir.Close() + obs, err := dir.Readdir(-1) if err != nil { return err @@ -36,13 +42,13 @@ func CopyDir(fs afero.Fs, source, dest string) error { if obj.IsDir() { // Create sub-directories, recursively. - err = CopyDir(fs, fsource, fdest) + err = CopyDir(afs, fsource, fdest, fileMode, dirMode) if err != nil { errs = append(errs, err) } } else { // Perform the file copy. - err = CopyFile(fs, fsource, fdest) + err = CopyFile(afs, fsource, fdest, fileMode, dirMode) if err != nil { errs = append(errs, err) } diff --git a/fileutils/file.go b/fileutils/file.go index 1b1e6403..784f728f 100644 --- a/fileutils/file.go +++ b/fileutils/file.go @@ -2,16 +2,38 @@ package fileutils import ( "io" + "io/fs" + "os" + "path" "path/filepath" "github.com/spf13/afero" ) +// MoveFile moves file from src to dst. +// By default the rename filesystem system call is used. If src and dst point to different volumes +// the file copy is used as a fallback +func MoveFile(afs afero.Fs, src, dst string, fileMode, dirMode fs.FileMode) error { + if afs.Rename(src, dst) == nil { + return nil + } + // fallback + err := Copy(afs, src, dst, fileMode, dirMode) + if err != nil { + _ = afs.Remove(dst) + return err + } + if err := afs.RemoveAll(src); err != nil { + return err + } + return nil +} + // CopyFile copies a file from source to dest and returns // an error if any. -func CopyFile(fs afero.Fs, source, dest string) error { +func CopyFile(afs afero.Fs, source, dest string, fileMode, dirMode fs.FileMode) error { // Open the source file. - src, err := fs.Open(source) + src, err := afs.Open(source) if err != nil { return err } @@ -19,13 +41,13 @@ func CopyFile(fs afero.Fs, source, dest string) error { // Makes the directory needed to create the dst // file. - err = fs.MkdirAll(filepath.Dir(dest), 0666) + err = afs.MkdirAll(filepath.Dir(dest), dirMode) if err != nil { return err } // Create the destination file. - dst, err := fs.Create(dest) + dst, err := afs.OpenFile(dest, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileMode) if err != nil { return err } @@ -37,15 +59,71 @@ func CopyFile(fs afero.Fs, source, dest string) error { return err } - // Copy the mode if the user can't - // open the file. - info, err := fs.Stat(source) + // Copy the mode + info, err := afs.Stat(source) if err != nil { - err = fs.Chmod(dest, info.Mode()) - if err != nil { - return err - } + return err + } + err = afs.Chmod(dest, info.Mode()) + if err != nil { + return err } return nil } + +// CommonPrefix returns common directory path of provided files +func CommonPrefix(sep byte, paths ...string) string { + // Handle special cases. + switch len(paths) { + case 0: + return "" + case 1: + return path.Clean(paths[0]) + } + + // Note, we treat string as []byte, not []rune as is often + // done in Go. (And sep as byte, not rune). This is because + // most/all supported OS' treat paths as string of non-zero + // bytes. A filename may be displayed as a sequence of Unicode + // runes (typically encoded as UTF-8) but paths are + // not required to be valid UTF-8 or in any normalized form + // (e.g. "é" (U+00C9) and "é" (U+0065,U+0301) are different + // file names. + c := []byte(path.Clean(paths[0])) + + // We add a trailing sep to handle the case where the + // common prefix directory is included in the path list + // (e.g. /home/user1, /home/user1/foo, /home/user1/bar). + // path.Clean will have cleaned off trailing / separators with + // the exception of the root directory, "/" (in which case we + // make it "//", but this will get fixed up to "/" below). + c = append(c, sep) + + // Ignore the first path since it's already in c + for _, v := range paths[1:] { + // Clean up each path before testing it + v = path.Clean(v) + string(sep) + + // Find the first non-common byte and truncate c + if len(v) < len(c) { + c = c[:len(v)] + } + for i := 0; i < len(c); i++ { + if v[i] != c[i] { + c = c[:i] + break + } + } + } + + // Remove trailing non-separator characters and the final separator + for i := len(c) - 1; i >= 0; i-- { + if c[i] == sep { + c = c[:i] + break + } + } + + return string(c) +} diff --git a/fileutils/file_test.go b/fileutils/file_test.go new file mode 100644 index 00000000..fd2b5119 --- /dev/null +++ b/fileutils/file_test.go @@ -0,0 +1,46 @@ +package fileutils + +import "testing" + +func TestCommonPrefix(t *testing.T) { + testCases := map[string]struct { + paths []string + want string + }{ + "same lvl": { + paths: []string{ + "/home/user/file1", + "/home/user/file2", + }, + want: "/home/user", + }, + "sub folder": { + paths: []string{ + "/home/user/folder", + "/home/user/folder/file", + }, + want: "/home/user/folder", + }, + "relative path": { + paths: []string{ + "/home/user/folder", + "/home/user/folder/../folder2", + }, + want: "/home/user", + }, + "no common path": { + paths: []string{ + "/home/user/folder", + "/etc/file", + }, + want: "", + }, + } + for name, tt := range testCases { + t.Run(name, func(t *testing.T) { + if got := CommonPrefix('/', tt.paths...); got != tt.want { + t.Errorf("CommonPrefix() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 00000000..be77aa74 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,3 @@ +# Ignore artifacts: +dist +pnpm-lock.yaml \ No newline at end of file diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 00000000..757fd64c --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "trailingComma": "es5" +} diff --git a/frontend/assets.go b/frontend/assets.go new file mode 100644 index 00000000..7955822f --- /dev/null +++ b/frontend/assets.go @@ -0,0 +1,12 @@ +//go:build !dev + +package frontend + +import "embed" + +//go:embed dist/* +var assets embed.FS + +func Assets() embed.FS { + return assets +} diff --git a/frontend/babel.config.js b/frontend/babel.config.js deleted file mode 100644 index ba179669..00000000 --- a/frontend/babel.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - presets: [ - '@vue/app' - ] -} diff --git a/frontend/dist/.gitkeep b/frontend/dist/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 00000000..8d660425 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,37 @@ +import pluginVue from "eslint-plugin-vue"; +import { + defineConfigWithVueTs, + vueTsConfigs, +} from "@vue/eslint-config-typescript"; +import prettierConfig from "@vue/eslint-config-prettier"; + +export default defineConfigWithVueTs( + { + name: "app/files-to-lint", + files: ["**/*.{ts,mts,tsx,vue}"], + }, + { + name: "app/files-to-ignore", + ignores: ["**/dist/**", "**/dist-ssr/**", "**/coverage/**"], + }, + pluginVue.configs["flat/essential"], + vueTsConfigs.recommended, + prettierConfig, + { + rules: { + // Note: you must disable the base rule as it can report incorrect errors + "@typescript-eslint/no-unused-expressions": "off", + // TODO: theres too many of these from before ts + "@typescript-eslint/no-explicit-any": "off", + // TODO: finish the ts conversion + "vue/block-lang": "off", + "vue/multi-word-component-names": "off", + "vue/no-mutating-props": [ + "error", + { + shallowOnly: true, + }, + ], + }, + } +); diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..19308a95 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,176 @@ + + + + + + + + File Browser + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+ + + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json deleted file mode 100644 index eb5f4b61..00000000 --- a/frontend/package-lock.json +++ /dev/null @@ -1,13840 +0,0 @@ -{ - "name": "filebrowser-frontend", - "version": "2.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/generator": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", - "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", - "dev": true, - "requires": { - "@babel/types": "^7.2.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", - "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", - "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-call-delegate": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", - "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz", - "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", - "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", - "dev": true, - "requires": { - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" - } - }, - "@babel/helper-define-map": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", - "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/types": "^7.7.4", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", - "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", - "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", - "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-transforms": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", - "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-simple-access": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", - "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", - "dev": true, - "requires": { - "lodash": "^4.17.13" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", - "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-wrap-function": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", - "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-simple-access": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", - "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", - "dev": true, - "requires": { - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-wrap-function": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", - "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", - "dev": true, - "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", - "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", - "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz", - "integrity": "sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz", - "integrity": "sha512-GftcVDcLCwVdzKmwOBDjATd548+IE+mBo7ttgatqNDR7VG7GqIuZPtRWlMLHbhTXhcnFZiGER8iIYl1n/imtsg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.7.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", - "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.7.4" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", - "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.7.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", - "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", - "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", - "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.7.4.tgz", - "integrity": "sha512-0oNLWNH4k5ZbBVfAwiTU53rKFWIeTh6ZlaWOXWJc4ywxs0tjz5fc3uZ6jKAnZSxN98eXVgg7bJIuzjX+3SXY+A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", - "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", - "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz", - "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", - "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", - "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", - "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", - "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", - "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.13" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", - "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-define-map": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", - "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", - "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", - "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", - "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", - "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", - "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", - "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", - "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", - "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", - "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", - "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.4", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", - "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", - "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", - "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", - "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", - "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", - "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.7.4", - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", - "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", - "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", - "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz", - "integrity": "sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", - "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", - "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", - "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", - "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", - "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", - "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/preset-env": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", - "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.4", - "@babel/plugin-proposal-dynamic-import": "^7.7.4", - "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", - "@babel/plugin-syntax-async-generators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-json-strings": "^7.7.4", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", - "@babel/plugin-syntax-top-level-await": "^7.7.4", - "@babel/plugin-transform-arrow-functions": "^7.7.4", - "@babel/plugin-transform-async-to-generator": "^7.7.4", - "@babel/plugin-transform-block-scoped-functions": "^7.7.4", - "@babel/plugin-transform-block-scoping": "^7.7.4", - "@babel/plugin-transform-classes": "^7.7.4", - "@babel/plugin-transform-computed-properties": "^7.7.4", - "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.7", - "@babel/plugin-transform-duplicate-keys": "^7.7.4", - "@babel/plugin-transform-exponentiation-operator": "^7.7.4", - "@babel/plugin-transform-for-of": "^7.7.4", - "@babel/plugin-transform-function-name": "^7.7.4", - "@babel/plugin-transform-literals": "^7.7.4", - "@babel/plugin-transform-member-expression-literals": "^7.7.4", - "@babel/plugin-transform-modules-amd": "^7.7.5", - "@babel/plugin-transform-modules-commonjs": "^7.7.5", - "@babel/plugin-transform-modules-systemjs": "^7.7.4", - "@babel/plugin-transform-modules-umd": "^7.7.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", - "@babel/plugin-transform-new-target": "^7.7.4", - "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.7", - "@babel/plugin-transform-property-literals": "^7.7.4", - "@babel/plugin-transform-regenerator": "^7.7.5", - "@babel/plugin-transform-reserved-words": "^7.7.4", - "@babel/plugin-transform-shorthand-properties": "^7.7.4", - "@babel/plugin-transform-spread": "^7.7.4", - "@babel/plugin-transform-sticky-regex": "^7.7.4", - "@babel/plugin-transform-template-literals": "^7.7.4", - "@babel/plugin-transform-typeof-symbol": "^7.7.4", - "@babel/plugin-transform-unicode-regex": "^7.7.4", - "@babel/types": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.6.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" - } - }, - "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - } - }, - "@babel/types": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", - "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "@hapi/address": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", - "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==", - "dev": true - }, - "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==", - "dev": true - }, - "@hapi/joi": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz", - "integrity": "sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==", - "dev": true, - "requires": { - "@hapi/address": "2.x.x", - "@hapi/hoek": "6.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz", - "integrity": "sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==", - "dev": true, - "requires": { - "@hapi/hoek": "6.x.x" - } - }, - "@intervolga/optimize-cssnano-plugin": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", - "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", - "dev": true, - "requires": { - "cssnano": "^4.0.0", - "cssnano-preset-default": "^4.0.0", - "postcss": "^7.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@soda/friendly-errors-webpack-plugin": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", - "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "11.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.4.tgz", - "integrity": "sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", - "dev": true - }, - "@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", - "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==", - "dev": true - }, - "@vue/babel-plugin-transform-vue-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz", - "integrity": "sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - } - }, - "@vue/babel-preset-app": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.1.2.tgz", - "integrity": "sha512-M2vodPy1Wh0ZIlBf2MA3mhHvxuFp6dwx5nHxBSd4VpBdrgq4Jb0ECbGnNcH9RI2yNPfkoyiHmqOGDQoFGt+FUg==", - "dev": true, - "requires": { - "@babel/core": "^7.7.4", - "@babel/helper-module-imports": "^7.7.4", - "@babel/plugin-proposal-class-properties": "^7.7.4", - "@babel/plugin-proposal-decorators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-jsx": "^7.7.4", - "@babel/plugin-transform-runtime": "^7.7.4", - "@babel/preset-env": "^7.7.4", - "@babel/runtime": "^7.7.4", - "@vue/babel-preset-jsx": "^1.1.2", - "babel-plugin-dynamic-import-node": "^2.2.0", - "core-js": "^3.4.4", - "core-js-compat": "^3.4.4" - } - }, - "@vue/babel-preset-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz", - "integrity": "sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==", - "dev": true, - "requires": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "@vue/babel-sugar-functional-vue": "^1.1.2", - "@vue/babel-sugar-inject-h": "^1.1.2", - "@vue/babel-sugar-v-model": "^1.1.2", - "@vue/babel-sugar-v-on": "^1.1.2" - } - }, - "@vue/babel-sugar-functional-vue": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz", - "integrity": "sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-inject-h": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz", - "integrity": "sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-v-model": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz", - "integrity": "sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - } - }, - "@vue/babel-sugar-v-on": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz", - "integrity": "sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0" - } - }, - "@vue/cli-overlay": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.1.2.tgz", - "integrity": "sha512-d+joLTtthj6l1JnCeFyJRKoISBQeqKZQY0EIYnJBcPPR3/dEKctMRkh5Sy1MR0H1JQQIko9CPrFjT/NHFW48Mg==", - "dev": true - }, - "@vue/cli-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.1.2.tgz", - "integrity": "sha512-/j998Q16h8gbYcYf2sE+CYobCpIzDYtOJ76JuhJZnCfy5H8gh4g+x5fepbLs0gOW/cZ2OQxJFx7Jd/yT2/G/qQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.4", - "@vue/babel-preset-app": "^4.1.2", - "@vue/cli-shared-utils": "^4.1.2", - "babel-loader": "^8.0.6", - "cache-loader": "^4.1.0", - "thread-loader": "^2.1.3", - "webpack": "^4.0.0" - }, - "dependencies": { - "@vue/cli-shared-utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.1.2.tgz", - "integrity": "sha512-uQAVqxCWdL5ipZ0TPu6SVsdokQp4yHt8SzzpUGhq8TkW4vwalGddJAAJrqZHMl91ZTIJ4p4ixofmCaaJo5rSRA==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.2", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.8", - "semver": "^6.1.0", - "strip-ansi": "^6.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "@vue/cli-plugin-eslint": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.1.1.tgz", - "integrity": "sha512-7bb5idaWcXREaxVYmQ9NK31gy26Qms6cQ9ENovXQurFpsSd29+Fmqc/EkAhHhWn82gModvypIoJyOhKt21jxKg==", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^4.1.1", - "eslint-loader": "^2.1.2", - "globby": "^9.2.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - } - }, - "@vue/cli-plugin-router": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.1.2.tgz", - "integrity": "sha512-P1OwZfskUzs8KoQDozT+TfSKREMB8NpJ34raor8CiXtM80pdaNU+mO1HLOvl9ckaOWbAgNrxFmANiSBvHzSo+w==", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^4.1.2" - }, - "dependencies": { - "@vue/cli-shared-utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.1.2.tgz", - "integrity": "sha512-uQAVqxCWdL5ipZ0TPu6SVsdokQp4yHt8SzzpUGhq8TkW4vwalGddJAAJrqZHMl91ZTIJ4p4ixofmCaaJo5rSRA==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.2", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.8", - "semver": "^6.1.0", - "strip-ansi": "^6.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "@vue/cli-plugin-vuex": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.1.2.tgz", - "integrity": "sha512-qsf8sfUUtTuFf24iB6vbdapvCTCt4FqLj7r66POutGWmBCTlPHsMaAXMaD2ZD53/hqr8QHd/557IUensSwj5wA==", - "dev": true - }, - "@vue/cli-service": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.1.2.tgz", - "integrity": "sha512-ljJ3qoR5NNHuG0HPqQyfO3xa4Ti5zCSmHp0tDYxgiVz1vMDvzPXBhGBGsc2Y1HH71BUyx3Ei+H7mWdML/+Bm9Q==", - "dev": true, - "requires": { - "@intervolga/optimize-cssnano-plugin": "^1.0.5", - "@soda/friendly-errors-webpack-plugin": "^1.7.1", - "@vue/cli-overlay": "^4.1.2", - "@vue/cli-plugin-router": "^4.1.2", - "@vue/cli-plugin-vuex": "^4.1.2", - "@vue/cli-shared-utils": "^4.1.2", - "@vue/component-compiler-utils": "^3.0.2", - "@vue/preload-webpack-plugin": "^1.1.0", - "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.1.1", - "acorn-walk": "^6.1.1", - "address": "^1.1.2", - "autoprefixer": "^9.7.2", - "browserslist": "^4.7.3", - "cache-loader": "^4.1.0", - "case-sensitive-paths-webpack-plugin": "^2.2.0", - "cli-highlight": "^2.1.4", - "clipboardy": "^2.0.0", - "cliui": "^5.0.0", - "copy-webpack-plugin": "^5.0.5", - "css-loader": "^3.1.0", - "cssnano": "^4.1.10", - "current-script-polyfill": "^1.0.0", - "debug": "^4.1.1", - "default-gateway": "^5.0.5", - "dotenv": "^8.2.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^4.2.0", - "fs-extra": "^7.0.1", - "globby": "^9.2.0", - "hash-sum": "^1.0.2", - "html-webpack-plugin": "^3.2.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.8.0", - "minimist": "^1.2.0", - "portfinder": "^1.0.25", - "postcss-loader": "^3.0.0", - "read-pkg": "^5.1.1", - "ssri": "^7.1.0", - "terser-webpack-plugin": "^2.2.1", - "thread-loader": "^2.1.3", - "url-loader": "^2.2.0", - "vue-loader": "^15.7.2", - "vue-style-loader": "^4.1.0", - "webpack": "^4.0.0", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-chain": "^6.0.0", - "webpack-dev-server": "^3.9.0", - "webpack-merge": "^4.2.2" - }, - "dependencies": { - "@vue/cli-shared-utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.1.2.tgz", - "integrity": "sha512-uQAVqxCWdL5ipZ0TPu6SVsdokQp4yHt8SzzpUGhq8TkW4vwalGddJAAJrqZHMl91ZTIJ4p4ixofmCaaJo5rSRA==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.2", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.8", - "semver": "^6.1.0", - "strip-ansi": "^6.0.0" - } - }, - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.0", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "terser": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", - "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.1.tgz", - "integrity": "sha512-dNxivOXmDgZqrGxOttBH6B4xaxT4zNC+Xd+2K8jwGDMK5q2CZI+KZMA1AAnSRT+BTRvuzKsDx+fpxzPAmAMVcA==", - "dev": true, - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.2.0", - "jest-worker": "^24.9.0", - "schema-utils": "^2.6.1", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.4.3", - "webpack-sources": "^1.4.3" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "@vue/cli-shared-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.1.1.tgz", - "integrity": "sha512-nsxNW8Sy9y2yx/r9DqgZoYg/DoygvASIQl0XXG+imQUDWEXKmD6UZA6y5ANfStCljzZ/wd7WgWP+txmjy6exOw==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.1", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.8", - "semver": "^6.1.0", - "string.prototype.padstart": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "@vue/component-compiler-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.0.tgz", - "integrity": "sha512-OJ7swvl8LtKtX5aYP8jHhO6fQBIRIGkU6rvWzK+CGJiNOnvg16nzcBkd9qMZzW8trI2AsqAKx263nv7kb5rhZw==", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^5.0.0", - "prettier": "^1.18.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "@vue/preload-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w==", - "dev": true - }, - "@vue/web-component-wrapper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz", - "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } - } - }, - "ace-builds": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.7.tgz", - "integrity": "sha512-gwQGVFewBopRLho08BfahyvRa9FlB43JUig5ItAKTYc9kJJsbA9QNz75p28QtQomoPQ9rJx82ymL21x4ZSZmdg==" - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, - "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", - "dev": true - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "dev": true - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", - "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", - "dev": true, - "requires": { - "browserslist": "^4.8.0", - "caniuse-lite": "^1.0.30001012", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.23", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - } - }, - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-eslint": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", - "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - } - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.1.tgz", - "integrity": "sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000999", - "electron-to-chromium": "^1.3.284", - "node-releases": "^1.1.36" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "dev": true, - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^3.0.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "find-cache-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.0.0.tgz", - "integrity": "sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.0", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", - "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001002", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz", - "integrity": "sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g==", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-highlight": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", - "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^5.1.1", - "yargs": "^15.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz", - "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cli-spinners": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", - "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clipboard": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", - "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "clipboardy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.1.0.tgz", - "integrity": "sha512-2pzOUxWcLlXWtn+Jd6js3o12TysNOOVes/aQfg+MT/35vrxWzedHlLwyoJpXjsFKWm95BTNEcMGD9+a7mKzZkQ==", - "dev": true, - "requires": { - "arch": "^2.1.1", - "execa": "^1.0.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "dev": true, - "requires": { - "mime-db": ">= 1.40.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", - "dev": true, - "requires": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "core-js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz", - "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.1.tgz", - "integrity": "sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg==", - "dev": true, - "requires": { - "browserslist": "^4.8.2", - "semver": "7.0.0" - }, - "dependencies": { - "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", - "dev": true - }, - "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.0.tgz", - "integrity": "sha512-JornYo4RAXl1Mzt0lOSVPmArzAMV3rGY2VuwtaDc732WTWjdwTaeS19nCGWMcSCf305Q396lhhDAJEWWM0SgPQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", - "dev": true - }, - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", - "dev": true - }, - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.37" - } - }, - "current-script-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", - "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "dev": true - }, - "default-gateway": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", - "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", - "dev": true, - "requires": { - "execa": "^3.3.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "easy-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", - "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.293", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.293.tgz", - "integrity": "sha512-DQSBRuU2Z1vG+CEWUIfCEVMHtuaGlhVojzg39mX5dx7PLSFDJ7DSrGUWzaPFFgWR1jo26hj1nXXRQZvFwk7F8w==", - "dev": true - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz", - "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==", - "dev": true, - "requires": { - "stackframe": "^1.1.0" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", - "dev": true, - "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "globals": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", - "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", - "dev": true, - "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" - } - }, - "eslint-plugin-vue": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.1.2.tgz", - "integrity": "sha512-M75oAB+2a/LNkLKRbeEaS07EjzjIUaV7/hYoHAfRFeeF8ZMmCbahUn8nQLsLP85mkar24+zDU3QW2iT1JRsACw==", - "dev": true, - "requires": { - "semver": "^5.6.0", - "vue-eslint-parser": "^7.0.0" - } - }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", - "dev": true, - "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", - "dev": true - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", - "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - } - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", - "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "requires": { - "delegate": "^3.1.2" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", - "dev": true - }, - "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "highlight.js": { - "version": "9.17.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.17.1.tgz", - "integrity": "sha512-TA2/doAur5Ol8+iM3Ov7qy3jYcr/QiJ2eDTdRF4dfbjG7AaaB99J5G+zSl11ljbl6cIcahgPY6SKb3sC3EJ0fw==", - "dev": true, - "requires": { - "handlebars": "^4.5.3" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } - } - } - }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", - "dev": true - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", - "dev": true - }, - "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "dependencies": { - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "javascript-stringify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", - "integrity": "sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==", - "dev": true - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-message": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", - "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", - "dev": true - }, - "js-queue": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", - "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", - "dev": true, - "requires": { - "easy-stack": "^1.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", - "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "shell-quote": "^1.6.1" - } - }, - "launch-editor-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", - "dev": true, - "requires": { - "launch-editor": "^2.2.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "material-design-icons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz", - "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78=" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", - "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", - "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "dev": true - }, - "node-ipc": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", - "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", - "dev": true, - "requires": { - "event-pubsub": "4.3.0", - "js-message": "1.0.5", - "js-queue": "2.0.0" - } - }, - "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.38.tgz", - "integrity": "sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" - }, - "noty": { - "version": "3.2.0-beta", - "resolved": "https://registry.npmjs.org/noty/-/noty-3.2.0-beta.tgz", - "integrity": "sha512-a1//Rth1MTQ/GCvGzwBXrZqCwOPyxiIKMdHT1TlcdrDYBYVfb7vzwsU0N4x+j/HeIQTi6/pbP8lRtY9gBz/d3Q==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", - "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", - "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", - "dev": true, - "requires": { - "parse5": "^5.1.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.25.tgz", - "integrity": "sha512-NXXVvWq9icrm/TgQC0O6YVFi4StfJz46M1iNd/h6B26Nvh/HKI+q4YZtFN/EjcInZliEscO/WL10BXnc1E5nwg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", - "dev": true, - "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.16", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" - }, - "dependencies": { - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", - "dev": true - } - } - }, - "postcss-modules-scope": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz", - "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "dependencies": { - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qrcode.vue": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-1.7.0.tgz", - "integrity": "sha512-R7t6Y3fDDtcU7L4rtqwGUDP9xD64gJhIwpfjhRCTKmBoYF6SS49PIJHRJ048cse6OI7iwTwgyy2C46N9Ygoc6g==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", - "dev": true - }, - "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", - "dev": true - } - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", - "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", - "dev": true - }, - "terser": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", - "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", - "dev": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", - "dev": true, - "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "thread-loader": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", - "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", - "dev": true, - "requires": { - "loader-runner": "^2.3.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-emitter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", - "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.3.tgz", - "integrity": "sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", - "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "vue": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", - "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" - }, - "vue-eslint-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz", - "integrity": "sha512-yR0dLxsTT7JfD2YQo9BhnQ6bUTLsZouuzt9SKRP7XNaZJV459gvlsJo4vT2nhZ/2dH9j3c53bIx9dnqU2prM9g==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "lodash": "^4.17.15" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, - "vue-i18n": { - "version": "8.15.3", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.15.3.tgz", - "integrity": "sha512-PVNgo6yhOmacZVFjSapZ314oewwLyXHjJwAqjnaPN1GJAJd/dvsrShGzSiJuCX4Hc36G4epJvNXUwO8y7wEKew==" - }, - "vue-loader": { - "version": "15.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.8.3.tgz", - "integrity": "sha512-yFksTFbhp+lxlm92DrKdpVIWMpranXnTEuGSc0oW+Gk43M9LWaAmBTnfj5+FCdve715mTHvo78IdaXf5TbiTJg==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - } - }, - "vue-router": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.3.tgz", - "integrity": "sha512-8iSa4mGNXBjyuSZFCCO4fiKfvzqk+mhL0lnKuGcQtO1eoj8nq3CmbEG8FwK5QqoqwDgsjsf1GDuisDX4cdb/aQ==" - }, - "vue-style-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", - "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", - "dev": true, - "requires": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "vue-template-compiler": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz", - "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true - }, - "vuex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz", - "integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ==" - }, - "vuex-router-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz", - "integrity": "sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w==" - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webpack": { - "version": "4.28.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", - "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz", - "integrity": "sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "webpack-chain": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.3.0.tgz", - "integrity": "sha512-Kri8p/JrfcQtBRghyxKN8r9E1mbxzywQPAnQbyvXN+rtSa8au1Qb7JOoyAGfEBFkOvU3XH4JeGd57CHa0QXfMQ==", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", - "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.6", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.25", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz", - "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - }, - "yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-GH/X/hYt+x5hOat4LMnCqMd8r5Cv78heOMIJn1hr7QPPBqfeC6p89Y78+WB9yGDvfpCvgasfmWLzNzEioOUD9Q==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^16.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "dev": true, - "requires": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - } - } -} diff --git a/frontend/package.json b/frontend/package.json index e99c0643..8bea2d8a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,61 +1,78 @@ { "name": "filebrowser-frontend", - "version": "2.0.0", + "version": "3.0.0", "private": true, + "type": "module", + "engines": { + "node": ">=24.0.0", + "pnpm": ">=10.0.0" + }, "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "watch": "vue-cli-service build --watch", - "lint": "vue-cli-service lint --fix" + "dev": "vite dev", + "build": "pnpm run typecheck && vite build", + "clean": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitkeep' -exec rm -r {} +", + "typecheck": "vue-tsc -p ./tsconfig.app.json --noEmit", + "lint": "eslint src/", + "lint:fix": "eslint --fix src/", + "format": "prettier --write .", + "test": "vitest run" }, "dependencies": { - "ace-builds": "^1.4.7", - "clipboard": "^2.0.4", - "js-base64": "^2.5.1", - "lodash.clonedeep": "^4.5.0", - "lodash.throttle": "^4.1.1", - "material-design-icons": "^3.0.1", - "moment": "^2.24.0", + "@chenfengyuan/vue-number-input": "^2.0.1", + "@vueuse/core": "^14.0.0", + "@vueuse/integrations": "^14.0.0", + "ace-builds": "^1.43.2", + "csv-parse": "^6.1.0", + "dayjs": "^1.11.13", + "dompurify": "^3.2.6", + "epubjs": "^0.3.93", + "filesize": "^11.0.13", + "js-base64": "^3.7.7", + "jwt-decode": "^4.0.0", + "lodash-es": "^4.17.21", + "marked": "^18.0.0", + "marked-katex-extension": "^5.1.6", + "material-icons": "^1.13.14", "normalize.css": "^8.0.1", - "noty": "^3.2.0-beta", - "qrcode.vue": "^1.7.0", - "vue": "^2.6.10", - "vue-i18n": "^8.15.3", - "vue-router": "^3.1.3", - "vuex": "^3.1.2", - "vuex-router-sync": "^5.0.0" + "pinia": "^3.0.4", + "pretty-bytes": "^7.1.0", + "qrcode.vue": "^3.6.0", + "tus-js-client": "^4.3.1", + "utif": "^3.1.0", + "video.js": "^8.23.3", + "videojs-hotkeys": "^0.2.28", + "videojs-mobile-ui": "^1.1.1", + "vue": "^3.5.17", + "vue-i18n": "^11.1.10", + "vue-lazyload": "^3.0.0", + "vue-reader": "^1.2.17", + "vue-router": "^5.0.0", + "vue-toastification": "^2.0.0-rc.5" }, "devDependencies": { - "@vue/cli-plugin-babel": "^4.1.2", - "@vue/cli-plugin-eslint": "^4.1.1", - "@vue/cli-service": "^4.1.2", - "babel-eslint": "^10.0.3", - "eslint": "^6.7.2", - "eslint-plugin-vue": "^6.1.2", - "vue-template-compiler": "^2.6.10" + "@intlify/unplugin-vue-i18n": "^11.0.1", + "@tsconfig/node24": "^24.0.2", + "@types/lodash-es": "^4.17.12", + "@types/node": "^24.10.1", + "@typescript-eslint/eslint-plugin": "^8.37.0", + "@vitejs/plugin-legacy": "^8.0.0", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.6.0", + "@vue/tsconfig": "^0.9.0", + "autoprefixer": "^10.4.21", + "eslint": "^10.0.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-prettier": "^5.5.1", + "eslint-plugin-vue": "^10.5.1", + "postcss": "^8.5.6", + "prettier": "^3.6.2", + "terser": "^5.43.1", + "typescript": "^5.9.3", + "vite": "^8.0.0", + "vite-plugin-compression2": "^2.3.1", + "vitest": "^4.1.0", + "vue-tsc": "^3.1.3" }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "plugin:vue/essential", - "eslint:recommended" - ], - "rules": {}, - "parserOptions": { - "parser": "babel-eslint" - } - }, - "postcss": { - "plugins": { - "autoprefixer": {} - } - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not ie <= 8" - ] + "packageManager": "pnpm@10.33.4+sha512.1c67b3b359b2d408119ba1ed289f34b8fc3c6873412bec6fd264fbdc82489e510fcbecb9ce9d22dae7f3b76269d8441046014bdca53b9979cd7a561ad631b800" } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 00000000..43064271 --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,6099 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@chenfengyuan/vue-number-input': + specifier: ^2.0.1 + version: 2.0.1(vue@3.5.34(typescript@5.9.3)) + '@vueuse/core': + specifier: ^14.0.0 + version: 14.3.0(vue@3.5.34(typescript@5.9.3)) + '@vueuse/integrations': + specifier: ^14.0.0 + version: 14.3.0(focus-trap@8.0.0)(jwt-decode@4.0.0)(vue@3.5.34(typescript@5.9.3)) + ace-builds: + specifier: ^1.43.2 + version: 1.44.0 + csv-parse: + specifier: ^6.1.0 + version: 6.2.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.20 + dompurify: + specifier: ^3.2.6 + version: 3.4.12 + epubjs: + specifier: ^0.3.93 + version: 0.3.93 + filesize: + specifier: ^11.0.13 + version: 11.0.17 + js-base64: + specifier: ^3.7.7 + version: 3.7.8 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 + lodash-es: + specifier: ^4.17.21 + version: 4.18.1 + marked: + specifier: ^18.0.0 + version: 18.0.3 + marked-katex-extension: + specifier: ^5.1.6 + version: 5.1.8(katex@0.16.28)(marked@18.0.3) + material-icons: + specifier: ^1.13.14 + version: 1.13.14 + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + pinia: + specifier: ^3.0.4 + version: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)) + pretty-bytes: + specifier: ^7.1.0 + version: 7.1.0 + qrcode.vue: + specifier: ^3.6.0 + version: 3.9.1(vue@3.5.34(typescript@5.9.3)) + tus-js-client: + specifier: ^4.3.1 + version: 4.3.1 + utif: + specifier: ^3.1.0 + version: 3.1.0 + video.js: + specifier: ^8.23.3 + version: 8.23.7 + videojs-hotkeys: + specifier: ^0.2.28 + version: 0.2.30 + videojs-mobile-ui: + specifier: ^1.1.1 + version: 1.2.5(video.js@8.23.7) + vue: + specifier: ^3.5.17 + version: 3.5.34(typescript@5.9.3) + vue-i18n: + specifier: ^11.1.10 + version: 11.4.2(vue@3.5.34(typescript@5.9.3)) + vue-lazyload: + specifier: ^3.0.0 + version: 3.0.0 + vue-reader: + specifier: ^1.2.17 + version: 1.3.4 + vue-router: + specifier: ^5.0.0 + version: 5.0.7(@vue/compiler-sfc@3.5.34)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)) + vue-toastification: + specifier: ^2.0.0-rc.5 + version: 2.0.0-rc.5(vue@3.5.34(typescript@5.9.3)) + devDependencies: + '@intlify/unplugin-vue-i18n': + specifier: ^11.0.1 + version: 11.2.3(@vue/compiler-dom@3.5.34)(eslint@10.4.0)(rollup@4.57.1)(typescript@5.9.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)) + '@tsconfig/node24': + specifier: ^24.0.2 + version: 24.0.4 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + '@types/node': + specifier: ^24.10.1 + version: 24.12.4 + '@typescript-eslint/eslint-plugin': + specifier: ^8.37.0 + version: 8.59.3(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) + '@vitejs/plugin-legacy': + specifier: ^8.0.0 + version: 8.0.2(terser@5.47.1)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0)) + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.7(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)) + '@vue/eslint-config-prettier': + specifier: ^10.2.0 + version: 10.2.0(eslint@10.4.0)(prettier@3.8.3) + '@vue/eslint-config-typescript': + specifier: ^14.6.0 + version: 14.7.0(eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(vue-eslint-parser@10.4.0(eslint@10.4.0)))(eslint@10.4.0)(typescript@5.9.3) + '@vue/tsconfig': + specifier: ^0.9.0 + version: 0.9.1(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)) + autoprefixer: + specifier: ^10.4.21 + version: 10.5.0(postcss@8.5.18) + eslint: + specifier: ^10.0.0 + version: 10.4.0 + eslint-config-prettier: + specifier: ^10.1.5 + version: 10.1.8(eslint@10.4.0) + eslint-plugin-prettier: + specifier: ^5.5.1 + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint@10.4.0)(prettier@3.8.3) + eslint-plugin-vue: + specifier: ^10.5.1 + version: 10.9.1(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(vue-eslint-parser@10.4.0(eslint@10.4.0)) + postcss: + specifier: ^8.5.6 + version: 8.5.18 + prettier: + specifier: ^3.6.2 + version: 3.8.3 + terser: + specifier: ^5.43.1 + version: 5.47.1 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^8.0.0 + version: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + vite-plugin-compression2: + specifier: ^2.3.1 + version: 2.5.3(rollup@4.57.1) + vitest: + specifier: ^4.1.0 + version: 4.1.6(@types/node@24.12.4)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0)) + vue-tsc: + specifier: ^3.1.3 + version: 3.2.9(typescript@5.9.3) + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@8.0.0-rc.5': + resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.29.3': + resolution: {integrity: sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@8.0.0-rc.5': + resolution: {integrity: sha512-sN7R8rBvDurfaziNfDEIjIntlazmlkCDGO4SNl2RJ3wRCn+QxspLV7hzYAE8WWVd2joVuT8sUxeePdLp2idI1A==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@8.0.0-rc.5': + resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.28.6': + resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@8.0.0-rc.5': + resolution: {integrity: sha512-/Mfg83rK3+jsRbl4Vbd0jqxc6M1A1/WNFtgrowRM1unEsD3XcNnrBdMM0JWakd0/RN9lseQKwPduW1TiEwKOlQ==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.3': + resolution: {integrity: sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.28.6': + resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.6': + resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.28.6': + resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.29.4': + resolution: {integrity: sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.28.6': + resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.28.6': + resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.28.6': + resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.29.5': + resolution: {integrity: sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@babel/types@8.0.0-rc.5': + resolution: {integrity: sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@chenfengyuan/vue-number-input@2.0.1': + resolution: {integrity: sha512-/jqmfmFulFOGlozts0Sf2GCESMRYVTfZZSz2Tf4n9O5DKjqMi5B/MfRzm5H5A57WuG3L80yXFWFN+XeACKaIhQ==} + peerDependencies: + vue: ^3.0.0 + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@intlify/bundle-utils@11.2.3': + resolution: {integrity: sha512-9mrJyUJGPFJCIFGthvIFT58CknG701z9D0VRtLBtat3teo0fisP3Q6bo/t9YHnljBTEZ42hYm1ukn16LfLkRRg==} + engines: {node: '>= 22.13'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + + '@intlify/core-base@11.4.2': + resolution: {integrity: sha512-7fpuCcVmeLv2T9qHsARqGvh8xt+sV2fH+Q+gMHFwB/rPXzo85DpbJFKn7dBH1L5p0c2cSh2DW+2h/64EKrISmA==} + engines: {node: '>= 16'} + + '@intlify/devtools-types@11.4.2': + resolution: {integrity: sha512-3u8EN1kB6EMSi96KXs5k7a8y2X2g4+h3X6iwVZU47cP4n+mTuq//WMjG588BzSp/2XQ/dTXo2BLUXX+XS+PNfA==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.4.2': + resolution: {integrity: sha512-a6CDSGSMTGrg0BjD97x8TBYPf7qQMDlZipJ6UDfv/pd4OIym8TMlHu3MsH0bTNnRdAG2D6EFEykIgiQPqvtTkA==} + engines: {node: '>= 16'} + + '@intlify/shared@11.4.2': + resolution: {integrity: sha512-NzpHbguRCsOHDwxmlBa9qu/imc+/QWgsYUaK6FZeNC0wK8QfAbhqrktEp/haVzxU1aikH8IX4ytD+mfFEMi/9A==} + engines: {node: '>= 16'} + + '@intlify/unplugin-vue-i18n@11.2.3': + resolution: {integrity: sha512-fbPHjOVAkxrPnbhAs6PTNJlfLOJj35ZqYh8CZ9OpeKZiZoulA9lkvrWYP3kfsZ5K/CG9jIHXxpb1/mf5n/mBYA==} + engines: {node: '>= 22.13'} + peerDependencies: + petite-vue-i18n: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vite: + optional: true + vue-i18n: + optional: true + + '@intlify/vue-i18n-extensions@8.0.0': + resolution: {integrity: sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==} + engines: {node: '>= 18'} + peerDependencies: + '@intlify/shared': ^9.0.0 || ^10.0.0 || ^11.0.0 + '@vue/compiler-dom': ^3.0.0 + vue: ^3.0.0 + vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0 + peerDependenciesMeta: + '@intlify/shared': + optional: true + '@vue/compiler-dom': + optional: true + vue: + optional: true + vue-i18n: + optional: true + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rolldown/binding-android-arm64@1.0.1': + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.1': + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.1': + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.1': + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.1': + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.1': + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@tsconfig/node24@24.0.4': + resolution: {integrity: sha512-2A933l5P5oCbv6qSxHs7ckKwobs8BDAe9SJ/Xr2Hy+nDlwmLE1GhFh/g/vXGRZWgxBg9nX/5piDtHR9Dkw/XuA==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/localforage@0.0.34': + resolution: {integrity: sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==} + deprecated: This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed! + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.23': + resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} + + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@typescript-eslint/eslint-plugin@8.56.0': + resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/eslint-plugin@8.59.3': + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.59.3 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.56.0': + resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.56.0': + resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.59.3': + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.56.0': + resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.59.3': + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.56.0': + resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/tsconfig-utils@8.59.3': + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.56.0': + resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.59.3': + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.56.0': + resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.56.0': + resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/typescript-estree@8.59.3': + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.56.0': + resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.59.3': + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.56.0': + resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.59.3': + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@videojs/http-streaming@3.17.4': + resolution: {integrity: sha512-XAvdG2dolBuV2Fx8bu1kjmQ2D4TonGzZH68Pgv/O9xMSFWdZtITSMFismeQLEAtMmGwze8qNJp3RgV+jStrJqg==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + video.js: ^8.19.0 + + '@videojs/vhs-utils@4.1.1': + resolution: {integrity: sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==} + engines: {node: '>=8', npm: '>=5'} + + '@videojs/xhr@2.7.0': + resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==} + + '@vitejs/plugin-legacy@8.0.2': + resolution: {integrity: sha512-+n6znc/hTsuD2v/qWX3nfR6UFWFKwpL+XS+SPyiPuEwAvR24iRvLkJQDh18u0XrHPEwuwxPmw0VopvlmLSg66Q==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + terser: ^5.16.0 + vite: ^8.0.0 + + '@vitejs/plugin-vue@6.0.7': + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + + '@vitest/expect@4.1.6': + resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==} + + '@vitest/mocker@4.1.6': + resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.6': + resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==} + + '@vitest/runner@4.1.6': + resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==} + + '@vitest/snapshot@4.1.6': + resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==} + + '@vitest/spy@4.1.6': + resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==} + + '@vitest/utils@4.1.6': + resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==} + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/compiler-core@3.5.34': + resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==} + + '@vue/compiler-dom@3.5.34': + resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==} + + '@vue/compiler-sfc@3.5.34': + resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==} + + '@vue/compiler-ssr@3.5.34': + resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-api@8.1.2': + resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-kit@8.1.2': + resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/devtools-shared@8.1.2': + resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==} + + '@vue/eslint-config-prettier@10.2.0': + resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==} + peerDependencies: + eslint: '>= 8.21.0' + prettier: '>= 3.0.0' + + '@vue/eslint-config-typescript@14.7.0': + resolution: {integrity: sha512-iegbMINVc+seZ/QxtzWiOBozctrHiF2WvGedruu2EbLujg9VuU0FQiNcN2z1ycuaoKKpF4m2qzB5HDEMKbxtIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 || ^10.0.0 + eslint-plugin-vue: ^9.28.0 || ^10.0.0 + typescript: '>=4.8.4' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@3.2.9': + resolution: {integrity: sha512-ie0ojt/0fU/GfIogh+zgHbaYRPlt9S+cLOxcWwF7nTSFh897BVgnFKL2byT4kpp1mlqYWZ2psGwSniyE2xsxYw==} + + '@vue/reactivity@3.5.34': + resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==} + + '@vue/runtime-core@3.5.34': + resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==} + + '@vue/runtime-dom@3.5.34': + resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==} + + '@vue/server-renderer@3.5.34': + resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==} + peerDependencies: + vue: 3.5.34 + + '@vue/shared@3.5.34': + resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==} + + '@vue/tsconfig@0.9.1': + resolution: {integrity: sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==} + peerDependencies: + typescript: '>= 5.8' + vue: ^3.4.0 + peerDependenciesMeta: + typescript: + optional: true + vue: + optional: true + + '@vueuse/core@14.3.0': + resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/integrations@14.3.0': + resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 || ^8 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@14.3.0': + resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==} + + '@vueuse/shared@14.3.0': + resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==} + peerDependencies: + vue: ^3.5.0 + + '@xmldom/xmldom@0.7.13': + resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} + engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version + + '@xmldom/xmldom@0.8.11': + resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} + engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version + + ace-builds@1.44.0: + resolution: {integrity: sha512-PFNMSYqFdEUkul2Ntud0HvA09AgY+F1ag0UYdpMH60wNI/qOA8cB8tlTgoALMEwIdUPJK2CjrIQ7OnbiSS/ugQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + aes-decrypter@4.0.2: + resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==} + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + alien-signals@3.2.1: + resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + ast-walker-scope@0.8.3: + resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} + engines: {node: '>=20.19.0'} + + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.19: + resolution: {integrity: sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==} + engines: {node: '>=6.0.0'} + hasBin: true + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist-to-esbuild@2.1.1: + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + caniuse-lite@1.0.30001788: + resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + combine-errors@3.0.3: + resolution: {integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + + core-js@3.48.0: + resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} + + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + csv-parse@6.2.1: + resolution: {integrity: sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==} + + custom-error-instance@2.1.1: + resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==} + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + dompurify@3.4.12: + resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} + + electron-to-chromium@1.5.340: + resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + epubjs@0.3.93: + resolution: {integrity: sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.5: + resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@10.9.1: + resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + vue-eslint-parser: ^10.3.0 + peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.4.0: + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filesize@11.0.17: + resolution: {integrity: sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ==} + engines: {node: '>= 10.8.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + focus-trap@8.0.0: + resolution: {integrity: sha512-Aa84FOGHs99vVwufDMdq2qgOwXPC2e9U66GcqBhn1/jEHPDhJaP8PYhkIbqG9lhfL5Kddk/567lj46LLHYCRUw==} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + engines: {node: '>= 0.4'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-eslint-parser@2.4.2: + resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + katex@0.16.28: + resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + lodash._baseiteratee@4.7.0: + resolution: {integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==} + + lodash._basetostring@4.12.0: + resolution: {integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==} + + lodash._baseuniq@4.6.0: + resolution: {integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==} + + lodash._createset@4.0.3: + resolution: {integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==} + + lodash._root@3.0.1: + resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==} + + lodash._stringtopath@4.8.0: + resolution: {integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.uniqby@4.5.0: + resolution: {integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==} + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + m3u8-parser@7.2.0: + resolution: {integrity: sha512-CRatFqpjVtMiMaKXxNvuI3I++vUumIXVVT/JpCpdU/FynV/ceVw1qpPyyBNindL+JlPMSesx+WX1QJaZEJSaMQ==} + + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + marked-katex-extension@5.1.8: + resolution: {integrity: sha512-TsV9OCHHDjVBf4IH0RSjLs4Eqsjj8HGfmVCKlimrS391EtBBxzXj2gBYdF9tY7f7oXu9tb1kHV86ExJsG3iMhw==} + peerDependencies: + katex: '>=0.16 <0.17' + marked: '>=4 <19' + + marked@18.0.3: + resolution: {integrity: sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA==} + engines: {node: '>= 20'} + hasBin: true + + marks-pane@1.0.9: + resolution: {integrity: sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==} + + material-icons@1.13.14: + resolution: {integrity: sha512-kZOfc7xCC0rAT8Q3DQixYAeT+tBqZnxkseQtp2bxBxz7q5pMAC+wmit7vJn1g/l7wRU+HEPq23gER4iPjGs5Cg==} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + min-document@2.19.2: + resolution: {integrity: sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + mpd-parser@1.3.1: + resolution: {integrity: sha512-1FuyEWI5k2HcmhS1HkKnUAQV7yFPfXPht2DnRRGtoiiAAW+ESTbtEXIDpRkwdU+XyrQuwrIym7UkoPKsZ0SyFw==} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mux.js@7.1.0: + resolution: {integrity: sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA==} + engines: {node: '>=8', npm: '>=5'} + hasBin: true + + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + + normalize.css@8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-webpack@0.0.3: + resolution: {integrity: sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pinia@3.0.4: + resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + peerDependencies: + typescript: '>=4.5.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkcs7@1.0.4: + resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==} + hasBin: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.18: + resolution: {integrity: sha512-xdB1oSLHbz1vRWgCDalrCqEFTWzFlhqFC5tIHLMOSUIjhm3XXQ1qrFy8S/ESr1JYRRXqM3c1QFiMZUJdUTqyMQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} + engines: {node: '>=6.0.0'} + + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@7.1.0: + resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} + engines: {node: '>=20'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode.vue@3.9.1: + resolution: {integrity: sha512-CpHVRz5iveqwRFh+nzzSYV9hPWU6q+YSOKyq5ZievjQIBv4bIIDzajGgtNz/yYSlczjAkYM3GNAQJHwwCukMEQ==} + peerDependencies: + vue: ^3.0.0 + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + hasBin: true + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rolldown@1.0.1: + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + systemjs@6.15.1: + resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} + + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} + + tar-mini@0.2.0: + resolution: {integrity: sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==} + + terser@5.47.1: + resolution: {integrity: sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw==} + engines: {node: '>=10'} + hasBin: true + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + engines: {node: '>=18'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tus-js-client@4.3.1: + resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==} + engines: {node: '>=18'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typescript-eslint@8.56.0: + resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + utif@3.1.0: + resolution: {integrity: sha512-WEo4D/xOvFW53K5f5QTaTbbiORcm2/pCL9P6qmJnup+17eYfKaEhDeX9PeQkuyEoIxlbGklDuGl8xwuXYMrrXQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + video.js@8.23.7: + resolution: {integrity: sha512-cG4HOygYt+Z8j6Sf5DuK6OgEOoM+g9oGP6vpqoZRaD13aHE4PMITbyjJUXZcIQbgB0wJEadBRaVm5lJIzo2jAA==} + + videojs-contrib-quality-levels@4.1.0: + resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==} + engines: {node: '>=16', npm: '>=8'} + peerDependencies: + video.js: ^8 + + videojs-font@4.2.0: + resolution: {integrity: sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ==} + + videojs-hotkeys@0.2.30: + resolution: {integrity: sha512-G8kEQZPapoWDoEajh2Nroy4bCN1qVEul5AuzZqBS7ZCG45K7hqTYKgf1+fmYvG8m8u84sZmVMUvSWZBjaFW66Q==} + + videojs-mobile-ui@1.2.5: + resolution: {integrity: sha512-PbN+sKklrGCU9HcR8NjJ+29cERuuZ1zgnhA2kt7EG+80fh6d+uTwMlG6xffjR8YxD6x75PpG7QALUAJJX6bvsA==} + engines: {node: '>=14', npm: '>=6'} + peerDependencies: + video.js: ^8 + + videojs-vtt.js@0.15.5: + resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==} + + vite-plugin-compression2@2.5.3: + resolution: {integrity: sha512-ItPgqQWkcnBbVw7is9OKwiZ8v6+ju9rYROl5Lp6QfQDEx/d55AwJQb/KLpsQqsU9HoigYBsZ8tK6I02UwJNvEw==} + + vite@8.0.13: + resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.6: + resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.6 + '@vitest/browser-preview': 4.1.6 + '@vitest/browser-webdriverio': 4.1.6 + '@vitest/coverage-istanbul': 4.1.6 + '@vitest/coverage-v8': 4.1.6 + '@vitest/ui': 4.1.6 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-eslint-parser@10.4.0: + resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + + vue-i18n@11.4.2: + resolution: {integrity: sha512-sADDeKXqAGsPX6tK3t3y2ZiMpbVWN12tG+MhTiJ06rVoh58eGtM4wFyw3uWGbVkXByVp9Ne/AP+nSSzI+J9OAQ==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-lazyload@3.0.0: + resolution: {integrity: sha512-h2keL/Rj550dLgesgOtXJS9qOiSMmuJNeVlfNAYV1/IYwOQYaWk5mFJlwRxmZDK9YC5gECcFLYYj7z1lKSf9ug==} + + vue-reader@1.3.4: + resolution: {integrity: sha512-QYTX9hlrV71gL/1vMejcBLLS9Ool29XMZcLQwvL0Ep1F//o0ymzYbKX2Lre+4BUBkVq49/GmmGCmAJACsJL9tw==} + + vue-router@5.0.7: + resolution: {integrity: sha512-dqfk8kvRbCutmCOCj/XLDqDEYxc1wBdAOGLuVy5M93ifYMsBd5fIjfaPN4tQAbxr5IprdBDIox1gr4wYyOx/SA==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.34 + pinia: ^3.0.4 + vue: ^3.5.34 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + + vue-toastification@2.0.0-rc.5: + resolution: {integrity: sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==} + peerDependencies: + vue: ^3.0.2 + + vue-tsc@3.2.9: + resolution: {integrity: sha512-qm8/nbo+9eZc1SCndm9wT+gq23pM+wRIdHY0wjm83B3lIginHTwcdrLUyTrKjDWXbMVNjKegNrnymhpdqnCL3A==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.34: + resolution: {integrity: sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml-eslint-parser@1.3.2: + resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.3': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/generator@8.0.0-rc.5': + dependencies: + '@babel/parser': 8.0.0-rc.5 + '@babel/types': 8.0.0-rc.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.29.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-string-parser@8.0.0-rc.5': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-identifier@8.0.0-rc.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/parser@8.0.0-rc.5': + dependencies: + '@babel/types': 8.0.0-rc.5 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/preset-env@7.29.5(@babel/core@7.29.0)': + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.3(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 + + '@babel/runtime@7.28.6': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@babel/types@8.0.0-rc.5': + dependencies: + '@babel/helper-string-parser': 8.0.0-rc.5 + '@babel/helper-validator-identifier': 8.0.0-rc.5 + + '@chenfengyuan/vue-number-input@2.0.1(vue@3.5.34(typescript@5.9.3))': + dependencies: + vue: 3.5.34(typescript@5.9.3) + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0)': + dependencies: + eslint: 10.4.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.1': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@intlify/bundle-utils@11.2.3(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)))': + dependencies: + '@intlify/message-compiler': 11.4.2 + '@intlify/shared': 11.4.2 + acorn: 8.16.0 + esbuild: 0.25.12 + escodegen: 2.1.0 + estree-walker: 2.0.2 + jsonc-eslint-parser: 2.4.2 + source-map-js: 1.2.1 + yaml-eslint-parser: 1.3.2 + optionalDependencies: + vue-i18n: 11.4.2(vue@3.5.34(typescript@5.9.3)) + + '@intlify/core-base@11.4.2': + dependencies: + '@intlify/devtools-types': 11.4.2 + '@intlify/message-compiler': 11.4.2 + '@intlify/shared': 11.4.2 + + '@intlify/devtools-types@11.4.2': + dependencies: + '@intlify/core-base': 11.4.2 + '@intlify/shared': 11.4.2 + + '@intlify/message-compiler@11.4.2': + dependencies: + '@intlify/shared': 11.4.2 + source-map-js: 1.2.1 + + '@intlify/shared@11.4.2': {} + + '@intlify/unplugin-vue-i18n@11.2.3(@vue/compiler-dom@3.5.34)(eslint@10.4.0)(rollup@4.57.1)(typescript@5.9.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@intlify/bundle-utils': 11.2.3(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3))) + '@intlify/shared': 11.4.2 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.4.2)(@vue/compiler-dom@3.5.34)(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + debug: 4.4.3 + fast-glob: 3.3.3 + pathe: 2.0.3 + picocolors: 1.1.1 + unplugin: 2.3.11 + vue: 3.5.34(typescript@5.9.3) + optionalDependencies: + vite: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + vue-i18n: 11.4.2(vue@3.5.34(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/compiler-dom' + - eslint + - rollup + - supports-color + - typescript + + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.4.2)(@vue/compiler-dom@3.5.34)(vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@babel/parser': 7.29.3 + optionalDependencies: + '@intlify/shared': 11.4.2 + '@vue/compiler-dom': 3.5.34 + vue: 3.5.34(typescript@5.9.3) + vue-i18n: 11.4.2(vue@3.5.34(typescript@5.9.3)) + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oxc-project/types@0.130.0': {} + + '@pkgr/core@0.2.9': {} + + '@rolldown/binding-android-arm64@1.0.1': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.1': + optional: true + + '@rolldown/binding-darwin-x64@1.0.1': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.1': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.1': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.1': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.1': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.1': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.1': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.1': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.1': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.57.1 + + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true + + '@rollup/rollup-android-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-x64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@standard-schema/spec@1.1.0': {} + + '@tsconfig/node24@24.0.4': {} + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': {} + + '@types/estree@1.0.9': {} + + '@types/jsesc@2.5.1': {} + + '@types/json-schema@7.0.15': {} + + '@types/localforage@0.0.34': + dependencies: + localforage: 1.10.0 + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.23 + + '@types/lodash@4.17.23': {} + + '@types/node@24.12.4': + dependencies: + undici-types: 7.16.0 + + '@types/trusted-types@2.0.7': + optional: true + + '@types/web-bluetooth@0.0.21': {} + + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/type-utils': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 + eslint: 10.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 + debug: 4.4.3 + eslint: 10.4.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.59.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.56.0': + dependencies: + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 + + '@typescript-eslint/scope-manager@8.59.3': + dependencies: + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.56.0(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.56.0': {} + + '@typescript-eslint/types@8.59.3': {} + + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 + debug: 4.4.3 + minimatch: 9.0.9 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.59.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.59.3(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.0 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.56.0(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + eslint: 10.4.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + eslint: 10.4.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.56.0': + dependencies: + '@typescript-eslint/types': 8.56.0 + eslint-visitor-keys: 5.0.1 + + '@typescript-eslint/visitor-keys@8.59.3': + dependencies: + '@typescript-eslint/types': 8.59.3 + eslint-visitor-keys: 5.0.1 + + '@videojs/http-streaming@3.17.4(video.js@8.23.7)': + dependencies: + '@babel/runtime': 7.28.6 + '@videojs/vhs-utils': 4.1.1 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + video.js: 8.23.7 + + '@videojs/vhs-utils@4.1.1': + dependencies: + '@babel/runtime': 7.28.6 + global: 4.4.0 + + '@videojs/xhr@2.7.0': + dependencies: + '@babel/runtime': 7.28.6 + global: 4.4.0 + is-function: 1.0.2 + + '@vitejs/plugin-legacy@8.0.2(terser@5.47.1)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.0) + '@babel/preset-env': 7.29.5(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + browserslist: 4.28.2 + browserslist-to-esbuild: 2.1.1(browserslist@4.28.2) + core-js: 3.49.0 + magic-string: 0.30.21 + regenerator-runtime: 0.14.1 + systemjs: 6.15.1 + terser: 5.47.1 + vite: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@6.0.7(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + vue: 3.5.34(typescript@5.9.3) + + '@vitest/expect@4.1.6': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.6(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.6 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + + '@vitest/pretty-format@4.1.6': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.6': + dependencies: + '@vitest/utils': 4.1.6 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.6': + dependencies: + '@vitest/pretty-format': 4.1.6 + '@vitest/utils': 4.1.6 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.6': {} + + '@vitest/utils@4.1.6': + dependencies: + '@vitest/pretty-format': 4.1.6 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue-macros/common@3.1.2(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@vue/compiler-sfc': 3.5.34 + ast-kit: 2.2.0 + local-pkg: 1.1.2 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.1 + optionalDependencies: + vue: 3.5.34(typescript@5.9.3) + + '@vue/compiler-core@3.5.34': + dependencies: + '@babel/parser': 7.29.3 + '@vue/shared': 3.5.34 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.34': + dependencies: + '@vue/compiler-core': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/compiler-sfc@3.5.34': + dependencies: + '@babel/parser': 7.29.3 + '@vue/compiler-core': 3.5.34 + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.18 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.34': + dependencies: + '@vue/compiler-dom': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-api@8.1.2': + dependencies: + '@vue/devtools-kit': 8.1.2 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-kit@8.1.2': + dependencies: + '@vue/devtools-shared': 8.1.2 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/devtools-shared@8.1.2': {} + + '@vue/eslint-config-prettier@10.2.0(eslint@10.4.0)(prettier@3.8.3)': + dependencies: + eslint: 10.4.0 + eslint-config-prettier: 10.1.8(eslint@10.4.0) + eslint-plugin-prettier: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint@10.4.0)(prettier@3.8.3) + prettier: 3.8.3 + transitivePeerDependencies: + - '@types/eslint' + + '@vue/eslint-config-typescript@14.7.0(eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(vue-eslint-parser@10.4.0(eslint@10.4.0)))(eslint@10.4.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/utils': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + eslint: 10.4.0 + eslint-plugin-vue: 10.9.1(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(vue-eslint-parser@10.4.0(eslint@10.4.0)) + fast-glob: 3.3.3 + typescript-eslint: 8.56.0(eslint@10.4.0)(typescript@5.9.3) + vue-eslint-parser: 10.4.0(eslint@10.4.0) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@vue/language-core@3.2.9': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.34 + '@vue/shared': 3.5.34 + alien-signals: 3.2.1 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.4 + + '@vue/reactivity@3.5.34': + dependencies: + '@vue/shared': 3.5.34 + + '@vue/runtime-core@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/runtime-dom@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/runtime-core': 3.5.34 + '@vue/shared': 3.5.34 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + vue: 3.5.34(typescript@5.9.3) + + '@vue/shared@3.5.34': {} + + '@vue/tsconfig@0.9.1(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))': + optionalDependencies: + typescript: 5.9.3 + vue: 3.5.34(typescript@5.9.3) + + '@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.3.0 + '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3)) + vue: 3.5.34(typescript@5.9.3) + + '@vueuse/integrations@14.3.0(focus-trap@8.0.0)(jwt-decode@4.0.0)(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3)) + '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3)) + vue: 3.5.34(typescript@5.9.3) + optionalDependencies: + focus-trap: 8.0.0 + jwt-decode: 4.0.0 + + '@vueuse/metadata@14.3.0': {} + + '@vueuse/shared@14.3.0(vue@3.5.34(typescript@5.9.3))': + dependencies: + vue: 3.5.34(typescript@5.9.3) + + '@xmldom/xmldom@0.7.13': {} + + '@xmldom/xmldom@0.8.11': {} + + ace-builds@1.44.0: {} + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + aes-decrypter@4.0.2: + dependencies: + '@babel/runtime': 7.28.6 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + pkcs7: 1.0.4 + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + alien-signals@3.2.1: {} + + assertion-error@2.0.1: {} + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.3 + pathe: 2.0.3 + + ast-walker-scope@0.8.3: + dependencies: + '@babel/parser': 7.29.3 + ast-kit: 2.2.0 + + autoprefixer@10.5.0(postcss@8.5.18): + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001788 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.18 + postcss-value-parser: 4.2.0 + + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.19: {} + + birpc@2.9.0: {} + + boolbase@1.0.0: {} + + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist-to-esbuild@2.1.1(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + meow: 13.2.0 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.19 + caniuse-lite: 1.0.30001788 + electron-to-chromium: 1.5.340 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + buffer-from@1.1.2: {} + + caniuse-lite@1.0.30001788: {} + + chai@6.2.2: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + combine-errors@3.0.3: + dependencies: + custom-error-instance: 2.1.1 + lodash.uniqby: 4.5.0 + + commander@2.20.3: {} + + commander@8.3.0: {} + + confbox@0.1.8: {} + + confbox@0.2.4: {} + + convert-source-map@2.0.0: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + + core-js@3.48.0: {} + + core-js@3.49.0: {} + + core-util-is@1.0.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + csv-parse@6.2.1: {} + + custom-error-instance@2.1.1: {} + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + dayjs@1.11.20: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + detect-libc@2.1.2: {} + + dom-walk@0.1.2: {} + + dompurify@3.4.12: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + electron-to-chromium@1.5.340: {} + + entities@7.0.1: {} + + epubjs@0.3.93: + dependencies: + '@types/localforage': 0.0.34 + '@xmldom/xmldom': 0.7.13 + core-js: 3.48.0 + event-emitter: 0.3.5 + jszip: 3.10.1 + localforage: 1.10.0 + lodash: 4.17.23 + marks-pane: 1.0.9 + path-webpack: 0.0.3 + + es-errors@1.3.0: {} + + es-module-lexer@2.1.0: {} + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + optional: true + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-prettier@10.1.8(eslint@10.4.0): + dependencies: + eslint: 10.4.0 + + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint@10.4.0)(prettier@3.8.3): + dependencies: + eslint: 10.4.0 + prettier: 3.8.3 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.12 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@10.4.0) + + eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(vue-eslint-parser@10.4.0(eslint@10.4.0)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + eslint: 10.4.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.1 + semver: 7.8.0 + vue-eslint-parser: 10.4.0(eslint@10.4.0) + xml-name-validator: 4.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.4.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + + espree@9.6.1: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + esutils@2.0.3: {} + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + expect-type@1.3.0: {} + + exsolve@1.0.8: {} + + ext@1.7.0: + dependencies: + type: 2.7.3 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filesize@11.0.17: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + focus-trap@8.0.0: + dependencies: + tabbable: 6.5.0 + optional: true + + fraction.js@5.3.4: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + global@4.4.0: + dependencies: + min-document: 2.19.2 + process: 0.11.10 + + graceful-fs@4.2.11: {} + + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + + hookable@5.5.3: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + immediate@3.0.6: {} + + imurmurhash@0.1.4: {} + + inherits@2.0.4: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.3 + + is-extglob@2.1.1: {} + + is-function@1.0.2: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-stream@2.0.1: {} + + is-what@5.5.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + js-base64@3.7.8: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-eslint-parser@2.4.2: + dependencies: + acorn: 8.16.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.8.0 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + jwt-decode@4.0.0: {} + + katex@0.16.28: + dependencies: + commander: 8.3.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 + + localforage@1.10.0: + dependencies: + lie: 3.1.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.18.1: {} + + lodash._baseiteratee@4.7.0: + dependencies: + lodash._stringtopath: 4.8.0 + + lodash._basetostring@4.12.0: {} + + lodash._baseuniq@4.6.0: + dependencies: + lodash._createset: 4.0.3 + lodash._root: 3.0.1 + + lodash._createset@4.0.3: {} + + lodash._root@3.0.1: {} + + lodash._stringtopath@4.8.0: + dependencies: + lodash._basetostring: 4.12.0 + + lodash.debounce@4.0.8: {} + + lodash.throttle@4.1.1: {} + + lodash.uniqby@4.5.0: + dependencies: + lodash._baseiteratee: 4.7.0 + lodash._baseuniq: 4.6.0 + + lodash@4.17.23: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + m3u8-parser@7.2.0: + dependencies: + '@babel/runtime': 7.28.6 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + marked-katex-extension@5.1.8(katex@0.16.28)(marked@18.0.3): + dependencies: + katex: 0.16.28 + marked: 18.0.3 + + marked@18.0.3: {} + + marks-pane@1.0.9: {} + + material-icons@1.13.14: {} + + meow@13.2.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + min-document@2.19.2: + dependencies: + dom-walk: 0.1.2 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.0 + + mitt@3.0.1: {} + + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + mpd-parser@1.3.1: + dependencies: + '@babel/runtime': 7.28.6 + '@videojs/vhs-utils': 4.1.1 + '@xmldom/xmldom': 0.8.11 + global: 4.4.0 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + mux.js@7.1.0: + dependencies: + '@babel/runtime': 7.28.6 + global: 4.4.0 + + nanoid@3.3.16: {} + + natural-compare@1.4.0: {} + + next-tick@1.1.0: {} + + node-releases@2.0.37: {} + + normalize.css@8.0.1: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + obug@2.1.1: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@1.0.11: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-webpack@0.0.3: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 7.7.9 + vue: 3.5.34(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + pkcs7@1.0.4: + dependencies: + '@babel/runtime': 7.28.6 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.18: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.1: + dependencies: + fast-diff: 1.3.0 + + prettier@3.8.3: {} + + pretty-bytes@7.1.0: {} + + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + punycode@2.3.1: {} + + qrcode.vue@3.9.1(vue@3.5.34(typescript@5.9.3)): + dependencies: + vue: 3.5.34(typescript@5.9.3) + + quansync@0.2.11: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readdirp@5.0.0: {} + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + regjsgen@0.8.0: {} + + regjsparser@0.13.1: + dependencies: + jsesc: 3.1.0 + + requires-port@1.0.0: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + retry@0.12.0: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rolldown@1.0.1: + dependencies: + '@oxc-project/types': 0.130.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.1 + '@rolldown/binding-darwin-arm64': 1.0.1 + '@rolldown/binding-darwin-x64': 1.0.1 + '@rolldown/binding-freebsd-x64': 1.0.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 + '@rolldown/binding-linux-arm64-gnu': 1.0.1 + '@rolldown/binding-linux-arm64-musl': 1.0.1 + '@rolldown/binding-linux-ppc64-gnu': 1.0.1 + '@rolldown/binding-linux-s390x-gnu': 1.0.1 + '@rolldown/binding-linux-x64-gnu': 1.0.1 + '@rolldown/binding-linux-x64-musl': 1.0.1 + '@rolldown/binding-openharmony-arm64': 1.0.1 + '@rolldown/binding-wasm32-wasi': 1.0.1 + '@rolldown/binding-win32-arm64-msvc': 1.0.1 + '@rolldown/binding-win32-x64-msvc': 1.0.1 + + rollup@4.57.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 + fsevents: 2.3.3 + optional: true + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + scule@1.3.0: {} + + semver@6.3.1: {} + + semver@7.7.4: {} + + semver@7.8.0: {} + + setimmediate@1.0.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + speakingurl@14.0.1: {} + + stackback@0.0.2: {} + + std-env@4.1.0: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.11.12: + dependencies: + '@pkgr/core': 0.2.9 + + systemjs@6.15.1: {} + + tabbable@6.5.0: + optional: true + + tar-mini@0.2.0: {} + + terser@5.47.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.16.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + tinybench@2.9.0: {} + + tinyexec@1.1.2: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyrainbow@3.1.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: + optional: true + + tus-js-client@4.3.1: + dependencies: + buffer-from: 1.1.2 + combine-errors: 3.0.3 + is-stream: 2.0.1 + js-base64: 3.7.8 + lodash.throttle: 4.1.1 + proper-lockfile: 4.1.2 + url-parse: 1.5.10 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type@2.7.3: {} + + typescript-eslint@8.56.0(eslint@10.4.0)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.4.0)(typescript@5.9.3) + eslint: 10.4.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + ufo@1.6.4: {} + + undici-types@7.16.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.4 + + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.16.0 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + utif@3.1.0: + dependencies: + pako: 1.0.11 + + util-deprecate@1.0.2: {} + + video.js@8.23.7: + dependencies: + '@babel/runtime': 7.28.6 + '@videojs/http-streaming': 3.17.4(video.js@8.23.7) + '@videojs/vhs-utils': 4.1.1 + '@videojs/xhr': 2.7.0 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + videojs-contrib-quality-levels: 4.1.0(video.js@8.23.7) + videojs-font: 4.2.0 + videojs-vtt.js: 0.15.5 + + videojs-contrib-quality-levels@4.1.0(video.js@8.23.7): + dependencies: + global: 4.4.0 + video.js: 8.23.7 + + videojs-font@4.2.0: {} + + videojs-hotkeys@0.2.30: {} + + videojs-mobile-ui@1.2.5(video.js@8.23.7): + dependencies: + global: 4.4.0 + video.js: 8.23.7 + + videojs-vtt.js@0.15.5: + dependencies: + global: 4.4.0 + + vite-plugin-compression2@2.5.3(rollup@4.57.1): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + tar-mini: 0.2.0 + transitivePeerDependencies: + - rollup + + vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.18 + rolldown: 1.0.1 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 24.12.4 + esbuild: 0.27.3 + fsevents: 2.3.3 + terser: 5.47.1 + yaml: 2.9.0 + + vitest@4.1.6(@types/node@24.12.4)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.6 + '@vitest/mocker': 4.1.6(vite@8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.6 + '@vitest/runner': 4.1.6 + '@vitest/snapshot': 4.1.6 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.13(@types/node@24.12.4)(esbuild@0.27.3)(terser@5.47.1)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.12.4 + transitivePeerDependencies: + - msw + + vscode-uri@3.1.0: {} + + vue-eslint-parser@10.4.0(eslint@10.4.0): + dependencies: + debug: 4.4.3 + eslint: 10.4.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)): + dependencies: + '@intlify/core-base': 11.4.2 + '@intlify/devtools-types': 11.4.2 + '@intlify/shared': 11.4.2 + '@vue/devtools-api': 6.6.4 + vue: 3.5.34(typescript@5.9.3) + + vue-lazyload@3.0.0: {} + + vue-reader@1.3.4: + dependencies: + epubjs: 0.3.93 + + vue-router@5.0.7(@vue/compiler-sfc@3.5.34)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)): + dependencies: + '@babel/generator': 8.0.0-rc.5 + '@vue-macros/common': 3.1.2(vue@3.5.34(typescript@5.9.3)) + '@vue/devtools-api': 8.1.2 + ast-walker-scope: 0.8.3 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.2 + muggle-string: 0.4.1 + pathe: 2.0.3 + picomatch: 4.0.4 + scule: 1.3.0 + tinyglobby: 0.2.16 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + vue: 3.5.34(typescript@5.9.3) + yaml: 2.9.0 + optionalDependencies: + '@vue/compiler-sfc': 3.5.34 + pinia: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)) + + vue-toastification@2.0.0-rc.5(vue@3.5.34(typescript@5.9.3)): + dependencies: + vue: 3.5.34(typescript@5.9.3) + + vue-tsc@3.2.9(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.28 + '@vue/language-core': 3.2.9 + typescript: 5.9.3 + + vue@3.5.34(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-sfc': 3.5.34 + '@vue/runtime-dom': 3.5.34 + '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@5.9.3)) + '@vue/shared': 3.5.34 + optionalDependencies: + typescript: 5.9.3 + + webpack-virtual-modules@0.6.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + xml-name-validator@4.0.0: {} + + yallist@3.1.1: {} + + yaml-eslint-parser@1.3.2: + dependencies: + eslint-visitor-keys: 3.4.3 + yaml: 2.9.0 + + yaml@2.9.0: {} + + yocto-queue@0.1.0: {} diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs new file mode 100644 index 00000000..a47ef4f9 --- /dev/null +++ b/frontend/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {}, + }, +}; diff --git a/frontend/public/.gitkeep b/frontend/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/frontend/public/img/icons/apple-touch-icon.png b/frontend/public/img/icons/apple-touch-icon.png index 7ea77eb8..2d47378c 100644 Binary files a/frontend/public/img/icons/apple-touch-icon.png and b/frontend/public/img/icons/apple-touch-icon.png differ diff --git a/frontend/public/img/icons/browserconfig.xml b/frontend/public/img/icons/browserconfig.xml deleted file mode 100644 index 7f82fb31..00000000 --- a/frontend/public/img/icons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #455a64 - - - diff --git a/frontend/public/img/icons/favicon-16x16.png b/frontend/public/img/icons/favicon-16x16.png deleted file mode 100644 index b02a47ff..00000000 Binary files a/frontend/public/img/icons/favicon-16x16.png and /dev/null differ diff --git a/frontend/public/img/icons/favicon-32x32.png b/frontend/public/img/icons/favicon-32x32.png deleted file mode 100644 index d5672cc1..00000000 Binary files a/frontend/public/img/icons/favicon-32x32.png and /dev/null differ diff --git a/frontend/public/img/icons/favicon.ico b/frontend/public/img/icons/favicon.ico index 1d6f60cd..2ab0ce10 100644 Binary files a/frontend/public/img/icons/favicon.ico and b/frontend/public/img/icons/favicon.ico differ diff --git a/frontend/public/img/icons/favicon.svg b/frontend/public/img/icons/favicon.svg new file mode 100644 index 00000000..8f91e01f --- /dev/null +++ b/frontend/public/img/icons/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/frontend/public/img/icons/mstile-144x144.png b/frontend/public/img/icons/mstile-144x144.png deleted file mode 100644 index 0c2745c0..00000000 Binary files a/frontend/public/img/icons/mstile-144x144.png and /dev/null differ diff --git a/frontend/public/img/icons/mstile-150x150.png b/frontend/public/img/icons/mstile-150x150.png deleted file mode 100644 index 7130a1e3..00000000 Binary files a/frontend/public/img/icons/mstile-150x150.png and /dev/null differ diff --git a/frontend/public/img/icons/mstile-310x150.png b/frontend/public/img/icons/mstile-310x150.png deleted file mode 100644 index 6e0dc0a1..00000000 Binary files a/frontend/public/img/icons/mstile-310x150.png and /dev/null differ diff --git a/frontend/public/img/icons/mstile-310x310.png b/frontend/public/img/icons/mstile-310x310.png deleted file mode 100644 index 56d4963a..00000000 Binary files a/frontend/public/img/icons/mstile-310x310.png and /dev/null differ diff --git a/frontend/public/img/icons/mstile-70x70.png b/frontend/public/img/icons/mstile-70x70.png deleted file mode 100644 index 556d2cd1..00000000 Binary files a/frontend/public/img/icons/mstile-70x70.png and /dev/null differ diff --git a/frontend/public/img/icons/safari-pinned-tab.svg b/frontend/public/img/icons/safari-pinned-tab.svg deleted file mode 100644 index 0119c21a..00000000 --- a/frontend/public/img/icons/safari-pinned-tab.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - - - - - - diff --git a/frontend/public/img/logo.svg b/frontend/public/img/logo.svg index 5e78eccf..dac88ae2 100644 --- a/frontend/public/img/logo.svg +++ b/frontend/public/img/logo.svg @@ -1,147 +1 @@ - -image/svg+xml - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/public/index.html b/frontend/public/index.html index 98ab40ca..cc968bab 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,143 +1,175 @@ - + - - - - + + + + - [{[ if .ReCaptcha -]}] + [{[ if .ReCaptcha -]}] - [{[ end ]}] + [{[ end ]}] - [{[ if .Name -]}][{[ .Name ]}][{[ else ]}]File Browser[{[ end ]}] + + [{[ if .Name -]}][{[ .Name ]}][{[ else ]}]File Browser[{[ end ]}] + - - - - - + - - - - - + + + + - - - + + + - - + + + + +
- - - -
- -
-
-
-
-
+
+
+
+
+
+
-
- [{[ if .Theme -]}] - - [{[ end ]}] - [{[ if .CSS -]}] + + + [{[ if .CSS -]}] - [{[ end ]}] - + [{[ end ]}] + diff --git a/frontend/public/themes/dark.css b/frontend/public/themes/dark.css deleted file mode 100644 index 978b4f0f..00000000 --- a/frontend/public/themes/dark.css +++ /dev/null @@ -1,148 +0,0 @@ -:root { - --background: #121212; - --surfacePrimary: #171819; - --surfaceSecondary: #212528; - --divider: rgba(255, 255, 255, 0.12); - --icon: #ffffff; - --textPrimary: rgba(255, 255, 255, 0.87); - --textSecondary: rgba(255, 255, 255, 0.6); -} - -body { - background: var(--background); - color: var(--textPrimary); -} - -#loading { - background: var(--background); -} -#loading .spinner div { - background: var(--icon); -} - -#login { - background: var(--background); -} - -header { - background: var(--surfacePrimary); -} - -#search #input { - background: var(--surfaceSecondary); -} -#search.active #input, -#search.active .boxes { - background: var(--surfacePrimary); -} -#search.active input { - color: var(--textPrimary); -} -#search.active #result { - background: var(--background); - color: var(--textPrimary); -} -#search.active .boxes h3 { - color: var(--textPrimary); -} - -.action { - color: var(--textPrimary) !important; -} -.action i { - color: var(--icon) !important; -} -.action .counter { - border-color: var(--surfacePrimary); -} - -nav > div { - border-color: var(--divider); -} - -#breadcrumbs { - border-color: var(--divider); - color: var(--textPrimary) !important; -} -#breadcrumbs span { - color: var(--textPrimary) !important; -} - -#listing .item { - background: var(--surfacePrimary); - color: var(--textPrimary); - border-color: var(--divider) !important; -} -#listing .item i { - color: var(--icon); -} -#listing .item .modified { - color: var(--textSecondary); -} -#listing h2, -#listing.list .header span { - color: var(--textPrimary) !important; -} -#listing.list .header span { - color: var(--textPrimary); -} -#listing.list .header i { - color: var(--icon); -} -#listing.list .item.header { - background: var(--background); -} - -.card { - background: var(--surfacePrimary); - color: var(--textPrimary); -} -.button--flat:hover { - background: var(--surfaceSecondary); -} - -.card h3, -.dashboard #nav, -.dashboard p label { - color: var(--textPrimary); -} -.input { - background: var(--surfaceSecondary); - color: var(--textPrimary); -} - -.dashboard #nav li, -.collapsible { - border-color: var(--divider); -} -.collapsible > label * { - color: var(--textPrimary); -} - -.shell { - background: var(--surfacePrimary); - color: var(--textPrimary); -} - -#editor-container { - background: var(--background); -} - -#editor-container .bar { - background: var(--surfacePrimary); -} - -@media (max-width: 736px) { - #file-selection { - background: var(--surfaceSecondary) !important; - } - #file-selection span { - color: var(--textPrimary) !important; - } - nav { - background: var(--surfaceSecondary) !important; - } - #dropdown { - background: var(--surfaceSecondary) !important; - } -} diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 1c3d3dff..543b50b8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,23 +1,49 @@ - - diff --git a/frontend/src/api/commands.js b/frontend/src/api/commands.js deleted file mode 100644 index 50bd74af..00000000 --- a/frontend/src/api/commands.js +++ /dev/null @@ -1,16 +0,0 @@ -import { removePrefix } from './utils' -import { baseURL } from '@/utils/constants' -import store from '@/store' - -const ssl = (window.location.protocol === 'https:') -const protocol = (ssl ? 'wss:' : 'ws:') - -export default function command(url, command, onmessage, onclose) { - url = removePrefix(url) - url = `${protocol}//${window.location.host}${baseURL}/api/command${url}?auth=${store.state.jwt}` - - let conn = new window.WebSocket(url) - conn.onopen = () => conn.send(command) - conn.onmessage = onmessage - conn.onclose = onclose -} diff --git a/frontend/src/api/commands.ts b/frontend/src/api/commands.ts new file mode 100644 index 00000000..81dc93cd --- /dev/null +++ b/frontend/src/api/commands.ts @@ -0,0 +1,20 @@ +import { baseURL } from "@/utils/constants"; +import { removePrefix } from "./utils"; + +const ssl = window.location.protocol === "https:"; +const protocol = ssl ? "wss:" : "ws:"; + +export default function command( + url: string, + command: string, + onmessage: WebSocket["onmessage"], + onclose: WebSocket["onclose"] +) { + url = removePrefix(url); + url = `${protocol}//${window.location.host}${baseURL}/api/command${url}`; + + const conn = new window.WebSocket(url); + conn.onopen = () => conn.send(command); + conn.onmessage = onmessage; + conn.onclose = onclose; +} diff --git a/frontend/src/api/files.js b/frontend/src/api/files.js deleted file mode 100644 index 602090c1..00000000 --- a/frontend/src/api/files.js +++ /dev/null @@ -1,143 +0,0 @@ -import { fetchURL, removePrefix } from './utils' -import { baseURL } from '@/utils/constants' -import store from '@/store' - -export async function fetch (url) { - url = removePrefix(url) - - const res = await fetchURL(`/api/resources${url}`, {}) - - if (res.status === 200) { - let data = await res.json() - data.url = `/files${url}` - - if (data.isDir) { - if (!data.url.endsWith('/')) data.url += '/' - data.items = data.items.map((item, index) => { - item.index = index - item.url = `${data.url}${encodeURIComponent(item.name)}` - - if (item.isDir) { - item.url += '/' - } - - return item - }) - } - - return data - } else { - throw new Error(res.status) - } -} - -async function resourceAction (url, method, content) { - url = removePrefix(url) - - let opts = { method } - - if (content) { - opts.body = content - } - - const res = await fetchURL(`/api/resources${url}`, opts) - - if (res.status !== 200) { - throw new Error(res.responseText) - } else { - return res - } -} - -export async function remove (url) { - return resourceAction(url, 'DELETE') -} - -export async function put (url, content = '') { - return resourceAction(url, 'PUT', content) -} - -export function download (format, ...files) { - let url = `${baseURL}/api/raw` - - if (files.length === 1) { - url += removePrefix(files[0]) + '?' - } else { - let arg = '' - - for (let file of files) { - arg += removePrefix(file) + ',' - } - - arg = arg.substring(0, arg.length - 1) - arg = encodeURIComponent(arg) - url += `/?files=${arg}&` - } - - if (format !== null) { - url += `algo=${format}&` - } - - url += `auth=${store.state.jwt}` - window.open(url) -} - -export async function post (url, content = '', overwrite = false, onupload) { - url = removePrefix(url) - - return new Promise((resolve, reject) => { - let request = new XMLHttpRequest() - request.open('POST', `${baseURL}/api/resources${url}?override=${overwrite}`, true) - request.setRequestHeader('X-Auth', store.state.jwt) - - if (typeof onupload === 'function') { - request.upload.onprogress = onupload - } - - // Send a message to user before closing the tab during file upload - window.onbeforeunload = () => "Files are being uploaded." - - request.onload = () => { - if (request.status === 200) { - resolve(request.responseText) - } else if (request.status === 409) { - reject(request.status) - } else { - reject(request.responseText) - } - } - - request.onerror = (error) => { - reject(error) - } - - request.send(content) - // Upload is done no more message before closing the tab - }).finally(() => { window.onbeforeunload = null }) -} - -function moveCopy (items, copy = false) { - let promises = [] - - for (let item of items) { - const from = removePrefix(item.from) - const to = encodeURIComponent(removePrefix(item.to)) - const url = `${from}?action=${copy ? 'copy' : 'rename'}&destination=${to}` - promises.push(resourceAction(url, 'PATCH')) - } - - return Promise.all(promises) -} - -export function move (items) { - return moveCopy(items) -} - -export function copy (items) { - return moveCopy(items, true) -} - -export async function checksum (url, algo) { - const data = await resourceAction(`${url}?checksum=${algo}`, 'GET') - return (await data.json()).checksums[algo] -} diff --git a/frontend/src/api/files.ts b/frontend/src/api/files.ts new file mode 100644 index 00000000..22c8151d --- /dev/null +++ b/frontend/src/api/files.ts @@ -0,0 +1,250 @@ +import { useAuthStore } from "@/stores/auth"; +import { useLayoutStore } from "@/stores/layout"; +import { baseURL } from "@/utils/constants"; +import { upload as postTus, useTus } from "./tus"; +import { createURL, fetchURL, removePrefix, StatusError } from "./utils"; +import { isEncodableResponse, makeRawResource } from "@/utils/encodings"; + +export async function fetch(url: string, signal?: AbortSignal) { + const encoding = isEncodableResponse(url); + url = removePrefix(url); + const res = await fetchURL(`/api/resources${url}`, { + signal, + headers: { + "X-Encoding": encoding ? "true" : "false", + }, + }); + + let data: Resource; + try { + if (res.headers.get("Content-Type") == "application/octet-stream") { + data = await makeRawResource(res, url); + } else { + data = (await res.json()) as Resource; + } + } catch (e) { + // Check if the error is an intentional cancellation + if (e instanceof Error && e.name === "AbortError") { + throw new StatusError("000 No connection", 0, true); + } + throw e; + } + data.url = `/files${url}`; + + if (data.isDir) { + if (!data.url.endsWith("/")) data.url += "/"; + // Perhaps change the any + data.items = data.items.map((item: any, index: any) => { + item.index = index; + item.url = `${data.url}${encodeURIComponent(item.name)}`; + + if (item.isDir) { + item.url += "/"; + } + + return item; + }); + } + + return data; +} + +export async function fetchAll(url: string): Promise { + url = removePrefix(url); + const res = await fetchURL(`/api/resources/recursive${url}`, {}); + return (await res.json()) as RecursiveEntry[]; +} + +async function resourceAction(url: string, method: ApiMethod, content?: any) { + url = removePrefix(url); + + const opts: ApiOpts = { + method, + }; + + if (content) { + opts.body = content; + } + + const res = await fetchURL(`/api/resources${url}`, opts); + + return res; +} + +export async function remove(url: string) { + return resourceAction(url, "DELETE"); +} + +export async function put(url: string, content = "") { + return resourceAction(url, "PUT", content); +} + +export function download(format: any, ...files: string[]) { + let url = `${baseURL}/api/raw`; + + if (files.length === 1) { + url += removePrefix(files[0]) + "?"; + } else { + let arg = ""; + + for (const file of files) { + arg += removePrefix(file) + ","; + } + + arg = arg.substring(0, arg.length - 1); + arg = encodeURIComponent(arg); + url += `/?files=${arg}&`; + } + + if (format) { + url += `algo=${format}&`; + } + + window.open(url); +} + +export async function post( + url: string, + content: ApiContent = "", + overwrite = false, + onupload: any = () => {} +) { + // Use the pre-existing API if: + const useResourcesApi = + // a folder is being created + url.endsWith("/") || + // We're not using http(s) + (content instanceof Blob && + !["http:", "https:"].includes(window.location.protocol)) || + // Tus is disabled / not applicable + !(await useTus(content)); + return useResourcesApi + ? postResources(url, content, overwrite, onupload) + : postTus(url, content, overwrite, onupload); +} + +async function postResources( + url: string, + content: ApiContent = "", + overwrite = false, + onupload: any +) { + url = removePrefix(url); + + let bufferContent: ArrayBuffer; + if ( + content instanceof Blob && + !["http:", "https:"].includes(window.location.protocol) + ) { + bufferContent = await new Response(content).arrayBuffer(); + } + + const authStore = useAuthStore(); + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open( + "POST", + `${baseURL}/api/resources${url}?override=${overwrite}`, + true + ); + request.setRequestHeader("X-Auth", authStore.jwt); + + if (typeof onupload === "function") { + request.upload.onprogress = onupload; + } + + request.onload = () => { + if (request.status === 200) { + resolve(request.responseText); + } else if (request.status === 409) { + reject(new Error(request.status.toString())); + } else { + reject(new Error(request.responseText)); + } + }; + + request.onerror = () => { + reject(new Error("001 Connection aborted")); + }; + + request.send(bufferContent || content); + }); +} + +function moveCopy( + items: any[], + copy = false, + overwrite = false, + rename = false +) { + const layoutStore = useLayoutStore(); + const promises = []; + + for (const item of items) { + const from = item.from; + const to = encodeURIComponent(removePrefix(item.to ?? "")); + const finalOverwrite = + item.overwrite == undefined ? overwrite : item.overwrite; + const finalRename = item.rename == undefined ? rename : item.rename; + const url = `${from}?action=${ + copy ? "copy" : "rename" + }&destination=${to}&override=${finalOverwrite}&rename=${finalRename}`; + promises.push(resourceAction(url, "PATCH")); + } + layoutStore.closeHovers(); + return Promise.all(promises); +} + +export function move(items: any[], overwrite = false, rename = false) { + return moveCopy(items, false, overwrite, rename); +} + +export function copy(items: any[], overwrite = false, rename = false) { + return moveCopy(items, true, overwrite, rename); +} + +export async function checksum(url: string, algo: ChecksumAlg) { + const data = await resourceAction(`${url}?checksum=${algo}`, "GET"); + return (await data.json()).checksums[algo]; +} + +export function getDownloadURL(file: ResourceItem, inline: any) { + const params = { + ...(inline && { inline: "true" }), + }; + + return createURL("api/raw" + file.path, params); +} + +export function getPreviewURL(file: ResourceItem, size: string) { + const params = { + inline: "true", + key: Date.parse(file.modified), + }; + + return createURL("api/preview/" + size + file.path, params); +} + +export function getSubtitlesURL(file: ResourceItem) { + const params = { + inline: "true", + }; + + return file.subtitles?.map((d) => createURL("api/subtitle" + d, params)); +} + +export async function usage(url: string, signal: AbortSignal) { + url = removePrefix(url); + + const res = await fetchURL(`/api/usage${url}`, { signal }); + + try { + return await res.json(); + } catch (e) { + // Check if the error is an intentional cancellation + if (e instanceof Error && e.name == "AbortError") { + throw new StatusError("000 No connection", 0, true); + } + throw e; + } +} diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js deleted file mode 100644 index 11bb49d9..00000000 --- a/frontend/src/api/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as files from './files' -import * as share from './share' -import * as users from './users' -import * as settings from './settings' -import search from './search' -import commands from './commands' - -export { - files, - share, - users, - settings, - commands, - search -} diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts new file mode 100644 index 00000000..abc189dc --- /dev/null +++ b/frontend/src/api/index.ts @@ -0,0 +1,9 @@ +import * as files from "./files"; +import * as share from "./share"; +import * as users from "./users"; +import * as settings from "./settings"; +import * as pub from "./pub"; +import search from "./search"; +import commands from "./commands"; + +export { files, share, users, settings, pub, commands, search }; diff --git a/frontend/src/api/pub.ts b/frontend/src/api/pub.ts new file mode 100644 index 00000000..5070cae3 --- /dev/null +++ b/frontend/src/api/pub.ts @@ -0,0 +1,75 @@ +import { fetchURL, removePrefix, createURL } from "./utils"; +import { baseURL } from "@/utils/constants"; + +export async function fetch(url: string, password: string = "") { + url = removePrefix(url); + + const res = await fetchURL( + `/api/public/share${url}`, + { + headers: { "X-SHARE-PASSWORD": encodeURIComponent(password) }, + }, + false + ); + + const data = (await res.json()) as Resource; + data.url = `/share${url}`; + + if (data.isDir) { + if (!data.url.endsWith("/")) data.url += "/"; + data.items = data.items.map((item: any, index: any) => { + item.index = index; + item.url = `${data.url}${encodeURIComponent(item.name)}`; + + if (item.isDir) { + item.url += "/"; + } + + return item; + }); + } + + return data; +} + +export function download( + format: DownloadFormat, + hash: string, + token: string, + ...files: string[] +) { + let url = `${baseURL}/api/public/dl/${hash}`; + + if (files.length === 1) { + url += files[0] + "?"; + } else { + let arg = ""; + + for (const file of files) { + arg += file + ","; + } + + arg = arg.substring(0, arg.length - 1); + arg = encodeURIComponent(arg); + url += `/?files=${arg}&`; + } + + if (format) { + url += `algo=${format}&`; + } + + if (token) { + url += `token=${token}&`; + } + + window.open(url); +} + +export function getDownloadURL(res: Resource, inline = false) { + const params = { + ...(inline && { inline: "true" }), + ...(res.token && { token: res.token }), + }; + + return createURL("api/public/dl/" + res.hash + res.path, params); +} diff --git a/frontend/src/api/search.js b/frontend/src/api/search.js deleted file mode 100644 index ec35e6e3..00000000 --- a/frontend/src/api/search.js +++ /dev/null @@ -1,8 +0,0 @@ -import { fetchJSON, removePrefix } from './utils' - -export default async function search (url, query) { - url = removePrefix(url) - query = encodeURIComponent(query) - - return fetchJSON(`/api/search${url}?query=${query}`, {}) -} diff --git a/frontend/src/api/search.ts b/frontend/src/api/search.ts new file mode 100644 index 00000000..63cbdaa1 --- /dev/null +++ b/frontend/src/api/search.ts @@ -0,0 +1,73 @@ +import { fetchURL, removePrefix, StatusError } from "./utils"; +import url from "../utils/url"; + +export default async function search( + base: string, + query: string, + signal: AbortSignal, + callback: (item: ResourceItem) => void +) { + base = removePrefix(base); + query = encodeURIComponent(query); + + if (!base.endsWith("/")) { + base += "/"; + } + + const res = await fetchURL(`/api/search${base}?query=${query}`, { signal }); + if (!res.body) { + throw new StatusError("000 No connection", 0); + } + try { + // Try streaming approach first (modern browsers) + if (res.body && typeof res.body.pipeThrough === "function") { + const reader = res.body.pipeThrough(new TextDecoderStream()).getReader(); + let buffer = ""; + while (true) { + const { done, value } = await reader.read(); + if (value) { + buffer += value; + } + const lines = buffer.split(/\n/); + let lastLine = lines.pop(); + // Save incomplete last line + if (!lastLine) { + lastLine = ""; + } + buffer = lastLine; + + for (const line of lines) { + if (line) { + const item = JSON.parse(line) as ResourceItem; + item.url = `/files${base}` + url.encodePath(item.path); + if (item.isDir) { + item.url += "/"; + } + callback(item); + } + } + if (done) break; + } + } else { + // Fallback for browsers without streaming support (e.g., Safari) + const text = await res.text(); + const lines = text.split(/\n/); + for (const line of lines) { + if (line) { + const item = JSON.parse(line) as ResourceItem; + item.url = `/files${base}` + url.encodePath(item.path); + if (item.isDir) { + item.url += "/"; + } + callback(item); + } + } + } + } catch (e) { + // Check if the error is an intentional cancellation + if (e instanceof Error && e.name === "AbortError") { + throw new StatusError("000 No connection", 0, true); + } + throw e; + } +} diff --git a/frontend/src/api/settings.js b/frontend/src/api/settings.js deleted file mode 100644 index 189d1ae1..00000000 --- a/frontend/src/api/settings.js +++ /dev/null @@ -1,16 +0,0 @@ -import { fetchURL, fetchJSON } from './utils' - -export function get () { - return fetchJSON(`/api/settings`, {}) -} - -export async function update (settings) { - const res = await fetchURL(`/api/settings`, { - method: 'PUT', - body: JSON.stringify(settings) - }) - - if (res.status !== 200) { - throw new Error(res.status) - } -} diff --git a/frontend/src/api/settings.ts b/frontend/src/api/settings.ts new file mode 100644 index 00000000..6f806279 --- /dev/null +++ b/frontend/src/api/settings.ts @@ -0,0 +1,12 @@ +import { fetchURL, fetchJSON } from "./utils"; + +export function get() { + return fetchJSON(`/api/settings`, {}); +} + +export async function update(settings: ISettings) { + await fetchURL(`/api/settings`, { + method: "PUT", + body: JSON.stringify(settings), + }); +} diff --git a/frontend/src/api/share.js b/frontend/src/api/share.js deleted file mode 100644 index e14c4e81..00000000 --- a/frontend/src/api/share.js +++ /dev/null @@ -1,32 +0,0 @@ -import { fetchURL, fetchJSON, removePrefix } from './utils' - -export async function getHash(hash) { - return fetchJSON(`/api/public/share/${hash}`) -} - -export async function get(url) { - url = removePrefix(url) - return fetchJSON(`/api/share${url}`) -} - -export async function remove(hash) { - const res = await fetchURL(`/api/share/${hash}`, { - method: 'DELETE' - }) - - if (res.status !== 200) { - throw new Error(res.status) - } -} - -export async function create(url, expires = '', unit = 'hours') { - url = removePrefix(url) - url = `/api/share${url}` - if (expires !== '') { - url += `?expires=${expires}&unit=${unit}` - } - - return fetchJSON(url, { - method: 'POST' - }) -} diff --git a/frontend/src/api/share.ts b/frontend/src/api/share.ts new file mode 100644 index 00000000..af8a4ee3 --- /dev/null +++ b/frontend/src/api/share.ts @@ -0,0 +1,45 @@ +import { fetchURL, fetchJSON, removePrefix, createURL } from "./utils"; + +export async function list() { + return fetchJSON("/api/shares"); +} + +export async function get(url: string) { + url = removePrefix(url); + return fetchJSON(`/api/share${url}`); +} + +export async function remove(hash: string) { + await fetchURL(`/api/share/${hash}`, { + method: "DELETE", + }); +} + +export async function create( + url: string, + password = "", + expires = "", + unit = "hours" +) { + url = removePrefix(url); + url = `/api/share${url}`; + if (expires !== "") { + url += `?expires=${expires}&unit=${unit}`; + } + let body = "{}"; + if (password != "" || expires !== "" || unit !== "hours") { + body = JSON.stringify({ + password: password, + expires: expires.toString(), // backend expects string not number + unit: unit, + }); + } + return fetchJSON(url, { + method: "POST", + body: body, + }); +} + +export function getShareURL(share: Share) { + return createURL("share/" + share.hash, {}); +} diff --git a/frontend/src/api/tus.ts b/frontend/src/api/tus.ts new file mode 100644 index 00000000..d6601166 --- /dev/null +++ b/frontend/src/api/tus.ts @@ -0,0 +1,122 @@ +import * as tus from "tus-js-client"; +import { baseURL, tusEndpoint, tusSettings, origin } from "@/utils/constants"; +import { useAuthStore } from "@/stores/auth"; +import { removePrefix } from "@/api/utils"; + +const RETRY_BASE_DELAY = 1000; +const RETRY_MAX_DELAY = 20000; +const CURRENT_UPLOAD_LIST: { [key: string]: tus.Upload } = {}; + +export async function upload( + filePath: string, + content: ApiContent = "", + overwrite = false, + onupload: any +) { + if (!tusSettings) { + // Shouldn't happen as we check for tus support before calling this function + throw new Error("Tus.io settings are not defined"); + } + + filePath = removePrefix(filePath); + const resourcePath = `${tusEndpoint}${filePath}?override=${overwrite}`; + + const authStore = useAuthStore(); + + // Exit early because of typescript, tus content can't be a string + if (content === "") { + return false; + } + return new Promise((resolve, reject) => { + const upload = new tus.Upload(content, { + endpoint: `${origin}${baseURL}${resourcePath}`, + chunkSize: tusSettings.chunkSize, + retryDelays: computeRetryDelays(tusSettings), + parallelUploads: 1, + storeFingerprintForResuming: false, + headers: { + "X-Auth": authStore.jwt, + }, + onShouldRetry: function (err) { + const status = err.originalResponse + ? err.originalResponse.getStatus() + : 0; + + // Do not retry for file conflict. + if (status === 409) { + return false; + } + + return true; + }, + onError: function (error: Error | tus.DetailedError) { + delete CURRENT_UPLOAD_LIST[filePath]; + + if (error.message === "Upload aborted") { + return reject(error); + } + + const message = + error instanceof tus.DetailedError + ? error.originalResponse === null + ? "000 No connection" + : error.originalResponse.getBody() + : "Upload failed"; + + console.error(error); + + reject(new Error(message)); + }, + onProgress: function (bytesUploaded) { + if (typeof onupload === "function") { + onupload({ loaded: bytesUploaded }); + } + }, + onSuccess: function () { + delete CURRENT_UPLOAD_LIST[filePath]; + resolve(); + }, + }); + CURRENT_UPLOAD_LIST[filePath] = upload; + upload.start(); + }); +} + +function computeRetryDelays(tusSettings: TusSettings): number[] | undefined { + if (!tusSettings.retryCount || tusSettings.retryCount < 1) { + // Disable retries altogether + return undefined; + } + // The tus client expects our retries as an array with computed backoffs + // E.g.: [0, 3000, 5000, 10000, 20000] + const retryDelays = []; + let delay = 0; + + for (let i = 0; i < tusSettings.retryCount; i++) { + retryDelays.push(Math.min(delay, RETRY_MAX_DELAY)); + delay = + delay === 0 ? RETRY_BASE_DELAY : Math.min(delay * 2, RETRY_MAX_DELAY); + } + + return retryDelays; +} + +export async function useTus(content: ApiContent) { + return isTusSupported() && content instanceof Blob; +} + +function isTusSupported() { + return tus.isSupported === true; +} + +export function abortAllUploads() { + for (const filePath in CURRENT_UPLOAD_LIST) { + if (CURRENT_UPLOAD_LIST[filePath]) { + CURRENT_UPLOAD_LIST[filePath].abort(true); + CURRENT_UPLOAD_LIST[filePath].options!.onError!( + new Error("Upload aborted") + ); + } + delete CURRENT_UPLOAD_LIST[filePath]; + } +} diff --git a/frontend/src/api/users.js b/frontend/src/api/users.js deleted file mode 100644 index 4d79a7e1..00000000 --- a/frontend/src/api/users.js +++ /dev/null @@ -1,52 +0,0 @@ -import { fetchURL, fetchJSON } from './utils' - -export async function getAll () { - return fetchJSON(`/api/users`, {}) -} - -export async function get (id) { - return fetchJSON(`/api/users/${id}`, {}) -} - -export async function create (user) { - const res = await fetchURL(`/api/users`, { - method: 'POST', - body: JSON.stringify({ - what: 'user', - which: [], - data: user - }) - }) - - if (res.status === 201) { - return res.headers.get('Location') - } else { - throw new Error(res.status) - } - -} - -export async function update (user, which = ['all']) { - const res = await fetchURL(`/api/users/${user.id}`, { - method: 'PUT', - body: JSON.stringify({ - what: 'user', - which: which, - data: user - }) - }) - - if (res.status !== 200) { - throw new Error(res.status) - } -} - -export async function remove (id) { - const res = await fetchURL(`/api/users/${id}`, { - method: 'DELETE' - }) - - if (res.status !== 200) { - throw new Error(res.status) - } -} diff --git a/frontend/src/api/users.ts b/frontend/src/api/users.ts new file mode 100644 index 00000000..dc45e084 --- /dev/null +++ b/frontend/src/api/users.ts @@ -0,0 +1,55 @@ +import { fetchURL, fetchJSON, StatusError } from "./utils"; + +export async function getAll() { + return fetchJSON(`/api/users`, {}); +} + +export async function get(id: number) { + return fetchJSON(`/api/users/${id}`, {}); +} + +export async function create(user: IUser, currentPassword: string) { + const res = await fetchURL(`/api/users`, { + method: "POST", + body: JSON.stringify({ + what: "user", + which: [], + current_password: currentPassword, + data: user, + }), + }); + + if (res.status === 201) { + return res.headers.get("Location"); + } + + throw new StatusError(await res.text(), res.status); +} + +export async function update( + user: Partial, + which = ["all"], + currentPassword: string | null = null +) { + await fetchURL(`/api/users/${user.id}`, { + method: "PUT", + body: JSON.stringify({ + what: "user", + which: which, + ...(currentPassword != null ? { current_password: currentPassword } : {}), + data: user, + }), + }); +} + +export async function remove( + id: number, + currentPassword: string | null = null +) { + await fetchURL(`/api/users/${id}`, { + method: "DELETE", + body: JSON.stringify({ + ...(currentPassword != null ? { current_password: currentPassword } : {}), + }), + }); +} diff --git a/frontend/src/api/utils.js b/frontend/src/api/utils.js deleted file mode 100644 index 617e2258..00000000 --- a/frontend/src/api/utils.js +++ /dev/null @@ -1,45 +0,0 @@ -import store from '@/store' -import { renew } from '@/utils/auth' -import { baseURL } from '@/utils/constants' - -export async function fetchURL (url, opts) { - opts = opts || {} - opts.headers = opts.headers || {} - - let { headers, ...rest } = opts - - const res = await fetch(`${baseURL}${url}`, { - headers: { - 'X-Auth': store.state.jwt, - ...headers - }, - ...rest - }) - - if (res.headers.get('X-Renew-Token') === 'true') { - await renew(store.state.jwt) - } - - return res -} - -export async function fetchJSON (url, opts) { - const res = await fetchURL(url, opts) - - if (res.status === 200) { - return res.json() - } else { - throw new Error(res.status) - } -} - -export function removePrefix (url) { - if (url.startsWith('/files')) { - url = url.slice(6) - } - - if (url === '') url = '/' - if (url[0] !== '/') url = '/' + url - return url -} - diff --git a/frontend/src/api/utils.ts b/frontend/src/api/utils.ts new file mode 100644 index 00000000..f21fbe38 --- /dev/null +++ b/frontend/src/api/utils.ts @@ -0,0 +1,111 @@ +import { useAuthStore } from "@/stores/auth"; +import { renew, logout } from "@/utils/auth"; +import { baseURL } from "@/utils/constants"; +import { encodePath } from "@/utils/url"; + +export class StatusError extends Error { + constructor( + message: any, + public status?: number, + public is_canceled?: boolean + ) { + super(message); + this.name = "StatusError"; + } +} + +export async function fetchURL( + url: string, + opts: ApiOpts, + auth = true +): Promise { + const authStore = useAuthStore(); + + opts = opts || {}; + opts.headers = opts.headers || {}; + + const { headers, ...rest } = opts; + let res; + try { + res = await fetch(`${baseURL}${url}`, { + headers: { + "X-Auth": authStore.jwt, + ...headers, + }, + ...rest, + }); + } catch (e) { + // Check if the error is an intentional cancellation + if (e instanceof Error && e.name === "AbortError") { + throw new StatusError("000 No connection", 0, true); + } + throw new StatusError("000 No connection", 0); + } + + if (auth && res.headers.get("X-Renew-Token") === "true") { + await renew(authStore.jwt); + } + + if (res.status < 200 || res.status > 299) { + const body = await res.text(); + const error = new StatusError( + body || `${res.status} ${res.statusText}`, + res.status + ); + + if (auth && res.status == 401) { + logout(); + } + + throw error; + } + + return res; +} + +export async function fetchJSON(url: string, opts?: any): Promise { + const res = await fetchURL(url, opts); + + if (res.status === 200) { + return res.json() as Promise; + } + + throw new StatusError(`${res.status} ${res.statusText}`, res.status); +} + +export function removePrefix(url: string): string { + url = url.split("/").splice(2).join("/"); + + if (url === "") url = "/"; + if (url[0] !== "/") url = "/" + url; + return url; +} + +export function createURL(endpoint: string, searchParams = {}): string { + let prefix = baseURL; + if (!prefix.endsWith("/")) { + prefix = prefix + "/"; + } + const url = new URL(prefix + encodePath(endpoint), origin); + url.search = new URLSearchParams(searchParams).toString(); + + return url.toString(); +} + +export function setSafeTimeout(callback: () => void, delay: number): number { + const MAX_DELAY = 86_400_000; + let remaining = delay; + + function scheduleNext(): number { + if (remaining <= MAX_DELAY) { + return window.setTimeout(callback, remaining); + } else { + return window.setTimeout(() => { + remaining -= MAX_DELAY; + scheduleNext(); + }, MAX_DELAY); + } + } + + return scheduleNext(); +} diff --git a/frontend/src/assets/fonts/roboto/bold-cyrillic-ext.woff2 b/frontend/src/assets/fonts/roboto/bold-cyrillic-ext.woff2 new file mode 100755 index 00000000..0a67a942 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-cyrillic-ext.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-cyrillic.woff2 b/frontend/src/assets/fonts/roboto/bold-cyrillic.woff2 new file mode 100755 index 00000000..714bb431 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-cyrillic.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-greek-ext.woff2 b/frontend/src/assets/fonts/roboto/bold-greek-ext.woff2 new file mode 100755 index 00000000..6dffd067 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-greek-ext.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-greek.woff2 b/frontend/src/assets/fonts/roboto/bold-greek.woff2 new file mode 100755 index 00000000..8edfa0e5 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-greek.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-latin-ext.woff2 b/frontend/src/assets/fonts/roboto/bold-latin-ext.woff2 new file mode 100755 index 00000000..fe8bf694 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-latin-ext.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-latin.woff2 b/frontend/src/assets/fonts/roboto/bold-latin.woff2 new file mode 100755 index 00000000..57269b7e Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-latin.woff2 differ diff --git a/frontend/src/assets/fonts/roboto/bold-vietnamese.woff2 b/frontend/src/assets/fonts/roboto/bold-vietnamese.woff2 new file mode 100755 index 00000000..64c1d0e7 Binary files /dev/null and b/frontend/src/assets/fonts/roboto/bold-vietnamese.woff2 differ diff --git a/frontend/src/components/Breadcrumbs.vue b/frontend/src/components/Breadcrumbs.vue new file mode 100644 index 00000000..b6d1a768 --- /dev/null +++ b/frontend/src/components/Breadcrumbs.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/frontend/src/components/ContextMenu.vue b/frontend/src/components/ContextMenu.vue new file mode 100644 index 00000000..14663fd9 --- /dev/null +++ b/frontend/src/components/ContextMenu.vue @@ -0,0 +1,47 @@ + + + diff --git a/frontend/src/components/CustomToast.vue b/frontend/src/components/CustomToast.vue new file mode 100644 index 00000000..7ef8007d --- /dev/null +++ b/frontend/src/components/CustomToast.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/frontend/src/components/DropdownModal.vue b/frontend/src/components/DropdownModal.vue new file mode 100644 index 00000000..66780120 --- /dev/null +++ b/frontend/src/components/DropdownModal.vue @@ -0,0 +1,142 @@ + + + + + + + diff --git a/frontend/src/components/Header.vue b/frontend/src/components/Header.vue deleted file mode 100644 index d9542864..00000000 --- a/frontend/src/components/Header.vue +++ /dev/null @@ -1,182 +0,0 @@ - - - diff --git a/frontend/src/components/ProgressBar.vue b/frontend/src/components/ProgressBar.vue new file mode 100644 index 00000000..bd4f75d4 --- /dev/null +++ b/frontend/src/components/ProgressBar.vue @@ -0,0 +1,225 @@ + + + + diff --git a/frontend/src/components/Search.vue b/frontend/src/components/Search.vue index 0762f05e..57d5ba0d 100644 --- a/frontend/src/components/Search.vue +++ b/frontend/src/components/Search.vue @@ -1,14 +1,15 @@ + if (a.expire === 0) return -1; + if (b.expire === 0) return 1; + return new Date(a.expire) - new Date(b.expire); + }); + }, + switchListing() { + if (this.links.length == 0 && !this.listing) { + this.closeHovers(); + } + this.listing = !this.listing; + }, + }, +}; + diff --git a/frontend/src/components/prompts/ShareDelete.vue b/frontend/src/components/prompts/ShareDelete.vue new file mode 100644 index 00000000..a01f6343 --- /dev/null +++ b/frontend/src/components/prompts/ShareDelete.vue @@ -0,0 +1,46 @@ + + + diff --git a/frontend/src/components/prompts/Upload.vue b/frontend/src/components/prompts/Upload.vue index 3202ef2c..5417677c 100644 --- a/frontend/src/components/prompts/Upload.vue +++ b/frontend/src/components/prompts/Upload.vue @@ -1,37 +1,124 @@ - diff --git a/frontend/src/components/prompts/UploadFiles.vue b/frontend/src/components/prompts/UploadFiles.vue new file mode 100644 index 00000000..4d96d5bb --- /dev/null +++ b/frontend/src/components/prompts/UploadFiles.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/frontend/src/components/prompts/__tests__/copy-move-conflict.test.ts b/frontend/src/components/prompts/__tests__/copy-move-conflict.test.ts new file mode 100644 index 00000000..710baf0d --- /dev/null +++ b/frontend/src/components/prompts/__tests__/copy-move-conflict.test.ts @@ -0,0 +1,129 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import CopyPrompt from "@/components/prompts/Copy.vue"; +import MovePrompt from "@/components/prompts/Move.vue"; +import { files as api } from "@/api"; +import { checkConflict } from "@/utils/upload"; + +vi.mock("@/api", () => ({ + files: { + copy: vi.fn().mockResolvedValue(undefined), + move: vi.fn().mockResolvedValue(undefined), + }, +})); + +vi.mock("@/api/utils", () => ({ + removePrefix: (value: string) => value.replace(/^\/files/, ""), +})); + +vi.mock("@/utils/buttons", () => ({ + default: { + loading: vi.fn(), + success: vi.fn(), + done: vi.fn(), + }, +})); + +vi.mock("@/utils/upload", () => ({ + checkConflict: vi.fn(), +})); + +const conflict = [ + { + index: 0, + name: "/target/file.txt", + origin: { size: 12 }, + dest: { size: 10 }, + checked: ["origin"], + isSmallerOnServer: true, + }, +]; + +function makeContext() { + return { + selected: [0], + req: { + items: [ + { + url: "/files/source/file.txt", + name: "file.txt", + size: 12, + isDir: false, + modified: "2026-06-04T00:00:00Z", + }, + ], + }, + dest: "/files/target/", + user: { redirectAfterCopyMove: false }, + $route: { path: "/files/source/" }, + $router: { push: vi.fn() }, + reload: false, + preselect: "", + showHover: vi.fn(), + closeHovers: vi.fn(), + $showError: vi.fn(), + }; +} + +const event = { + preventDefault: vi.fn(), +}; + +describe("copy and move conflict prompts", () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.mocked(checkConflict).mockResolvedValue( + conflict as ConflictingResource[] + ); + }); + + it("waits for copy conflict detection before calling the copy API", async () => { + const context = makeContext(); + + await (CopyPrompt as any).methods.copy.call(context, event); + + expect(checkConflict).toHaveBeenCalledWith( + [ + expect.objectContaining({ + to: "/files/target/file.txt", + isDir: false, + }), + ], + "/files/target/", + true + ); + expect(context.showHover).toHaveBeenCalledWith( + expect.objectContaining({ + prompt: "resolve-conflict", + props: { conflict }, + }) + ); + expect(api.copy).not.toHaveBeenCalled(); + }); + + it("waits for move conflict detection before calling the move API", async () => { + const context = makeContext(); + + await (MovePrompt as any).methods.move.call(context, event); + + expect(checkConflict).toHaveBeenCalledWith( + [ + expect.objectContaining({ + to: "/files/target/file.txt", + isDir: false, + }), + ], + "/files/target/", + true + ); + expect(context.showHover).toHaveBeenCalledWith( + expect.objectContaining({ + prompt: "resolve-conflict", + props: expect.objectContaining({ + conflict, + files: expect.any(Array), + }), + }) + ); + expect(api.move).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/components/settings/AceEditorTheme.vue b/frontend/src/components/settings/AceEditorTheme.vue new file mode 100644 index 00000000..68585a3a --- /dev/null +++ b/frontend/src/components/settings/AceEditorTheme.vue @@ -0,0 +1,28 @@ + + + diff --git a/frontend/src/components/settings/Commands.vue b/frontend/src/components/settings/Commands.vue index f09fe53a..73799fce 100644 --- a/frontend/src/components/settings/Commands.vue +++ b/frontend/src/components/settings/Commands.vue @@ -1,24 +1,30 @@ diff --git a/frontend/src/components/settings/Languages.vue b/frontend/src/components/settings/Languages.vue index 39c699e8..6a603358 100644 --- a/frontend/src/components/settings/Languages.vue +++ b/frontend/src/components/settings/Languages.vue @@ -1,46 +1,69 @@ diff --git a/frontend/src/components/settings/Permissions.vue b/frontend/src/components/settings/Permissions.vue index 59a3dd9b..33296af2 100644 --- a/frontend/src/components/settings/Permissions.vue +++ b/frontend/src/components/settings/Permissions.vue @@ -1,39 +1,79 @@ diff --git a/frontend/src/components/settings/Rules.vue b/frontend/src/components/settings/Rules.vue index 36f952c4..e1e82b3f 100644 --- a/frontend/src/components/settings/Rules.vue +++ b/frontend/src/components/settings/Rules.vue @@ -1,57 +1,63 @@ diff --git a/frontend/src/components/settings/Themes.vue b/frontend/src/components/settings/Themes.vue index 48a663bd..059070bd 100644 --- a/frontend/src/components/settings/Themes.vue +++ b/frontend/src/components/settings/Themes.vue @@ -1,18 +1,26 @@ - \ No newline at end of file + diff --git a/frontend/src/components/settings/UserForm.vue b/frontend/src/components/settings/UserForm.vue index 35a872f8..c4f0e0c6 100644 --- a/frontend/src/components/settings/UserForm.vue +++ b/frontend/src/components/settings/UserForm.vue @@ -1,65 +1,122 @@ - diff --git a/frontend/src/css/__tests__/mobile.test.ts b/frontend/src/css/__tests__/mobile.test.ts new file mode 100644 index 00000000..8b492c55 --- /dev/null +++ b/frontend/src/css/__tests__/mobile.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const mobileCss = readFileSync(resolve(__dirname, "../mobile.css"), "utf8"); + +const normalizedCss = mobileCss.replace(/\s+/g, " "); + +describe("mobile file listing styles", () => { + it("hides file row metadata without hiding list header sort controls", () => { + expect(normalizedCss).toContain( + "#listing.list .item:not(.header) .size { display: none;" + ); + expect(normalizedCss).toContain( + "#listing.list .item:not(.header) .modified { display: none;" + ); + + expect(normalizedCss).not.toMatch( + /#listing\.list \.item \.(size|modified) \{ display: none;/ + ); + }); +}); diff --git a/frontend/src/css/_buttons.css b/frontend/src/css/_buttons.css index 79dab790..cbfc92ae 100644 --- a/frontend/src/css/_buttons.css +++ b/frontend/src/css/_buttons.css @@ -1,14 +1,14 @@ .button { outline: 0; border: 0; - padding: .5em 1em; - border-radius: .1em; + padding: 0.5em 1em; + border-radius: 0.1em; cursor: pointer; background: var(--blue); color: white; - border: 1px solid rgba(0, 0, 0, 0.05); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.05); - transition: .1s ease all; + border: 1px solid var(--divider); + box-shadow: 0 0 5px var(--divider); + transition: 0.1s ease all; } .button:hover { @@ -25,8 +25,8 @@ background: var(--red); } -.button--red:hover { - background: var(--dark-red); +.button--blue { + background: var(--blue); } .button--flat { @@ -38,7 +38,7 @@ } .button--flat:hover { - background: var(--moon-grey); + background: var(--surfaceSecondary); } .button--flat.button--red { @@ -50,6 +50,6 @@ } .button[disabled] { - opacity: .5; + opacity: 0.5; cursor: not-allowed; } diff --git a/frontend/src/css/_inputs.css b/frontend/src/css/_inputs.css index 670bb426..a0063f83 100644 --- a/frontend/src/css/_inputs.css +++ b/frontend/src/css/_inputs.css @@ -1,20 +1,20 @@ .input { - border-radius: .1em; - padding: .5em 1em; - background: white; - border: 1px solid rgba(0, 0, 0, 0.1); - transition: .2s ease all; - color: #333; + background: var(--surfacePrimary); + color: var(--textSecondary); + border: 1px solid var(--borderPrimary); + border-radius: 0.1em; + padding: 0.5em 1em; + transition: 0.2s ease all; margin: 0; } .input:hover, .input:focus { - border-color: rgba(0, 0, 0, 0.2); + border-color: var(--borderSecondary); } .input--block { - margin-bottom: .5em; + margin-bottom: 0.5em; display: block; width: 100%; } @@ -27,9 +27,9 @@ } .input--red { - background: #fcd0cd; + background: var(--input-red) !important; } .input--green { - background: #c9f2da; + background: var(--input-green) !important; } diff --git a/frontend/src/css/_share.css b/frontend/src/css/_share.css index a0e21153..7099101a 100644 --- a/frontend/src/css/_share.css +++ b/frontend/src/css/_share.css @@ -1,29 +1,85 @@ -.share__box { - text-align: center; - box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px; - background: #fff; - display: block; - border-radius: 0.2em; - width: 90%; - max-width: 25em; - margin: 6em auto; +.share { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: flex-start; } -.share__box__download { - width: 100%; +@media (max-width: 736px) { + .share { + display: block; + } +} + +.share__box { + box-shadow: + rgba(0, 0, 0, 0.06) 0px 1px 3px, + rgba(0, 0, 0, 0.12) 0px 1px 2px; + background: var(--surfacePrimary); + color: var(--textPrimary); + border-radius: 0.2em; + margin: 5px; + overflow: hidden; +} + +.share__box__header { padding: 1em; - cursor: pointer; - background: #ffffff; - color: rgba(0, 0, 0, 0.5); - border-bottom: 1px solid rgba(0, 0, 0, 0.05); + text-align: center; +} + +.share__box__icon i { + font-size: 10em; + color: #40c4ff; +} + +.share__box__center { + text-align: center; } .share__box__info { - padding: 2em 3em; + flex: 1 1 18em; } -.share__box__title { - margin-top: .2em; - overflow: hidden; - text-overflow: ellipsis; +.share__box__element { + padding: 1em; + border-top: 1px solid var(--borderPrimary); + word-break: break-all; +} + +.share__box__element .button { + display: inline-block; +} + +.share__box__element .button i { + display: block; + margin-bottom: 4px; +} + +.share__box__items { + text-align: left; + flex: 10 0 25em; +} + +.share__box__items #listing.list .item { + cursor: pointer; + border-left: 0; + border-right: 0; + border-bottom: 0; + border-top: 1px solid var(--borderPrimary); +} + +#listing.list .item .name { + width: 50%; +} + +#listing.list .item .modified { + width: 25%; +} + +.share__wrong__password { + background: var(--red); + color: #fff; + padding: 0.5em; + text-align: center; + animation: 0.2s opac forwards; } diff --git a/frontend/src/css/_shell.css b/frontend/src/css/_shell.css index 388a3363..3b4eec0e 100644 --- a/frontend/src/css/_shell.css +++ b/frontend/src/css/_shell.css @@ -2,25 +2,57 @@ position: fixed; bottom: 0; left: 0; - height: 25em; max-height: calc(100% - 4em); - background: white; - color: #212121; + background: var(--surfacePrimary); + color: var(--textPrimary); z-index: 9999; + background: var(--dividerSecondary); + transition: 0.2s ease background; + cursor: ns-resize; + touch-action: none; + user-select: none; width: 100%; +} + +.shell__divider { + background: rgba(127, 127, 127, 0.3); + width: 100%; + height: 8px; +} + +.shell__divider:hover { + background: rgba(127, 127, 127, 0.9); +} + +.shell__content { + height: 100%; font-family: monospace; overflow: auto; font-size: 1rem; cursor: text; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); - transition: .2s ease transform; + box-shadow: 0 0 5px var(--borderPrimary); + transition: 0.2s ease transform; +} + +.shell__overlay { + position: fixed; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 9998; + background-color: var(--dividerPrimary); +} + +body.rtl .shell-content { + direction: ltr; } .shell__result { display: flex; padding: 0.5em; align-items: flex-start; - border-top: 1px solid rgba(0, 0, 0, 0.05); + border-top: 1px solid var(--divider); } .shell--hidden { @@ -50,4 +82,5 @@ font-family: inherit; white-space: pre-wrap; width: 100%; + color: var(--textSecondary); } diff --git a/frontend/src/css/_variables.css b/frontend/src/css/_variables.css index e0c039ef..85ad96ec 100644 --- a/frontend/src/css/_variables.css +++ b/frontend/src/css/_variables.css @@ -1,7 +1,58 @@ :root { --blue: #2196f3; - --dark-blue: #1E88E5; - --red: #F44336; - --dark-red: #D32F2F; + --dark-blue: #1e88e5; + --red: #f44336; + --dark-red: #d32f2f; --moon-grey: #f2f2f2; + + --icon-red: #da4453; + --icon-orange: #f47750; + --icon-yellow: #fdbc4b; + --icon-green: #2ecc71; + --icon-blue: #1d99f3; + --icon-violet: #9b59b6; + + --input-red: rgb(252, 208, 205); + --input-green: rgb(201, 242, 218); + + --item-selected: white; + + --action: rgb(84, 110, 122); + + --background: rgb(250, 250, 250); + --surfacePrimary: rgb(255, 255, 255); + --surfaceSecondary: rgb(230, 230, 230); + --divider: rgba(0, 0, 0, 0.05); + --iconPrimary: var(--icon-blue); + --iconSecondary: rgb(255, 255, 255); + --iconTertiary: rgb(204, 204, 204); + --textPrimary: rgb(111, 111, 111); + --textSecondary: rgb(51, 51, 51); + --hover: rgba(0, 0, 0, 0.1); + --borderPrimary: rgba(0, 0, 0, 0.1); + --borderSecondary: rgba(0, 0, 0, 0.2); + --dividerPrimary: rgba(255, 255, 255, 0.4); + --dividerSecondary: rgba(255, 255, 255, 0.9); +} + +:root.dark { + --input-red: rgb(115, 48, 45); + --input-green: rgb(20, 122, 65); + + --action: rgb(255, 255, 255); + + --background: rgb(20, 29, 36); + --surfacePrimary: rgb(32, 41, 47); + --surfaceSecondary: rgb(58, 65, 71); + --textPrimary: rgba(255, 255, 255, 0.6); + --textSecondary: rgba(255, 255, 255, 0.87); + --divider: rgba(255, 255, 255, 0.12); + --iconPrimary: rgb(255, 255, 255); + --iconSecondary: rgb(255, 255, 255); + --iconTertiary: rgb(255, 255, 255); + --hover: rgba(255, 255, 255, 0.1); + --borderPrimary: rgba(255, 255, 255, 0.05); + --borderSecondary: rgba(255, 255, 255, 0.15); + --dividerPrimary: rgba(30, 30, 30, 0.4); + --dividerSecondary: rgba(30, 30, 30, 0.6); } diff --git a/frontend/src/css/base.css b/frontend/src/css/base.css index 552fa691..268289ac 100644 --- a/frontend/src/css/base.css +++ b/frontend/src/css/base.css @@ -1,8 +1,8 @@ body { - font-family: 'Roboto', sans-serif; + font-family: "Roboto", sans-serif; padding-top: 4em; - background-color: #fafafa; - color: #333333; + background: var(--background); + color: var(--textSecondary); } * { @@ -13,7 +13,7 @@ body { *:hover, *:active, *:focus { - outline: 0 + outline: 0; } a { @@ -44,7 +44,7 @@ i.spin { } #app { - transition: .2s ease padding; + transition: 0.2s ease padding; } #app.multiple { @@ -56,6 +56,13 @@ nav { position: fixed; top: 4em; left: 0; + height: calc(100vh - 4em); + overflow-y: auto; +} + +html[dir="rtl"] nav { + left: initial; + right: 0; } nav .action { @@ -63,17 +70,21 @@ nav .action { display: block; border-radius: 0; font-size: 1.1em; - padding: .5em; + padding: 0.5em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -nav>div { - border-top: 1px solid rgba(0, 0, 0, 0.05); +html[dir="rtl"] nav .action { + text-align: right; } -nav .action>* { +nav > div { + border-top: 1px solid var(--divider); +} + +nav .action > * { vertical-align: middle; } @@ -83,33 +94,47 @@ main { width: calc(100% - 19em); } -#breadcrumbs { +.breadcrumbs { height: 3em; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); + background: var(--background); + border-bottom: 1px solid var(--divider); + position: sticky; + z-index: 1000; + top: 4em; } -#breadcrumbs span, -#breadcrumbs { +.breadcrumbs span, +.breadcrumbs { display: flex; align-items: center; - color: #6f6f6f; + color: var(--textPrimary); } -#breadcrumbs a { +.breadcrumbs a { color: inherit; - transition: .1s ease-in; - border-radius: .125em; + transition: 0.1s ease-in; + border-radius: 0.125em; } -#breadcrumbs a:hover { - background-color: rgba(0,0,0, 0.05); +html[dir="rtl"] .breadcrumbs a { + transform: translateX(-16em); } -#breadcrumbs span a { - padding: .2em; +.breadcrumbs a:hover { + background-color: var(--divider); } -#progress { +.breadcrumbs span a { + padding: 0.2em; +} + +.files { + position: absolute; + bottom: 30px; + width: 100%; +} + +.progress { position: fixed; top: 0; left: 0; @@ -118,13 +143,52 @@ main { z-index: 9999999999; } -#progress div { +.progress div { height: 100%; background-color: #40c4ff; width: 0; - transition: .2s ease width; + transition: 0.2s ease width; } .break-word { word-break: break-all; -} \ No newline at end of file +} + +.vue-number-input > input { + background: var(--surfacePrimary) !important; + border-color: var(--surfaceSecondary) !important; + color: var(--textSecondary) !important; +} + +.vue-number-input--small > input { + height: 1rem !important; + font-size: 1rem !important; +} + +.vue-number-input :hover, +.vue-number-input :focus { + border-color: var(--borderSecondary) !important; +} + +.vue-number-input__button { + background: var(--surfacePrimary) !important; +} + +.vue-number-input__button--minus, +.vue-number-input__button--plus { + border-color: var(--surfaceSecondary) !important; +} + +.vue-number-input__button::before, +.vue-number-input__button::after { + background: var(--textSecondary) !important; +} + +body > div[style*="z-index: 9990"] { + z-index: 10000 !important; +} + +#modal-background .button:focus { + outline: 1px solid #2195f32d; + outline-offset: 1px; +} diff --git a/frontend/src/css/context-menu.css b/frontend/src/css/context-menu.css new file mode 100644 index 00000000..d0741d16 --- /dev/null +++ b/frontend/src/css/context-menu.css @@ -0,0 +1,21 @@ +.context-menu { + position: absolute; + background: var(--surfacePrimary); + min-width: 180px; + max-width: 220px; + border: 1px solid var(--borderSecondary); + box-shadow: 0 2px 4px var(--borderPrimary); + z-index: 999; +} + +.context-menu .action { + display: block; + width: 100%; + border-radius: 0; + display: flex; + align-items: center; +} + +.context-menu .action .counter { + left: 1.75em; +} diff --git a/frontend/src/css/dashboard.css b/frontend/src/css/dashboard.css index b29e907f..48be3ee0 100644 --- a/frontend/src/css/dashboard.css +++ b/frontend/src/css/dashboard.css @@ -1,52 +1,111 @@ .dashboard { - max-width: 600px; margin: 1em 0; } +.dashboard .row { + display: flex; + margin: 0 -0.5em; + flex-wrap: wrap; +} + +html[dir="rtl"] .dashboard .row { + margin-right: 16em; +} + +.dashboard .row .column { + display: flex; + padding: 0 0.5em; + width: 50%; +} + +.dashboard .row .column .card { + flex-grow: 1; +} + +@media (max-width: 1200px) { + .dashboard .row .column { + width: 100%; + } +} + a { - color: inherit + color: inherit; } .dashboard p label { - margin-bottom: .2em; + margin-bottom: 0.2em; display: block; - font-size: .8em; + font-size: 0.8em; font-weight: 500; - color: rgba(0, 0, 0, 0.57); + color: var(--textPrimary); } li code, p code { - background: rgba(0, 0, 0, 0.05); - padding: .1em; - border-radius: .2em; + background: var(--divider); + padding: 0.1em; + border-radius: 0.2em; } .small { - font-size: .8em; + font-size: 0.8em; line-height: 1.5; } .dashboard #nav { + display: flex; + padding-bottom: 1em; + overflow: auto; +} + +.dashboard #nav .wrapper { + display: flex; + flex-grow: 1; + border-bottom: 2px solid var(--divider); +} + +html[dir="rtl"] .dashboard #nav .wrapper { + margin-right: 16em; +} + +.dashboard #nav ul { list-style: none; display: flex; - color: rgb(84, 110, 122); + color: var(--action); font-weight: 500; - margin: 0 0 1em; - font-size: .8em; - text-align: center; - justify-content: space-between; padding: 0; + margin: 0 0 -2px 0; + font-size: 0.8em; + text-align: center; + justify-content: left; } -.dashboard #nav li { +.dashboard #nav ul li { + position: relative; + padding: 1.5em 2em; + white-space: nowrap; + border-bottom: 2px solid transparent; + transition: 0.1s ease-in-out all; +} + +.dashboard #nav ul li:hover { + background: var(--surfaceSecondary); +} + +.dashboard #nav ul li.active { + border-color: var(--blue); + color: var(--blue); +} + +.dashboard #nav ul li.active::before { width: 100%; - padding: 0 0 1em; - border-bottom: 2px solid rgba(0, 0, 0, 0.05); -} - -.dashboard #nav li.active { - border-color: var(--blue) + height: 100%; + position: absolute; + top: 0; + left: 0; + content: ""; + background: var(--blue); + opacity: 0.08; } .dashboard #nav i { @@ -60,7 +119,7 @@ table { } table tr { - border-bottom: 1px solid #ccc; + border-bottom: 1px solid var(--iconTertiary); } table tr:last-child { @@ -69,33 +128,44 @@ table tr:last-child { table th { font-weight: 500; - color: #757575; + color: var(--textSecondary); text-align: left; } table th, table td { - padding: .5em 0; + padding: 0.5em 0; } table td.small { width: 1em; } -table tr>*:first-child { +table tr > *:first-child { padding-left: 1em; } -table tr>*:last-child { +html[dir="rtl"] table tr > * { + padding-left: unset; + padding-right: 1em; + text-align: right; + direction: ltr; +} + +table tr > *:last-child { padding-right: 1em; } .card { position: relative; - margin: .5rem 0 1rem 0; - background-color: #fff; + margin: 0 0 1rem 0; + background: var(--surfacePrimary); + color: var(--textSecondary); border-radius: 2px; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + box-shadow: + 0 2px 2px 0 rgba(0, 0, 0, 0.14), + 0 1px 5px 0 rgba(0, 0, 0, 0.12), + 0 3px 1px -2px rgba(0, 0, 0, 0.2); overflow: auto; } @@ -104,19 +174,18 @@ table tr>*:last-child { top: 50%; left: 50%; transform: translate(-50%, -50%); - z-index: 99999; max-width: 25em; width: 90%; max-height: 95%; - z-index: 99999; - animation: .1s show forwards; + /* animation-duration: 0.3s; + animation-fill-mode: forwards; */ } -.card>*>*:first-child { +.card > * > *:first-child { margin-top: 0; } -.card>*>*:last-child { +.card > * > *:last-child { margin-bottom: 0; } @@ -125,19 +194,24 @@ table tr>*:last-child { display: flex; } -.card .card-title>*:first-child { +.card .card-title > *:first-child { margin-right: auto; } -.card>div { +html[dir="rtl"] .card .card-title > *:first-child { + margin-right: 0; + text-align: right; +} + +.card > div { padding: 1em 1em; } -.card>div:first-child { +.card > div:first-child { padding-top: 1.5em; } -.card>div:last-child { +.card > div:last-child { padding-bottom: 1.5em; } @@ -149,8 +223,13 @@ table tr>*:last-child { text-align: right; } +body.rtl .card .card-action { + text-align: left; +} + .card .card-content.full { padding-bottom: 0; + overflow: auto; } .card h2 { @@ -158,7 +237,7 @@ table tr>*:last-child { } .card h3 { - color: rgba(0, 0, 0, 0.53); + color: var(--textPrimary); font-size: 1em; font-weight: 500; margin: 2em 0 1em; @@ -177,6 +256,14 @@ table tr>*:last-child { max-width: 15em; } +.card#share input, +.card#share select, +.card#share input::-webkit-inner-spin-button, +.card#share input::-webkit-outer-spin-button { + background: var(--surfacePrimary); + color: var(--textSecondary); +} + .card#share ul { list-style: none; padding: 0; @@ -201,24 +288,24 @@ table tr>*:last-child { .card#share ul li input, .card#share ul li select { - padding: .2em; - margin-right: .5em; - border: 1px solid #dadada; + padding: 0.2em; + margin-right: 0.5em; + border: 1px solid var(--borderPrimary); } .card#share .action.copy-clipboard::after { - content: 'Copied!'; + content: "Copied!"; position: absolute; left: -25%; width: 150%; - font-size: .6em; + font-size: 0.6em; text-align: center; background: #44a6f5; color: #fff; - padding: .5em .2em; - border-radius: .4em; + padding: 0.5em 0.2em; + border-radius: 0.4em; top: -2em; - transition: .1s ease opacity; + transition: 0.1s ease opacity; opacity: 0; } @@ -226,6 +313,18 @@ table tr>*:last-child { opacity: 1; } +.card#share .input-group { + display: flex; +} + +.card#share .input-group * { + border: none; +} + +.card#share .input-group input { + flex: 1; +} + .overlay { background-color: rgba(0, 0, 0, 0.5); position: fixed; @@ -234,10 +333,11 @@ table tr>*:last-child { height: 100%; width: 100%; z-index: 9999; - animation: .1s show forwards; + visibility: hidden; + opacity: 0; + animation: 0.1s show forwards; } - /* * * * * * * * * * * * * * * * * PROMPT - MOVE * * * * * * * * * * * * * * * * */ @@ -254,33 +354,33 @@ table tr>*:last-child { .file-list li { width: 100%; user-select: none; - border-radius: .2em; - padding: .3em; + border-radius: 0.2em; + padding: 0.3em; } -.file-list li[aria-selected=true] { +.file-list li[aria-selected="true"] { background: var(--blue) !important; - color: #fff !important; - transition: .1s ease all; + color: var(--iconSecondary) !important; + transition: 0.1s ease all; } .file-list li:hover { - background-color: #e9eaeb; + background: var(--surfaceSecondary); cursor: pointer; } .file-list li:before { content: "folder"; - color: #6f6f6f; + color: var(--textPrimary); vertical-align: middle; line-height: 1.4; - font-family: 'Material Icons'; + font-family: "Material Icons"; font-size: 1.75em; - margin-right: .25em; + margin-right: 0.25em; } -.file-list li[aria-selected=true]:before { - color: white; +.file-list li[aria-selected="true"]:before { + color: var(--iconSecondary); } .help { @@ -295,25 +395,25 @@ table tr>*:last-child { @keyframes show { 0% { - display: none; + visibility: hidden; opacity: 0; } 1% { - display: block; + visibility: visible; opacity: 0; } 100% { - display: block; + visibility: visible; opacity: 1; } } .collapsible { - border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--borderPrimary); } .collapsible:last-of-type { - border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--borderPrimary); } .collapsible > input { @@ -331,18 +431,18 @@ table tr>*:last-child { .collapsible > label * { margin: 0; - color: rgba(0,0,0,0.57); + color: var(--textPrimary); } .collapsible > label i { - transition: .2s ease transform; + transition: 0.2s ease transform; user-select: none; } .collapsible .collapse { max-height: 0; overflow: hidden; - transition: .2s ease all; + transition: 0.2s ease all; } .collapsible > input:checked ~ .collapse { @@ -352,7 +452,7 @@ table tr>*:last-child { } .collapsible > input:checked ~ label i { - transform: rotate(180deg) + transform: rotate(180deg); } .card .collapsible { @@ -378,12 +478,12 @@ table tr>*:last-child { flex: 1; padding: 2em; border-radius: 0.2em; - border: 1px solid rgba(0, 0, 0, 0.1); + border: 1px solid var(--borderPrimary); text-align: center; } .card .card-action.full .action { - margin: 0 0.25em 0.50em; + margin: 0 0.25em 0.5em; } .card .card-action.full .action i { @@ -396,4 +496,10 @@ table tr>*:last-child { .card .card-action.full .action .title { font-size: 1.5em; font-weight: 500; -} \ No newline at end of file +} + +/*** RTL - Fix disk usage information (in english) ***/ +html[dir="rtl"] .credits { + text-align: right; + direction: ltr; +} diff --git a/frontend/src/css/epubReader.css b/frontend/src/css/epubReader.css new file mode 100644 index 00000000..c8ceb110 --- /dev/null +++ b/frontend/src/css/epubReader.css @@ -0,0 +1,85 @@ +.epub-reader { + display: flex; + align-items: flex-end; + height: 100%; +} + +.epub-reader .container { + width: 100%; + max-width: 100%; + height: calc(100% - 64px); + margin: 0; +} + +.epub-reader .arrow.pre { + left: 0; +} + +.epub-reader .readerArea { + background-color: var(--background) !important; +} + +.epub-reader .titleArea { + color: var(--text); +} + +.epub-reader .tocButtonBar { + background: var(--divider); +} + +.epub-reader .tocButton { + color: var(--text); + /* + * vue-reader positions the TOC toggle at top: 10px, which lands under the + * fixed 4em header bar (see .header) — so clicks hit the header's Close + * button instead of opening the table of contents. Push it just below the + * header, tracking the header's height so it stays clear if that changes. + */ + top: calc(4em + 10px); +} + +.epub-reader .tocButton.tocButtonExpanded { + background-color: var(--background); +} + +.epub-reader .tocAreaButton.active { + color: var(--blue); + border-color: var(--dark-blue); +} + +.epub-reader .tocArea { + background-color: var(--background); +} + +.epub-reader .readerArea .arrow { + color: var(--text); +} + +.epub-reader .readerArea .arrow:hover { + color: var(--hover); +} + +.epub-reader .size { + display: flex; + gap: 5px; + align-items: center; + z-index: 111; + right: 25px; + outline: none; + position: absolute; + top: 78px; +} + +.epub-reader .size span { + color: var(--textSecondary); +} + +.epub-reader .size button { + background: none; + outline: none; + border: none; + width: 25px; + height: 25px; + color: var(--textPrimary); + padding: 0; +} diff --git a/frontend/src/css/fonts.css b/frontend/src/css/fonts.css index d700edcb..fdad54b9 100644 --- a/frontend/src/css/fonts.css +++ b/frontend/src/css/fonts.css @@ -1,113 +1,245 @@ +@import "material-icons/iconfont/filled.css"; + @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-cyrillic-ext.woff2) format('woff2'); + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-cyrillic-ext.woff2) format("woff2"); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-cyrillic.woff2) format('woff2'); + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-cyrillic.woff2) format("woff2"); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-greek-ext.woff2) format('woff2'); + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-greek-ext.woff2) format("woff2"); unicode-range: U+1F00-1FFF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-greek.woff2) format('woff2'); + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-greek.woff2) format("woff2"); unicode-range: U+0370-03FF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-vietnamese.woff2) format('woff2'); + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-vietnamese.woff2) format("woff2"); unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-latin-ext.woff2) format('woff2'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-latin-ext.woff2) format("woff2"); + unicode-range: + U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-latin.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; + src: + local("Roboto"), + local("Roboto-Regular"), + url(../assets/fonts/roboto/normal-latin.woff2) format("woff2"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, + U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-cyrillic-ext.woff2) format('woff2'); + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-cyrillic-ext.woff2) format("woff2"); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-cyrillic.woff2) format('woff2'); + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-cyrillic.woff2) format("woff2"); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-greek-ext.woff2) format('woff2'); + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-greek-ext.woff2) format("woff2"); unicode-range: U+1F00-1FFF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-greek.woff2) format('woff2'); + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-greek.woff2) format("woff2"); unicode-range: U+0370-03FF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-vietnamese.woff2) format('woff2'); + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-vietnamese.woff2) format("woff2"); unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-latin-ext.woff2) format('woff2'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-latin-ext.woff2) format("woff2"); + unicode-range: + U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } @font-face { - font-family: 'Roboto'; + font-family: "Roboto"; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-latin.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; + src: + local("Roboto Medium"), + local("Roboto-Medium"), + url(../assets/fonts/roboto/medium-latin.woff2) format("woff2"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, + U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } -@import "~material-design-icons/iconfont/material-icons.css"; +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-cyrillic-ext.woff2) format("woff2"); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-cyrillic.woff2) format("woff2"); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-greek-ext.woff2) format("woff2"); + unicode-range: U+1F00-1FFF; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-greek.woff2) format("woff2"); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-vietnamese.woff2) format("woff2"); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-latin-ext.woff2) format("woff2"); + unicode-range: + U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: + local("Roboto Bold"), + local("Roboto-Bold"), + url(../assets/fonts/roboto/bold-latin.woff2) format("woff2"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, + U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} + +.material-icons { + font-size: 1.5rem; +} diff --git a/frontend/src/css/header.css b/frontend/src/css/header.css index fcebc9fb..7a427b0a 100644 --- a/frontend/src/css/header.css +++ b/frontend/src/css/header.css @@ -1,14 +1,30 @@ header { z-index: 1000; - background-color: #fff; - border-bottom: 1px solid rgba(0, 0, 0, 0.075); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + background: var(--surfacePrimary); + border-bottom: 1px solid var(--divider); + box-shadow: 0 0 5px var(--borderPrimary); position: fixed; top: 0; left: 0; + height: 4em; width: 100%; padding: 0; display: flex; + padding: 0.5em 0.5em 0.5em 1em; + align-items: center; +} + +header > * { + flex: 0 0 auto; +} + +header title { + display: block; + flex: 1 1 auto; + padding: 0 1em; + overflow: hidden; + text-overflow: ellipsis; + font-size: 1.2em; } header .overlay { @@ -21,7 +37,7 @@ header a:hover { color: inherit; } -header>div:first-child>.action, +header > div:first-child > .action, header img { margin-right: 1em; } @@ -30,39 +46,17 @@ header img { height: 2.5em; } -header>div:first-child>.action { - display: none; -} - -header>div { - display: flex; - width: 100%; - padding: 0.5em 0.5em 0.5em 1em; - align-items: center; -} - header .action span { display: none; } -header>div div { +header > div div { vertical-align: middle; position: relative; } -header>div:last-child div { - display: flex; -} - -header>div:first-child { - height: 4em; -} - -header>div:last-child { - justify-content: flex-end; -} - -header .search-button { +header .search-button, +header .menu-button { display: none; } @@ -88,33 +82,39 @@ header .search-button { } #search #input { - background-color: #f5f5f5; + background: var(--surfaceSecondary); + border-color: var(--surfacePrimary); display: flex; - padding: 0.75em; + height: 100%; + padding: 0em 0.75em; border-radius: 0.3em; - transition: .1s ease all; + transition: 0.1s ease all; align-items: center; z-index: 2; } +#search #input input::placeholder { + color: var(--textSecondary); +} + #search.active #input { - border-bottom: 1px solid rgba(0, 0, 0, 0.075); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); - background-color: #fff; + border-bottom: 1px solid var(--borderPrimary); + box-shadow: 0 0 5px var(--borderPrimary); + background: var(--surfacePrimary); height: 4em; } -#search.active>div { +#search.active > div { border-radius: 0 !important; } #search.active i, #search.active input { - color: #212121; + color: var(--textPrimary); } -#search #input>.action, -#search #input>i { +#search #input > .action, +#search #input > i { margin-right: 0.3em; user-select: none; } @@ -129,23 +129,39 @@ header .search-button { #search #result { visibility: visible; max-height: none; - background-color: #f8f8f8; + background: var(--background); text-align: left; padding: 0; - color: rgba(0, 0, 0, 0.6); + color: var(--textPrimary); height: 0; - transition: .1s ease height, .1s ease padding; + transition: + 0.1s ease height, + 0.1s ease padding; overflow-x: hidden; overflow-y: auto; z-index: 1; } -#search #result>div>*:first-child { +html[dir="rtl"] #search #result { + direction: ltr; +} + +#search #result > div > *:first-child { margin-top: 0; } +html[dir="rtl"] #search #result { + text-align: right; +} + +/*** RTL - Keep search result LTR because it has paths (in english) ***/ +html[dir="rtl"] #search #result ul > * { + direction: ltr; + text-align: left; +} + #search.active #result { - padding: .5em; + padding: 0.5em; height: calc(100% - 4em); } @@ -156,10 +172,10 @@ header .search-button { } #search li { - margin-bottom: .5em; + margin-bottom: 0.5em; } -#search #result>div { +#search #result > div { max-width: 45em; margin: 0 auto; } @@ -177,10 +193,10 @@ header .search-button { } #search.active #result i { - color: #ccc; + color: var(--iconTertiary); } -#search.active #result>p>i { +#search.active #result > p > i { text-align: center; margin: 0 auto; display: table; @@ -189,35 +205,35 @@ header .search-button { #search.active #result ul li a { display: flex; align-items: center; - padding: .3em 0; + padding: 0.3em 0; } #search.active #result ul li a i { - margin-right: .3em; + margin-right: 0.3em; } -#search::-webkit-input-placeholder { - color: rgba(255, 255, 255, .5); -} - -#search:-moz-placeholder { - opacity: 1; - color: rgba(255, 255, 255, .5); +/* I dont think we need these anymore */ +/* #search::-webkit-input-placeholder { + color: var(--textPrimary); } #search::-moz-placeholder { opacity: 1; - color: rgba(255, 255, 255, .5); + color: var(--textPrimary); } #search:-ms-input-placeholder { - color: rgba(255, 255, 255, .5); + color: var(--textPrimary); } +#search #input input::placeholder { + color: var(--textPrimary); +} */ + #search .boxes { - border: 1px solid rgba(0, 0, 0, 0.075); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); - background: #fff; + border: 1px solid var(--borderPrimary); + box-shadow: 0 0 5px var(--borderPrimary); + background: var(--surfacePrimary); margin: 1em 0; } @@ -225,11 +241,15 @@ header .search-button { margin: 0; font-weight: 500; font-size: 1em; - color: #212121; - padding: .5em; + color: var(--textSecondary); + padding: 0.5em; } -#search .boxes>div { +html[dir="rtl"] #search .boxes h3 { + text-align: right; +} + +#search .boxes > div { display: flex; flex-wrap: wrap; justify-content: space-between; @@ -237,7 +257,7 @@ header .search-button { margin-bottom: -1em; } -#search .boxes>div>div { +#search .boxes > div > div { background: var(--blue); color: #fff; text-align: center; diff --git a/frontend/src/css/listing-icons.css b/frontend/src/css/listing-icons.css new file mode 100644 index 00000000..d0bdb043 --- /dev/null +++ b/frontend/src/css/listing-icons.css @@ -0,0 +1,253 @@ +/* Icons */ + +/* General */ + +.file-icons [aria-label^="."] { + opacity: 0.33; +} +.file-icons [data-ext=".bak"] { + opacity: 0.33; +} + +.file-icons [data-type="audio"] i::before { + content: "volume_up"; +} +.file-icons [data-type="blob"] i::before { + content: "insert_drive_file"; +} +.file-icons [data-type="image"] i::before { + content: "image"; +} +.file-icons [data-type="pdf"] i::before { + content: "description"; +} +.file-icons [data-type="text"] i::before { + content: "description"; +} +.file-icons [data-type="video"] i::before { + content: "movie"; +} +.file-icons [data-type="invalid_link"] i::before { + content: "link_off"; +} + +/* #f90 - Image */ + +.file-icons [data-ext=".ai"] i::before, +.file-icons [data-ext=".odg"] i::before, +.file-icons [data-ext=".xcf"] i::before { + content: "image"; +} + +/* #f90 - Presentation */ + +.file-icons [data-ext=".odp"] i::before, +.file-icons [data-ext=".ppt"] i::before, +.file-icons [data-ext=".pptx"] i::before { + content: "slideshow"; +} + +/* #0f0 - Spreadsheet/Database */ + +.file-icons [data-ext=".csv"] i::before, +.file-icons [data-ext=".db"] i::before, +.file-icons [data-ext=".odb"] i::before, +.file-icons [data-ext=".ods"] i::before, +.file-icons [data-ext=".xls"] i::before, +.file-icons [data-ext=".xlsx"] i::before { + content: "border_all"; +} + +/* #00f - Document */ + +.file-icons [data-ext=".doc"] i::before, +.file-icons [data-ext=".docx"] i::before, +.file-icons [data-ext=".log"] i::before, +.file-icons [data-ext=".odt"] i::before, +.file-icons [data-ext=".rtf"] i::before { + content: "description"; +} + +/* #999 - Code */ + +.file-icons [data-ext=".c"] i::before, +.file-icons [data-ext=".cpp"] i::before, +.file-icons [data-ext=".cs"] i::before, +.file-icons [data-ext=".css"] i::before, +.file-icons [data-ext=".go"] i::before, +.file-icons [data-ext=".h"] i::before, +.file-icons [data-ext=".html"] i::before, +.file-icons [data-ext=".java"] i::before, +.file-icons [data-ext=".js"] i::before, +.file-icons [data-ext=".json"] i::before, +.file-icons [data-ext=".kt"] i::before, +.file-icons [data-ext=".php"] i::before, +.file-icons [data-ext=".py"] i::before, +.file-icons [data-ext=".rb"] i::before, +.file-icons [data-ext=".rs"] i::before, +.file-icons [data-ext=".vue"] i::before, +.file-icons [data-ext=".xml"] i::before, +.file-icons [data-ext=".yml"] i::before { + content: "code"; +} + +/* #999 - Executable */ + +.file-icons [data-ext=".apk"] i::before, +.file-icons [data-ext=".bat"] i::before, +.file-icons [data-ext=".exe"] i::before, +.file-icons [data-ext=".jar"] i::before, +.file-icons [data-ext=".ps1"] i::before, +.file-icons [data-ext=".sh"] i::before { + content: "web_asset"; +} + +/* #999 - Installer */ + +.file-icons [data-ext=".deb"] i::before, +.file-icons [data-ext=".msi"] i::before, +.file-icons [data-ext=".pkg"] i::before, +.file-icons [data-ext=".rpm"] i::before { + content: "archive"; +} + +/* #999 - Compressed */ + +.file-icons [data-ext=".7z"] i::before, +.file-icons [data-ext=".bz2"] i::before, +.file-icons [data-ext=".cab"] i::before, +.file-icons [data-ext=".gz"] i::before, +.file-icons [data-ext=".rar"] i::before, +.file-icons [data-ext=".tar"] i::before, +.file-icons [data-ext=".xz"] i::before, +.file-icons [data-ext=".zip"] i::before, +.file-icons [data-ext=".zst"] i::before { + content: "folder_zip"; +} + +/* #999 - Disk */ + +.file-icons [data-ext=".ccd"] i::before, +.file-icons [data-ext=".dmg"] i::before, +.file-icons [data-ext=".iso"] i::before, +.file-icons [data-ext=".mdf"] i::before, +.file-icons [data-ext=".vdi"] i::before, +.file-icons [data-ext=".vhd"] i::before, +.file-icons [data-ext=".vmdk"] i::before, +.file-icons [data-ext=".wim"] i::before { + content: "album"; +} + +/* #999 - Font */ + +.file-icons [data-ext=".otf"] i::before, +.file-icons [data-ext=".ttf"] i::before, +.file-icons [data-ext=".woff"] i::before, +.file-icons [data-ext=".woff2"] i::before { + content: "font_download"; +} + +/* Colors */ + +/* General */ + +.file-icons [data-type="audio"] i { + color: var(--icon-yellow); +} +.file-icons [data-type="image"] i { + color: var(--icon-orange); +} +.file-icons [data-type="video"] i { + color: var(--icon-violet); +} +.file-icons [data-type="invalid_link"] i { + color: var(--icon-red); +} + +/* #f00 - Adobe/Oracle */ + +.file-icons [data-ext=".ai"] i, +.file-icons [data-ext=".java"] i, +.file-icons [data-ext=".jar"] i, +.file-icons [data-ext=".psd"] i, +.file-icons [data-ext=".rb"] i, +.file-icons [data-ext=".pdf"] i { + color: var(--icon-red); +} + +/* #f90 - Image/Presentation */ + +.file-icons [data-ext=".html"] i, +.file-icons [data-ext=".odg"] i, +.file-icons [data-ext=".odp"] i, +.file-icons [data-ext=".ppt"] i, +.file-icons [data-ext=".pptx"] i, +.file-icons [data-ext=".vue"] i, +.file-icons [data-ext=".xcf"] i { + color: var(--icon-orange); +} + +/* #ff0 - Various */ + +.file-icons [data-ext=".css"] i, +.file-icons [data-ext=".js"] i, +.file-icons [data-ext=".json"] i, +.file-icons [data-ext=".zip"] i { + color: var(--icon-yellow); +} + +/* #0f0 - Spreadsheet/Google */ + +.file-icons [data-ext=".apk"] i, +.file-icons [data-ext=".dex"] i, +.file-icons [data-ext=".go"] i, +.file-icons [data-ext=".ods"] i, +.file-icons [data-ext=".xls"] i, +.file-icons [data-ext=".xlsx"] i { + color: var(--icon-green); +} + +/* #00f - Document/Microsoft/Apple/Closed */ + +.file-icons [data-ext=".aac"] i, +.file-icons [data-ext=".bat"] i, +.file-icons [data-ext=".cab"] i, +.file-icons [data-ext=".cs"] i, +.file-icons [data-ext=".dmg"] i, +.file-icons [data-ext=".doc"] i, +.file-icons [data-ext=".docx"] i, +.file-icons [data-ext=".emf"] i, +.file-icons [data-ext=".exe"] i, +.file-icons [data-ext=".ico"] i, +.file-icons [data-ext=".mp2"] i, +.file-icons [data-ext=".mp3"] i, +.file-icons [data-ext=".mp4"] i, +.file-icons [data-ext=".mpg"] i, +.file-icons [data-ext=".msi"] i, +.file-icons [data-ext=".odt"] i, +.file-icons [data-ext=".ps1"] i, +.file-icons [data-ext=".rtf"] i, +.file-icons [data-ext=".vob"] i, +.file-icons [data-ext=".wim"] i { + color: var(--icon-blue); +} + +/* #60f - Various */ + +.file-icons [data-ext=".iso"] i, +.file-icons [data-ext=".php"] i, +.file-icons [data-ext=".rar"] i { + color: var(--icon-violet); +} + +/* Overrides */ + +.file-icons [data-dir="true"] i { + color: var(--icon-blue); +} +.file-icons [data-dir="true"] i::before { + content: "folder"; +} +.file-icons [aria-selected="true"] i { + color: var(--iconSecondary); +} diff --git a/frontend/src/css/listing.css b/frontend/src/css/listing.css index bdaec664..d55fe67c 100644 --- a/frontend/src/css/listing.css +++ b/frontend/src/css/listing.css @@ -1,7 +1,11 @@ +html[dir="rtl"] #listing { + margin-right: 16em; +} + #listing h2 { margin: 0 0 0 0.5em; - font-size: .9em; - color: rgba(0, 0, 0, 0.38); + font-size: 0.9em; + color: var(--textPrimary); font-weight: 500; } @@ -10,21 +14,25 @@ overflow: hidden; } -#listing>div { +#listing > div { display: flex; flex-wrap: wrap; justify-content: flex-start; } #listing .item { - background-color: #fff; + background: var(--surfacePrimary); + border-color: var(--divider); position: relative; display: flex; flex-wrap: nowrap; - color: #6f6f6f; - transition: .1s ease background, .1s ease opacity; + color: var(--textPrimary); + transition: + 0.1s ease background, + 0.1s ease opacity; align-items: center; cursor: pointer; + user-select: none; } #listing .item div:last-of-type { @@ -55,6 +63,7 @@ #listing .item img { width: 4em; height: 4em; + object-fit: cover; margin-right: 0.1em; vertical-align: bottom; } @@ -65,13 +74,13 @@ margin: 1em auto; display: block !important; width: 95%; - color: rgba(0, 0, 0, 0.3); + color: var(--textPrimary); font-weight: 500; } .message i { font-size: 2.5em; - margin-bottom: .2em; + margin-bottom: 0.2em; display: block; } @@ -82,14 +91,18 @@ #listing.mosaic .item { width: calc(33% - 1em); - margin: .5em; + margin: 0.5em; padding: 0.5em; border-radius: 0.2em; - box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .12); + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.06), + 0 1px 2px rgba(0, 0, 0, 0.12); } #listing.mosaic .item:hover { - box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !important; + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.12), + 0 1px 2px rgba(0, 0, 0, 0.24) !important; } #listing.mosaic .header { @@ -104,6 +117,41 @@ width: calc(100% - 5vw); } +#listing.mosaic.gallery .item div:first-of-type { + width: 100%; + height: 12em; +} + +#listing.mosaic.gallery .item div:last-of-type { + position: absolute; + bottom: 0.5em; + padding: 1em; + width: calc(100% - 1em); + text-align: center; +} + +#listing.mosaic.gallery .item[data-type="image"] div:last-of-type { + color: white; + background: linear-gradient(#0000, #0009); +} + +#listing.mosaic.gallery .item i { + width: 100%; + margin-right: 0; + font-size: 8em; + text-align: center; +} + +#listing.mosaic.gallery .item img { + width: 100%; + height: 100%; +} + +#listing.gallery .size, +#listing.gallery .modified { + display: none; +} + #listing.list { flex-direction: column; width: 100%; @@ -114,7 +162,7 @@ #listing.list .item { width: 100%; margin: 0; - border: 1px solid rgba(0, 0, 0, 0.1); + border: 1px solid var(--borderPrimary); padding: 1em; border-top: 0; } @@ -123,9 +171,9 @@ display: none; } -#listing .item[aria-selected=true] { +#listing .item[aria-selected="true"] { background: var(--blue) !important; - color: #fff !important; + color: var(--iconSecondary) !important; } #listing.list .item div:first-of-type { @@ -157,26 +205,26 @@ #listing .item.header { display: none !important; - background-color: #ccc; + background-color: var(--iconTertiary); } #listing.list .header i { font-size: 1.5em; vertical-align: middle; - margin-left: .2em; + margin-left: 0.2em; } #listing.list .item.header { display: flex !important; - background: #fafafa; + background: var(--background); z-index: 999; - padding: .85em; + padding: 0.85em; border: 0; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid var(--borderPrimary); } -#listing.list .item.header>div:first-child { - width: 0; +#listing.list .item.header > div { + width: 100%; } #listing.list .item.header .name { @@ -187,16 +235,11 @@ color: inherit; } -#listing.list .item.header>div:first-child { - width: 0; -} - #listing.list .name { font-weight: normal; -} - -#listing.list .item.header .name { - margin-right: 3em; + word-wrap: break-word; + word-break: break-all; + white-space: pre-wrap; } #listing.list .header span { @@ -205,7 +248,7 @@ #listing.list .header i { opacity: 0; - transition: .1s ease all; + transition: 0.1s ease all; } #listing.list .header p:hover i, @@ -227,7 +270,7 @@ height: 4em; padding: 0.5em 0.5em 0.5em 1em; justify-content: space-between; - transition: .2s ease bottom; + transition: 0.2s ease bottom; } #listing #multiple-selection.active { @@ -236,5 +279,5 @@ #listing #multiple-selection p, #listing #multiple-selection i { - color: #fff; + color: var(--iconSecondary); } diff --git a/frontend/src/css/login.css b/frontend/src/css/login.css index b97ae7cd..62150ee6 100644 --- a/frontend/src/css/login.css +++ b/frontend/src/css/login.css @@ -1,5 +1,5 @@ #login { - background: #fff; + background: var(--surfacePrimary); position: fixed; top: 0; left: 0; @@ -17,7 +17,7 @@ #login h1 { text-align: center; font-size: 2.5em; - margin: .4em 0 .67em; + margin: 0.4em 0 0.67em; } #login form { @@ -34,15 +34,24 @@ } #login #recaptcha { - margin: .5em 0 0; + margin: 0.5em 0 0; } #login .wrong { background: var(--red); color: #fff; - padding: .5em; + padding: 0.5em; text-align: center; - animation: .2s opac forwards; + animation: 0.2s opac forwards; +} + +#login .logout-message { + background: var(--icon-orange); + color: #fff; + padding: 0.5em; + text-align: center; + animation: 0.2s opac forwards; + text-transform: none; } @keyframes opac { @@ -61,5 +70,5 @@ text-transform: lowercase; font-weight: 500; font-size: 0.9rem; - margin: .5rem 0; + margin: 0.5rem 0; } diff --git a/frontend/src/css/mdPreview.css b/frontend/src/css/mdPreview.css new file mode 100644 index 00000000..7d6cab86 --- /dev/null +++ b/frontend/src/css/mdPreview.css @@ -0,0 +1,11 @@ +.md_preview { + padding: 1rem; + border: 1px solid #000; + font-size: 20px; + line-height: 1.2; +} + +#preview-container { + overflow: auto; + flex: 1; +} diff --git a/frontend/src/css/mobile.css b/frontend/src/css/mobile.css index 556ca033..8c0a7641 100644 --- a/frontend/src/css/mobile.css +++ b/frontend/src/css/mobile.css @@ -1,12 +1,12 @@ @media (max-width: 1024px) { nav { - width: 10em + width: 10em; } } @media (max-width: 1024px) { main { - width: calc(100% - 13em) + width: calc(100% - 13em); } } @@ -14,32 +14,54 @@ body { padding-bottom: 5em; } - #listing.list .item .size { + #listing.list .item:not(.header) .size { display: none; } - #listing.list .item .name { + #listing.list .item:not(.header) .name { width: 60%; } + #listing.list .item.header .name { + margin-right: 0; + width: 45%; + } + #listing.list .item.header .size { + width: 25%; + } + #listing.list .item.header .modified { + width: 30%; + } + #listing.list .item.header p { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } #more { - display: inherit + display: inherit; } header .overlay { width: 100%; height: 100%; - background-color: rgba(0, 0, 0, 0.1); + background-color: var(--borderPrimary); } #dropdown { position: fixed; top: 1em; right: 1em; display: block; - background-color: #fff; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + background: var(--surfaceSecondary); + box-shadow: 0 0 5px var(--borderPrimary); transform: scale(0); - transition: .1s ease-in-out transform; + transition: 0.1s ease-in-out transform; transform-origin: top right; z-index: 99999; } + + html[dir="rtl"] #dropdown { + right: unset; + left: 1em; + transform-origin: top left; + } + #dropdown > div { display: block; } @@ -54,7 +76,7 @@ } #dropdown .action span:not(.counter) { display: inline-block; - padding: .4em; + padding: 0.4em; } #dropdown .counter { left: 2.25em; @@ -66,10 +88,13 @@ transform: translateX(-50%); display: flex; align-items: center; - background: #fff; - box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px; + background: var(--surfaceSecondary); + box-shadow: + rgba(0, 0, 0, 0.06) 0px 1px 3px, + rgba(0, 0, 0, 0.12) 0px 1px 2px; width: 95%; max-width: 20em; + z-index: 1; } #file-selection .action { border-radius: 50%; @@ -78,24 +103,43 @@ #file-selection > span { display: inline-block; margin-left: 1em; - color: #6f6f6f; + color: var(--textPrimary); margin-right: auto; } + #file-selection .action span { + display: none; + } nav { top: 0; z-index: 99999; - background: #fff; - height: 100%; + background: var(--surfaceSecondary); + height: 100vh; width: 16em; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); - transition: .1s ease left; + overflow-y: auto; + box-shadow: 0 0 5px var(--borderPrimary); + transition: 0.1s ease left; left: -17em; } + + html[dir="rtl"] nav { + left: unset; + right: -17em; + } nav.active { left: 0; } + + html[dir="rtl"] nav.active { + left: unset; + right: 0; + } + + .shell__divider { + height: 12px; + } + header .search-button, - header>div:first-child>.action { + header .menu-button { display: inherit; } header img { @@ -104,6 +148,23 @@ #listing { margin-bottom: 5em; } + + html[dir="rtl"] #listing { + margin-right: unset; + } + + html[dir="rtl"] .breadcrumbs { + transform: translateX(16em); + } + + html[dir="rtl"] #nav .wrapper { + margin-right: unset; + } + + html[dir="rtl"] .dashboard .row { + margin-right: unset; + } + main { margin: 0 1em; width: calc(100% - 2em); @@ -117,10 +178,22 @@ } @media (max-width: 450px) { - #listing.list .item .modified { + #listing.list .item:not(.header) .modified { display: none; } - #listing.list .item .name { + #listing.list .item:not(.header) .name { width: 100%; } -} \ No newline at end of file + #listing.list .item.header { + padding: 0.75em 0.5em; + } + #listing.list .item.header .name { + width: 34%; + } + #listing.list .item.header .size { + width: 24%; + } + #listing.list .item.header .modified { + width: 42%; + } +} diff --git a/frontend/src/css/styles.css b/frontend/src/css/styles.css index 2da1d242..bab7cd19 100644 --- a/frontend/src/css/styles.css +++ b/frontend/src/css/styles.css @@ -1,6 +1,5 @@ -@import "~normalize.css/normalize.css"; -@import "~noty/lib/noty.css"; -@import "~noty/lib/themes/mint.css"; +@import "normalize.css/normalize.css"; +@import "vue-toastification/dist/index.css"; @import "./_variables.css"; @import "./_buttons.css"; @import "./_inputs.css"; @@ -10,13 +9,74 @@ @import "./base.css"; @import "./header.css"; @import "./listing.css"; +@import "./listing-icons.css"; +@import "./upload-files.css"; @import "./dashboard.css"; @import "./login.css"; +@import "./mobile.css"; +@import "./epubReader.css"; +@import "./mdPreview.css"; +@import "./context-menu.css"; + +/* For testing only + :focus { + outline: 2px solid crimson !important; + border-radius: 3px !important; +} */ .link { color: var(--blue); } +#loading { + background: var(--background); +} +#loading .spinner > div { + background: var(--iconPrimary); +} + +main .spinner { + display: block; + text-align: center; + line-height: 0; + padding: 1em 0; +} + +main .spinner > div { + width: 0.8em; + height: 0.8em; + margin: 0 0.1em; + font-size: 1em; + background: var(--iconPrimary); + border-radius: 100%; + display: inline-block; + animation: sk-bouncedelay 1.4s infinite ease-in-out both; +} + +main .spinner .bounce1 { + animation-delay: -0.32s; +} + +main .spinner .bounce2 { + animation-delay: -0.16s; +} + +.delayed { + animation: delayed linear 100ms; +} + +@keyframes delayed { + 0% { + opacity: 0; + } + 99% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + /* * * * * * * * * * * * * * * * * ACTION * * * * * * * * * * * * * * * * */ @@ -27,7 +87,7 @@ transition: 0.2s ease all; border: 0; margin: 0; - color: #546E7A; + color: var(--action); border-radius: 50%; background: transparent; padding: 0; @@ -37,19 +97,20 @@ position: relative; } -.action.disabled { +.action.disabled, +.action[disabled] { opacity: 0.2; cursor: not-allowed; } .action i { padding: 0.4em; - transition: .1s ease-in-out all; + transition: 0.1s ease-in-out all; border-radius: 50%; } .action:hover { - background-color: rgba(0, 0, 0, .1); + background-color: var(--hover); } .action ul { @@ -65,12 +126,12 @@ .action ul li { line-height: 1; - padding: .7em; - transition: .1s ease background-color; + padding: 0.7em; + transition: 0.1s ease background-color; } .action ul li:hover { - background-color: rgba(0, 0, 0, 0.04); + background-color: var(--divider); } #click-overlay { @@ -84,7 +145,7 @@ } #click-overlay.active { - display: block; + visibility: visible; } .action .counter { @@ -93,21 +154,21 @@ bottom: 0; right: 0; background: var(--blue); - color: #fff; + color: var(--iconSecondary); border-radius: 50%; - font-size: .75em; - width: 1.5em; - height: 1.5em; + font-size: 0.75em; + width: 1.8em; + height: 1.8em; text-align: center; - line-height: 1.25em; - border: 2px solid white; + line-height: 1.55em; + font-weight: bold; + border: 2px solid var(--borderPrimary); } - /* PREVIEWER */ #previewer { - background-color: rgba(0, 0, 0, 0.9); + background-color: rgba(0, 0, 0, 0.99); position: fixed; top: 0; left: 0; @@ -117,35 +178,42 @@ overflow: hidden; } -#previewer .bar { - width: 100%; - text-align: right; - display: flex; - padding: 0.5em; - height: 3.7em; -} - -#previewer .action:first-of-type { - margin-right: auto; -} - -#previewer .action i { +#previewer header { + background: none; color: #fff; + border-bottom: 0px; + box-shadow: 0px 0px 0px; + z-index: 19999; } -#previewer .action:hover { - background-color: rgba(255, 255, 255, 0.3) +#previewer header > .action i { + color: #fff; + text-shadow: 1px 1px 1px #000000; } -#previewer .action span { +#previewer header > title { + white-space: nowrap; + text-shadow: 1px 1px 1px #000000; +} + +@media (min-width: 738px) { + #previewer header #dropdown .action i { + color: #fff; + text-shadow: 1px 1px 1px #000000; + } +} + +#previewer header .action:hover { + background-color: rgba(255, 255, 255, 0.3); +} + +#previewer header .action span { display: none; } #previewer .preview { - margin: 2em auto 4em; - max-width: 80%; text-align: center; - height: calc(100vh - 9.7em); + height: 100%; } #previewer .preview pre { @@ -160,92 +228,146 @@ margin: 0; } -#previewer .pdf { - width: 100%; +#previewer .preview audio { + width: 95%; + height: 88%; +} + +#previewer .preview video { height: 100%; } -#previewer h2.message { - color: rgba(255, 255, 255, 0.5) +#previewer .vjs-error-display { + margin-top: 40%; } -#previewer>button { +#previewer .preview .info { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 1.5em; + color: #fff; +} +#previewer .preview .info .title { + margin-bottom: 1em; +} +#previewer .preview .info .title i { + display: block; + margin-bottom: 0.1em; + font-size: 4em; +} +#previewer .preview .info .button { + display: inline-block; +} +#previewer .preview .info .button:hover { + background-color: rgba(255, 255, 255, 0.2); +} +#previewer .preview .info .button i { + display: block; + margin-bottom: 4px; + font-size: 1.3em; +} + +#previewer .pdf { + width: 100%; + height: 100%; + padding-top: 4em; +} + +#previewer h2.message { + color: rgba(255, 255, 255, 0.5); +} + +#previewer > button { margin: 0; position: fixed; top: 50%; transform: translateY(-50%); + background-color: rgba(80, 80, 80, 0.5); + color: white; + border-radius: 50%; + cursor: pointer; + border: 0; + margin: 0; + padding: 0; + transition: 0.2s ease all; } -#previewer>button:first-of-type { +#previewer > button.hidden { + opacity: 0; + visibility: hidden; +} + +#previewer > button > i { + padding: 0.4em; +} + +#previewer > button:first-of-type { left: 0.5em; } -#previewer>button:last-of-type { +#previewer > button:last-of-type { right: 0.5em; } +#previewer .spinner { + text-align: center; + position: fixed; + top: calc(50% + 1.85em); + left: 50%; + transform: translate(-50%, -50%); +} + +#previewer .spinner > div { + width: 18px; + height: 18px; + background: var(--iconPrimary); +} + /* EDITOR */ #editor-container { - background-color: #fafafa; + display: flex; + flex-direction: column; + justify-content: center; + background-color: var(--background); position: fixed; + padding-top: 4em; top: 0; left: 0; + height: 100%; width: 100%; - z-index: 9999; + z-index: 9998; overflow: hidden; } #editor-container .bar { - width: 100%; - text-align: right; - display: flex; - padding: 0.5em; - height: 3.7em; - background-color: #fff; - border-bottom: 1px solid rgba(0, 0, 0, 0.075); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); -} - -#editor-container .title { - margin-right: auto; - padding: 0 1em; - line-height: 2.7em; - overflow: hidden; - word-break: break-word; -} - -#previewer .title span { - font-size: 1.2em; + background: var(--surfacePrimary); } #editor-container #editor { - height: calc(100vh - 8.2em); + flex: 1; } -#editor-container #breadcrumbs { +#editor-container .breadcrumbs { height: 2.3em; padding: 0 1em; + position: relative; + top: 0; } -#editor-container #breadcrumbs span { - font-size: 12px; +/*** RTL - flip and position arrow of path ***/ +html[dir="rtl"] .breadcrumbs .chevron { + transform: scaleX(-1) translateX(16em); } -/* * * * * * * * * * * * * * * * - * PROMPT * - * * * * * * * * * * * * * * * */ - -.noty_buttons { - text-align: right; - padding: 0 10px 10px !important; +#editor-container .breadcrumbs span { + font-size: 0.75rem; } -.noty_buttons button { - background: rgba(0, 0, 0, 0.05); - border: 1px solid rgba(0,0,0,0.1); - box-shadow: 0 0 0 0; - font-size: 14px; +#editor-container .breadcrumbs i { + font-size: 1rem; } /* * * * * * * * * * * * * * * * @@ -260,7 +382,7 @@ .credits > span { display: block; - margin: .3em 0; + margin: 0.3em 0; } .credits a, @@ -269,18 +391,26 @@ cursor: pointer; } - /* * * * * * * * * * * * * * * * * ANIMATIONS * * * * * * * * * * * * * * * * */ @keyframes spin { 100% { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); + transform: rotate(360deg); } } +/* * * * * * * * * * * * * * * * + * SETTINGS TUS * + * * * * * * * * * * * * * * * */ + +.tusConditionalSettings input:disabled { + background-color: #ddd; + color: #999; + cursor: not-allowed; +} + /* * * * * * * * * * * * * * * * * SETTINGS RULES * * * * * * * * * * * * * * * * */ @@ -288,20 +418,20 @@ .rules > div { display: flex; align-items: center; - margin: .5rem 0; + margin: 0.5rem 0; } .rules input[type="checkbox"] { - margin-right: .2rem; + margin-right: 0.2rem; } .rules input[type="text"] { border: 1px solid#ddd; - padding: .2rem; + padding: 0.2rem; } .rules label { - margin-right: .5rem; + margin-right: 0.5rem; } .rules button { @@ -309,8 +439,25 @@ } .rules button.delete { - padding: .2rem .5rem; - margin-left: .5rem; + padding: 0.2rem 0.5rem; + margin-left: 0.5rem; } -@import './mobile.css'; +/* * * * * * * * * * * * * * * * + * RTL overrides * + * * * * * * * * * * * * * * * */ + +html[dir="rtl"] .card-content textarea { + direction: ltr; + text-align: left; +} + +html[dir="rtl"] .card-content .small + input { + direction: ltr; + text-align: left; +} + +html[dir="rtl"] .card.floating .card-content .file-list { + direction: ltr; + text-align: left; +} diff --git a/frontend/src/css/upload-files.css b/frontend/src/css/upload-files.css new file mode 100644 index 00000000..ce864182 --- /dev/null +++ b/frontend/src/css/upload-files.css @@ -0,0 +1,61 @@ +.upload-files .card.floating { + left: auto; + top: auto; + margin: 0; + right: 0; + bottom: 0; + transform: none; +} + +.upload-files .file { + margin-bottom: 8px; +} + +.upload-files .file .file-name { + font-size: 1.1em; + display: flex; + align-items: center; +} + +.upload-files .file .file-name i { + margin-right: 5px; +} + +.upload-files .file .file-progress { + margin-top: 2px; + width: 100%; + height: 5px; +} + +.upload-files .file .file-progress div { + height: 100%; + background-color: #40c4ff; + width: 0; + transition: 0.2s ease width; + border-radius: 10px; +} + +.upload-files.closed .card-content { + display: none; + padding: 0em 1em 1em 1em; +} + +.upload-files .card .card-title { + display: flex; + align-items: center; + justify-content: center; + font-size: 0.8em; + padding: 1em 1em 0em; +} + +.upload-files.closed .card-title { + font-size: 0.7em; + padding: 0.5em 1em; +} + +@media (max-width: 450px) { + .upload-files .card.floating { + max-width: 100%; + width: 100%; + } +} diff --git a/frontend/src/i18n/ar.json b/frontend/src/i18n/ar.json index 5a0e552d..cadd5402 100644 --- a/frontend/src/i18n/ar.json +++ b/frontend/src/i18n/ar.json @@ -1,15 +1,20 @@ { - "permanent": "دائم", "buttons": { - "shell": "Toggle shell", "cancel": "إلغاء", + "clear": "مسح", "close": "إغلاق", + "continue": "متابعة", "copy": "نسخ", "copyFile": "نسخ الملف", "copyToClipboard": "نسخ الى الحافظة", + "copyDownloadLinkToClipboard": "نسخ رابط التحميل الى الحافظة", "create": "إنشاء", "delete": "حذف", "download": "تحميل", + "file": "ملف", + "folder": "مجلد", + "fullScreen": "تكبير/تصغير الشاشة", + "hideDotfiles": "إخفاء ملفات النقطة", "info": "معلومات", "more": "المزيد", "move": "نقل", @@ -17,48 +22,79 @@ "new": "جديد", "next": "التالي", "ok": "موافق", - "replace": "استبدال", + "permalink": "الحصول على رابط دائم", "previous": "السابق", + "preview": "معاينة", + "publish": "نشر", "rename": "إعادة تسمية", + "replace": "استبدال", "reportIssue": "إبلاغ عن مشكلة", "save": "حفظ", + "schedule": "جدولة", "search": "بحث", "select": "تحديد", - "share": "مشاركة", - "publish": "نشر", "selectMultiple": "تحديد متعدد", - "schedule": "جدولة", + "share": "مشاركة", + "shell": "تفعيل/إغلاق واجهة اﻷوامر (shell)", + "submit": "تسليم", "switchView": "تغيير العرض", "toggleSidebar": "تبديل الشريط الجانبي", "update": "تحديث", "upload": "رفع", - "permalink": "الحصول على لنك دائم" + "openFile": "فتح الملف", + "openDirect": "View raw", + "discardChanges": "إلغاء التغييرات", + "stopSearch": "توقف عن البحث", + "saveChanges": "حفظ التغييرات", + "editAsText": "تعديل على شكل نص", + "increaseFontSize": "زيادة حجم الخط", + "decreaseFontSize": "تصغير حجم الخط", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "تم نسخ الملف" + "download": { + "downloadFile": "تحميل الملف", + "downloadFolder": "تحميل المجلد", + "downloadSelected": "تحميل الملفات المحددة" + }, + "upload": { + "abortUpload": "هل تريد بالتاكيد إلغاء الرفع؟" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "ليست لديك الصلاحيات للوصول لهذا المحتوى.", "internal": "لقد حدث خطأ ما.", - "notFound": "لا يمكن الوصول لهذا المحتوى." + "notFound": "لا يمكن الوصول لهذا المحتوى.", + "connection": "لا يمكن اﻹتصال بالخادم." }, "files": { - "folders": "المجلدات", - "files": "الملفات", "body": "الصفحة", - "clear": "مسح", "closePreview": "إغلاق العرض", - "home": "الصفحة الاولى", + "files": "الملفات", + "folders": "المجلدات", + "home": "الصفحة الرئيسية", "lastModified": "آخر تعديل", "loading": "جاري التحميل...", "lonely": "تبدو وحيدا هنا...", - "metadata": "بيانات تعريفية", + "metadata": "بيانات وصفية", "multipleSelectionEnabled": "التحديد المتعدد مفعل", - "name": "الإسم", + "name": "اﻹسم", "size": "الحجم", - "sortByName": "الترتيب بالإسم", + "sortByLastModified": "الترتيب بآخر تعديل", + "sortByName": "الترتيب باﻹسم", "sortBySize": "الترتيب بالحجم", - "sortByLastModified": "الترتيب بآخر تعديل" + "noPreview": "لا يوجد عرض مسبق لهذا الملف.", + "csvTooLarge": "حجم الملف اكبر من (<5MB), يرجى تحميل الملف للمعاينة", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "حدد الملف أو المجلد", @@ -69,31 +105,38 @@ }, "del": "حذف البيانات المحددة", "doubleClick": "فتح المجلد او الملف", - "esc": "مسح التحديد وإغلاق النافذة المنبثقة", + "esc": "مسح التحديد و إغلاق النافذة المنبثقة", "f1": "هذه المعلومات", "f2": "إعادة تسمية الملف", "help": "مساعدة" }, "login": { + "createAnAccount": "إنشاء حساب جديد", + "loginInstead": "هل لديك حساب", "password": "كلمة المرور", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "تأكيد كلمة المرور", + "passwordsDontMatch": "كلمة المرور غير متطابقة", + "signup": "إشترك", "submit": "تسجيل دخول", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", "username": "إسم المستخدم", - "wrongCredentials": "بيانات دخول خاطئة" + "usernameTaken": "إسم المستخدم غير متاح", + "wrongCredentials": "بيانات دخول خاطئة", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "دائم", "prompts": { "copy": "نسخ", - "copyMessage": "رجاء حدد المكان لنسخ ملفاتك فيه:", - "currentlyNavigating": "يتم الإنتقال حاليا إلى:", + "copyMessage": "حدد المكان لنسخ ملفاتك فيه:", + "currentlyNavigating": "يتم اﻹنتقال حاليا إلى:", "deleteMessageMultiple": "هل تريد بالتأكيد حذف {count} ملف؟", "deleteMessageSingle": "هل تريد بالتأكيد حذف هذا الملف/المجلد؟", + "deleteMessageShare": "هل تريد بالتأكيد إلغاء مشاركة هذا الملف/المجلد ({path})؟", + "deleteUser": "هل تريد بالتأكيد حذف هذا المستخدم؟", "deleteTitle": "حذف الملفات", - "displayName": "الإسم:", + "displayName": "عرض اﻹسم:", "download": "تحميل الملفات", "downloadMessage": "حدد إمتداد الملف المراد تحميله.", "error": "لقد حدث خطأ ما", @@ -101,136 +144,163 @@ "filesSelected": "تم تحديد {count} ملفات.", "lastModified": "آخر تعديل", "move": "نقل", - "moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:", + "moveMessage": "اختر منزلاً جديداً لملفك (ملفاتك)/مجلدك (مجلداتك):", + "newArchetype": "إنشاء منشور من المنشور اﻷصلي. الملف سيتم انشاءه في مجلد المحتويات.", "newDir": "مجلد جديد", - "newDirMessage": "رجاء أدخل اسم المجلد الجديد.", + "newDirMessage": "أدخل اسم المجلد الجديد.", "newFile": "ملف جديد", - "newFileMessage": "رجاء ادخل اسم الملف الجديد.", + "newFileMessage": "ادخل اسم الملف الجديد.", "numberDirs": "عدد المجلدات", "numberFiles": "عدد الملفات", - "replace": "إستبدال", - "replaceMessage": "أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس الإسم. هل تريد إستبدال الملف الموجود؟\n", "rename": "إعادة تسمية", "renameMessage": "إدراج اسم جديد لـ", + "replace": "إستبدال", + "replaceMessage": "أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس اﻹسم. هل المتابعة مع تخطي هذا الملف ام تريد إستبدال الملف الموجود؟\n", + "schedule": "جدولة", + "scheduleMessage": "أختر الوقت و التاريخ لجدولة نشر هذا المقال.", "show": "عرض", "size": "الحجم", - "schedule": "جدولة", - "scheduleMessage": "أختر الوقت والتاريخ لجدولة نشر هذا المقال.", - "newArchetype": "إنشاء منشور من المنشور الأصلي. الملف سيتم انشاءه في مجلد المحتويات." + "upload": "رفع", + "uploadFiles": "يتم رفع {files} ملفات.", + "uploadMessage": "إختر الملفات التي تريد رفعها.", + "optionalPassword": "كلمة مرور إختيارية", + "resolution": "الدقة", + "discardEditorChanges": "هل تريد بالتأكيد إلغاء التغييرات؟", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "الصور", + "music": "الموسيقى", + "pdf": "PDF", + "pressToSearch": "أضغط زر اﻹدخال للبحث...", + "search": "البحث...", + "typeToSearch": "اكتب للبحث...", + "types": "اﻷنواع", + "video": "فيديوهات" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", - "admin": "Admin", - "administrator": "Administrator", - "allowCommands": "تنفيذ الأوامر", - "allowEdit": "تعديل، إعادة تسمية وحذف الملفات والمجلدات", - "allowNew": "إنشاء ملفات ومجلدات جديدة", - "allowPublish": "نشر مقالات وصفحات جديدة", + "aceEditorTheme": "Ace editor theme", + "admin": "إدارة", + "administrator": "مدير", + "allowCommands": "تنفيذ اﻷوامر", + "allowEdit": "تعديل، إعادة تسمية و حذف الملفات و المجلدات", + "allowNew": "إنشاء ملفات و مجلدات جديدة", + "allowPublish": "نشر مقالات و صفحات جديدة", + "allowSignup": "اسمح للمستخدمين بالاشتراك", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(أتركه فارغاً إن لم ترد تغييره)", + "branding": "الشعار", + "brandingDirectoryPath": "مسار مجلد الشعار", + "brandingHelp": "بإمكانك ان تخصص شكل و مظهر متصفح الملفات الخاص بك عن طريق تغيير اسمه، او تغيير الشعار، او اضافة ستايل مخصص، او حتى تعطيل الروابط الخارجية لـ GitHub.\nلمزيد من المعلومات حول التخصيص، يرجى الاطلاع على {0}.", "changePassword": "تغيير كلمة المرور", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", - "commandsUpdated": "تم تحديث الأوامر", + "commandRunner": "منفذ اﻷوامر", + "commandRunnerHelp": "هنا بإمكانك تعيين اﻷوامر التي سيتم تنفيذها في اﻷحداث المسماة. يجب كتابة أمر واحد في كل سطر. ستكون المتغيرات البيئية (env) {0} و {1} متاحة، حيث {0} نسبي لـ {1}. لمزيد من المعلومات حول هذه الميزة و المتغيرات البيئية المتاحة، يرجى قراءة {2}.", + "commandsUpdated": "تم تحديث اﻷوامر", + "createUserDir": "إنشاء مجلد المستخدم الرئيسي تلقائياً عند إنشاء مستخدم جديد", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "التحميلات المتقطعة", + "tusUploadsHelp": "يدعم متصفح الملفات تحميل الملفات المتقطعة، مما يسمح بتحميلات الملفات بشكل فعال و موثوق و قابلة للمتابغة و متقطعة حتى على الشبكات غير الموثوقة.", + "tusUploadsChunkSize": "يشير إلى الحد اﻷقصى لحجم الطلب (سيتم استخدام التحميل المباشر للتحميلات صغيرة الخحم). يمكنك إدخال عدد صحيح عادي يدل على الحجم بوحدة البايت أو نمظ مثل10MB, 1GB, إلخ.", + "tusUploadsRetryCount": "عدد مرات إعادة المحاولة إذا فشلت عملية تحميل القطعة.", + "userHomeBasePath": "المسار الرئيسي لمجلد المستخدم الرئيسي", + "userScopeGenerationPlaceholder": "سيتم تعيين نطاق المستخدم تلقائياً", + "createUserHomeDirectory": "إنشاء مجلد المستخدم الرئيسي", "customStylesheet": "ستايل مخصص", + "defaultUserDescription": "هذه اﻹعدادات اﻹفتراضية للمستخدمين الجدد.", + "disableExternalLinks": "تعطيل الروابط الخارجية (بإسثناء الوثائق)", + "disableUsedDiskPercentage": "تعطيل الرسم البياني لنسبة القرص المستخدم", + "documentation": "التوثيق", "examples": "أمثلة", + "executeOnShell": "نفيذ اﻷمر على الواجهة (shell)", + "executeOnShellDescription": "يقوم متصفح الملفات بتنفيذ اﻷوامر عن طريق استدعاء البرامج المنفذة مباشرة. إذا كنت تريد تشغيلها عن ظريق واجهة اﻷوامر (shell) مثل Bash أو PowerShell، يمكنك تعريفها هنا مع الوسائظ (arguments) المطلوبة. إذا تم تعيينها، سيتم إضافة اﻷمر الذي تقوم بتنفيذه كوسيط. ينطبق هذا على كل من أوامر المستخدم روابظ الحدث (hooks).", + "globalRules": "هذه مجموعة من القواعد العامة للسماح و المنع. تطبق على كل المستخدمين. يمكنك تحديد قواعد محددة لكل مستخدم لتجاوز القواعد الغامة.", "globalSettings": "إعدادات عامة", + "hideDotfiles": "إخفاء ملفات النقطة", + "insertPath": "ادخل المسار", + "insertRegex": "ادخل تعبيراً منطقياً (regex)", + "instanceName": "اسم النسخة", "language": "اللغة", "lockPassword": "منع المستخدم من تغيير كلمة المرور", "newPassword": "كلمة المرور الجديدة", "newPasswordConfirm": "تأكيد كلمة المرور", "newUser": "مستخدم جديد", "password": "كلمة المرور", - "passwordUpdated": "تم تغيير كلمة المرور", + "passwordUpdated": "تم تغيير كلمة المرور!", + "path": "المسار", + "perm": { + "create": "إنشاء ملفات و مجلدات جديدة", + "delete": "حذف ملفات و مجلدات", + "download": "تحميل", + "execute": "تنفيذ اﻷوامر", + "modify": "تعديل محتويات الملفات", + "rename": "إعادة تسمية او نقل ملفات و مجلدات", + "share": "مشاركة ملفات" + }, "permissions": "الصلاحيات", "permissionsHelp": "يمكنك تعيين المستخدم كـ \"مدير\" أو تحديد الصلاحيات بشكل منفرد.\n إذا قمت بتحديد المستخدم كـ \"مدير\"، باقي الخيارات سيتم تحديدها تلقائياً.\n إدارة المستخدمين تبقى صلاحية فريدة للـ \"مدير\" فقط.\n", "profileSettings": "إعدادات الحساب", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.\n", "ruleExample2": "منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.", "rules": "المجموعات", - "rulesHelp": "يمكنك هنا تحديد مجموعة من شروط السماح والمنع لهذا المستخدم. الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم ولن يستطيع الوصول لها. هنا ندعم الـ regex والـ relative path لنطاق المستخدمين.\n", + "rulesHelp": "يمكنك هنا تحديد مجموعة من شروط السماح و المنع لهذا المستخدم. الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم و لن يستطيع الوصول لها. هنا ندعم الـ regex و الـ relative path لنطاق المستخدمين.\n", "scope": "نطاق", - "settingsUpdated": "تم تعديل الإعدادات", + "setDateFormat": "حدد تنسيق التاريخ", + "settingsUpdated": "تم تعديل اﻹعدادات", + "shareDuration": "مدة المشاركة", + "shareManagement": "إدارة المشاركات", + "shareDeleted": "تم حذف المشاركة!", + "singleClick": "استخدم النقرة الواحدة لفتح الملفات", + "themes": { + "default": "افتراضي (نظام التشغيل)", + "dark": "غامق", + "light": "فاتح", + "title": "موضوع" + }, "user": "المستخدم", - "userCommands": "الأوامر", - "userCommandsHelp": "الأوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة. مثال:\n", + "userCommands": "اﻷوامر", + "userCommandsHelp": "اﻷوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة. مثال:\n", "userCreated": "تم إنشاء المستخدم", + "userDefaults": "إعدادات المستخدم اﻹفتراضية", "userDeleted": "تم حذف المستخدم", "userManagement": "إدارة المستخدمين", + "userUpdated": "تم تعديل المستخدم", "username": "إسم المستخدم", "users": "المستخدمين", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "تم تعديل المستخدم", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "مساعدة", - "login": "Login", - "signup": "Signup", + "hugoNew": "هيوجو جديد", + "login": "تسجيل دخول", "logout": "تسجيل خروج", "myFiles": "ملفاتي", "newFile": "ملف جديد", "newFolder": "مجلد جديد", - "settings": "الإعدادات", - "siteSettings": "إعدادات الموقع", - "hugoNew": "هيوجو جديد", - "preview": "معاينة" + "preview": "عرض مسبق", + "settings": "اﻹعدادات", + "signup": "إشتراك", + "siteSettings": "إعدادات الموقع" }, - "search": { - "images": "الصور", - "music": "الموسيقى", - "pdf": "PDF", - "types": "الأنواع", - "video": "فيديوهات", - "search": "البحث...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "تم نسخ الملف" }, "time": { - "unit": "وحدة الوقت", - "seconds": "ثواني", - "minutes": "دقائق", + "days": "أيام", "hours": "ساعات", - "days": "أيام" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "دقائق", + "seconds": "ثواني", + "unit": "وحدة الوقت" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/bg.json b/frontend/src/i18n/bg.json new file mode 100644 index 00000000..2cba2b98 --- /dev/null +++ b/frontend/src/i18n/bg.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Отмени", + "clear": "Изчисти", + "close": "Затвори", + "continue": "Продължи", + "copy": "Копирай", + "copyFile": "Копирай файл", + "copyToClipboard": "Копирай в клипборда", + "copyDownloadLinkToClipboard": "Копирай линк за сваляне в клипборда", + "create": "Създай", + "delete": "Изтрий", + "download": "Свали", + "file": "Файл", + "folder": "Папка", + "fullScreen": "Превключване на цял екран", + "hideDotfiles": "Скрий файлове започващи с точка", + "info": "Информация", + "more": "Повече", + "move": "Премести", + "moveFile": "Премести файл", + "new": "Нов", + "next": "Следващ", + "ok": "Потвърди", + "permalink": "Вземи постоянен линк", + "previous": "Предишен", + "preview": "Преглед", + "publish": "Публикуване", + "rename": "Преименуване", + "replace": "Замяна", + "reportIssue": "Докладвай проблем", + "save": "Запис", + "schedule": "График", + "search": "Търсене", + "select": "Избери", + "selectMultiple": "Избери няколко", + "share": "Сподели", + "shell": "Превключване на терминала", + "submit": "Изпрати", + "switchView": "Смени изгледа", + "toggleSidebar": "Превключване на страничен панел", + "update": "Обнови", + "upload": "Качи", + "openFile": "Отвори файл", + "openDirect": "View raw", + "discardChanges": "Изчисти", + "stopSearch": "Stop searching", + "saveChanges": "Запиши промените", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Свали файл", + "downloadFolder": "Свали папка", + "downloadSelected": "Свали избраното" + }, + "upload": { + "abortUpload": "Сигурни ли сте, че искате да прекратите?" + }, + "errors": { + "forbidden": "Нямате право на достъп.", + "internal": "Взникна грешка.", + "notFound": "Локацията не може да бъде достигната.", + "connection": "Сървъра не може да бъде достигнат." + }, + "files": { + "body": "Тяло", + "closePreview": "Затвори прегледа", + "files": "Файлове", + "folders": "Папки", + "home": "Начало", + "lastModified": "Последна промяна", + "loading": "Зареждане ...", + "lonely": "Тук е самотно ...", + "metadata": "Метаданни", + "multipleSelectionEnabled": "Множествения избор е разрешен", + "name": "Име", + "size": "Размер", + "sortByLastModified": "Подредба по последна промяна", + "sortByName": "Подредба по име", + "sortBySize": "Подредба по размер", + "noPreview": "За този файл не е наличен преглед.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "избери файл или директория", + "ctrl": { + "click": "избери файлове или директории", + "f": "отваря търсене", + "s": "запиши файл или свари директория тук" + }, + "del": "изтрий избраните", + "doubleClick": "отвори файл или директория", + "esc": "изтрий избраното и/или затвори", + "f1": "тази информация", + "f2": "преименувай файл", + "help": "Помощ" + }, + "login": { + "createAnAccount": "Създай акаунт", + "loginInstead": "Вече имаш акаунт", + "password": "Парола", + "passwordConfirm": "Парола Потвърждение", + "passwordsDontMatch": "Паролите не съвпадат", + "signup": "Абониране", + "submit": "Вход", + "username": "Потребителско име", + "usernameTaken": "Потребителското име вече се използва", + "wrongCredentials": "Грешни потребителско име и/или парола", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "Бяхте разлогнати поради неактивност" + } + }, + "permanent": "Постоянен", + "prompts": { + "copy": "Копирай", + "copyMessage": "Избери къде да копираш файловете си:", + "currentlyNavigating": "В момента навигира към:", + "deleteMessageMultiple": "Сигурни ли сте, че искате да изтриете {count} файл(а)?", + "deleteMessageSingle": "Сигурни ли сте, че искате да изтриете този файл/папка?", + "deleteMessageShare": "Сигурни ли сте, че искате на изтриете това споделяне({path})?", + "deleteUser": "Сигурни ли сте, че искате да изтриете този потребител?", + "deleteTitle": "Изтрий файлове", + "displayName": "Име за показване:", + "download": "Свали файлове", + "downloadMessage": "Изберете формата, в който искате да свалите.", + "error": "Възникна грешка", + "fileInfo": "Информация за файла", + "filesSelected": "Избрани са {count} файла.", + "lastModified": "Последна промяна", + "move": "Премести", + "moveMessage": "Избери ново място за вашите файл(ове)/папк(а/и):", + "newArchetype": "Създай нова публикация базирана на шаблон. Вашия файл ще бъде създаден в папката за съдържание.", + "newDir": "Нова директория", + "newDirMessage": "Именувайте вашата нова директория.", + "newFile": "Нов файл", + "newFileMessage": "Именувайте вашия нов файл.", + "numberDirs": "Брой на директорийте", + "numberFiles": "Брой на файловете", + "rename": "Преименувай", + "renameMessage": "Вмъкни ново име за", + "replace": "Замени", + "replaceMessage": "Файл, които се опитвате да качите има конфликтно име. Искате ли да го пропуснете и да продължите качването или да замените съществуващия файл?\n", + "schedule": "График", + "scheduleMessage": "Изберете дата и час за публикуване на тази публикация.", + "show": "Покажи", + "size": "Размер", + "upload": "Качване", + "uploadFiles": "Качване на {files} файла...", + "uploadMessage": "Изберете опция за качване.", + "optionalPassword": "Опционална парола", + "resolution": "Резолюция", + "discardEditorChanges": "Сигурни ли сте, че искате да откажете направените промени?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Изображения", + "music": "Музика", + "pdf": "PDF", + "pressToSearch": "За търсене, натиснете Enter ...", + "search": "Търсене ...", + "typeToSearch": "Пишете за търсене ...", + "types": "Типове", + "video": "Видео" + }, + "settings": { + "aceEditorTheme": "Тема на \"Ace редактор\"", + "admin": "Админ", + "administrator": "Администратор", + "allowCommands": "Изпълни команди", + "allowEdit": "Редактира, преименува и изтрива файлове и директории", + "allowNew": "Създава нови файлове и директорий", + "allowPublish": "Публикува нови публикации и страници", + "allowSignup": "Разреши потребителите да се абонират", + "hideLoginButton": "Скрий логин бутона от публичните страници", + "avoidChanges": "(остави празно за да избегнеш промени)", + "branding": "Брандиране", + "brandingDirectoryPath": "Брандиране - път до директория", + "brandingHelp": "Можете да настроите как изглежда вашия File Browser, като промените името и логото му, да добавите стилове и дори да забраните външни линкове към GitHub.\nЗа повече информация за бандиране се обърнете към {0}", + "changePassword": "Промени парола", + "commandRunner": "Изпълнение на команди", + "commandRunnerHelp": "Тук можете да зададете команди, които да се изпълнят при определени събития. Пишете по една команда на ред. Системните променливите {0} и {1} ще са на разположение, като {0} е релативна на {1}. За повече информация относно тази възможност и наличните системни променливи, моля прочетете {2}.", + "commandsUpdated": "Командите са запаметени!", + "createUserDir": "Създай автоматично собствена директория на потребителя, когато го добавяш.", + "minimumPasswordLength": "Минимална дължина на паролата", + "tusUploads": "Качване на части", + "tusUploadsHelp": "File Browser поддържа качване на части, което позволява съзадавнето на ефективно, надеждно, и възобновяемо качване на части дори и при ненадеждна мрежа.", + "tusUploadsChunkSize": "Максимален размер на заявката (за малки качвания ще бъдат използвано директо качване). Можете да въведете цяло число, което означава размера на данните в байтове, или пък текст от вида на 10MB, 1GB и т.н..", + "tusUploadsRetryCount": "Брой повторения, когато част от файл не се качи успешно.", + "userHomeBasePath": "Основен път до личните директории на потребителите", + "userScopeGenerationPlaceholder": "Обхватът ще бъде автоматично генериран", + "createUserHomeDirectory": "Създай лична директория на потребителя", + "customStylesheet": "Потребителски Стилове", + "defaultUserDescription": "Настройки по подразбиране за нови потребители.", + "disableExternalLinks": "Забрани външните връзки (с изключение на документацията)", + "disableUsedDiskPercentage": "Забрани графиката за използване на диска", + "documentation": "документация", + "examples": "Примери", + "executeOnShell": "Изпълни в шела", + "executeOnShellDescription": "По подразбиране, File Browser изпълнява командите директно. Ако искате да ги изпълните в сесия (като Bash или PowerShell), можете да я дефинирате тук заедно с необходимите аргументи и флагове. Ако това е зададено, командата която изпълните ще бъде добавена като аргумент. Това се отнася както за потребителски команди, така и за обработка на събития.", + "globalRules": "Това е общия списък от правила за разрешения или забрани. Те са приложими за всеки потребител. Можете да дефинирате специфични правила в настройките на всеки потребител, които ще имат приоритет над общите.", + "globalSettings": "Глобални Настройки", + "hideDotfiles": "Скрий фаловете започващи с точка", + "insertPath": "Вмъкни пътя", + "insertRegex": "Вмъкни регулярен израз", + "instanceName": "Име на инстанцията", + "language": "Език", + "lockPassword": "Забрани на потребителя да променя паролата", + "newPassword": "Вашата нова парола", + "newPasswordConfirm": "Потвърди вашата нова парола", + "newUser": "Нов потребител", + "password": "Парола", + "passwordUpdated": "Паролата е променена!", + "path": "Път", + "perm": { + "create": "Създаване на файлове и директорий", + "delete": "Изтриване на файлове и директорий", + "download": "Сваляне", + "execute": "Изпълни команди", + "modify": "Редактирай файлове", + "rename": "Преименувай или премести файлове и директорий", + "share": "Сподели файлове" + }, + "permissions": "Разрешения", + "permissionsHelp": "Можете да зададете потребител да бъде администратор или да изберете разрешения индивидуално. Ако изберете \"Администратор\" всички други опции ще бъдат автоматично отметнати. Управлението на потребителите е привилегия на администратор.\n", + "profileSettings": "Настройки на Профила", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "предотвратете достъпа до всеки файл започващ с точка (като .git, .gitignore) във всяка папка.\n", + "ruleExample2": "блокира достъпа до файл именуван Caddyfile поставен в началото за обхвата.", + "rules": "Правила", + "rulesHelp": "Тук можете да дефинирате списък от правила за разрешаване и забрана за точно този потребител. Блокираните файлове няма да се покажат в списъците и няма да са достъпни за потребителя. Поддържаме регулярни изрази и пътища релативни на обхвата.\n", + "scope": "Обхват", + "setDateFormat": "Задайте точен формат на дата", + "settingsUpdated": "Настройките са обновени!", + "shareDuration": "Продължителност на споделянето", + "shareManagement": "Управление на споделянето", + "shareDeleted": "Споделянето е премахнато!", + "singleClick": "Използвайте единичен клик за да отворите файлове или директорий", + "themes": { + "default": "Настройки по подразбиране", + "dark": "Тъмна", + "light": "Светла", + "title": "Тема" + }, + "user": "Потребител", + "userCommands": "Команди", + "userCommandsHelp": "Списък разделен с интервал от наличните команди за този потребител.\n", + "userCreated": "Потребителя е създаден!", + "userDefaults": "Настройки по подразбиране на потребителя", + "userDeleted": "Потребителя е изтрит!", + "userManagement": "Управление на потребители", + "userUpdated": "Потребителя е обновен!", + "username": "Потребителско име", + "users": "Потребители", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Помощ", + "hugoNew": "Hugo New", + "login": "Вход", + "logout": "Изход", + "myFiles": "Моите файлове", + "newFile": "Нов файл", + "newFolder": "Нова папка", + "preview": "Преглед", + "settings": "Настройки", + "signup": "Абониране", + "siteSettings": "Настройки на сървъра" + }, + "success": { + "linkCopied": "Връзката е копирана!" + }, + "time": { + "days": "Дни", + "hours": "Часове", + "minutes": "Минути", + "seconds": "Секунди", + "unit": "Единица за време" + } +} diff --git a/frontend/src/i18n/ca.json b/frontend/src/i18n/ca.json new file mode 100644 index 00000000..4ce9faa0 --- /dev/null +++ b/frontend/src/i18n/ca.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Cancel·lar", + "clear": "Netejar", + "close": "Tancar", + "continue": "Continuar", + "copy": "Copiar", + "copyFile": "Copiar fitxer", + "copyToClipboard": "Copiar al porta-retalls", + "copyDownloadLinkToClipboard": "Copiar l'enllaç de descàrrega al portapapers", + "create": "Crear", + "delete": "Esborrar", + "download": "Descarregar", + "file": "Fitxer", + "folder": "Carpeta", + "fullScreen": "Canviar a pantalla completa", + "hideDotfiles": "Ocultar fitxers que comencen per punt", + "info": "Info", + "more": "Més", + "move": "Moure", + "moveFile": "Moure fitxer", + "new": "Nou", + "next": "Següent", + "ok": "D'acord", + "permalink": "Enllaç permanent", + "previous": "Anterior", + "preview": "Preview", + "publish": "Publicar", + "rename": "Reanomenar", + "replace": "Substituir", + "reportIssue": "Reportar problema", + "save": "Desar", + "schedule": "Programar", + "search": "Cercar", + "select": "Seleccionar", + "selectMultiple": "Selecció múltiple", + "share": "Compartir", + "shell": "Prem Enter per cercar...", + "submit": "Enviar", + "switchView": "Canviar vista", + "toggleSidebar": "Mostrar/ocultar menú", + "update": "Actualitzar", + "upload": "Pujar", + "openFile": "Obrir fitxer", + "openDirect": "View raw", + "discardChanges": "Descartar", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Descarregar fitxer", + "downloadFolder": "Descarregar directori", + "downloadSelected": "Descarregar seleccionats" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" + }, + "errors": { + "forbidden": "No tens els permisos necessaris per accedir.", + "internal": "La veritat és que alguna cosa ha anat malament.", + "notFound": "No es pot accedir a aquest lloc.", + "connection": "No es pot accedir al servidor." + }, + "files": { + "body": "Cos", + "closePreview": "Tancar vista prèvia", + "files": "Fitxers", + "folders": "Carpetes", + "home": "Inici", + "lastModified": "Última modificació", + "loading": "Carregant...", + "lonely": "Un se sent molt sol aquí...", + "metadata": "Metadades", + "multipleSelectionEnabled": "Selecció múltiple activada", + "name": "Nom", + "size": "Mida", + "sortByLastModified": "Ordenar per última modificació", + "sortByName": "Ordenar per nom", + "sortBySize": "Ordenar per mida", + "noPreview": "La vista prèvia no està disponible per a aquest fitxer.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "seleccionar fitxer o carpeta", + "ctrl": { + "click": "seleccionar múltiples fitxers o carpetes", + "f": "obre la cerca", + "s": "desa un fitxer o el descarrega a la carpeta en què estàs" + }, + "del": "elimina els ítems seleccionats", + "doubleClick": "obre un fitxer o carpeta", + "esc": "neteja la selecció i/o tanca la finestra", + "f1": "aquesta informació", + "f2": "reanomenar fitxer", + "help": "Ajuda" + }, + "login": { + "createAnAccount": "Crear un compte", + "loginInstead": "Usuari ja existent", + "password": "Contrasenya", + "passwordConfirm": "Confirmació de contrasenya", + "passwordsDontMatch": "Les contrasenyes no coincideixen", + "signup": "Registra't", + "submit": "Iniciar sessió", + "username": "Usuari", + "usernameTaken": "Nom d'usuari no disponible", + "wrongCredentials": "Usuari i/o contrasenya incorrectes", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Permanent", + "prompts": { + "copy": "Copiar", + "copyMessage": "Tria el lloc on vols copiar els teus fitxers:", + "currentlyNavigating": "Actualment estàs a:", + "deleteMessageMultiple": "Estàs segur que vols eliminar {count} fitxer(s)?", + "deleteMessageSingle": "Estàs segur que vols eliminar aquest fitxer/carpeta?", + "deleteMessageShare": "Estàs segur que vols eliminar aquest recurs compartit ({path})?", + "deleteUser": "Esteu segur que voleu eliminar aquest usuari?", + "deleteTitle": "Esborrar fitxers", + "displayName": "Nom:", + "download": "Descarregar fitxers", + "downloadMessage": "Tria el format de descàrrega.", + "error": "Alguna cosa ha fallat", + "fileInfo": "Informació del fitxer", + "filesSelected": "{count} fitxers seleccionats.", + "lastModified": "Última modificació", + "move": "Moure", + "moveMessage": "Tria una nova casa per als teus fitxers/carpeta(s):", + "newArchetype": "Crea un nou post basat en un arquetip. El teu fitxer serà creat a la carpeta de contingut.", + "newDir": "Nova carpeta", + "newDirMessage": "Escriu el nom de la nova carpeta.", + "newFile": "Nou fitxer", + "newFileMessage": "Escriu el nom del nou fitxer.", + "numberDirs": "Nombre de carpetes", + "numberFiles": "Nombre de fitxers", + "rename": "Reanomenar", + "renameMessage": "Escriu el nou nom per a", + "replace": "Substituir", + "replaceMessage": "Un dels fitxers que intentes pujar està creant conflicte pel seu nom. Vols canviar el nom del ja existent?\n", + "schedule": "Programar", + "scheduleMessage": "Tria una hora i data per programar la publicació d'aquest post.", + "show": "Mostrar", + "size": "Mida", + "upload": "Pujar", + "uploadFiles": "Pujant {files} fitxers...", + "uploadMessage": "Seleccioneu una opció per pujar.", + "optionalPassword": "Contrasenya opcional", + "resolution": "Resolució", + "discardEditorChanges": "Esteu segur que voleu descartar els canvis que heu fet?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Imatges", + "music": "Música", + "pdf": "PDF", + "pressToSearch": "Prem Enter per cercar...", + "search": "Cercar...", + "typeToSearch": "Escriu per fer una cerca...", + "types": "Tipus", + "video": "Vídeo" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrador", + "allowCommands": "Executar comandes", + "allowEdit": "Editar, reanomenar i esborrar fitxers o carpetes", + "allowNew": "Crear nous fitxers i carpetes", + "allowPublish": "Publicar nous posts i pàgines", + "allowSignup": "Permetre registre d'usuaris", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(deixar en blanc per evitar canvis)", + "branding": "Marca", + "brandingDirectoryPath": "Ruta de la carpeta de personalització de marca", + "brandingHelp": "Pots personalitzar com es veu la teva instància de FileBrowser canviant-li el nom, reemplaçant el logotip, afegint estils personalitzats i fins i tot deshabilitant els enllaços externs que apunten cap a GitHub. \nPer a més informació sobre personalització de marca, si us plau revisa el {0}.", + "changePassword": "Canviar contrasenya", + "commandRunner": "Executor de comandes", + "commandRunnerHelp": "Aquí pots establir les comandes que s'executen en els esdeveniments anomenats. Has d'escriure'n una per línia. Les variables d'entorn {0} i {1} estaran disponibles, sent {0} relativa a {1}. Per a més informació sobre aquesta característica i les variables d'entorn disponibles, si us plau llegeix el {2}.", + "commandsUpdated": "Comandes actualitzades!", + "createUserDir": "Crea automàticament una carpeta d'inici quan s'afegeix un usuari", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Càrregues a trossos", + "tusUploadsHelp": "El File Browser suporta càrregues de fitxers a trossos, permetent la creació de càrregues de fitxers eficients, fiables, reanudables i a trossos fins i tot en xarxes poc fiables.", + "tusUploadsChunkSize": "Indica la mida màxima d'una sol·licitud (s'utilitzaran càrregues directes per a càrregues més petites). Podeu introduir un enter pla que indiqui la mida en bytes o una cadena com 10MB, 1GB, etc.", + "tusUploadsRetryCount": "Nombre de reintents a realitzar si una part falla en carregar-se.", + "userHomeBasePath": "Ruta base per als directoris personals dels usuaris", + "userScopeGenerationPlaceholder": "L'àmbit es generarà automàticament", + "createUserHomeDirectory": "Crear el directori principal de l'usuari", + "customStylesheet": "Modificar full d'estils", + "defaultUserDescription": "Aquestes són les configuracions per defecte per a nous usuaris.", + "disableExternalLinks": "Deshabilitar enllaços externs (excepte documentació)", + "disableUsedDiskPercentage": "Desactivar el gràfic de percentatge de disc utilitzat", + "documentation": "documentació", + "examples": "Exemples", + "executeOnShell": "Executar a la shell", + "executeOnShellDescription": "Per defecte, FileBrowser executa les comandes cridant directament els seus binaris. Si vols executar-los en una shell en lloc (com Bash o PowerShell), pots definir-ho aquí amb els arguments i flags necessaris. Si es defineix, la comanda que s'executa s'afegirà com a argument. Això s'aplica tant a les comandes d'usuari com als ganxos d'esdeveniments.", + "globalRules": "Es tracta d'un conjunt global de regles de permís i rebuig. S'apliquen a tots els usuaris. Pots definir regles específiques en la configuració de cada usuari per anul·lar aquestes.", + "globalSettings": "Ajustos globals", + "hideDotfiles": "Ocultar fitxers que comencen per punt", + "insertPath": "Introdueix la ruta", + "insertRegex": "Introduir expressió regular", + "instanceName": "Nom de la instància", + "language": "Idioma", + "lockPassword": "Evitar que l'usuari canviï la contrasenya", + "newPassword": "La teva nova contrasenya", + "newPasswordConfirm": "Confirma la teva contrasenya", + "newUser": "Nou usuari", + "password": "Contrasenya", + "passwordUpdated": "Contrasenya actualitzada!", + "path": "Ruta", + "perm": { + "create": "Crear fitxers i directoris", + "delete": "Eliminar fitxers i directoris", + "download": "Descarregar", + "execute": "Executar comandes", + "modify": "Editar fitxers", + "rename": "Reanomenar o moure fitxers i directoris", + "share": "Compartir fitxers" + }, + "permissions": "Permisos", + "permissionsHelp": "Pots nomenar l'usuari com a administrador o triar els permisos individualment. Si selecciones \"Administrador\", totes les altres opcions s'activaran automàticament. L'administració d'usuaris és un privilegi d'administrador.\n", + "profileSettings": "Ajustos del perfil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "prevé l'accés a una extensió de fitxer (Com .git) en cada carpeta.\n", + "ruleExample2": "bloqueja l'accés al fitxer anomenat Caddyfile a la carpeta arrel.", + "rules": "Regles", + "rulesHelp": "Aquí pots definir un conjunt de regles de permisos per a aquest usuari específic. Els fitxers bloquejats no es mostraran en les llistes i no seran accessibles per l'usuari. Pots utilitzar regex i rutes relatives a l'arrel de l'usuari.\n", + "scope": "Arrel", + "setDateFormat": "Establir el format exacte de la data", + "settingsUpdated": "Ajustos actualitzats!", + "shareDuration": "Compartir Duració", + "shareManagement": "Gestió Compartida", + "shareDeleted": "Recurs compartit eliminat!", + "singleClick": "Utilitza un sol clic per obrir fitxers i directoris", + "themes": { + "default": "Valor per defecte del sistema", + "dark": "Fosc", + "light": "Clar", + "title": "Tema" + }, + "user": "Usuari", + "userCommands": "Comandes", + "userCommandsHelp": "Una llista separada per espais amb les comandes permeses per a aquest usuari. Exemple:\n", + "userCreated": "Usuari creat!", + "userDefaults": "Configuració d'usuari per defecte", + "userDeleted": "Usuari eliminat!", + "userManagement": "Administració d'usuaris", + "userUpdated": "Usuari actualitzat!", + "username": "Usuari", + "users": "Usuaris", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Ajuda", + "hugoNew": "Nou Hugo", + "login": "Iniciar sessió", + "logout": "Tancar sessió", + "myFiles": "Els meus fitxers", + "newFile": "Nou fitxer", + "newFolder": "Nova carpeta", + "preview": "Vista prèvia", + "settings": "Ajustos", + "signup": "Registra't", + "siteSettings": "Ajustos del lloc" + }, + "success": { + "linkCopied": "Enllaç copiat!" + }, + "time": { + "days": "Dies", + "hours": "Hores", + "minutes": "Minuts", + "seconds": "Segons", + "unit": "Unitat" + } +} diff --git a/frontend/src/i18n/cs.json b/frontend/src/i18n/cs.json new file mode 100644 index 00000000..e354475f --- /dev/null +++ b/frontend/src/i18n/cs.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Zrušit", + "clear": "Vymazat", + "close": "Zavřít", + "continue": "Pokračovat", + "copy": "Kopírovat", + "copyFile": "Kopírovat soubor", + "copyToClipboard": "Kopírovat do schránky", + "copyDownloadLinkToClipboard": "Kopírovat odkaz na stažení do schránky", + "create": "Vytvořit", + "delete": "Smazat", + "download": "Stáhnout", + "file": "Soubor", + "folder": "Složka", + "fullScreen": "Přepnout na celou obrazovku", + "hideDotfiles": "Skrýt skryté soubory", + "info": "Informace", + "more": "Více", + "move": "Přesunout", + "moveFile": "Přesunout soubor", + "new": "Nový", + "next": "Další", + "ok": "OK", + "permalink": "Získat trvalý odkaz", + "previous": "Předchozí", + "preview": "Preview", + "publish": "Publikovat", + "rename": "Přejmenovat", + "replace": "Nahradit", + "reportIssue": "Nahlásit problém", + "save": "Uložit", + "schedule": "Naplánovat", + "search": "Hledat", + "select": "Vybrat", + "selectMultiple": "Vybrat více", + "share": "Sdílet", + "shell": "Přepnout shell", + "submit": "Odeslat", + "switchView": "Přepnout zobrazení", + "toggleSidebar": "Přepnout postranní panel", + "update": "Aktualizovat", + "upload": "Nahrát", + "openFile": "Otevřít soubor", + "openDirect": "View raw", + "discardChanges": "Zrušit změny", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Stáhnout soubor", + "downloadFolder": "Stáhnout složku", + "downloadSelected": "Stáhnout vybrané" + }, + "upload": { + "abortUpload": "Opravdu chcete přerušit nahrávání?" + }, + "errors": { + "forbidden": "Nemáte oprávnění k přístupu.", + "internal": "Nastala vážná chyba.", + "notFound": "Tuto lokaci nelze najít.", + "connection": "Server nelze dosáhnout." + }, + "files": { + "body": "Tělo", + "closePreview": "Zavřít náhled", + "files": "Soubory", + "folders": "Složky", + "home": "Domů", + "lastModified": "Naposledy změněno", + "loading": "Načítání...", + "lonely": "Je tu osaměle...", + "metadata": "Metadata", + "multipleSelectionEnabled": "Vícenásobný výběr povolen", + "name": "Název", + "size": "Velikost", + "sortByLastModified": "Seřadit podle poslední změny", + "sortByName": "Seřadit podle názvu", + "sortBySize": "Seřadit podle velikosti", + "noPreview": "Náhled pro tento soubor není k dispozici.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "vyberte soubor nebo adresář", + "ctrl": { + "click": "vybrat více souborů nebo adresářů", + "f": "otevřít vyhledávání", + "s": "uložit soubor nebo stáhnout adresář, kde se nacházíte" + }, + "del": "smazat vybrané položky", + "doubleClick": "otevřít soubor nebo adresář", + "esc": "zrušit výběr a/nebo zavřít výzvu", + "f1": "tato informace", + "f2": "přejmenovat soubor", + "help": "Nápověda" + }, + "login": { + "createAnAccount": "Vytvořit účet", + "loginInstead": "Již máte účet", + "password": "Heslo", + "passwordConfirm": "Potvrzení hesla", + "passwordsDontMatch": "Hesla se neshodují", + "signup": "Registrace", + "submit": "Přihlásit se", + "username": "Uživatelské jméno", + "usernameTaken": "Uživatelské jméno již existuje", + "wrongCredentials": "Nesprávné přihlašovací údaje", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Trvalý", + "prompts": { + "copy": "Kopírovat", + "copyMessage": "Vyberte místo, kam chcete soubory kopírovat:", + "currentlyNavigating": "Aktuálně navigujete v:", + "deleteMessageMultiple": "Opravdu chcete smazat {count} soubor(ů)?", + "deleteMessageSingle": "Opravdu chcete smazat tento soubor/složku?", + "deleteMessageShare": "Opravdu chcete smazat toto sdílení({path})?", + "deleteUser": "Opravdu chcete smazat tohoto uživatele?", + "deleteTitle": "Smazat soubory", + "displayName": "Zobrazované jméno:", + "download": "Stáhnout soubory", + "downloadMessage": "Vyberte formát, který chcete stáhnout.", + "error": "Něco se pokazilo", + "fileInfo": "Informace o souboru", + "filesSelected": "{count} souborů vybráno.", + "lastModified": "Naposledy změněno", + "move": "Přesunout", + "moveMessage": "Vyberte nové umístění pro váš soubor(y)/složku(y):", + "newArchetype": "Vytvořit nový příspěvek na základě archetypu. Váš soubor bude vytvořen ve složce content.", + "newDir": "Nový adresář", + "newDirMessage": "Pojmenujte svůj nový adresář.", + "newFile": "Nový soubor", + "newFileMessage": "Pojmenujte svůj nový soubor.", + "numberDirs": "Počet adresářů", + "numberFiles": "Počet souborů", + "rename": "Přejmenovat", + "renameMessage": "Vložte nový název pro", + "replace": "Nahradit", + "replaceMessage": "Jeden ze souborů, které se snažíte nahrát, má konfliktní název. Chcete tento soubor přeskočit a pokračovat v nahrávání, nebo nahradit stávající?", + "schedule": "Naplánovat", + "scheduleMessage": "Vyberte datum a čas pro naplánování publikace tohoto příspěvku.", + "show": "Zobrazit", + "size": "Velikost", + "upload": "Nahrát", + "uploadFiles": "Nahrávání {files} souborů...", + "uploadMessage": "Vyberte možnost pro nahrání.", + "optionalPassword": "Volitelné heslo", + "resolution": "Rozlišení", + "discardEditorChanges": "Opravdu chcete zrušit provedené změny?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Obrázky", + "music": "Hudba", + "pdf": "PDF", + "pressToSearch": "Stiskněte enter pro hledání...", + "search": "Hledat...", + "typeToSearch": "Zadejte pro hledání...", + "types": "Typy", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrátor", + "allowCommands": "Povolit příkazy", + "allowEdit": "Upravit, přejmenovat a mazat soubory nebo adresáře", + "allowNew": "Vytvářet nové soubory a adresáře", + "allowPublish": "Publikovat nové příspěvky a stránky", + "allowSignup": "Povolit uživatelům registraci", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(ponechte prázdné pro zabránění změnám)", + "branding": "Branding", + "brandingDirectoryPath": "Cesta ke složce s brandingem", + "brandingHelp": "Můžete přizpůsobit vzhled a dojem z vaší instance File Browseru změnou názvu, nahrazením loga, přidáním vlastních stylů a dokonce zakázat externí odkazy na GitHub.\nPro více informací o přizpůsobení brandingu se podívejte na {0}.", + "changePassword": "Změnit heslo", + "commandRunner": "Spouštění příkazů", + "commandRunnerHelp": "Zde můžete nastavit příkazy, které se spustí při určených událostech. Každý příkaz musí být na samostatném řádku. Budou k dispozici proměnné prostředí {0} a {1}, přičemž {0} se vztahuje na {1}. Pro více informací o této funkci a dostupných proměnných prostředí si přečtěte {2}.", + "commandsUpdated": "Příkazy aktualizovány!", + "createUserDir": "Automaticky vytvořit domovskou složku uživatele při přidání nového uživatele", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Nahrávání po částech", + "tusUploadsHelp": "File Browser podporuje nahrávání souborů po částech, což umožňuje vytváření efektivních, spolehlivých, obnovitelných a rozdělených nahrávek souborů i na nespolehlivých sítích.", + "tusUploadsChunkSize": "Maximální velikost požadavku (přímé nahrávání bude použito pro menší nahrávky). Můžete zadat prosté číslo označující velikost v bajtech nebo řetězec jako 10MB, 1GB atd.", + "tusUploadsRetryCount": "Počet pokusů o opakování, pokud se nahrání části nezdaří.", + "userHomeBasePath": "Základní cesta pro domovské adresáře uživatelů", + "userScopeGenerationPlaceholder": "Rozsah bude automaticky vygenerován", + "createUserHomeDirectory": "Vytvořit domovský adresář uživatele", + "customStylesheet": "Vlastní stylový soubor", + "defaultUserDescription": "Toto jsou výchozí nastavení pro nové uživatele.", + "disableExternalLinks": "Zakázat externí odkazy (kromě dokumentace)", + "disableUsedDiskPercentage": "Zakázat graf s procentem využitého disku", + "documentation": "dokumentace", + "examples": "Příklady", + "executeOnShell": "Spustit na shellu", + "executeOnShellDescription": "Ve výchozím nastavení File Browser spouští příkazy přímo voláním jejich binárek. Pokud je chcete spouštět na shellu (např. Bash nebo PowerShell), můžete to zde definovat s požadovanými argumenty a příznaky. Pokud je nastaveno, příkaz, který spustíte, bude přidán jako argument. To platí jak pro uživatelské příkazy, tak pro háky událostí.", + "globalRules": "Jedná se o globální sadu povolení a zakázání pravidel. Platí pro každého uživatele. Specifická pravidla můžete definovat v nastaveních každého uživatele, aby přepsala tato pravidla.", + "globalSettings": "Globální nastavení", + "hideDotfiles": "Skrýt skryté soubory", + "insertPath": "Vložte cestu", + "insertRegex": "Vložte regex výraz", + "instanceName": "Název instance", + "language": "Jazyk", + "lockPassword": "Zabránit uživateli ve změně hesla", + "newPassword": "Vaše nové heslo", + "newPasswordConfirm": "Potvrďte své nové heslo", + "newUser": "Nový uživatel", + "password": "Heslo", + "passwordUpdated": "Heslo bylo aktualizováno!", + "path": "Cesta", + "perm": { + "create": "Vytvářet soubory a adresáře", + "delete": "Mazat soubory a adresáře", + "download": "Stahovat", + "execute": "Spouštět příkazy", + "modify": "Upravit soubory", + "rename": "Přejmenovat nebo přesunout soubory a adresáře", + "share": "Sdílet soubory" + }, + "permissions": "Oprávnění", + "permissionsHelp": "Můžete nastavit uživatele jako administrátora nebo zvolit jednotlivá oprávnění. Pokud vyberete \"Administrátor\", všechny ostatní možnosti budou automaticky zaškrtnuty. Správa uživatelů zůstává výsadou administrátora.\n", + "profileSettings": "Nastavení profilu", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "zabraňuje přístupu k jakémukoli skrytému souboru (např. .git, .gitignore) v každé složce.\n", + "ruleExample2": "blokuje přístup k souboru s názvem Caddyfile v kořenovém adresáři.", + "rules": "Pravidla", + "rulesHelp": "Zde můžete definovat sadu povolení a zakázání pravidel pro tohoto konkrétního uživatele. Blokované soubory se nebudou zobrazovat v seznamech a uživatel k nim nebude mít přístup. Podporujeme regex a cesty relativní k rozsahu uživatele.\n", + "scope": "Rozsah", + "setDateFormat": "Nastavit přesný formát data", + "settingsUpdated": "Nastavení aktualizována!", + "shareDuration": "Doba sdílení", + "shareManagement": "Správa sdílení", + "shareDeleted": "Sdílení bylo smazáno!", + "singleClick": "Použít jediné kliknutí pro otevření souborů a adresářů", + "themes": { + "default": "Systémové výchozí", + "dark": "Tmavý", + "light": "Světlý", + "title": "Motiv" + }, + "user": "Uživatel", + "userCommands": "Příkazy", + "userCommandsHelp": "Seznam dostupných příkazů pro tohoto uživatele oddělený mezerami. Příklad:\n", + "userCreated": "Uživatel vytvořen!", + "userDefaults": "Výchozí nastavení uživatele", + "userDeleted": "Uživatel smazán!", + "userManagement": "Správa uživatelů", + "userUpdated": "Uživatel aktualizován!", + "username": "Uživatelské jméno", + "users": "Uživatelé", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Nápověda", + "hugoNew": "Hugo Nový", + "login": "Přihlásit se", + "logout": "Odhlásit se", + "myFiles": "Moje soubory", + "newFile": "Nový soubor", + "newFolder": "Nová složka", + "preview": "Náhled", + "settings": "Nastavení", + "signup": "Registrace", + "siteSettings": "Nastavení webu" + }, + "success": { + "linkCopied": "Odkaz zkopírován!" + }, + "time": { + "days": "Dny", + "hours": "Hodiny", + "minutes": "Minuty", + "seconds": "Sekundy", + "unit": "Časová jednotka" + } +} diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json index 8ea26acb..64f402af 100644 --- a/frontend/src/i18n/de.json +++ b/frontend/src/i18n/de.json @@ -1,236 +1,312 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Kommandozeile ein/ausschalten", "cancel": "Abbrechen", + "clear": "Leeren", "close": "Schließen", + "continue": "Weiter", "copy": "Kopieren", - "copyFile": "Kopiere Datei", + "copyFile": "Datei kopieren", "copyToClipboard": "In Zwischenablage kopieren", - "create": "Neu", + "copyDownloadLinkToClipboard": "Download-Link in Zwischenablage kopieren", + "create": "Erstellen", "delete": "Löschen", - "download": "Downloaden", + "download": "Herunterladen", + "file": "Datei", + "folder": "Ordner", + "fullScreen": "Vollbild umschalten", + "hideDotfiles": "Versteckte Dateien ausblenden", "info": "Info", - "more": "mehr", + "more": "Mehr", "move": "Verschieben", - "moveFile": "Verschiebe Datei", + "moveFile": "Datei verschieben", "new": "Neu", - "next": "nächste", + "next": "Weiter", "ok": "OK", + "permalink": "Permanentlink abrufen", + "previous": "Zurück", + "preview": "Vorschau", + "publish": "Veröffentlichen", + "rename": "Umbenennen", "replace": "Ersetzen", - "previous": "vorherige", - "rename": "umbenennen", - "reportIssue": "Fehler melden", + "reportIssue": "Problem melden", + "resumeTransfer": "Vorherige Übertragung fortsetzen", + "resumeTransferTooltip": "Alle Dateien mit Konflikten überspringen, außer denen, die auf dem Server kleiner sind, da wir davon ausgehen, dass deren Übertragung unterbrochen wurde.", "save": "Speichern", + "schedule": "Planen", "search": "Suchen", "select": "Auswählen", - "share": "Teilen", - "publish": "Veröffentlichen", "selectMultiple": "Mehrfachauswahl", - "schedule": "Planung", + "share": "Teilen", + "shell": "Shell umschalten", + "submit": "Absenden", "switchView": "Ansicht wechseln", - "toggleSidebar": "Seitenleiste anzeigen", - "update": "Update", - "upload": "Upload", - "permalink": "permanenten Verweis anzeigen" + "toggleSidebar": "Seitenleiste umschalten", + "update": "Aktualisieren", + "upload": "Hochladen", + "openFile": "Datei öffnen", + "openDirect": "Original anzeigen", + "discardChanges": "Verwerfen", + "stopSearch": "Suche beenden", + "saveChanges": "Änderungen speichern", + "editAsText": "Als Text bearbeiten", + "increaseFontSize": "Schrift vergrößern", + "decreaseFontSize": "Schrift verkleinern", + "overrideAll": "Alle Dateien im Zielordner ersetzen", + "skipAll": "Alle in Konflikt stehenden Dateien überspringen", + "renameAll": "Alle Dateien umbenennen (Kopie erstellen)", + "singleDecision": "Bei jeder Datei mit Konflikt entscheiden" }, - "success": { - "linkCopied": "Verweis wurde kopiert!" + "download": { + "downloadFile": "Datei herunterladen", + "downloadFolder": "Ordner herunterladen", + "downloadSelected": "Auswahl herunterladen" + }, + "upload": { + "abortUpload": "Upload wirklich abbrechen?" }, "errors": { - "forbidden": "Sie haben keine Berechtigung dies abzurufen.", - "internal": "Etwas ist schief gelaufen.", - "notFound": "Dieser Ort kann nicht angezeigt werden." + "forbidden": "Du hast keine Berechtigung für diesen Zugriff.", + "internal": "Da ist etwas schiefgelaufen.", + "notFound": "Dieser Ort ist nicht erreichbar.", + "connection": "Der Server ist nicht erreichbar." }, "files": { - "folders": "Ordner", - "files": "Dateien", - "body": "Body", - "clear": "Clear", + "body": "Inhalt", "closePreview": "Vorschau schließen", - "home": "Home", - "lastModified": "zuletzt verändert", - "loading": "Lade...", - "lonely": "Hier scheint nichts zu sein...", + "files": "Dateien", + "folders": "Ordner", + "home": "Startseite", + "lastModified": "Zuletzt geändert", + "loading": "Wird geladen …", + "lonely": "Hier ist es ganz schön leer …", "metadata": "Metadaten", - "multipleSelectionEnabled": "Mehrfachauswahl ausgewählt", + "multipleSelectionEnabled": "Mehrfachauswahl aktiviert", "name": "Name", "size": "Größe", - "sortByName": "Nach Namen sortieren", + "sortByLastModified": "Nach Änderungsdatum sortieren", + "sortByName": "Nach Name sortieren", "sortBySize": "Nach Größe sortieren", - "sortByLastModified": "Nach Änderungsdatum sortieren" + "noPreview": "Für diese Datei ist keine Vorschau verfügbar.", + "csvTooLarge": "Die CSV-Datei ist zu groß für die Vorschau (> 5 MB). Bitte herunterladen, um sie anzuzeigen.", + "csvLoadFailed": "CSV-Datei konnte nicht geladen werden.", + "showingRows": "{count} Zeile(n) angezeigt", + "columnSeparator": "Spaltentrennzeichen", + "csvSeparators": { + "comma": "Komma (,)", + "semicolon": "Semikolon (;)", + "both": "Beides (,) und (;)" + }, + "fileEncoding": "Dateikodierung" }, "help": { - "click": "wähle Datei oder Ordner", + "click": "Datei oder Verzeichnis auswählen", "ctrl": { - "click": "markiere mehrere Dateien oder Ordner", - "f": "öffnet eine neue Suche", - "s": "speichert eine Datei oder einen Ordner am akutellen Ort" + "click": "mehrere Dateien oder Verzeichnisse auswählen", + "f": "Suche öffnen", + "s": "Datei speichern oder aktuelles Verzeichnis herunterladen" }, - "del": "löscht die ausgewählten Elemente", - "doubleClick": "öffnet eine Datei oder einen Ordner", - "esc": "Auswahl zurücksetzen und/oder Dialog schließen", - "f1": "diese Informationsseite", + "del": "ausgewählte Elemente löschen", + "doubleClick": "Datei oder Verzeichnis öffnen", + "esc": "Auswahl aufheben und/oder Dialog schließen", + "f1": "diese Hilfe anzeigen", "f2": "Datei umbenennen", "help": "Hilfe" }, "login": { + "createAnAccount": "Konto erstellen", + "loginInstead": "Bereits ein Konto vorhanden", "password": "Passwort", - "passwordConfirm": "Passwort Bestätigung", - "submit": "Login", - "createAnAccount": "Account erstellen", - "loginInstead": "Account besteht bereits", + "passwordConfirm": "Passwort bestätigen", "passwordsDontMatch": "Passwörter stimmen nicht überein", - "usernameTaken": "Benutzername ist bereits vergeben", "signup": "Registrieren", + "submit": "Anmelden", "username": "Benutzername", - "wrongCredentials": "Falsche Zugangsdaten" + "usernameTaken": "Benutzername bereits vergeben", + "wrongCredentials": "Falsche Anmeldedaten", + "passwordTooShort": "Passwort muss mindestens {min} Zeichen lang sein", + "logout_reasons": { + "inactivity": "Du wurdest wegen Inaktivität abgemeldet." + } }, + "permanent": "Permanent", "prompts": { "copy": "Kopieren", - "copyMessage": "Wählen Sie einen Zielort zum Kopieren:", - "currentlyNavigating": "Aktueller Ort:", - "deleteMessageMultiple": "Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?", - "deleteMessageSingle": "Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?", - "deleteTitle": "Lösche Dateien", - "displayName": "Display Name:", - "download": "Lade Dateien", - "downloadMessage": "Wählen Sie ein Format zum downloaden aus.", - "error": "Etwas ist schief gelaufen", - "fileInfo": "Dateiinformation", + "copyMessage": "Wähle den Zielort für deine Dateien:", + "currentlyNavigating": "Aktueller Pfad:", + "deleteMessageMultiple": "Möchtest du wirklich {count} Datei(en) löschen?", + "deleteMessageSingle": "Möchtest du diese Datei/diesen Ordner wirklich löschen?", + "deleteMessageShare": "Möchtest du diese Freigabe ({path}) wirklich löschen?", + "deleteUser": "Möchtest du diesen Benutzer wirklich löschen?", + "deleteTitle": "Dateien löschen", + "displayName": "Anzeigename:", + "download": "Dateien herunterladen", + "downloadMessage": "Wähle das gewünschte Download-Format.", + "error": "Etwas ist schiefgelaufen", + "fileInfo": "Dateiinformationen", "filesSelected": "{count} Dateien ausgewählt.", "lastModified": "Zuletzt geändert", "move": "Verschieben", - "moveMessage": "Wählen sie einen neuen Platz für ihre Datei(en)/Ordner:", - "newDir": "Neuer Ordner", - "newDirMessage": "Geben Sie den Namen des neuen Ordners an.", + "moveMessage": "Wähle den neuen Speicherort für deine Datei(en)/Ordner:", + "newArchetype": "Neuen Beitrag basierend auf einem Archetyp erstellen. Die Datei wird im Content-Ordner erstellt.", + "newDir": "Neues Verzeichnis", + "newDirMessage": "Gib einen Namen für das neue Verzeichnis ein.", "newFile": "Neue Datei", - "newFileMessage": "Geben Sie den Namen der neuen Datei an.", - "numberDirs": "Anzahl der Ordner", + "newFileMessage": "Gib einen Namen für die neue Datei ein.", + "numberDirs": "Anzahl der Verzeichnisse", "numberFiles": "Anzahl der Dateien", - "replace": "Ersetzen", - "replaceMessage": "Eine der Datei mit dem gleichen Namen, wie die Sie hochladen wollen, existiert bereits. Soll die vorhandene Datei ersetzt werden ?\n", "rename": "Umbenennen", - "renameMessage": "Fügen Sie einen Namen ein für", + "renameMessage": "Neuen Namen eingeben für", + "replace": "Ersetzen", + "replaceMessage": "Eine der hochzuladenden Dateien hat einen Namenskonflikt. Möchtest du diese Datei überspringen und mit dem Upload fortfahren oder die vorhandene Datei ersetzen?\n", + "schedule": "Planen", + "scheduleMessage": "Wähle Datum und Uhrzeit für die geplante Veröffentlichung dieses Beitrags.", "show": "Anzeigen", "size": "Größe", - "schedule": "Plan", - "scheduleMessage": "Wählen Sie ein Datum und eine Zeit für die Veröffentlichung dieses Beitrags.", - "newArchetype": "Erstelle neuen Beitrag auf dem Archetyp. Ihre Datei wird im Inhalteordner erstellt." - }, - "settings": { - "instanceName": "Instanzname", - "brandingDirectoryPath": "Markenverzeichnispfad", - "documentation": "Dokumentation", - "branding": "Marke", - "disableExternalLinks": "Externe Links deaktivieren (außer Dokumentation)", - "brandingHelp": "Sie können das Erscheinungsbild ihres File Browser anpassen, in dem sie den Namen ändern, das Logo austauchsen oder eigene Stile definieren und sogar externe Links zu GitHub deaktivieren.\nUm mehr Informationen zum Anpassen an ihre Marke zu bekommen, gehen sie bitte zu {0}.", - "admin": "Admin", - "administrator": "Administrator", - "allowCommands": "Befehle ausführen", - "allowEdit": "Bearbeiten, Umbenennen und Löschen von Dateien oder Ordnern", - "allowNew": "Erstellen neuer Dateien und Ordner", - "allowPublish": "Veröffentlichen von neuen Beiträgen und Seiten", - "avoidChanges": "(leer lassen um Änderungen zu vermeiden)", - "changePassword": "Ändere das Passwort", - "commandRunner": "Befehlseingabe", - "commandRunnerHelp": "Hier könne sie Befehle eintragen die bei benannten Aktionen ausgeführt werden. Sie müssen pro Zeile jeweils einen eingeben. Die Umgebungsvariable {0} und {1} sind verfügbar, wobei {0} relative zu {1} ist. Für mehr Informationen über diese Funktion und die verfügbaren Umgebungsvariablen, lesen sie bitte das {2}.", - "commandsUpdated": "Befehle aktualisiert!", - "customStylesheet": "Individuelles Stylesheet", - "examples": "Beispiele", - "globalSettings": "Globale Einstellungen", - "language": "Sprache", - "lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert", - "newPassword": "Ihr neues Passwort.", - "newPasswordConfirm": "Bestätigen Sie Ihr neues Passwort", - "newUser": "Neuer Benutzer", - "password": "Passwort", - "passwordUpdated": "Passwort aktualisiert!", - "permissions": "Berechtigungen", - "permissionsHelp": "Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigunen individuell festlegen. Wenn Sie \"Administrator\" auswählen, werden alle anderen Rechte automatisch vergeben. Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.\n", - "profileSettings": "Profileinstellungen", - "ruleExample1": "Verhindert den Zugang zu dot Dateien (dot Files, wie .git, .gitignore) in allen Ordnern\n", - "ruleExample2": "blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des scopes.", - "rules": "Regeln", - "rulesHelp": "Hier können Sie erlaubte und verbotene Aktionen für einen einzelnen Benutzer festlegen. Bockierte Dateien werden nicht im Listing angezeigt und sind nicht erreichbar für den Nutzer. Wir unterstützen reguläre Ausdrücke (Regex) und Pfade die relativ zum Benutzerordner sind. \n", - "scope": "Scope", - "settingsUpdated": "Einstellungen aktualisiert!", - "user": "Benutzer", - "userCommands": "Befehle", - "userCommandsHelp": "Eine Liste, mit einem Leerzeichen als Trennung, mit den für diesen Nutzer verfügbaren Befehlen. Example:\n", - "userCreated": "Benutzer angelegt!", - "userDeleted": "Benutzer gelöscht!", - "userManagement": "Benutzerverwaltung", - "username": "Nutzername", - "users": "Nutzer", - "globalRules": "Das ist ein globales Set von Regeln die erlauben oder nicht erlauben. Die sind für alle Benutzer zutreffend. Es können spezielle Regeln in den Einstellungen der Benutzer definiert werden die diese übersteuern.", - "allowSignup": "Erlaube Benutzern sich zu registrieren", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Regex Ausdruck einfügen", - "insertPath": "Pfad einfügen", - "userUpdated": "Benutzer aktualisiert!", - "userDefaults": "Benutzer Standard Einstellungen", - "defaultUserDescription": "Das sind die Standard Einstellunge für Benutzer", - "executeOnShell": "In shell ausführen", - "executeOnShellDescription": "Es ist voreingestellt das der File Brower Befehle ausführt in dem er die Befehlsdatein direkt auf ruft. Wenn sie wollen das sie auf einer Kommandozeile (wo Bash oder PowerShell) laufen, könne sie das hier definieren mit allen bennötigten Argumenten und Optionen. Wenn gesetzt, wird das Kommando das ausgeführt werden soll als Parameter angehängt. Das gilt für Benuzerkommandos sowie auch für Ereignisse.", - "perm": { - "create": "Dateien und Ordner erstellen", - "delete": "Dateien und Ordner löschen", - "download": "Download", - "modify": "Dateien editieren", - "execute": "Befehle ausführen", - "rename": "Umbenennen oder Verschieben von Dateien oder Ordnern", - "share": "Datei teilen" - } - }, - "sidebar": { - "help": "Hilfe", - "login": "Anmelden", - "signup": "Registrieren", - "logout": "Logout", - "myFiles": "Meine Dateien", - "newFile": "Neue Datei", - "newFolder": "Neuer Ordner", - "settings": "Einstellungen", - "siteSettings": "Seiteneinstellungen", - "hugoNew": "Hugo Neu", - "preview": "Vorschau" + "upload": "Hochladen", + "uploadFiles": "{files} Dateien werden hochgeladen …", + "uploadMessage": "Wähle eine Upload-Option.", + "optionalPassword": "Optionales Passwort", + "resolution": "Auflösung", + "discardEditorChanges": "Möchtest du deine Änderungen wirklich verwerfen?", + "replaceOrSkip": "Dateien ersetzen oder überspringen", + "resolveConflict": "Welche Dateien möchtest du behalten?", + "singleConflictResolve": "Wenn du beide Versionen auswählst, wird dem Namen der kopierten Datei eine Nummer hinzugefügt.", + "fastConflictResolve": "Der Zielordner enthält {count} Dateien mit demselben Namen.", + "uploadingFiles": "Dateien werden hochgeladen", + "filesInOrigin": "Dateien im Ursprungsordner", + "filesInDest": "Dateien im Zielordner", + "override": "Überschreiben", + "skip": "Überspringen", + "forbiddenError": "Zugriff verweigert", + "currentPassword": "Dein Passwort", + "currentPasswordMessage": "Gib dein Passwort ein, um diese Aktion zu bestätigen." }, "search": { "images": "Bilder", "music": "Musik", "pdf": "PDF", + "pressToSearch": "Eingabetaste drücken zum Suchen …", + "search": "Suchen …", + "typeToSearch": "Suchbegriff eingeben …", "types": "Typen", - "video": "Video", - "search": "Suche...", - "typeToSearch": "Tippe um zu suchen...", - "pressToSearch": "Drücken sie Enter um zu suchen..." + "video": "Video" }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "settings": { + "aceEditorTheme": "Ace-Editor-Theme", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "Befehle ausführen", + "allowEdit": "Dateien und Verzeichnisse bearbeiten, umbenennen und löschen", + "allowNew": "Neue Dateien und Verzeichnisse erstellen", + "allowPublish": "Neue Beiträge und Seiten veröffentlichen", + "allowSignup": "Registrierung erlauben", + "hideLoginButton": "Anmelde-Button auf öffentlichen Seiten ausblenden", + "avoidChanges": "(leer lassen, um keine Änderungen vorzunehmen)", + "branding": "Branding", + "brandingDirectoryPath": "Branding-Verzeichnispfad", + "brandingHelp": "Du kannst das Erscheinungsbild deiner File-Browser-Instanz anpassen, indem du den Namen änderst, das Logo ersetzt, eigene Styles hinzufügst und sogar externe Links zu GitHub deaktivierst.\nWeitere Informationen zum Branding findest du in der {0}.", + "changePassword": "Passwort ändern", + "commandRunner": "Befehlsausführung", + "commandRunnerHelp": "Hier kannst du Befehle festlegen, die bei bestimmten Ereignissen ausgeführt werden. Schreibe einen Befehl pro Zeile. Die Umgebungsvariablen {0} und {1} sind verfügbar, wobei {0} relativ zu {1} ist. Weitere Informationen zu dieser Funktion und den verfügbaren Umgebungsvariablen findest du in der {2}.", + "commandsUpdated": "Befehle aktualisiert!", + "createUserDir": "Benutzerverzeichnis beim Erstellen neuer Benutzer automatisch anlegen", + "minimumPasswordLength": "Mindestlänge des Passworts", + "tusUploads": "Uploads in Teilen", + "tusUploadsHelp": "File Browser unterstützt das Hochladen von Dateien in Teilen. So sind effiziente, zuverlässige und fortsetzbare Uploads auch bei instabilen Netzwerkverbindungen möglich.", + "tusUploadsChunkSize": "Gibt die maximale Größe einer Anfrage an (kleinere Dateien werden direkt hochgeladen). Du kannst eine Zahl in Bytes oder einen String wie 10MB, 1GB usw. eingeben.", + "tusUploadsRetryCount": "Anzahl der Wiederholungsversuche bei fehlgeschlagenem Teil-Upload.", + "userHomeBasePath": "Basispfad für Benutzerverzeichnisse", + "userScopeGenerationPlaceholder": "Der Bereich wird automatisch generiert", + "createUserHomeDirectory": "Benutzerverzeichnis erstellen", + "customStylesheet": "Eigenes Stylesheet", + "defaultUserDescription": "Dies sind die Standardeinstellungen für neue Benutzer.", + "disableExternalLinks": "Externe Links deaktivieren (außer Dokumentation)", + "disableUsedDiskPercentage": "Speicherplatzanzeige deaktivieren", + "documentation": "Dokumentation", + "examples": "Beispiele", + "executeOnShell": "In Shell ausführen", + "executeOnShellDescription": "Standardmäßig führt File Browser Befehle durch direkten Aufruf der Binärdateien aus. Wenn du sie stattdessen in einer Shell (wie Bash oder PowerShell) ausführen möchtest, kannst du diese hier mit den erforderlichen Argumenten und Flags angeben. Der auszuführende Befehl wird dann als Argument angehängt. Dies gilt sowohl für Benutzerbefehle als auch für Event-Hooks.", + "globalRules": "Dies ist ein globaler Satz von Erlauben- und Verbieten-Regeln. Sie gelten für alle Benutzer. Du kannst in den Einstellungen einzelner Benutzer spezifische Regeln festlegen, um diese zu überschreiben.", + "globalSettings": "Globale Einstellungen", + "hideDotfiles": "Versteckte Dateien ausblenden", + "insertPath": "Pfad eingeben", + "insertRegex": "Regulären Ausdruck eingeben", + "instanceName": "Instanzname", + "language": "Sprache", + "lockPassword": "Benutzer daran hindern, das Passwort zu ändern", + "newPassword": "Dein neues Passwort", + "newPasswordConfirm": "Neues Passwort bestätigen", + "newUser": "Neuer Benutzer", + "password": "Passwort", + "passwordUpdated": "Passwort aktualisiert!", + "path": "Pfad", + "perm": { + "create": "Dateien und Verzeichnisse erstellen", + "delete": "Dateien und Verzeichnisse löschen", + "download": "Herunterladen", + "execute": "Befehle ausführen", + "modify": "Dateien bearbeiten", + "rename": "Dateien und Verzeichnisse umbenennen oder verschieben", + "share": "Dateien freigeben (Download-Berechtigung erforderlich)" + }, + "permissions": "Berechtigungen", + "permissionsHelp": "Du kannst den Benutzer zum Administrator machen oder die Berechtigungen einzeln festlegen. Wenn du \"Administrator\" wählst, werden automatisch alle anderen Optionen aktiviert. Die Benutzerverwaltung bleibt ein Administratorrecht.\n", + "profileSettings": "Profileinstellungen", + "redirectAfterCopyMove": "Nach Kopieren/Verschieben zum Ziel wechseln", + "ruleExample1": "verhindert den Zugriff auf alle versteckten Dateien (wie .git, .gitignore) in jedem Ordner.\n", + "ruleExample2": "blockiert den Zugriff auf die Datei namens Caddyfile im Stammverzeichnis des Bereichs.", + "rules": "Regeln", + "rulesHelp": "Hier kannst du Erlauben- und Verbieten-Regeln für diesen Benutzer festlegen. Blockierte Dateien werden nicht in den Auflistungen angezeigt und sind für den Benutzer nicht zugänglich. Wir unterstützen Regex und Pfade relativ zum Benutzerbereich.\n", + "scope": "Bereich", + "setDateFormat": "Genaues Datumsformat festlegen", + "settingsUpdated": "Einstellungen aktualisiert!", + "shareDuration": "Freigabedauer", + "shareManagement": "Freigabeverwaltung", + "shareDeleted": "Freigabe gelöscht!", + "singleClick": "Einfacher Klick zum Öffnen von Dateien und Verzeichnissen", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "Systemstandard", + "dark": "Dunkel", + "light": "Hell", + "title": "Design" + }, + "user": "Benutzer", + "userCommands": "Befehle", + "userCommandsHelp": "Eine durch Leerzeichen getrennte Liste der verfügbaren Befehle für diesen Benutzer. Beispiel:\n", + "userCreated": "Benutzer erstellt!", + "userDefaults": "Standardeinstellungen für Benutzer", + "userDeleted": "Benutzer gelöscht!", + "userManagement": "Benutzerverwaltung", + "userUpdated": "Benutzer aktualisiert!", + "username": "Benutzername", + "users": "Benutzer", + "currentPassword": "Dein aktuelles Passwort" + }, + "sidebar": { + "diskUsed": "{used} von {total} belegt", + "help": "Hilfe", + "hugoNew": "Hugo Neu", + "login": "Anmelden", + "logout": "Abmelden", + "myFiles": "Meine Dateien", + "newFile": "Neue Datei", + "newFolder": "Neuer Ordner", + "preview": "Vorschau", + "settings": "Einstellungen", + "signup": "Registrieren", + "siteSettings": "Website-Einstellungen" + }, + "success": { + "linkCopied": "Link kopiert!" }, "time": { - "unit": "Zeiteinheit", - "seconds": "Sekunden", - "minutes": "Minuten", + "days": "Tage", "hours": "Stunden", - "days": "Tage" - }, - "download": { - "downloadFile": "Download Datei", - "downloadFolder": "Download Ordner" + "minutes": "Minuten", + "seconds": "Sekunden", + "unit": "Zeiteinheit" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/el.json b/frontend/src/i18n/el.json new file mode 100644 index 00000000..90853ab7 --- /dev/null +++ b/frontend/src/i18n/el.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Ακύρωση", + "clear": "Καθαρισμός", + "close": "Κλείσιμο", + "continue": "Continue", + "copy": "Αντιγραφή", + "copyFile": "Αντιγραφή αρχείου", + "copyToClipboard": "Αντιγραφή στο πρόχειρο", + "copyDownloadLinkToClipboard": "Αντιγραφή συνδέσμου λήψης στο πρόχειρο", + "create": "Δημιουργία", + "delete": "Διαγραφή", + "download": "Λήψη", + "file": "Αρχείο", + "folder": "Φάκελος", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Απόκρυψη κρυφών αρχείων", + "info": "Πληροφορίες", + "more": "Περισσότερα", + "move": "Μετακίνηση", + "moveFile": "Μετακίνηση αρχείου", + "new": "Νέο", + "next": "Επόμενο", + "ok": "Εντάξει", + "permalink": "Λήψη μόνιμου συνδέσμου", + "previous": "Προηγούμενο", + "preview": "Preview", + "publish": "Δημοσίευση", + "rename": "Μετονομασία", + "replace": "Αντικατάσταση", + "reportIssue": "Αναφορά προβλήματος", + "save": "Αποθήκευση", + "schedule": "Προγραμματισμός", + "search": "Αναζήτηση", + "select": "Επιλογή", + "selectMultiple": "Επιλογή πολλαπλών", + "share": "Κοινοποίηση", + "shell": "Toggle shell", + "submit": "Υποβολή", + "switchView": "Εναλλαγή προβολής", + "toggleSidebar": "(Απ-)ενεργοποίησης της πλευρικής μπάρας", + "update": "Ενημέρωση", + "upload": "Μεταφόρτωση", + "openFile": "Άνοιγμα αρχείου", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Λήψη αρχείου", + "downloadFolder": "Λήψη φακέλου", + "downloadSelected": "Λήψη επιλεγμένων" + }, + "upload": { + "abortUpload": "Είστε σίγουροι ότι θέλετε να διακόψετε τη μεταφόρτωση;" + }, + "errors": { + "forbidden": "Δεν έχετε άδεια πρόσβασης σε αυτό.", + "internal": "Προέκυψε εσωτερικό σφάλμα.", + "notFound": "Αυτή η τοποθεσία δεν μπορεί να βρεθεί.", + "connection": "Ο διακομιστής δεν είναι διαθέσιμος." + }, + "files": { + "body": "Περιεχόμενο", + "closePreview": "Κλείσιμο προεπισκόπησης", + "files": "Αρχεία", + "folders": "Φάκελοι", + "home": "Αρχική", + "lastModified": "Τελευταία τροποποίηση", + "loading": "Φορτώνει…", + "lonely": "Δεν υπάρχει τίποτα εδώ (ακόμη)…", + "metadata": "Μεταδεδομένα", + "multipleSelectionEnabled": "Ενεργοποιημένη επιλογή πολλαπλών", + "name": "Όνομα", + "size": "Μέγεθος", + "sortByLastModified": "Ταξινόμηση κατά πρόσφατη τροποποίηση", + "sortByName": "Ταξινόμηση κατά όνομα", + "sortBySize": "Ταξινόμηση κατά μέγεθος", + "noPreview": "Η προεπισκόπηση δεν είναι διαθέσιμη για αυτό το αρχείο.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "επιλέξτε αρχείο ή φάκελο", + "ctrl": { + "click": "επιλογή πολλαπλών αρχείων ή φακέλων", + "f": "ανοίγει την αναζήτηση", + "s": "αποθηκεύει ένα αρχείο ή εκκινεί λήψη του φακέλου στον οποίο βρίσκεστε" + }, + "del": "διαγραφή επιλεγμένων στοιχείων", + "doubleClick": "ανοίγει ένα αρχείο ή φάκελο", + "esc": "καθαρίζει την επιλογή ή/και κλείνει το παράθυρο", + "f1": "αυτή η πληροφορία", + "f2": "μετονομασία αρχείου", + "help": "Βοήθεια" + }, + "login": { + "createAnAccount": "Δημιουργία λογαριασμού", + "loginInstead": "Έχετε ήδη λογαριασμό", + "password": "Κωδικός πρόσβασης", + "passwordConfirm": "Επιβεβαίωση κωδικού πρόσβασης", + "passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν", + "signup": "Εγγραφή", + "submit": "Είσοδος", + "username": "Όνομα χρήστη", + "usernameTaken": "Το όνομα χρήστη χρησιμοποιείται ήδη", + "wrongCredentials": "Λάθος όνομα ή/και κωδικός πρόσβασης", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Μόνιμο", + "prompts": { + "copy": "Αντιγραφή", + "copyMessage": "Επιλέξτε τοποθεσία για αντιγραφή των αρχείων σας:", + "currentlyNavigating": "Currently navigating on:", + "deleteMessageMultiple": "Είστε σίγουροι ότι θέλετε να διαγράψετε {count} αρχεία;", + "deleteMessageSingle": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο/φάκελο;", + "deleteMessageShare": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή την κοινοποίηση ({path});", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "Διαγραφή αρχείων", + "displayName": "Εμφάνιση ονόματος:", + "download": "Λήψη αρχείων", + "downloadMessage": "Επιλέξτε τη μορφή που θέλετε να λάβετε.", + "error": "Προέκυψε κάποιο σφάλμα", + "fileInfo": "Πληροφορίες αρχείου", + "filesSelected": "Επιλέχθηκαν {count} αρχεία.", + "lastModified": "Τελευταία τροποποίηση", + "move": "Μετακίνηση", + "moveMessage": "Επιλέξτε νέα τοποθεσία για τα αρχεία / τους φακέλους σας:", + "newArchetype": "Δημιουργία νέας ανάρτησης με βάση έναν αρχέτυπο. Το αρχείο σας θα δημιουργηθεί στο φάκελο περιεχομένου.", + "newDir": "Νέος φάκελος", + "newDirMessage": "Γράψτε το όνομα του νέου φακέλου.", + "newFile": "Νέο αρχείο", + "newFileMessage": "Γράψτε το όνομα του νέου αρχείου.", + "numberDirs": "Αριθμός φακέλων", + "numberFiles": "Αριθμός αρχείων", + "rename": "Μετονομασία", + "renameMessage": "Εισαγάγετε ένα νέο όνομα για το", + "replace": "Αντικατάσταση", + "replaceMessage": "Ένα από τα αρχεία που προσπαθείτε να μεταφορτώσετε δημιουργεί σύγκρουση με υπάρχον αρχείο λόγω του ονόματός του. Θέλετε να συνεχίσετε τη μεταφόρτωση ή να αντικαταστήσετε το υπάρχον;\n", + "schedule": "Προγραμματισμός", + "scheduleMessage": "Επιλέξτε μια ημερομηνία και ώρα για τον προγραμματισμό της δημοσίευσης αυτής της ανάρτησης.", + "show": "Εμφάνιση", + "size": "Μέγεθος", + "upload": "Μεταφόρτωση", + "uploadFiles": "Μεταφόρτωση {files} αρχείων…", + "uploadMessage": "Επιλέξτε μια επιλογή για τη μεταφόρτωση.", + "optionalPassword": "Προαιρετικός κωδικός πρόσβασης", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Εικόνες", + "music": "Μουσική", + "pdf": "PDF", + "pressToSearch": "Πατήστε Enter για αναζήτηση…", + "search": "Αναζήτηση…", + "typeToSearch": "Πληκτρολογήστε για αναζήτηση…", + "types": "Τύποι", + "video": "Βίντεο" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Διαχειριστής", + "administrator": "Διαχειριστής", + "allowCommands": "Εκτέλεση εντολών", + "allowEdit": "Επεξεργασία, μετονομασία και διαγραφή αρχείων ή φακέλων", + "allowNew": "Δημιουργία νέων αρχείων και φακέλων", + "allowPublish": "Δημοσίευση νέων αναρτήσεων και σελίδων", + "allowSignup": "Να επιτρέπεται η εγγραφή νέων χρηστών", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(αφήστε το κενό για αποφυγή αλλαγών)", + "branding": "Εξατομίκευση", + "brandingDirectoryPath": "Διαδρομή φακέλου εξατομίκευσης", + "brandingHelp": "Μπορείτε να προσαρμόσετε την εμφάνισης της εφαρμογής File Browser αλλάζοντας το όνομά της, αντικαθιστώντας το λογότυπό της, προσθέτοντας προσαρμοσμένα στυλ και ακόμα και απενεργοποιώντας εξωτερικούς συνδέσμους προς το GitHub.\nΓια περισσότερες πληροφορίες σχετικά με αυτές τις προσαρμογές, ελέγξτε το {0}.", + "changePassword": "Αλλαγή κωδικού πρόσβασης", + "commandRunner": "Εκτέλεση εντολών", + "commandRunnerHelp": "Εδώ μπορείτε να ορίσετε εντολές που εκτελούνται στα ονομασμένα γεγονότα και δραστηριότητες. Πρέπει να γράψετε μία εντολή ανά γραμμή. Οι μεταβλητές περιβάλλοντος {0} και {1} θα είναι διαθέσιμες, και θα είναι {0} σχετικές με το {1}. Για περισσότερες πληροφορίες σχετικά με αυτή τη λειτουργία και τις διαθέσιμες μεταβλητές περιβάλλοντος, παρακαλώ διαβάστε το {2}.", + "commandsUpdated": "Οι εντολές ενημερώθηκαν!", + "createUserDir": "Αυτόματη δημιουργία φακέλου χρήστη κατά την προσθήκη νέου χρήστη", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Τμηματικές μεταφορές αρχείων", + "tusUploadsHelp": "Η εφαρμογή File Browser υποστηρίζει τμηματικές μεταφορτώσεις αρχείων, επιτρέποντας την αποδοτική, αξιόπιστη και συνεχιζόμενη μεταφόρτωση αρχείων ακόμα και σε ασταθείς συνδέσεις δικτύου.", + "tusUploadsChunkSize": "Υποδεικνύει το μέγιστο μέγεθος ενός αιτήματος μεταφόρτωσης (για μικρότερες μεταφορές αρχείων θα χρησιμοποιηθούν απευθείας και όχι τμηματικές μεταφορτώσεις). Μπορείτε να εισάγετε έναν ακέραιο αριθμό που υποδηλώνει το μέγεθος σε bytes, ή κείμενο με αριθμό και μονάδα μέτρησης μεγέθους δεδομένων, όπως 10MB, 1GB κλπ.", + "tusUploadsRetryCount": "Αριθμός επαναληπτικών δοκιμών που θα πραγματοποιηθούν αν αποτύχει η μεταφόρτωση ενός τμήματος.", + "userHomeBasePath": "Βασική διαδρομή αρχείων για τους φακέλους των χρηστών", + "userScopeGenerationPlaceholder": "Η εμβέλεια εφαρμογής θα δημιουργηθεί αυτόματα", + "createUserHomeDirectory": "Δημιουργία φακέλου χρήστη", + "customStylesheet": "Προσαρμοσμένο στυλ εμφάνισης (stylesheet)", + "defaultUserDescription": "Αυτές είναι οι προεπιλεγμένες ρυθμίσεις για νέους χρήστες.", + "disableExternalLinks": "Απενεργοποίηση εξωτερικών συνδέσμων (εκτός από συνδέσμους προς τις οδηγίες χρήσης)", + "disableUsedDiskPercentage": "Απενεργοποίηση γραφήματος ποσοστού χρήσης χώρου αποθήκευσης", + "documentation": "οδηγίες χρήσης", + "examples": "Παραδείγματα", + "executeOnShell": "Εκτέλεση στο κέλυφος", + "executeOnShellDescription": "Από προεπιλογή, η εφαρμογή File Browser εκτελεί τις εντολές καλώντας τα προγράμματα των εντολών απευθείας. Αν θέλετε να τις εκτελέσετε σε ένα κέλυφος (όπως το Bash ή το PowerShell), μπορείτε να το καθορίσετε εδώ με τις απαιτούμενες παραμέτρους. Εάν οριστεί, η εντολή που εκτελείτε θα προστίθεται ως παράμετρος. Αυτό ισχύει τόσο για τις εντολές χρήστη όσο και για τους αγκίστρους συμβάντων (event hooks).", + "globalRules": "Πρόκειται για ένα γενικό σύνολο κανόνων που επιτρέπουν και απαγορεύουν διάφορες λειτουργίες και ισχύουν για κάθε χρήστη. Μπορείτε να καθορίσετε συγκεκριμένους κανόνες στις ρυθμίσεις κάθε χρήστη για να παρακάμψετε τους γενικούς κανόνες.", + "globalSettings": "Γενικές ρυθμίσεις", + "hideDotfiles": "Απόκρυψη κρυφών αρχείων (dotfiles)", + "insertPath": "Εισάγετε διαδρομή", + "insertRegex": "Εισάγετε έκφραση regex", + "instanceName": "Όνομα περιβάλλοντος", + "language": "Γλώσσα", + "lockPassword": "Αποτρέψτε τον χρήστη από την αλλαγή του κωδικού πρόσβασης", + "newPassword": "Νέος κωδικός πρόσβασης", + "newPasswordConfirm": "Επιβεβαιώστε τον νέο κωδικό πρόσβασης", + "newUser": "Νέος χρήστης", + "password": "Κωδικός πρόσβασης", + "passwordUpdated": "Ο κωδικός πρόσβασης ενημερώθηκε!", + "path": "Διαδρομή", + "perm": { + "create": "Δημιουργία αρχείων και φακέλων", + "delete": "Διαγραφή αρχείων και φακέλων", + "download": "Λήψη", + "execute": "Εκτέλεση εντολών", + "modify": "Επεξεργασία αρχείων", + "rename": "Μετονομασία ή μετακίνηση αρχείων και φακέλων", + "share": "Κοινοποίηση αρχείων" + }, + "permissions": "Δικαιώματα", + "permissionsHelp": "Μπορείτε να ορίσετε τον χρήστη ως διαχειριστή ή να επιλέξετε τα δικαιώματα μεμονωμένα. Αν επιλέξετε \"Διαχειριστής\", όλες οι υπόλοιπες επιλογές θα είναι αυτόματα επιλεγμένες. Η διαχείριση χρηστών παραμένει προνόμιο ενός χρήστη με τον ρόλο του διαχειριστή.\n", + "profileSettings": "Ρυθμίσεις προφίλ", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "αποκλείει την πρόσβαση σε οποιοδήποτε κρυφό αρχείο (όπως .git, .gitignore) σε κάθε φάκελο.\n", + "ruleExample2": "αποκλείει την πρόσβαση στο αρχείο με το όνομα Caddyfile στον ριζικό φάκελο της εμβέλειας του κανόνα.", + "rules": "Κανόνες", + "rulesHelp": "Εδώ μπορείτε να ορίσετε ένα σύνολο κανόνων που επιτρέπουν και απαγορεύουν διάφορες λειτουργίες για τον συγκεκριμένο χρήστη. Τα αποκλεισμένα αρχεία δεν θα εμφανίζονται στα περιεχόμενα των αντίστοιχων φακέλων και δεν θα είναι προσβάσιμα από τον χρήστη. Υποστηρίζονται εκφράσεις regex και διαδρομές σχετικές με την εμβέλεια αρχείων των χρηστών.\n", + "scope": "Εμβέλεια", + "setDateFormat": "Ορισμός ακριβούς μορφής ημερομηνίας", + "settingsUpdated": "Οι ρυθμίσεις ενημερώθηκαν!", + "shareDuration": "Διάρκεια κοινοποίησης", + "shareManagement": "Διαχείριση κοινοποίησης", + "shareDeleted": "Η κοινοποίηση διαγράφηκε!", + "singleClick": "Χρήση μονού κλικ για να ανοίξετε αρχεία και φακέλους", + "themes": { + "default": "System default", + "dark": "Σκοτεινό", + "light": "Φωτεινό", + "title": "Μοτίβο" + }, + "user": "Χρήστης", + "userCommands": "Εντολές χρήστη", + "userCommandsHelp": "Μια λίστα με τις διαθέσιμες εντολές για αυτόν το χρήστη, χωρισμένες μεταξύ τους με κενά. Παράδειγμα:\n", + "userCreated": "Ο χρήστης δημιουργήθηκε!", + "userDefaults": "Προεπιλεγμένες ρυθμίσεις χρήστη", + "userDeleted": "Ο χρήστης διαγράφηκε!", + "userManagement": "Διαχείριση χρηστών", + "userUpdated": "Ο χρήστης ενημερώθηκε!", + "username": "Όνομα χρήστη", + "users": "Χρήστες", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Βοήθεια", + "hugoNew": "Νέο Hugo", + "login": "Σύνδεση", + "logout": "Αποσύνδεση", + "myFiles": "Τα αρχεία μου", + "newFile": "Νέο αρχείο", + "newFolder": "Νέος φάκελος", + "preview": "Προεπισκόπηση", + "settings": "Ρυθμίσεις", + "signup": "Εγγραφή", + "siteSettings": "Ρυθμίσεις ιστότοπου" + }, + "success": { + "linkCopied": "Ο σύνδεσμος αντιγράφηκε!" + }, + "time": { + "days": "Ημέρες", + "hours": "Ώρες", + "minutes": "Λεπτά", + "seconds": "Δευτερόλεπτα", + "unit": "Μονάδα χρόνου" + } +} diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 7617caaf..1c8f1b3d 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -1,15 +1,20 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Toggle shell", "cancel": "Cancel", + "clear": "Clear", "close": "Close", + "continue": "Continue", "copy": "Copy", "copyFile": "Copy file", "copyToClipboard": "Copy to clipboard", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", "create": "Create", "delete": "Delete", "download": "Download", + "file": "File", + "folder": "Folder", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Hide dotfiles", "info": "Info", "more": "More", "move": "Move", @@ -17,37 +22,59 @@ "new": "New", "next": "Next", "ok": "OK", - "replace": "Replace", + "permalink": "Get Permanent Link", "previous": "Previous", + "preview": "Preview", + "publish": "Publish", "rename": "Rename", + "replace": "Replace", "reportIssue": "Report Issue", + "resumeTransfer": "Resume previous transfer", + "resumeTransferTooltip": "Skip all conflicting files, except the ones that are smaller on the server as we suppose that their transfert has been interrupted.", "save": "Save", + "schedule": "Schedule", "search": "Search", "select": "Select", - "share": "Share", - "publish": "Publish", "selectMultiple": "Select multiple", - "schedule": "Schedule", + "share": "Share", + "shell": "Toggle shell", + "submit": "Submit", "switchView": "Switch view", "toggleSidebar": "Toggle sidebar", "update": "Update", "upload": "Upload", - "permalink": "Get Permanent Link" + "openFile": "Open file", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Link copied!" + "download": { + "downloadFile": "Download File", + "downloadFolder": "Download Folder", + "downloadSelected": "Download Selected" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { "forbidden": "You don't have permissions to access this.", "internal": "Something really went wrong.", - "notFound": "This location can't be reached." + "notFound": "This location can't be reached.", + "connection": "The server can't be reached." }, "files": { - "folders": "Folders", - "files": "Files", "body": "Body", - "clear": "Clear", "closePreview": "Close preview", + "files": "Files", + "folders": "Folders", "home": "Home", "lastModified": "Last modified", "loading": "Loading...", @@ -56,9 +83,20 @@ "multipleSelectionEnabled": "Multiple selection enabled", "name": "Name", "size": "Size", + "sortByLastModified": "Sort by last modified", "sortByName": "Sort by name", "sortBySize": "Sort by size", - "sortByLastModified": "Sort by last modified" + "noPreview": "Preview is not available for this file.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "select file or directory", @@ -75,77 +113,125 @@ "help": "Help" }, "login": { - "password": "Password", - "passwordConfirm": "Password Confirmation", - "submit": "Login", "createAnAccount": "Create an account", "loginInstead": "Already have an account", + "password": "Password", + "passwordConfirm": "Password Confirmation", "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", "signup": "Signup", + "submit": "Login", "username": "Username", - "wrongCredentials": "Wrong credentials" + "usernameTaken": "Username already taken", + "wrongCredentials": "Wrong credentials", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanent", "prompts": { "copy": "Copy", - "copyMessage": "Choose the place to copy your files:", + "copyMessage": "Choose the location to copy your files to:", "currentlyNavigating": "Currently navigating on:", - "deleteMessageMultiple": "Are you sure you want to delete {count} file(s)?", - "deleteMessageSingle": "Are you sure you want to delete this file/folder?", + "deleteMessageMultiple": "Are you sure you wish to delete {count} file(s)?", + "deleteMessageSingle": "Are you sure you wish to delete this file/folder?", + "deleteMessageShare": "Are you sure you wish to delete this share({path})?", + "deleteUser": "Are you sure you want to delete this user?", "deleteTitle": "Delete files", "displayName": "Display Name:", "download": "Download files", - "downloadMessage": "Choose the format you want to download.", + "downloadMessage": "Choose the format you wish to download.", "error": "Something went wrong", "fileInfo": "File information", "filesSelected": "{count} files selected.", "lastModified": "Last Modified", "move": "Move", - "moveMessage": "Choose new house for your file(s)/folder(s):", + "moveMessage": "Choose new home for your file(s)/folder(s):", + "newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.", "newDir": "New directory", - "newDirMessage": "Write the name of the new directory.", + "newDirMessage": "Name your new directory.", "newFile": "New file", - "newFileMessage": "Write the name of the new file.", + "newFileMessage": "Name your new file.", "numberDirs": "Number of directories", "numberFiles": "Number of files", - "replace": "Replace", - "replaceMessage": "One of the files you're trying to upload is conflicting because of its name. Do you wish to replace the existing one?\n", "rename": "Rename", "renameMessage": "Insert a new name for", - "show": "Show", - "size": "Size", + "replace": "Replace", + "replaceMessage": "One of the files you're trying to upload has a conflicting name. Do you wish to skip this file and continue to upload or replace the existing one?\n", "schedule": "Schedule", "scheduleMessage": "Pick a date and time to schedule the publication of this post.", - "newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.", + "show": "Show", + "size": "Size", "upload": "Upload", - "uploadMessage": "Select an option to upload." + "uploadFiles": "Uploading {files} files...", + "uploadMessage": "Select an option to upload.", + "optionalPassword": "Optional password", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Images", + "music": "Music", + "pdf": "PDF", + "pressToSearch": "Press enter to search...", + "search": "Search...", + "typeToSearch": "Type to search...", + "types": "Types", + "video": "Video" }, "settings": { - "themes": { - "title": "Theme", - "light": "Light", - "dark": "Dark" - }, - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Execute commands", "allowEdit": "Edit, rename and delete files or directories", "allowNew": "Create new files and directories", "allowPublish": "Publish new posts and pages", + "allowSignup": "Allow users to signup", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(leave blank to avoid changes)", + "branding": "Branding", + "brandingDirectoryPath": "Branding directory path", + "brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", "changePassword": "Change Password", "commandRunner": "Command runner", "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", "commandsUpdated": "Commands updated!", + "createUserDir": "Auto create user home dir while adding new user", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Base path for user home directories", + "userScopeGenerationPlaceholder": "The scope will be auto generated", + "createUserHomeDirectory": "Create user home directory", "customStylesheet": "Custom Stylesheet", + "defaultUserDescription": "These are the default settings for new users.", + "disableExternalLinks": "Disable external links (except documentation)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "documentation", "examples": "Examples", + "executeOnShell": "Execute on shell", + "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you wish to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This applies to both user commands and event hooks.", + "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override these ones.", "globalSettings": "Global Settings", + "hideDotfiles": "Hide dotfiles", + "insertPath": "Insert the path", + "insertRegex": "Insert regex expression", + "instanceName": "Instance name", "language": "Language", "lockPassword": "Prevent the user from changing the password", "newPassword": "Your new password", @@ -153,95 +239,74 @@ "newUser": "New User", "password": "Password", "passwordUpdated": "Password updated!", - "permissions": "Permissions", - "permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n", - "profileSettings": "Profile Settings", - "ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n", - "ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.", - "rules": "Rules", - "rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n", - "scope": "Scope", - "settingsUpdated": "Settings updated!", - "user": "User", - "userCommands": "Commands", - "userCommandsHelp": "A space separated list with the available commands for this user. Example:\n", - "userCreated": "User created!", - "userDeleted": "User deleted!", - "userManagement": "User Management", - "username": "Username", - "users": "Users", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "User updated!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", + "path": "Path", "perm": { "create": "Create files and directories", "delete": "Delete files and directories", "download": "Download", - "modify": "Edit files", "execute": "Execute commands", + "modify": "Edit files", "rename": "Rename or move files and directories", - "share": "Share files" - } + "share": "Share files (require download permission)" + }, + "permissions": "Permissions", + "permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n", + "profileSettings": "Profile Settings", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n", + "ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.", + "rules": "Rules", + "rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n", + "scope": "Scope", + "setDateFormat": "Set exact date format", + "settingsUpdated": "Settings updated!", + "shareDuration": "Share Duration", + "shareManagement": "Share Management", + "shareDeleted": "Share deleted!", + "singleClick": "Use single clicks to open files and directories", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "System default", + "dark": "Dark", + "light": "Light", + "title": "Theme" + }, + "user": "User", + "userCommands": "Commands", + "userCommandsHelp": "A space separated list with the available commands for this user. Example:\n", + "userCreated": "User created!", + "userDefaults": "User default settings", + "userDeleted": "User deleted!", + "userManagement": "User Management", + "userUpdated": "User updated!", + "username": "Username", + "users": "Users", + "currentPassword": "Your Current Password" }, "sidebar": { + "diskUsed": "{used} of {total} used", "help": "Help", + "hugoNew": "Hugo New", "login": "Login", - "signup": "Signup", "logout": "Logout", "myFiles": "My files", "newFile": "New file", "newFolder": "New folder", + "preview": "Preview", "settings": "Settings", - "siteSettings": "Site Settings", - "hugoNew": "Hugo New", - "preview": "Preview" + "signup": "Signup", + "siteSettings": "Site Settings" }, - "search": { - "images": "Images", - "music": "Music", - "pdf": "PDF", - "types": "Types", - "video": "Video", - "search": "Search...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "is": "Icelandic", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어", - "nlBE": "Dutch (Belgium)", - "ro": "Romanian", - "svSE": "Swedish (Sweden)" + "success": { + "linkCopied": "Link copied!" }, "time": { - "unit": "Time Unit", - "seconds": "Seconds", - "minutes": "Minutes", + "days": "Days", "hours": "Hours", - "days": "Days" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "Minutes", + "seconds": "Seconds", + "unit": "Time Unit" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/es.json b/frontend/src/i18n/es.json index 592146ec..92847e62 100644 --- a/frontend/src/i18n/es.json +++ b/frontend/src/i18n/es.json @@ -1,15 +1,20 @@ { - "permanent": "Permanente", "buttons": { - "shell": "Presiona Enter para buscar...", "cancel": "Cancelar", + "clear": "Limpiar", "close": "Cerrar", + "continue": "Continuar", "copy": "Copiar", "copyFile": "Copiar archivo", "copyToClipboard": "Copiar al portapapeles", + "copyDownloadLinkToClipboard": "Copiar enlace de descarga al portapapeles", "create": "Crear", "delete": "Borrar", "download": "Descargar", + "file": "Archivo", + "folder": "Carpeta", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Ocultar archivos empezados por punto", "info": "Info", "more": "Más", "move": "Mover", @@ -17,37 +22,57 @@ "new": "Nuevo", "next": "Siguiente", "ok": "OK", - "replace": "Reemplazar", + "permalink": "Link permanente", "previous": "Anterior", + "preview": "Preview", + "publish": "Publicar", "rename": "Renombrar", + "replace": "Reemplazar", "reportIssue": "Reportar problema", "save": "Guardar", + "schedule": "Programar", "search": "Buscar", "select": "Seleccionar", - "share": "Compartir", - "publish": "Publicar", "selectMultiple": "Selección múltiple", - "schedule": "Programar", + "share": "Compartir", + "shell": "Presiona Enter para buscar...", + "submit": "Enviar", "switchView": "Cambiar vista", "toggleSidebar": "Mostrar/Ocultar menú", "update": "Actualizar", "upload": "Subir", - "permalink": "Link permanente" + "openFile": "Abrir archivo", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Guardar cambios", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "¡Link copiado!" + "download": { + "downloadFile": "Descargar fichero", + "downloadFolder": "Descargar directorio", + "downloadSelected": "Descargar seleccionados" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { "forbidden": "No tienes los permisos necesarios para acceder.", "internal": "La verdad es que algo ha ido mal.", - "notFound": "No se puede acceder a este lugar." + "notFound": "No se puede acceder a este lugar.", + "connection": "No se puede acceder al servidor." }, "files": { - "folders": "Carpetas", - "files": "Archivos", "body": "Cuerpo", - "clear": "Limpiar", "closePreview": "Cerrar vista previa", + "files": "Archivos", + "folders": "Carpetas", "home": "Inicio", "lastModified": "Última modificación", "loading": "Cargando...", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Selección múltiple activada", "name": "Nombre", "size": "Tamaño", + "sortByLastModified": "Ordenar por última modificación", "sortByName": "Ordenar por nombre", "sortBySize": "Ordenar por tamaño", - "sortByLastModified": "Ordenar por última modificación" + "noPreview": "La vista previa no está disponible para este archivo.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "seleccionar archivo o carpeta", @@ -75,23 +111,30 @@ "help": "Ayuda" }, "login": { - "password": "Contraseña", - "passwordConfirm": "Confirmación de contraseña", - "submit": "Iniciar sesión", "createAnAccount": "Crear una cuenta", "loginInstead": "Usuario ya existente", + "password": "Contraseña", + "passwordConfirm": "Confirmación de contraseña", "passwordsDontMatch": "Las contraseñas no coinciden", - "usernameTaken": "Nombre usuario no disponible", "signup": "Registrate", + "submit": "Iniciar sesión", "username": "Usuario", - "wrongCredentials": "Usuario y/o contraseña incorrectos" + "usernameTaken": "Nombre usuario no disponible", + "wrongCredentials": "Usuario y/o contraseña incorrectos", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanente", "prompts": { "copy": "Copiar", "copyMessage": "Elige el lugar donde quieres copiar tus archivos:", "currentlyNavigating": "Actualmente estás en:", "deleteMessageMultiple": "¿Estás seguro que quieres eliminar {count} archivo(s)?", "deleteMessageSingle": "¿Estás seguro que quieres eliminar este archivo/carpeta?", + "deleteMessageShare": "¿Está seguro de que quiere eliminar este recurso compartido({path})?", + "deleteUser": "Are you sure you want to delete this user?", "deleteTitle": "Borrar archivos", "displayName": "Nombre:", "download": "Descargar archivos", @@ -102,43 +145,91 @@ "lastModified": "Última modificación", "move": "Mover", "moveMessage": "Elige una nueva casa para tus archivo(s)/carpeta(s):", + "newArchetype": "Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido.", "newDir": "Nueva carpeta", "newDirMessage": "Escribe el nombre de la nueva carpeta.", "newFile": "Nuevo archivo", "newFileMessage": "Escribe el nombre del nuevo archivo.", "numberDirs": "Número de carpetas", "numberFiles": "Número de archivos", - "replace": "Reemplazar", - "replaceMessage": "Uno de los archivos ue intentas subir está creando conflicto por su nombre. ¿Quieres cambiar el nombre del ya existente?\n", "rename": "Renombrar", "renameMessage": "Escribe el nuevo nombre para", - "show": "Mostrar", - "size": "Tamaño", + "replace": "Reemplazar", + "replaceMessage": "Uno de los archivos ue intentas subir está creando conflicto por su nombre. ¿Quieres cambiar el nombre del ya existente?\n", "schedule": "Programar", "scheduleMessage": "Elige una hora y fecha para programar la publicación de este post.", - "newArchetype": "Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido." + "show": "Mostrar", + "size": "Tamaño", + "upload": "Subir", + "uploadFiles": "Subiendo {files} archivos...", + "uploadMessage": "Seleccione una opción para subir.", + "optionalPassword": "Contraseña opcional", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Imágenes", + "music": "Música", + "pdf": "PDF", + "pressToSearch": "Presiona enter para buscar...", + "search": "Buscar...", + "typeToSearch": "Escribe para realizar una busqueda...", + "types": "Tipos", + "video": "Vídeo" }, "settings": { - "instanceName": "Nombre de la instancia", - "brandingDirectoryPath": "Ruta de la carpeta de personalizacion de marca", - "documentation": "documentación", - "branding": "Marca", - "disableExternalLinks": "Deshabilitar enlaces externos (excepto documentación)", - "brandingHelp": "Tú puedes personalizar como se ve tu instancia de FileBrowser cambiándole el nombre, reemplazando ellogo, agregar estilos personalizados e incluso deshabilitando loslinks externos que apuntan hacia GitHub. \nPara mayor información acerca de personalización de marca, por favor revisa el {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Ejecutar comandos", "allowEdit": "Editar, renombrar y borrar archivos o carpetas", "allowNew": "Crear nuevos archivos y carpetas", "allowPublish": "Publicar nuevos posts y páginas", + "allowSignup": "Permitir registro de usuarios", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(dejar en blanco para evitar cambios)", + "branding": "Marca", + "brandingDirectoryPath": "Ruta de la carpeta de personalizacion de marca", + "brandingHelp": "Tú puedes personalizar como se ve tu instancia de FileBrowser cambiándole el nombre, reemplazando ellogo, agregar estilos personalizados e incluso deshabilitando loslinks externos que apuntan hacia GitHub. \nPara mayor información acerca de personalización de marca, por favor revisa el {0}.", "changePassword": "Cambiar contraseña", "commandRunner": "Executor de comandos", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "commandRunnerHelp": "Aquí puede establecer los comandos que se ejecutan en los eventos nombrados. Debe escribir uno por línea. Las variables de entorno {0} y {1} estarán disponibles, siendo {0} relativa a {1}. Para más información sobre esta característica y las variables de entorno disponibles, por favor lea el {2}.", "commandsUpdated": "¡Comandos actualizados!", + "createUserDir": "Crea automaticamente una carpeta de inicio cuando se agrega un usuario", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Ruta base para los directorios personales de los usuarios", + "userScopeGenerationPlaceholder": "El ámbito se generará automáticamente", + "createUserHomeDirectory": "Crear el directorio principal del usuario", "customStylesheet": "Modificar hoja de estilos", + "defaultUserDescription": "Estas son las configuraciones por defecto para nuevos usuarios.", + "disableExternalLinks": "Deshabilitar enlaces externos (excepto documentación)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "documentación", "examples": "Ejemplos", + "executeOnShell": "Ejecutar en la shell", + "executeOnShellDescription": "Por defecto, FileBrowser ejecuta los comandos llamando directamente a sus binarios. Si quieres ejecutarlos en un shell en su lugar (como Bash o PowerShell), puedes definirlo aquí con los argumentos y banderas (flags) necesarios. Si se define, el comando que se ejecuta se añadirá como argumento. Esto se aplica tanto a los comandos de usuario como a los ganchos de eventos.", + "globalRules": "Se trata de un conjunto global de reglas de permiso y rechazo. Se aplican a todos los usuarios. Puedes definir reglas específicas en la configuración de cada usuario para anular estas.", "globalSettings": "Ajustes globales", + "hideDotfiles": "Ocultar archivos empezados por punto", + "insertPath": "Introduce la ruta", + "insertRegex": "Introducir expresión regular", + "instanceName": "Nombre de la instancia", "language": "Idioma", "lockPassword": "Evitar que el usuario cambie la contraseña", "newPassword": "Tu nueva contraseña", @@ -146,91 +237,70 @@ "newUser": "Nuevo usuario", "password": "Contraseña", "passwordUpdated": "¡Contraseña actualizada!", + "path": "Ruta", + "perm": { + "create": "Crear ficheros y directorios", + "delete": "Eliminar ficheros y directorios", + "download": "Descargar", + "execute": "Executar comandos", + "modify": "Editar ficheros", + "rename": "Renombrar o mover ficheros y directorios", + "share": "Compartir ficheros" + }, "permissions": "Permisos", "permissionsHelp": "Puedes nombrar al usuario como administrador o elegir los permisos individualmente. Si seleccionas \"Administrador\", todas las otras opciones serán activadas automáticamente. La administración de usuarios es un privilegio de administrador.\n", "profileSettings": "Ajustes del perfil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "previene el acceso a una extensión de archivo (Como .git) en cada carpeta.\n", "ruleExample2": "bloquea el acceso al archivo llamado Caddyfile en la carpeta raíz.", "rules": "Reglas", "rulesHelp": "Aquí puedes definir un conjunto de reglas de permisos para este usuario específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.\n", "scope": "Raíz", + "setDateFormat": "Establecer el formato exacto de la fecha", "settingsUpdated": "¡Ajustes actualizados!", + "shareDuration": "Compartir Duración", + "shareManagement": "Gestión Compartida", + "shareDeleted": "¡Recurso compartido eliminado!", + "singleClick": "Utilice un solo clic para abrir archivos y directorios", + "themes": { + "default": "System default", + "dark": "Oscuro", + "light": "Claro", + "title": "Tema" + }, "user": "Usuario", "userCommands": "Comandos", "userCommandsHelp": "Una lista separada por espacios con los comandos permitidos para este usuario. Ejemplo:\n", "userCreated": "¡Usuario creado!", + "userDefaults": "Configuración de usuario por defecto", "userDeleted": "¡Usuario eliminado!", "userManagement": "Administración de usuarios", + "userUpdated": "¡Usuario actualizado!", "username": "Usuario", "users": "Usuarios", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Permitir registro de usuarios", - "createUserDir": "Crea automaticamente una carpeta de inicio cuando se agrega un usuario", - "insertRegex": "Introducir expresión regular", - "insertPath": "Introduce la ruta", - "userUpdated": "¡Usuario actualizado!", - "userDefaults": "Configuración de usuario por defecto", - "defaultUserDescription": "Estas son las configuraciones por defecto para nuevos usuarios.", - "executeOnShell": "Ejecutar en la shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Crear ficheros y directorios", - "delete": "Eliminar ficheros y directorios", - "download": "Descargar", - "modify": "Editar ficheros", - "execute": "Executar comandos", - "rename": "Renombrar o mover ficheros y directorios", - "share": "Compartir ficheros" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ayuda", + "hugoNew": "Nuevo Hugo", "login": "Iniciar sesión", - "signup": "Registrate", "logout": "Cerrar sesión", "myFiles": "Mis archivos", "newFile": "Nuevo archivo", "newFolder": "Nueva carpeta", + "preview": "Vista previa", "settings": "Ajustes", - "siteSettings": "Ajustes del sitio", - "hugoNew": "Nuevo Hugo", - "preview": "Vista previa" + "signup": "Registrate", + "siteSettings": "Ajustes del sitio" }, - "search": { - "images": "Images", - "music": "Música", - "pdf": "PDF", - "types": "Tipos", - "video": "Vídeo", - "search": "Buscar...", - "typeToSearch": "Escribe para realizar una busqueda...", - "pressToSearch": "Presiona enter para buscar..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "¡Link copiado!" }, "time": { - "unit": "Unidad", - "seconds": "Segundos", - "minutes": "Minutos", + "days": "Días", "hours": "Horas", - "days": "Días" - }, - "download": { - "downloadFile": "Descargar fichero", - "downloadFolder": "Descargar directorio" + "minutes": "Minutos", + "seconds": "Segundos", + "unit": "Unidad" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/fa.json b/frontend/src/i18n/fa.json new file mode 100644 index 00000000..a40addba --- /dev/null +++ b/frontend/src/i18n/fa.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "لغو", + "clear": "پاک کردن", + "close": "بستن", + "continue": "ادامه", + "copy": "کپی", + "copyFile": "کپی فایل", + "copyToClipboard": "کپی به حافظه", + "copyDownloadLinkToClipboard": "کپی آدرس به حافظه", + "create": "ایجاد", + "delete": "حذف", + "download": "دانلود", + "file": "فایل", + "folder": "پوشه", + "fullScreen": "تمام صفحه ", + "hideDotfiles": "مخفی کردن دات فایلها", + "info": "اطلاعات", + "more": "بیشتر", + "move": "انتقال", + "moveFile": "انتقال فایل", + "new": "جدید", + "next": "بعدی", + "ok": "تایید", + "permalink": "دریافت لینک دائمی", + "previous": "قبلی", + "preview": "نمایش", + "publish": "انتشار", + "rename": "تغییر نام", + "replace": "جایگزین", + "reportIssue": "گزارش مشکل", + "save": "ذخیره", + "schedule": "زمان بندی", + "search": "جستجو", + "select": "انتخاب", + "selectMultiple": "انتخاب چندتایی", + "share": "اشتراک گذاری", + "shell": "تغییر پوسته", + "submit": "ثبت", + "switchView": "تغییر نمایش", + "toggleSidebar": "تغییر نوارکناری", + "update": "به روز سانی", + "upload": "آپلود", + "openFile": "باز کردن فایل", + "openDirect": "View raw", + "discardChanges": "لغو کردن", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "دانلود فایل", + "downloadFolder": "دانلود پوشه", + "downloadSelected": "دانلود انتخاب شده ها" + }, + "upload": { + "abortUpload": "آیا مطمئن هستید که میخواهید لغو کنید؟" + }, + "errors": { + "forbidden": "شما مجوز دسترسی به این را ندارید.", + "internal": "اشتباهی اتفاق افتاده است", + "notFound": "این محل قابل دسترسی نیست", + "connection": "سرور قابل دسترسی نیست" + }, + "files": { + "body": "بدنه", + "closePreview": "بستن نمایش", + "files": "فایل ها", + "folders": "پوشه ها", + "home": "صفحه اصلی", + "lastModified": "آخرین ویرایش", + "loading": "در حال بارگذاری...", + "lonely": "It feels lonely here...", + "metadata": "فراداده", + "multipleSelectionEnabled": "فعال بودن چند گزینه ای", + "name": "نام", + "size": "اندازه", + "sortByLastModified": "مرتب سازی آخرین ویرایش", + "sortByName": "مرتب سازی نام", + "sortBySize": "مرتب سازی اندازه", + "noPreview": "این فایل قابل نمایش نیست", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "انتخاب فایل یا پوشه", + "ctrl": { + "click": "انتخاب چند فایل یا پوشه", + "f": "باز کردن جستجو", + "s": "ذخیره یک فایل یا دانلود پوشه جاری" + }, + "del": "حذف گزینه انتخابی ", + "doubleClick": "باز کردن فایل یا پوشه", + "esc": "لغو انتخاب و/یا بستن پیغام", + "f1": "این اطلاعات", + "f2": "تغییر نام فایل", + "help": "راهنما" + }, + "login": { + "createAnAccount": "ایجاد کاربر", + "loginInstead": "کاربر تکراری", + "password": "رمز عبور", + "passwordConfirm": "تایید رمز", + "passwordsDontMatch": "عدم تطابق رمزها", + "signup": "ثبت نام", + "submit": "ورود", + "username": "نام کاربری", + "usernameTaken": "نام کاربری تکراری", + "wrongCredentials": "خطا در اعتبارسنجی", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "دائمی", + "prompts": { + "copy": "کپی", + "copyMessage": "انتخاب محل برای کپی فایل به آنجا ", + "currentlyNavigating": "در حال پیمایش", + "deleteMessageMultiple": "آیا مطمئنید که می‌خواهید {count} فایل را حذف کنید؟", + "deleteMessageSingle": "آیا مطمئنید که میخواهید فایل/پوشه را حذف کنید؟", + "deleteMessageShare": "آیا مطمئن هستید که می‌خواهید این اشتراک‌گذاری ({path}) را حذف کنید؟", + "deleteUser": "آیا مطمئنید که میخواهید این کاربر را حذف کنید؟", + "deleteTitle": "حذف فایل ها", + "displayName": "نمایش نام:", + "download": "دانلود فایل ها", + "downloadMessage": "نوع فایلی که میخواهید دانلود کنید را انتخاب کنید ", + "error": "اشتباهی رخ داده", + "fileInfo": "اطلاعات فایل ", + "filesSelected": "{count} فایل انتخاب شد.", + "lastModified": "آخرین ویرایش", + "move": "انتقال", + "moveMessage": "محل جدیدی برای فایل(ها)/پوشه(های) خود انتخاب کنید:", + "newArchetype": "یک پست جدید بر اساس یک آرکتایپ ایجاد کنید. فایل شما در پوشه محتوا ایجاد خواهد شد.", + "newDir": "پوشه جدید", + "newDirMessage": "نام پوشه جدید", + "newFile": "فایل جدید", + "newFileMessage": "نام فایل جدید", + "numberDirs": "تعداد پوشه ها", + "numberFiles": "تعداد فایل ها", + "rename": "تغییر نام", + "renameMessage": "ورود نام جدید برای", + "replace": "جایگزین کردن", + "replaceMessage": "یکی از فایل‌هایی که می‌خواهید آپلود کنید، نام متفاوتی دارد. آیا می‌خواهید از این فایل صرف نظر کنید و به آپلود ادامه دهید یا فایل موجود را جایگزین کنید؟", + "schedule": "زمان بندی", + "scheduleMessage": "تاریخ و زمانی را برای برنامه‌ریزی انتشار این پست انتخاب کنید", + "show": "نمایش", + "size": "اندازه", + "upload": "آپلود", + "uploadFiles": "در حال آپلود {files} فایل‌ها...", + "uploadMessage": "یک گزینه برای آپلود انتخاب کنید.", + "optionalPassword": "رمز عبور اختیاری", + "resolution": "وضوح تصویر", + "discardEditorChanges": "آیا مطمئن هستید که می‌خواهید تغییراتی را که ایجاد کرده‌اید، لغو کنید؟", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "تصاویر", + "music": "موسیقی", + "pdf": "پی دی اف", + "pressToSearch": "برای جستجو enter را بزنید...", + "search": "جستجو...", + "typeToSearch": "تایپ برای جستجو", + "types": "انواع", + "video": "ویدئو " + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "اجرای دستورات", + "allowEdit": "ویرایش، تغییر نام، و حذف فایل ها و پوشه ها", + "allowNew": "ایجاد فایلها و پوشه های جدید", + "allowPublish": "انتشار پست ها و صفحات جدید", + "allowSignup": "اجاره دادن به کاربران برای ثبت نام", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(خالی بگذارید تا تغییر ایجاد نشود)", + "branding": "برندسازی", + "brandingDirectoryPath": "مسیر پوشه برند", + "brandingHelp": "شما می‌توانید ظاهر و حس نمونه‌ی مرورگر فایل خود را با تغییر نام، جایگزینی لوگو، اضافه کردن سبک‌های سفارشی و حتی غیرفعال کردن لینک‌های خارجی به گیت‌هاب، سفارشی کنید.\nبرای اطلاعات بیشتر در مورد برندسازی سفارشی، لطفاً به {0} مراجعه کنید.", + "changePassword": "تعبیر رمز", + "commandRunner": "اجرا کننده دستورات", + "commandRunnerHelp": "در اینجا می‌توانید دستوراتی را که در رویدادهای نامگذاری شده اجرا می‌شوند، تنظیم کنید. باید در هر خط یکی را بنویسید. متغیرهای محیطی {0} و {1} در دسترس خواهند بود و {0} نسبت به {1} هستند. برای اطلاعات بیشتر در مورد این ویژگی و متغیرهای محیطی موجود، لطفاً {2} را مطالعه کنید.", + "commandsUpdated": "دستورات ویرایش شد!", + "createUserDir": "ایجاد خودکار پوشه برای هر کاربر هنگام اضافه کردن کاربر جدید", + "minimumPasswordLength": "حداقل طول رمز عبور", + "tusUploads": "آپلودهای بخش بخش شده", + "tusUploadsHelp": "مرورگر فایل از آپلود فایل بخش بخش شده پشتیبانی می‌کند و امکان ایجاد آپلودهای فایل کارآمد، قابل اعتماد، قابل از سرگیری و بخش بخش شده را حتی در شبکه‌های غیرقابل اعتماد فراهم می‌کند.", + "tusUploadsChunkSize": "حداکثر اندازه یک درخواست را نشان می‌دهد (برای آپلودهای کوچک‌تر از آپلود مستقیم استفاده می‌شود). می‌توانید یک عدد صحیح ساده که نشان‌دهنده اندازه بایت است یا یک رشته مانند ۱۰ مگابایت، ۱ گیگابایت و غیره وارد کنید.", + "tusUploadsRetryCount": "تعداد تلاش‌های مجدد برای انجام در صورت عدم موفقیت در آپلود یک قطعه داده.", + "userHomeBasePath": "مسیر پایه برای پوشه های کاربر", + "userScopeGenerationPlaceholder": "محدوده به صورت خودکار تولید خواهد شد", + "createUserHomeDirectory": "ایجاد پوشه ناحیه کاربری", + "customStylesheet": "Stylesheet سفارشی", + "defaultUserDescription": "این تنظیمات پیش‌فرض برای کاربران جدید است.", + "disableExternalLinks": "غیرفعال کردن لینک‌های خارجی (به جز مستندات)", + "disableUsedDiskPercentage": "نمودار درصد دیسک استفاده شده را غیرفعال کنید", + "documentation": "مستندسازی", + "examples": "مثال ها", + "executeOnShell": "اجرا روی shell", + "executeOnShellDescription": "به طور پیش‌فرض، مرورگر فایل، دستورات را با فراخوانی مستقیم فایل‌های باینری آنها اجرا می‌کند. اگر می‌خواهید آنها را روی یک پوسته (مانند Bash یا PowerShell) اجرا کنید، می‌توانید آن را در اینجا با آرگومان‌ها و پرچم‌های مورد نیاز تعریف کنید. در صورت تنظیم، دستوری که اجرا می‌کنید به عنوان یک آرگومان پیوست می‌شود. این موضوع هم در مورد دستورات کاربر و هم در مورد هوک ها صدق می‌کند.", + "globalRules": "این یک مجموعه جهانی از قوانین مجاز و غیرمجاز است. آنها برای هر کاربر اعمال می‌شوند. شما می‌توانید قوانین خاصی را در تنظیمات هر کاربر تعریف کنید تا این قوانین را لغو کنید.", + "globalSettings": "تنظیمات سراسری", + "hideDotfiles": "مخفی کردن دات فایل ها", + "insertPath": "وارد کردن مسیر", + "insertRegex": "وارد کردن عبارات باقاعده", + "instanceName": "نام نمونه", + "language": "زبان", + "lockPassword": "جلوگیری از تغییر رمز توسط کاربر", + "newPassword": "رمز جدید شما", + "newPasswordConfirm": "تایید رمز جدید شما", + "newUser": "کاربر جدید ", + "password": " رمز عبور", + "passwordUpdated": "رمز عبور ویرایش شد!", + "path": "مسیر", + "perm": { + "create": "استاد فایل ها و پوشه ها", + "delete": "حذف فایل ها و پوشه ها", + "download": "دانلود", + "execute": "اجرای دستورات", + "modify": "ویرایش فایل ها", + "rename": "تغییر نام یا انتقال فایل ها و پوشه ها", + "share": "به اشتراک گذاری فایل ها" + }, + "permissions": "دسترسی ها", + "permissionsHelp": "شما می‌توانید کاربر را به عنوان مدیر تنظیم کنید یا دسترسی‌ها را به صورت جداگانه انتخاب کنید. اگر \"مدیر\" را انتخاب کنید، تمام گزینه‌های دیگر به طور خودکار اعمال می‌شوند. مدیریت کاربران همچنان از اختیارات مدیر است.", + "profileSettings": "تنظیمات ناحیه کاربری", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "از دسترسی به هرگونه فایل نقطه‌ای (مانند .git، .gitignore) در هر پوشه جلوگیری می‌کند.", + "ruleExample2": "دسترسی به فایلی به نام Caddyfile را در ریشه دامنه مسدود می‌کند.", + "rules": "قواعد", + "rulesHelp": "در اینجا می‌توانید مجموعه‌ای از قوانین مجاز و غیرمجاز را برای این کاربر خاص تعریف کنید. فایل‌های مسدود شده در لیست‌ها نمایش داده نمی‌شوند و کاربر به آنها دسترسی نخواهد داشت. ما از regex و مسیرهای مربوط به محدوده کاربر پشتیبانی می‌کنیم.", + "scope": "محدوده", + "setDateFormat": "تنظیم قالب دقیق تاریخ", + "settingsUpdated": "تنظیمات به روز شد!", + "shareDuration": "زمان به اشتراک گذاری", + "shareManagement": "مدیریت به اشتراک گذاری", + "shareDeleted": "به اشتراک گذاری حذف شد!", + "singleClick": "استفاده از یک کلیک برای باز کردن فایل ها و پوشه ها", + "themes": { + "default": "تنظیمات پیش فرض سیستم", + "dark": "تاریک ", + "light": "روشن", + "title": "تم یا زمینه" + }, + "user": "کاربر", + "userCommands": "دستورات", + "userCommandsHelp": "فهرستی از دستورات موجود برای این کاربر که با فاصله از هم جدا شده‌اند. مثال:", + "userCreated": "کاربر ایجاد شد", + "userDefaults": "تنظیمات پیش فرض کاربر", + "userDeleted": "کاربر حذف شد", + "userManagement": "مدیریت کاربران", + "userUpdated": "کاربر به روز شد!", + "username": "نام کاربری", + "users": "کاربران", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "راهنما", + "hugoNew": "Hugo New", + "login": "ورود", + "logout": "خروج از حساب", + "myFiles": "فایل های من", + "newFile": "فایل جدید", + "newFolder": "پوشه جدید", + "preview": "نمایش", + "settings": "تنظیمات", + "signup": "ثبت نام", + "siteSettings": "تنظیمات سایت " + }, + "success": { + "linkCopied": "لینک کپی شد!" + }, + "time": { + "days": "روزها", + "hours": "ساعت", + "minutes": "دقیقه", + "seconds": "ثانیه", + "unit": "واحد زمان" + } +} diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json index 60401ff0..2829aa65 100644 --- a/frontend/src/i18n/fr.json +++ b/frontend/src/i18n/fr.json @@ -1,15 +1,20 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Toggle shell", "cancel": "Annuler", + "clear": "Effacer", "close": "Fermer", + "continue": "Continuer", "copy": "Copier", "copyFile": "Copier le fichier", "copyToClipboard": "Copier dans le presse-papier", + "copyDownloadLinkToClipboard": "Copier le lien de téléchargement dans le presse-papier", "create": "Créer", "delete": "Supprimer", "download": "Télécharger", + "file": "Fichier", + "folder": "Dossier", + "fullScreen": "Plein écran", + "hideDotfiles": "Masquer les fichiers cachés", "info": "Info", "more": "Plus", "move": "Déplacer", @@ -17,81 +22,121 @@ "new": "Nouveau", "next": "Suivant", "ok": "OK", - "replace": "Remplacer", + "permalink": "Obtenir le lien permanent", "previous": "Précédent", - "rename": "Renommer", - "reportIssue": "Rapport d'erreur", - "save": "Enregistrer", - "search": "Chercher", - "select": "Sélectionner", - "share": "Partager", + "preview": "Prévisualiser", "publish": "Publier", + "rename": "Renommer", + "replace": "Remplacer", + "reportIssue": "Signaler un problème", + "resumeTransfer": "Reprendre le transfert précédent", + "resumeTransferTooltip": "Ignorez tous les fichiers en conflit, à l'exception de ceux dont la taille est inférieure sur le serveur, car nous supposons que leur transfert a été interrompu.", + "save": "Enregistrer", + "schedule": "Planifier", + "search": "Rechercher", + "select": "Sélectionner", "selectMultiple": "Sélection multiple", - "schedule": "Fixer la date", + "share": "Partager", + "shell": "Activer/Désactiver le shell", + "submit": "Envoyer", "switchView": "Changer le mode d'affichage", "toggleSidebar": "Afficher/Masquer la barre latérale", "update": "Mettre à jour", "upload": "Importer", - "permalink": "Obtenir un lien permanent" + "openFile": "Ouvrir le fichier", + "openDirect": "Affichage brut", + "discardChanges": "Annuler", + "stopSearch": "Arrêter recherche", + "saveChanges": "Enregistrer changements", + "editAsText": "Editer comme Texte", + "increaseFontSize": "Augmenter taille police", + "decreaseFontSize": "Réduire taille police", + "overrideAll": "Remplacer tous les fichiers du dossier de destination", + "skipAll": "Ignorer tous les fichiers en conflit", + "renameAll": " Renommer tous les fichiers (créer une copie)", + "singleDecision": "Choisissez pour chaque fichier en conflit" }, - "success": { - "linkCopied": "Link copied!" + "download": { + "downloadFile": "Télécharger le fichier", + "downloadFolder": "Télécharger le dossier", + "downloadSelected": "Télécharger la sélection" + }, + "upload": { + "abortUpload": "Êtes-vous sûr de vouloir annuler ?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "Vous n'avez pas la permission d'accéder à cela.", "internal": "Aïe ! Quelque chose s'est mal passé.", - "notFound": "Impossible d'accéder à cet emplacement." + "notFound": "Impossible d'accéder à cet emplacement.", + "connection": "Le serveur est injoignable." }, "files": { - "folders": "Dossiers", - "files": "Fichiers", "body": "Corps", - "clear": "Fermer", "closePreview": "Fermer la prévisualisation", + "files": "Fichiers", + "folders": "Dossiers", "home": "Accueil", "lastModified": "Dernière modification", "loading": "Chargement...", - "lonely": "Il semble qu'il n'y ai rien par ici...", - "metadata": "Metadonnées", + "lonely": "C'est un peu désert ici...", + "metadata": "Métadonnées", "multipleSelectionEnabled": "Sélection multiple activée", "name": "Nom", "size": "Taille", + "sortByLastModified": "Trier par date de modification", "sortByName": "Trier par nom", "sortBySize": "Trier par taille", - "sortByLastModified": "Trier par date de dernière modification" + "noPreview": "L'aperçu n'est pas disponible pour ce fichier.", + "csvTooLarge": "Le fichier CSV est trop volumineux pour être prévisualisé (>5MB). Veuillez le télécharger pour le voir.", + "csvLoadFailed": "Impossible de charger le fichier CSV.", + "showingRows": "Affichage de {count} ligne(s)", + "columnSeparator": "Séparateur de Colonnes", + "csvSeparators": { + "comma": "Virgule (,)", + "semicolon": "Point-virgule (;)", + "both": "Les (,) et (;)" + }, + "fileEncoding": "Encodage du fichier" }, "help": { - "click": "Sélectionner un élément", + "click": "Sélectionner un fichier ou dossier", "ctrl": { - "click": "Sélectionner plusieurs éléments", + "click": "Sélectionner plusieurs fichiers ou dossiers", "f": "Ouvrir l'invité de recherche", - "s": "Télécharger l'élément actuel" + "s": "Enregistrer un fichier ou télécharger le dossier actuel" }, "del": "Supprimer les éléments sélectionnés", - "doubleClick": "Ouvrir un élément", + "doubleClick": "Ouvrir un fichier ou dossier", "esc": "Désélectionner et/ou fermer la boîte de dialogue", "f1": "Ouvrir l'aide", "f2": "Renommer le fichier", "help": "Aide" }, "login": { + "createAnAccount": "Créer un compte", + "loginInstead": "Vous avez déjà un compte", "password": "Mot de passe", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "Confirmation de mot de passe", + "passwordsDontMatch": "Les mots de passe ne concordent pas", + "signup": "S'inscrire", "submit": "Se connecter", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", - "username": "Utilisateur", - "wrongCredentials": "Identifiants incorrects !" + "username": "Identifiant", + "usernameTaken": "L'identifiant est déjà pris", + "wrongCredentials": "Identifiants incorrects !", + "passwordTooShort": "Le mot de passe doit contenir au moins {min} caractères", + "logout_reasons": { + "inactivity": "Vous avez été déconnecté'e en raison d'une inactivité prolongée." + } }, + "permanent": "Permanent", "prompts": { "copy": "Copier", "copyMessage": "Choisissez l'emplacement où copier la sélection :", "currentlyNavigating": "Dossier courant :", - "deleteMessageMultiple": "Etes-vous sûr de vouloir supprimer ces {count} élément(s) ?", - "deleteMessageSingle": "Etes-vous sûr de vouloir supprimer cet élément ?", + "deleteMessageMultiple": "Êtes-vous sûr de vouloir supprimer ces {count} élément(s) ?", + "deleteMessageSingle": "Êtes-vous sûr de vouloir supprimer cet élément ?", + "deleteMessageShare": "Êtes-vous sûr de vouloir supprimer ce partage ({path}) ?", + "deleteUser": "Êtes-vous sûr de vouloir supprimer cet utilisateur ?", "deleteTitle": "Supprimer", "displayName": "Nom :", "download": "Télécharger", @@ -101,136 +146,167 @@ "filesSelected": "{count} éléments sélectionnés", "lastModified": "Dernière modification", "move": "Déplacer", - "moveMessage": "Choisissez l'emplacement où déplacer la sélection :", + "moveMessage": "Choisissez un nouveau dossier principal pour vos fichier(s)/dossier(s) :", + "newArchetype": "Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu.", "newDir": "Nouveau dossier", "newDirMessage": "Nom du nouveau dossier :", "newFile": "Nouveau fichier", "newFileMessage": "Nom du nouveau fichier :", "numberDirs": "Nombre de dossiers", "numberFiles": "Nombre de fichiers", - "replace": "Remplacer", - "replaceMessage": "Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n", "rename": "Renommer", "renameMessage": "Nouveau nom pour", + "replace": "Remplacer", + "replaceMessage": "L'un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n", + "schedule": "Planifier", + "scheduleMessage": "Choisissez une date pour planifier la publication de ce post", "show": "Montrer", "size": "Taille", - "schedule": "Fixer la date", - "scheduleMessage": "Choisissez une date pour planifier la publication de ce post", - "newArchetype": "Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu." - }, - "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", - "admin": "Admin", - "administrator": "Administrateur", - "allowCommands": "Exécuter des commandes", - "allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers", - "allowNew": "Créer de nouveaux fichiers et dossiers", - "allowPublish": "Publier de nouveaux posts et pages", - "avoidChanges": "(Laisser vide pour conserver l'actuel)", - "changePassword": "Modifier le mot de passe", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", - "commandsUpdated": "Commandes mises à jour !", - "customStylesheet": "Feuille de style personnalisée", - "examples": "Exemples", - "globalSettings": "Paramètres généraux", - "language": "Langue", - "lockPassword": "Prevent the user from changing the password", - "newPassword": "Votre nouveau mot de passe", - "newPasswordConfirm": "Confirmation du nouveau mot de passe", - "newUser": "Nouvel Utilisateur", - "password": "Mot de passe", - "passwordUpdated": "Mot de passe mis à jour !", - "permissions": "Permissions", - "permissionsHelp": "Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur\", toutes les autres options seront automatiquement activées. La gestion des utilisateurs est un privilège que seul l'administrateur possède.\n", - "profileSettings": "Paramètres du profil", - "ruleExample1": "Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers", - "ruleExample2": "Bloque l'accès au fichier nommé \"Caddyfile\" à la racine du dossier utilisateur", - "rules": "Règles", - "rulesHelp": "Vous pouvez définir ici un ensemble de règles pour cet utilisateur. Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur. Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.\n", - "scope": "Portée du dossier utilisateur", - "settingsUpdated": "Les paramètres ont été mis à jour !", - "user": "Utilisateur", - "userCommands": "Commandes", - "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :", - "userCreated": "Utilisateur créé !", - "userDeleted": "Utilisateur supprimé !", - "userManagement": "Gestion des utilisateurs", - "username": "Nom d'utilisateur", - "users": "Utilisateurs", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "Utilisateur mis à jour !", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" - } - }, - "sidebar": { - "help": "Aide", - "login": "Login", - "signup": "Signup", - "logout": "Se déconnecter", - "myFiles": "Mes fichiers", - "newFile": "Nouveau fichier", - "newFolder": "Nouveau dossier", - "settings": "Paramètres", - "siteSettings": "Paramètres du site", - "hugoNew": "Nouveau Hugo", - "preview": "Prévisualiser" + "upload": "Importer", + "uploadFiles": "Importation de {files} fichiers...", + "uploadMessage": "Sélectionnez une option d'import.", + "optionalPassword": "Mot de passe optionnel", + "resolution": "Résolution", + "discardEditorChanges": "Êtes-vous sûr de vouloir annuler les modifications apportées ?", + "replaceOrSkip": "Remplacer ou ignorer les fichiers", + "resolveConflict": "Quels fichiers souhaitez-vous conserver ?", + "singleConflictResolve": "Si vous sélectionnez les deux versions, un numéro sera ajouté au nom du fichier copié.", + "fastConflictResolve": "Le dossier de destination contient {count} fichiers portant le même nom.", + "uploadingFiles": "Importation de fichiers", + "filesInOrigin": "Fichiers d'origine", + "filesInDest": "Fichiers de destination", + "override": "Remplacer", + "skip": "Passer", + "forbiddenError": "Action non autorisée", + "currentPassword": "Votre mot de passe", + "currentPasswordMessage": "Entrez votre mot de passe pour valider cette action." }, "search": { "images": "Images", "music": "Musique", "pdf": "PDF", - "types": "Types", - "video": "Video", + "pressToSearch": "Appuyez sur Entrée pour rechercher...", "search": "Recherche en cours...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." + "typeToSearch": "Écrivez pour rechercher...", + "types": "Types", + "video": "Vidéo" }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "settings": { + "aceEditorTheme": "Éditeur de Thème Ace", + "admin": "Admin", + "administrator": "Administrateur'ice", + "allowCommands": "Exécuter des commandes", + "allowEdit": "Éditer, renommer et supprimer des fichiers ou des dossiers", + "allowNew": "Créer de nouveaux fichiers et dossiers", + "allowPublish": "Publier de nouveaux posts et pages", + "allowSignup": "Autoriser les utilisateur'ices à s'inscrire", + "hideLoginButton": "Cacher le bouton d’identification sur les pages publiques", + "avoidChanges": "(Laisser vide pour conserver l'actuel)", + "branding": "Image de marque", + "brandingDirectoryPath": "Chemin du dossier d'image de marque", + "brandingHelp": "Vous pouvez personnaliser l'apparence de votre instance de File Browser en changeant son nom, en remplaçant le logo, en ajoutant des styles personnalisés et même en désactivant les liens externes vers GitHub.\nPour plus d'informations sur la personnalisation de l'image de marque, veuillez consulter la {0}.", + "changePassword": "Modifier le mot de passe", + "commandRunner": "Exécuteur de commandes", + "commandRunnerHelp": "Ici, vous pouvez définir les commandes qui seront exécutées lors des événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.", + "commandsUpdated": "Commandes mises à jour !", + "createUserDir": "Créer automatiquement un dossier pour l'utilisateur'ice", + "minimumPasswordLength": "Taille minimale du mot de passe", + "tusUploads": "Uploads segmentés", + "tusUploadsHelp": "File Browser prend en charge les uploads segmentés afin de permettre une gestion efficace, fiable et reprenable sur des réseaux instables.", + "tusUploadsChunkSize": "Taille maximale autorisée par segment (les uploads directs seront utilisés pour les fichiers plus petits). Vous pouvez entrer un entier en octets ou une chaîne telle que 10MB, 1GB, etc.", + "tusUploadsRetryCount": "Nombre de tentatives en cas d'échec d'un segment.", + "userHomeBasePath": "Chemin de base pour les dossiers personnels des utilisateur'ices", + "userScopeGenerationPlaceholder": "Le périmètre sera généré automatiquement", + "createUserHomeDirectory": "Créer le dossier personnel de l'utilisateur'ice", + "customStylesheet": "Feuille de style personnalisée", + "defaultUserDescription": "Paramètres par défaut pour les nouveaux utilisateur'ices.", + "disableExternalLinks": "Désactiver les liens externes (sauf la documentation)", + "disableUsedDiskPercentage": "Désactiver le graphique de pourcentage d'utilisation du disque", + "documentation": "documentation", + "examples": "Exemples", + "executeOnShell": "Exécuter dans le shell", + "executeOnShellDescription": "Par défaut, File Browser exécute les commandes en appelant directement leurs binaires. Si vous voulez les exécuter sur un shell à la place (comme Bash ou PowerShell), vous pouvez le définir ici avec les arguments et les drapeaux requis. S'il est défini, la commande que vous exécutez sera ajoutée en tant qu'argument. Cela s'applique à la fois aux commandes utilisateur'ice et aux crochets d'événements.", + "globalRules": "Il s'agit d'un ensemble global de règles d'autorisation et d'interdiction. Elles s'appliquent à tous les utilisateur'ices. Vous pouvez définir des règles spécifiques sur les paramètres de chaque utilisateur'ice pour remplacer celles-ci.", + "globalSettings": "Paramètres globaux", + "hideDotfiles": "Cacher les fichiers de configuration commançant par un point", + "insertPath": "Insérer le chemin", + "insertRegex": "Insérer une expression régulière", + "instanceName": "Nom de l'instance", + "language": "Langue", + "lockPassword": "Empêcher l'utilisateur'ice de changer son mot de passe", + "newPassword": "Votre nouveau mot de passe", + "newPasswordConfirm": "Confirmation du nouveau mot de passe", + "newUser": "Nouvel'le utilisateur'ice", + "password": "Mot de passe", + "passwordUpdated": "Mot de passe mis à jour !", + "path": "Chemin", + "perm": { + "create": "Créer des fichiers et des dossiers", + "delete": "Supprimer des fichiers et des dossiers", + "download": "Télécharger", + "execute": "Exécuter des commandes", + "modify": "Modifier des fichiers", + "rename": "Renommer ou déplacer des fichiers ou des dossiers", + "share": "Partager des fichiers (autorisation de téléchargement requise)" + }, + "permissions": "Permissions", + "permissionsHelp": "Vous pouvez définir l'utilisateur'ice comme étant un'e administrateur'ice ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur'ice\", toutes les autres options seront automatiquement activées. La gestion des utilisateur'ices est un privilège que seul l'administrateur'ice possède.\n", + "profileSettings": "Paramètres du profil", + "redirectAfterCopyMove": "Rediriger vers la destination après une copie/déplacement", + "ruleExample1": "Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers.\n", + "ruleExample2": "Bloque l'accès au fichier nommé \"Caddyfile\" à la racine du dossier utilisateur'ice", + "rules": "Règles", + "rulesHelp": "Vous pouvez définir ici un ensemble de règles pour cet'te utilisateur'ice. Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur'ice. Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur'ice.\n", + "scope": "Portée du dossier utilisateur'ice", + "setDateFormat": "Définir le format de la date", + "settingsUpdated": "Les paramètres ont été mis à jour !", + "shareDuration": "Durée du partage", + "shareManagement": "Gestion des partages", + "shareDeleted": "Partage supprimé !", + "singleClick": "Utiliser un simple clic pour ouvrir les fichiers et les dossiers", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "Par défaut du système", + "dark": "Sombre", + "light": "Clair", + "title": "Thème" + }, + "user": "Utilisateur'ice", + "userCommands": "Commandes", + "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :\n", + "userCreated": "Utilisateur'ice créé !", + "userDefaults": "Paramètres par défaut de l'utilisateur'ice", + "userDeleted": "Utilisateur'ice supprimé !", + "userManagement": "Gestion des utilisateur'ices", + "userUpdated": "Utilisateur'ice mis à jour !", + "username": "Nom d'utilisateur'ice", + "users": "Utilisateur'ices", + "currentPassword": "Mot de Passe Actuel" + }, + "sidebar": { + "diskUsed": "{used} sur {total} utilisés", + "help": "Aide", + "hugoNew": "Nouveau Hugo", + "login": "Login", + "logout": "Se déconnecter", + "myFiles": "Mes fichiers", + "newFile": "Nouveau fichier", + "newFolder": "Nouveau dossier", + "preview": "Prévisualiser", + "settings": "Paramètres", + "signup": "S'inscrire", + "siteSettings": "Paramètres du site" + }, + "success": { + "linkCopied": "Lien copié !" }, "time": { - "unit": "Unité de temps", - "seconds": "Secondes", - "minutes": "Minutes", + "days": "Jours", "hours": "Heures", - "days": "Jours" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "Minutes", + "seconds": "Secondes", + "unit": "Unité de temps" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/he.json b/frontend/src/i18n/he.json new file mode 100644 index 00000000..1b7a7b0b --- /dev/null +++ b/frontend/src/i18n/he.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "ביטול", + "clear": "נקה", + "close": "סגירה", + "continue": "המשך", + "copy": "העתקה", + "copyFile": "העתק קובץ", + "copyToClipboard": "העתק ללוח", + "copyDownloadLinkToClipboard": "העתק קישור הורדה ללוח", + "create": "צור", + "delete": "מחק", + "download": "הורדה", + "file": "קובץ", + "folder": "תיקייה", + "fullScreen": "Toggle full screen", + "hideDotfiles": "הסתר קבצים/תיקיות ששמם מתחיל בנקודה", + "info": "מידע", + "more": "עוד", + "move": "העברה", + "moveFile": "העבר קובץ", + "new": "חדש", + "next": "הבא", + "ok": "אישור", + "permalink": "יצירת קישור קבוע", + "previous": "הקודם", + "preview": "Preview", + "publish": "פרסום", + "rename": "שינוי שם", + "replace": "החלפה", + "reportIssue": "דווח על תקלה", + "save": "שמירה", + "schedule": "תזמון", + "search": "חיפוש", + "select": "בחירה", + "selectMultiple": "בחירה מרובה", + "share": "שיתוף", + "shell": "פתיחת מסוף", + "submit": "אישור", + "switchView": "שינוי תצוגה", + "toggleSidebar": "פתיחת/סגירת סרגל צד", + "update": "עדכון", + "upload": "העלאה", + "openFile": "פתח קובץ", + "openDirect": "View raw", + "discardChanges": "זריקת השינויים", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "הורד קובץ", + "downloadFolder": "הורד תיקייה", + "downloadSelected": "הורד קבצים שנבחרו" + }, + "upload": { + "abortUpload": "האם אתה בטוח שברצונך להפסיק את ההעלאה?" + }, + "errors": { + "forbidden": "אין לך הרשאות גישה", + "internal": "משהו השתבש", + "notFound": "לא ניתן להגיע למיקום זה", + "connection": "לא ניתן להגיע לשרת" + }, + "files": { + "body": "גוף", + "closePreview": "סגירת תצוגה מקדימה", + "files": "קבצים", + "folders": "תיקיות", + "home": "ראשי", + "lastModified": "שונה לאחרונה", + "loading": "טוען...", + "lonely": "בודד כאן", + "metadata": "נתונים", + "multipleSelectionEnabled": "בחירה מרובה מופעלת", + "name": "שם", + "size": "גודל", + "sortByLastModified": "מיין לפי השינוי האחרון", + "sortByName": "מיין לפי שם", + "sortBySize": "מיין לפי גודל", + "noPreview": "לא זמינה תצוגה מקדימה לקובץ זה", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "בחר קובץ או תיקייה", + "ctrl": { + "click": "בחר מספר קבצים או תיקיות", + "f": "פותח את החיפוש", + "s": "לשמור קובץ או להוריד את התיקייה שבה אתה נמצא" + }, + "del": "מחק את הבחירה", + "doubleClick": "פתח קובץ או תיקייה", + "esc": "נקה את הבחירה ו/או סגור את השדה", + "f1": "המידע הזה", + "f2": "שינוי שם קובץ", + "help": "עזרה" + }, + "login": { + "createAnAccount": "צור חשבון", + "loginInstead": "כבר יש לי חשבון", + "password": "סיסמא", + "passwordConfirm": "אימות סיסמא", + "passwordsDontMatch": "הסיסמאות אינן תואמות", + "signup": "הרשמה", + "submit": "התחברות", + "username": "שם משתמש", + "usernameTaken": "שם המשתמש כבר קיים", + "wrongCredentials": "פרטי התחברות שגויים", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "קבוע", + "prompts": { + "copy": "העתקה", + "copyMessage": "בחר לאן להעתיק את הקבצים:", + "currentlyNavigating": "כרגע מנווט ב:", + "deleteMessageMultiple": "האם אתה בטוח שברצונך למחוק {count} קבצים?", + "deleteMessageSingle": "האם אתה בטוח שברצונך למחוק את הקובץ/התיקייה?", + "deleteMessageShare": "האם אתה בטוח שברצונך למחוק את השיתוף הזה ({path})?", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "מחיקת קבצים", + "displayName": "שם:", + "download": "הורדת קבצים", + "downloadMessage": "בחר את הפורמט שברצונך להוריד", + "error": "משהו השתבש", + "fileInfo": "מידע על הקובץ", + "filesSelected": "{count} קבצים נבחרו.", + "lastModified": "שונה לאחרונה", + "move": "העברה", + "moveMessage": "בחר מיקום חדש לקובץ/תיקייה:", + "newArchetype": "Create a new post based on an archetype. Your file will be created on content folder", + "newDir": "תיקייה חדשה", + "newDirMessage": "כתוב את שם התיקייה החדשה", + "newFile": "קובץ חדש", + "newFileMessage": "כתוב את שם הקובץ החדש", + "numberDirs": "כמות התיקיות", + "numberFiles": "כמות הקבצים", + "rename": "שינוי שם", + "renameMessage": "הכנס שם חדש עבור", + "replace": "החלפה", + "replaceMessage": "אחד הקבצים בעל שם זהה לקובץ קיים, האם ברצונך להחליף את הקובץ הקיים בחדש? זהירות - הקובץ הישן ימחק\n", + "schedule": "תזמון", + "scheduleMessage": "בחר תאריך ושעה לתזמון הפרסום של פוסט זה.", + "show": "הצג", + "size": "גודל", + "upload": "העלאה", + "uploadFiles": "מעלה {files} קבצים...", + "uploadMessage": "בחר אפשרות העלאה.", + "optionalPassword": "סיסמא אופציונלית", + "resolution": "Resolution", + "discardEditorChanges": "האם אתה בטוח שברצונך לבטל את השינויים שביצעת?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "תמונות", + "music": "מוזיקה", + "pdf": "PDF", + "pressToSearch": "הקש אנטר כדי לחפש...", + "search": "חיפוש...", + "typeToSearch": "הקלד כדי לחפש...", + "types": "סוגים", + "video": "וידאו" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "מנהל", + "administrator": "מנהל ראשי", + "allowCommands": "הפעלת פקודות", + "allowEdit": "עריכת, שינוי שם ומחיקת קבצים/תיקיות", + "allowNew": "יצירת קבצים ותיקיות חדשות", + "allowPublish": "פרסום פוסטים ודפים חדשים", + "allowSignup": "אפשר למשתמשים חדשים להירשם", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(השאר ריק כדי למנוע שינויים)", + "branding": "מיתוג", + "brandingDirectoryPath": "נתיב תיקיית מיתוג", + "brandingHelp": "אתה יכול להגדיר את האופן שבו האפליקציה תראה על ידי שינוי שם האפליקציה, החלפת הלוגו, הוספת עיצוב מותאם אישית ואפילו השבתת קישורים חיצוניים לGithub.\nלמידע נוסף עיין ב-{0}.", + "changePassword": "שינוי סיסמא", + "commandRunner": "הרצת פקודות", + "commandRunnerHelp": "אתה יכול להגדיר פקודות שיבוצעו באירועים שונים. עליך לכתוב אחד בכל שורה. משתני הסביבה {0} ו-{1} יהיו זמינים, בהיותם {0} ביחס ל-{1}. למידע נוסף על תכונה זו ועל משתני הסביבה הזמינים, עיין ב {2}.", + "commandsUpdated": "הפקודות עודכנו!", + "createUserDir": "צור אוטומטית תיקיית בית בעת הוספת משתמש חדש", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "נתיב ראשי לתיקיות הבית של משתמשים", + "userScopeGenerationPlaceholder": "ההיקף יווצר אוטומטית", + "createUserHomeDirectory": "צור תיקיית בית למשתמש", + "customStylesheet": "עיצוב מותאם אישית (Stylesheet)", + "defaultUserDescription": "הגדרות ברירת המחדל למשתמשים חדשים", + "disableExternalLinks": "השבת קישורים חיצוניים (למעט תיעוד)", + "disableUsedDiskPercentage": "אל תציג גרף שימוש בדיסק", + "documentation": "תיעוד", + "examples": "דוגמאות", + "executeOnShell": "בצע במסוף", + "executeOnShellDescription": "כברירת מחדל, האפליקציה מבצעת את הפקודות על ידי הפעלה ישירה לקבצים (הבינארים). אם אתה רוצה להפעיל אותם מתוך מעטפת כלשהי, (לדוגמא מתוך Bash או PowerShell) אתה יכול להגדיר אותם כאן עם הפרמטרים הנדרשים. שים לב שזה יבוצע גם על פקודות משתמש וגם על הוקים (Hooks) לאירועים.", + "globalRules": "זוהי קבוצה גלובלית של חוקים והרשאות (מה מותר ומה אסור), הם חלים על כל משתמש. אתה יכול להגדיר כללים ספציפיים בהגדרות של כל משתמש, כדי לעקוף את החוקים הגלובלים.", + "globalSettings": "הגדרות גלובליות", + "hideDotfiles": "הסתר קבצים/תיקיות ששמם מתחיל בנקודה", + "insertPath": "הכנס את הנתיב", + "insertRegex": "הוסף ביטוי רגולרי", + "instanceName": "שם מופע", + "language": "שפה", + "lockPassword": "מנע מהמשתמש להחליף סיסמא", + "newPassword": "הסיסמא החדשה שלך", + "newPasswordConfirm": "אשר את הסיסמה החדשה שלך", + "newUser": "משתמש חדש", + "password": "סיסמא", + "passwordUpdated": "הסיסמא עודכנה!", + "path": "נתיב", + "perm": { + "create": "יצירת קבצים ותיקיות", + "delete": "מחיקת קבצים ותיקיות", + "download": "הורדת קבצים ותיקיות", + "execute": "ביצוע פקודות", + "modify": "עריכת קבצים קבצים", + "rename": "שינוי שם/העברת קבצים ותיקיות", + "share": "שיתוף קבצים" + }, + "permissions": "הרשאות", + "permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות יינתנו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n", + "profileSettings": "הגדרות פרופיל", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ/תיקייה שמתחיל בנקודה, לדוגמא .git)", + "ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בהיקף הראשי.", + "rules": "חוקים", + "rulesHelp": "כאן אתה יכול להגדיר רשימה של כללים למשתמש ספציפי, רשימה שחורה ולבנה. הקבצים החסומים לא יופיעו ברשימת הקבצים ולא יהיו נגישים למשתמש. יש תמיכה בנתיבים (ביחס לתיקייה הראשית של המשתמש), וגם בביטוי רגולרי.\n", + "scope": "היקף", + "setDateFormat": "הגדר פורמט תאריך", + "settingsUpdated": "ההגדרות עודכנו!", + "shareDuration": "משך השיתוף", + "shareManagement": "ניהול שיתוף", + "shareDeleted": "השיתוף נמחק!", + "singleClick": "השתמש בלחיצה בודדת כדי לפתוח קובץ/תיקייה", + "themes": { + "default": "System default", + "dark": "כהה", + "light": "בהיר", + "title": "ערכת נושא" + }, + "user": "משתמש", + "userCommands": "פקודות", + "userCommandsHelp": "רשימה מופרדת ברווחים של הפקודות הזמינות עבור משתמש זה. דוגמא:\n", + "userCreated": "המשתמש נוצר!", + "userDefaults": "הגדרות ברירת מחדל למשתמש", + "userDeleted": "המשתמש נמחק!", + "userManagement": "ניהול משתמש", + "userUpdated": "המשתמש עודכן!", + "username": "שם משתמש", + "users": "משתמשים", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "עזרה", + "hugoNew": "הוגו חדש", + "login": "התחבר", + "logout": "התנתק", + "myFiles": "הקבצים שלי", + "newFile": "קובץ חדש", + "newFolder": "תיקייה חדשה", + "preview": "תצוגה מקדימה", + "settings": "הגדרות", + "signup": "הרשמה", + "siteSettings": "הגדרות אתר" + }, + "success": { + "linkCopied": "הקישור הועתק!" + }, + "time": { + "days": "ימים", + "hours": "שעות", + "minutes": "דקות", + "seconds": "שניות", + "unit": "יחידת זמן" + } +} diff --git a/frontend/src/i18n/hr.json b/frontend/src/i18n/hr.json new file mode 100644 index 00000000..35b1c068 --- /dev/null +++ b/frontend/src/i18n/hr.json @@ -0,0 +1,312 @@ +{ + "buttons": { + "cancel": "Otkaži", + "clear": "Očisti", + "close": "Zatvori", + "continue": "Nastavi", + "copy": "Kopiraj", + "copyFile": "Kopiraj datoteku", + "copyToClipboard": "Kopiraj u međuspremnik", + "copyDownloadLinkToClipboard": "Kopiraj poveznicu za preuzimanje u međuspremnik", + "create": "Stvori", + "delete": "Izbriši", + "download": "Preuzmi", + "file": "Datoteka", + "folder": "Mapa", + "fullScreen": "Prebaci na cijeli zaslon", + "hideDotfiles": "Sakrij datoteke koje započinju točkom", + "info": "Info", + "more": "Više", + "move": "Premjesti", + "moveFile": "Premjesti datoteku", + "new": "Novo", + "next": "Sljedeće", + "ok": "OK", + "permalink": "Dohvati trajnu poveznicu", + "previous": "Prethodno", + "preview": "Pregled", + "publish": "Objavi", + "rename": "Preimenuj", + "replace": "Zamijeni", + "reportIssue": "Prijavi grešku", + "resumeTransfer": "Resume previous transfer", + "resumeTransferTooltip": "Skip all conflicting files, except the ones that are smaller on the server as we suppose that their transfert has been interrupted.", + "save": "Spremi", + "schedule": "Zakaži", + "search": "Pretraži", + "select": "Označi", + "selectMultiple": "Označi više", + "share": "Podijeli", + "shell": "Promijeni ljusku", + "submit": "Predaj", + "switchView": "Promijeni prikaz", + "toggleSidebar": "Prebaci bočnu traku", + "update": "Ažuriraj", + "upload": "Prenesi", + "openFile": "Otvori datoteku", + "openDirect": "Pregled neobrađenog", + "discardChanges": "Odbaci", + "stopSearch": "Prestanak pretraživanja", + "saveChanges": "Spremi promjene", + "editAsText": "Uredi kao tekst", + "increaseFontSize": "Povećaj veličinu fonta", + "decreaseFontSize": "Smanji veličinu fonta", + "overrideAll": "Zamijeni sve datoteke u destinacijskoj mapi", + "skipAll": "Preskoči sve konfliktirajuće datoteke", + "renameAll": "Preimenuj sve datoteke (stvori kopiju)", + "singleDecision": "Odluči za svaku konfliktirajuću datoteku" + }, + "download": { + "downloadFile": "Preuzmi Datoteku", + "downloadFolder": "Preuzmi Mapu", + "downloadSelected": "Preuzmi Odabrano" + }, + "upload": { + "abortUpload": "Jeste li sigurni da hoćete otkazati?" + }, + "errors": { + "forbidden": "Nemate dopuštenje pristupiti ovome.", + "internal": "Nešto je stvarno pošlo po zlu.", + "notFound": "Lokacija ne može biti dohvaćena.", + "connection": "Poslužitelj ne može biti dohvaćen." + }, + "files": { + "body": "Tijelo", + "closePreview": "Zatvori pregled", + "files": "Datoteke", + "folders": "Mape", + "home": "Dom", + "lastModified": "Zadnje izmijenjeno", + "loading": "Učitavanje...", + "lonely": "Ovdje je tako prazno...", + "metadata": "Metapodaci", + "multipleSelectionEnabled": "Višestruk odabir", + "name": "Naziv", + "size": "Veličina", + "sortByLastModified": "Sortiraj po zadnjoj izmjeni", + "sortByName": "Sortiraj po nazivu", + "sortBySize": "Sortiraj po veličini", + "noPreview": "Pregled nije dostupan za ovu datoteku.", + "csvTooLarge": "CSV datoteka je prevelika za pregled (>5MB). Molimo preuzmite da bi ste ju pregledali.", + "csvLoadFailed": "Neuspješno učitavanje CSV datoteke.", + "showingRows": "Prikazuje se {count} red(ova)", + "columnSeparator": "Separator stupaca", + "csvSeparators": { + "comma": "Zarez (,)", + "semicolon": "Točka zarez (;)", + "both": "I (,) i (;)" + }, + "fileEncoding": "Kodiranje datoteka" + }, + "help": { + "click": "odaberi datoteku ili mapu", + "ctrl": { + "click": "odaberi više datoteka ili mapa", + "f": "tražilica", + "s": "spremi datoteku ili preuzmi trenutnu mapu" + }, + "del": "izbriši odabrane stavke", + "doubleClick": "otvori datoteku ili mapu", + "esc": "očisti odabir i/ili zatvori upit", + "f1": "ova informacija", + "f2": "preimenuj datoteku", + "help": "Pomoć" + }, + "login": { + "createAnAccount": "Stvori korisnički račun", + "loginInstead": "Imam korisnički račun", + "password": "Lozinka", + "passwordConfirm": "Potvrda lozinke", + "passwordsDontMatch": "Lozinke se ne podudaraju", + "signup": "Registracija", + "submit": "Prijava", + "username": "Korisničko ime", + "usernameTaken": "Korisničko ime zauzeto", + "wrongCredentials": "Neispravno korisničko ime/lozinka", + "passwordTooShort": "Lozinka mora sadržavati minimalno {min} znakova", + "logout_reasons": { + "inactivity": "Odjavljeni ste zbog neaktivnosti." + } + }, + "permanent": "Trajan", + "prompts": { + "copy": "Kopiraj", + "copyMessage": "Odaberite lokaciju za kopiranje datoteka:", + "currentlyNavigating": "Trenutno navigiranje na:", + "deleteMessageMultiple": "Jeste li sigurni da želite izbrisati datoteke: {count}?", + "deleteMessageSingle": "Jeste li sigurni da hoćete izbrisati ovu datoteku/mapu?", + "deleteMessageShare": "Jeste li sigurni da hoćete izbrisati ovo dijeljenje({path})?", + "deleteUser": "Jeste li sigurni da hoćete izbrisati ovaj korisnički račun?", + "deleteTitle": "Izbriši datoteke", + "displayName": "Prikazno Ime:", + "download": "Preuzmi datoteke", + "downloadMessage": "Odaberite format za preuzimanje.", + "error": "Nešto je pošlo po zlu", + "fileInfo": "Informacije o datoteci", + "filesSelected": "{count} datoteka odabrana.", + "lastModified": "Zadnje izmijenjeno", + "move": "Premjesti", + "moveMessage": "Odaberite novi dom za Vašu datoteku(e)/mapu(e):", + "newArchetype": "Stvorite novu objavu na temelju arhetipu. Vaša datoteka bit će stvorena u mapi sadržaja.", + "newDir": "Nova mapa", + "newDirMessage": "Imenujte Vašu novu mapu.", + "newFile": "Nova datoteka", + "newFileMessage": "Imenujte Vašu novu datoteku.", + "numberDirs": "Broj mapa", + "numberFiles": "Broj datoteka", + "rename": "Preimenuj", + "renameMessage": "Umetni novo ime za", + "replace": "Zamijeni", + "replaceMessage": "Jedna od datoteka koju pokušavate prenijeti ima sukobljavajući naziv. Želite li preskočiti ovu datoteku i nastaviti s prijenosom ili zamijeniti postojeću datoteku?\n", + "schedule": "Zakaži", + "scheduleMessage": "Odaberite datum i vrijeme za zakazivanje ove objave.", + "show": "Prikaži", + "size": "Veličina", + "upload": "Prenesi", + "uploadFiles": "Prenošenje {files} datoteka...", + "uploadMessage": "Odaberite opciju za prijenos.", + "optionalPassword": "Opcionalna lozinka", + "resolution": "Rezolucija", + "discardEditorChanges": "Jeste li sigurni da želite odbaciti promjene koje ste napravili?", + "replaceOrSkip": "Zamijeni ili preskoči datoteke", + "resolveConflict": "Koje datoteke želite sačuvati?", + "singleConflictResolve": "Ako odaberete obje verzije, u ime kopirane datoteke bit će dodan broj.", + "fastConflictResolve": "Destinacijska mapa sadrži {count} istoimenih datoteka.", + "uploadingFiles": "Prenošenje datoteka", + "filesInOrigin": "Datoteke u izvornoj mapi", + "filesInDest": "Datoteke u destinacijskoj mapi", + "override": "Prebrisivanje", + "skip": "Preskoči", + "forbiddenError": "Greška zabrane pristupa", + "currentPassword": "Vaša lozinka", + "currentPasswordMessage": "Unesite Vašu lozinku da biste validirali ovu akciju." + }, + "search": { + "images": "Slike", + "music": "Glazba", + "pdf": "PDF", + "pressToSearch": "Pritisnite enter za pretraživanje...", + "search": "Pretraživanje...", + "typeToSearch": "Tipkajte za pretraživanje...", + "types": "Tipovi", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "Izvrši naredbe", + "allowEdit": "Uredi, preimenuj i izbriši datoteke ili mape", + "allowNew": "Stvori nove datoteke i mape", + "allowPublish": "Objavi nove objave i stranice", + "allowSignup": "Dopusti registraciju korisnicima", + "hideLoginButton": "Sakrij tipku za prijavu s javnih stranica", + "avoidChanges": "(ostavite prazno kako biste izbjegli promjene)", + "branding": "Brendiranje", + "brandingDirectoryPath": "Put brendiranja", + "brandingHelp": "Možete prilagoditi izgled i funkcionalnost Vašeg File Browsera mijenjanjem njegovog naziva, zamjenom logotipa, dodavanjem prilagođenih stilova pa čak i onemogućavanjem vanjskih poveznica na GitHub.\nZa više informacija o prilagođenome brendiranju pogledajte {0}.", + "changePassword": "Promjena lozinke", + "commandRunner": "Izvršitelj naredbi", + "commandRunnerHelp": "Ovdje možete postaviti naredbe koje se izvršuju u imenovanim događajima. Morate napisati jednu po liniji. Varijable okruženja {0} i {1} bit će dostupne, tako da je {0} relativna {1}. Za više informacija o ovoj značajci pogledajte {2}.", + "commandsUpdated": "Naredbe ažurirane!", + "createUserDir": "Automatsko stvaranje kućne mape korisnika pri dodavanju novog korisnika", + "minimumPasswordLength": "Minimalna duljina lozinke", + "tusUploads": "Segmentirani prijenosi", + "tusUploadsHelp": "File Browser podržava segmentirane prijenose datoteka, omogućavajući stvaranje učinkovitih, pouzdanih, obnovljivih i segmentiranih prijenosa datoteka čak i na nepouzdanim mrežama.", + "tusUploadsChunkSize": "Naznačuje maksimalnu veličinu zahtjeva (direktni prijenosi bit će korišteni za manje prijenose). Možete unijeti cijeli broj koji označava veličinu bajta ili niz znakova poput 10MB, 1GB itd.", + "tusUploadsRetryCount": "Broj ponovnih pokušaja ako se dio ne uspije prenijeti.", + "userHomeBasePath": "Bazni put za kućne mape korisnika", + "userScopeGenerationPlaceholder": "Opseg će se automatski generirati", + "createUserHomeDirectory": "Stvori kućnu mapu korisnika", + "customStylesheet": "Prilagođeni Stylesheet", + "defaultUserDescription": "Zadane postavke za nove korisnike.", + "disableExternalLinks": "Onemogući vanjske poveznice (osim dokumentacije)", + "disableUsedDiskPercentage": "Onemogući graf iskorištenosti diska", + "documentation": "dokumentacija", + "examples": "Primjeri", + "executeOnShell": "Izvrši u ljusci", + "executeOnShellDescription": "Po zadanim postavkama, File Browser izvršava naredbe izravnim pozivanjem njihovih binarnih datoteka. Ako ih želite izvršiti u ljusci (kao što su Bash ili PowerShell), možete ih definirati ovdje s potrebnim argumentima i oznakama. Ako je postavljena, naredba koju izvršavate bit će dodana kao argument. To se odnosi i na korisničke naredbe i na događajne kuke.", + "globalRules": "Ovo je globalan skup pravila dopuštanja i zabrane. Primjenjuju se na svakog korisnika. Moguće je definirati specifična pravila u postavkama svakog korisnika da biste nadjačali ove postavke.", + "globalSettings": "Globalne postavke", + "hideDotfiles": "Sakrij datoteke koje započinju točkom", + "insertPath": "Umetni put", + "insertRegex": "Umetni regex izraz", + "instanceName": "Naziv instance", + "language": "Jezik", + "lockPassword": "Onemogući mijenjanje lozinke korisniku", + "newPassword": "Vaša nova lozinka", + "newPasswordConfirm": "Potvrdite Vašu novu lozinku", + "newUser": "Novi Korisnik", + "password": "Lozinka", + "passwordUpdated": "Lozinka ažurirana!", + "path": "Put", + "perm": { + "create": "Stvaranje datoteka i mapa", + "delete": "Brisanje datoteka i mapa", + "download": "Preuzimanje", + "execute": "Izvršavanje naredbi", + "modify": "Uređivanje datoteka", + "rename": "Preimenovanje ili premještanje datoteka i mapa", + "share": "Share files (require download permission)" + }, + "permissions": "Dopuštenja", + "permissionsHelp": "Korisnika možete postaviti administratorom ili odabrati dopuštenja individualno. Odabirom na \"Administrator\", sve druge opcije bit će automatski odabrane. Upravljanje korisnicima ostaje privilegija administratora.\n", + "profileSettings": "Postavke profila", + "redirectAfterCopyMove": "Preusmjeri na destinaciju nakon kopiranja/premještanja", + "ruleExample1": "onemogućava pristup svakoj datoteci koja započinje točkom (poput .git, .gitignore) u svakoj mapi.\n", + "ruleExample2": "blokira pristup datoteci naziva Caddyfile na korijenu opsega.", + "rules": "Pravila", + "rulesHelp": "Ovdje možete definirati skup pravila dopuštanja i zabrane za ovog specifičnog korisnika. Blokirane datoteke neće se prikazivati u popisima i neće biti dostupne korisniku. Podržavamo regex i puteve relativne opsegu korisnika.\n", + "scope": "Opseg", + "setDateFormat": "Odredi točan format datuma", + "settingsUpdated": "Postavke ažurirane!", + "shareDuration": "Podijeli Trajanje", + "shareManagement": "Upravljanje Dijeljenjem", + "shareDeleted": "Podjela izbrisana!", + "singleClick": "Koristi jednostruke klikove za otvaranje datoteka i mapa", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "Zadano - Sustav", + "dark": "Tamno", + "light": "Svijetlo", + "title": "Tema" + }, + "user": "Korisnik", + "userCommands": "Naredbe", + "userCommandsHelp": "Popis dostupnih naredbi za ovog korisnika. Primjer:\n", + "userCreated": "Korisnik stvoren!", + "userDefaults": "Zadane postavke korisnika", + "userDeleted": "Korisnik izbrisan!", + "userManagement": "Upravljanje Korisnicima", + "userUpdated": "Korisnik ažuriran!", + "username": "Korisničko ime", + "users": "Korisnici", + "currentPassword": "Vaša trenutna lozinka" + }, + "sidebar": { + "diskUsed": "{used} of {total} used", + "help": "Pomoć", + "hugoNew": "Hugo New", + "login": "Prijava", + "logout": "Odjava", + "myFiles": "Moje datoteke", + "newFile": "Nova datoteka", + "newFolder": "Nova mapa", + "preview": "Pregled", + "settings": "Postavke", + "signup": "Registracija", + "siteSettings": "Postavke stranice" + }, + "success": { + "linkCopied": "Poveznica kopirana!" + }, + "time": { + "days": "Dani", + "hours": "Sati", + "minutes": "Minute", + "seconds": "Sekunde", + "unit": "Jedinica vremena" + } +} diff --git a/frontend/src/i18n/hu.json b/frontend/src/i18n/hu.json new file mode 100644 index 00000000..4df490b8 --- /dev/null +++ b/frontend/src/i18n/hu.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Mégse", + "clear": "Törlése", + "close": "Bezárás", + "continue": "Continue", + "copy": "Másolás", + "copyFile": "Fájl másolása", + "copyToClipboard": "Másolás vágólapra", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", + "create": "Létrehozás", + "delete": "Törlése", + "download": "Letöltés", + "file": "Fájl", + "folder": "Mappa", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Rejtett fájlok elrejtése", + "info": "Infó", + "more": "További", + "move": "Mozgatás", + "moveFile": "Fájl mozgatása", + "new": "Új", + "next": "Következő", + "ok": "OK", + "permalink": "Állandó link lekérése", + "previous": "Előző", + "preview": "Preview", + "publish": "Publikálása", + "rename": "Átnevezés", + "replace": "Csere", + "reportIssue": "Hiba jelentése", + "save": "Mentés", + "schedule": "Ütemezés", + "search": "Keresés", + "select": "Kijelölés", + "selectMultiple": "Többszörös kijelölés", + "share": "Megosztás", + "shell": "Parancsértelmező átváltása", + "submit": "Beküldés", + "switchView": "Nézet váltása", + "toggleSidebar": "Oldalsáv átváltása", + "update": "Frissítés", + "upload": "Feltöltés", + "openFile": "Fájl megnyitása", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Fájl letöltése", + "downloadFolder": "Mappa letöltése", + "downloadSelected": "Kijelölés letöltése" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" + }, + "errors": { + "forbidden": "Nincs jogosultsága a hozzáféréshez.", + "internal": "Valami nagyon elromlott.", + "notFound": "Ez a hely nem érhető el.", + "connection": "A kiszolgáló nem érhető el." + }, + "files": { + "body": "Törzs", + "closePreview": "Előnézet bezárása", + "files": "Fájlok", + "folders": "Mappák", + "home": "Kezdőlap", + "lastModified": "Utoljára módosítva", + "loading": "Betöltés…", + "lonely": "Ez egy magányos érzés…", + "metadata": "Metaadat", + "multipleSelectionEnabled": "Többszörös kijelölés aktiválva", + "name": "Név", + "size": "Méret", + "sortByLastModified": "Rendezés utolsó módosítás szerint", + "sortByName": "Rendezés név szerint", + "sortBySize": "Rendezés méret szerint", + "noPreview": "Ehhez a fájlhoz nincs előnézet.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "mappa vagy fájl kijelölése", + "ctrl": { + "click": "több mappa vagy fájl kijelölése", + "f": "keresés megnyitása", + "s": "az aktuális fájl vagy mappa letöltése" + }, + "del": "kijelölt elemek törlése", + "doubleClick": "fájl vagy mappa megnyitása", + "esc": "kijelölés törlése és/vagy parancssor bezárása", + "f1": "ezen információ megjelenítése", + "f2": "fájl átnevezése", + "help": "Súgó" + }, + "login": { + "createAnAccount": "Fiók létrehozása", + "loginInstead": "Már van fiókom", + "password": "Jelszó", + "passwordConfirm": "Jelszó megerősítése", + "passwordsDontMatch": "A jelszavak nem egyeznek", + "signup": "Regisztráció", + "submit": "Belépés", + "username": "Felhasználói név", + "usernameTaken": "A felhasználói név már foglalt", + "wrongCredentials": "Hibás hitelesítő adatok", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Állandó", + "prompts": { + "copy": "Másolása", + "copyMessage": "Válassza ki a másolás célját:", + "currentlyNavigating": "Jelenlegi helyzet:", + "deleteMessageMultiple": "Biztosan törölni szeretne {count} fájlt?", + "deleteMessageSingle": "Biztosan törölni szeretné ezt a fájl vagy mappát?", + "deleteMessageShare": "Biztosan törölni szeretné ezt a megosztást ({path})?", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "Fájlok törlése", + "displayName": "Megjelenített név:", + "download": "Fájlok letöltése", + "downloadMessage": "Válassza ki a letöltés formátumát.", + "error": "Valami rosszul sült el", + "fileInfo": "Fájlinformáció", + "filesSelected": "{count} fájl van kijelölve.", + "lastModified": "Utolsó módosítás", + "move": "Mozgatás", + "moveMessage": "Válasszon új helyet a fájl(ok)nak/mappá(k)nak:", + "newArchetype": "Új bejegyzést hoz létre egy archetípus alapján. A fájl a tartalom mappában jön létre.", + "newDir": "Új mappa", + "newDirMessage": "Adja meg az új mappa nevét.", + "newFile": "Új fájl", + "newFileMessage": "Adja meg az új fájl nevét.", + "numberDirs": "Mappák száma", + "numberFiles": "Fájlok száma", + "rename": "Átnevezés", + "renameMessage": "Adja meg az új nevét:", + "replace": "Csere", + "replaceMessage": "Az egyik feltölteni kívánt fájl a neve miatt ütközik. Szeretné lecserélni a meglévő fájlt?\n", + "schedule": "Ütemezés", + "scheduleMessage": "Válasszon egy dátumot és időpontot a bejegyzés közzétételének ütemezéséhez.", + "show": "Megjelenítés", + "size": "Méret", + "upload": "Feltöltés", + "uploadFiles": "{files} fájl feltöltése…", + "uploadMessage": "Válasszon egy feltöltési módot.", + "optionalPassword": "Választható jelszó", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Képek", + "music": "Zene", + "pdf": "PDF", + "pressToSearch": "Keresés indítása Enterrel…", + "search": "Keresés…", + "typeToSearch": "Keresés indítása beírással…", + "types": "Típusok", + "video": "Videó" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Adminisztrátor", + "allowCommands": "Parancsok futtatása", + "allowEdit": "Fájlok és mappák szerkesztése, átnevezése és törlése", + "allowNew": "Új fájlok és mappák létrehozása", + "allowPublish": "Új bejegyzések és oldalak létrehozása", + "allowSignup": "Felhasználók regisztrációjának engedélyezése", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(üresen hagyva nincs változás)", + "branding": "Márkázás", + "brandingDirectoryPath": "Márkázás mappaútvonala", + "brandingHelp": "Testre szabhatja a File Browser példányának megjelenését a név megváltoztatásával, a logó cseréjével, egyéni stílusok hozzáadásával és még a GitHubra mutató külső hivatkozások letiltásával is.\nAz egyéni márkázással kapcsolatos további információkért tekintse meg: {0}.", + "changePassword": "Jelszó módosítása", + "commandRunner": "Parancsfuttató", + "commandRunnerHelp": "Beállíthatja azokat a parancsokat, amelyek a megnevezett események során végrehajtásra kerülnek. Soronként egyet kell megadni. A {0} és a {1} környezeti változók lesznek elérhetőek, ahol a {0} relatív a {1}-hez. A funkcióról és a rendelkezésre álló környezeti változókról további információ: {2}.", + "commandsUpdated": "Parancsok frissítve!", + "createUserDir": "Felhasználók saját mappáinak automatikus létrehozása új felhasználók hozzáadásakor", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Alap elérési útvonal a felhasználók saját mappáihoz", + "userScopeGenerationPlaceholder": "A környezet automatikus lesz létrehozva", + "createUserHomeDirectory": "Felhasználói saját mappák létrehozása", + "customStylesheet": "Egyéni stíluslap", + "defaultUserDescription": "Ezek az alapértelmezett beállítások az új felhasználók számára.", + "disableExternalLinks": "Külső linkek letiltása (kivéve a dokumentáció)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "dokumentáció", + "examples": "Példák", + "executeOnShell": "Futtatás parancsértelmezőben", + "executeOnShellDescription": "Alapértelmezés szerint a File Browser a parancsokat a binárisok közvetlen meghívásával hajtja végre. Ha ehelyett egy parancsértelmezőben (például Bash vagy PowerShell) szeretné futtatni őket, akkor itt definiálhatja azt a szükséges argumentumokkal és jelzőkkel. Ha be van állítva, akkor a végrehajtott parancs argumentumként hozzá lesz csatolva. Ez vonatkozik mind a felhasználói parancsokra, mind az eseményhorgokra.", + "globalRules": "Ez egy globális engedélyezési és tiltási szabálykészlet. Ezek minden felhasználóra vonatkoznak. Az egyes felhasználók beállításainál egyedi szabályokat határozhat meg, amelyek felülbírálják ezeket.", + "globalSettings": "Általános beállítások", + "hideDotfiles": "Rejtett fájlok elrejtése", + "insertPath": "Elérési útvonal beszúrása", + "insertRegex": "Reguláris kifejezés beszúrása", + "instanceName": "Példány neve", + "language": "Nyelv", + "lockPassword": "Felhasználói jelszó megváltoztatásának megakadályozása", + "newPassword": "Új jelszó", + "newPasswordConfirm": "Új jelszó ismét", + "newUser": "Új felhasználó", + "password": "Jelszó", + "passwordUpdated": "Jelszó frissítve!", + "path": "Elérési útvonal", + "perm": { + "create": "Fájlok és mappák létrehozása", + "delete": "Fájlok és mappák törlése", + "download": "Letöltése", + "execute": "Parancsok futtatása", + "modify": "Fájlok szerkesztése", + "rename": "Fájlok és mappák átnevezése vagy mozgatása", + "share": "Fájlok megosztása" + }, + "permissions": "Jogosultságok", + "permissionsHelp": "A felhasználót beállíthatja rendszergazdának, vagy egyénileg is kiválaszthatja a jogosultságokat. Ha a \"Rendszergazda\" lehetőséget választja, az összes többi opció automatikusan be lesz jelölve. A felhasználók kezelése továbbra is a rendszergazda kiváltsága marad.\n", + "profileSettings": "Profilbeállítások", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "megakadályozza a hozzáférést bármely rejtett fájlhoz (pl. .git, .gitignore) bármely mappában.\n", + "ruleExample2": "blokkolja a hozzáférést a Caddyfile nevű fájlhoz a hatókör gyökerében.", + "rules": "Szabályok", + "rulesHelp": "Meghatározhat egy sor engedélyezési és tiltási szabályt az adott felhasználó számára. A letiltott fájlok nem jelennek meg a listákban, és nem lesznek elérhetőek a felhasználó számára. A reguláris kifejezések és a felhasználói hatókörhöz viszonyított elérési utak támogatottak.\n", + "scope": "Hatókör", + "setDateFormat": "Pontos dátumformátum beállítása", + "settingsUpdated": "Beállítások frissítve!", + "shareDuration": "Megosztás időtartama", + "shareManagement": "Megosztáskezelés", + "shareDeleted": "Megosztás törölve!", + "singleClick": "Fájlok és könyvtárak megnyitása egyetlen kattintással", + "themes": { + "default": "System default", + "dark": "Sötét", + "light": "Világos", + "title": "Téma" + }, + "user": "Felhasználó", + "userCommands": "Parancsok", + "userCommandsHelp": "Egy szóközzel elválasztott lista az adott felhasználó számára elérhető parancsokkal. Példa:\n", + "userCreated": "Felhasználó létrehozva!", + "userDefaults": "Felhasználói alapértelmezett beállítások", + "userDeleted": "Felhasználó törölve!", + "userManagement": "Felhasználókezelés", + "userUpdated": "Felhasználó frissítve!", + "username": "Felhasználói név", + "users": "Felhasználók", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Súgó", + "hugoNew": "Új Hugo", + "login": "Belépés", + "logout": "Kilépés", + "myFiles": "Fájljaim", + "newFile": "Új fájl", + "newFolder": "Új mappa", + "preview": "Előnézet", + "settings": "Beállítások", + "signup": "Regisztráció", + "siteSettings": "Oldalbeállítások" + }, + "success": { + "linkCopied": "Link másolva!" + }, + "time": { + "days": "Nap", + "hours": "Óra", + "minutes": "Perc", + "seconds": "Másodperc", + "unit": "Időegység" + } +} diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.js deleted file mode 100644 index bdc37b03..00000000 --- a/frontend/src/i18n/index.js +++ /dev/null @@ -1,105 +0,0 @@ -import Vue from 'vue' -import VueI18n from 'vue-i18n' - -import ar from './ar.json' -import de from './de.json' -import en from './en.json' -import es from './es.json' -import fr from './fr.json' -import is from './is.json' -import it from './it.json' -import ja from './ja.json' -import ko from './ko.json' -import nlBE from './nl-be.json' -import pl from './pl.json' -import pt from './pt.json' -import ptBR from './pt-br.json' -import ro from './ro.json' -import ru from './ru.json' -import svSE from './sv-se.json' -import zhCN from './zh-cn.json' -import zhTW from './zh-tw.json' - -Vue.use(VueI18n) - -export function detectLocale () { - let locale = (navigator.language || navigator.browserLangugae).toLowerCase() - switch (true) { - case /^ar.*/i.test(locale): - locale = 'ar' - break - case /^es.*/i.test(locale): - locale = 'es' - break - case /^en.*/i.test(locale): - locale = 'en' - break - case /^it.*/i.test(locale): - locale = 'it' - break - case /^fr.*/i.test(locale): - locale = 'fr' - break - case /^pt.*/i.test(locale): - locale = 'pt' - break - case /^pt-BR.*/i.test(locale): - locale = 'pt-br' - break - case /^ja.*/i.test(locale): - locale = 'ja' - break - case /^zh-CN/i.test(locale): - locale = 'zh-cn' - break - case /^zh-TW/i.test(locale): - locale = 'zh-tw' - break - case /^zh.*/i.test(locale): - locale = 'zh-cn' - break - case /^de.*/i.test(locale): - locale = 'de' - break - case /^ru.*/i.test(locale): - locale = 'ru' - break - case /^pl.*/i.test(locale): - locale = 'pl' - break - case /^ko.*/i.test(locale): - locale = 'ko' - break - default: - locale = 'en' - } - - return locale -} - -const i18n = new VueI18n({ - locale: detectLocale(), - fallbackLocale: 'en', - messages: { - 'ar': ar, - 'de': de, - 'en': en, - 'es': es, - 'fr': fr, - 'is': is, - 'it': it, - 'ja': ja, - 'ko': ko, - 'nl-be': nlBE, - 'pl': pl, - 'pt-br': ptBR, - 'pt': pt, - 'ru': ru, - 'ro': ro, - 'sv-se': svSE, - 'zh-cn': zhCN, - 'zh-tw': zhTW - } -}) - -export default i18n diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts new file mode 100644 index 00000000..44b8e177 --- /dev/null +++ b/frontend/src/i18n/index.ts @@ -0,0 +1,195 @@ +import dayjs from "dayjs"; +import { createI18n } from "vue-i18n"; + +import("dayjs/locale/ar"); +import("dayjs/locale/bg"); +import("dayjs/locale/ca"); +import("dayjs/locale/cs"); +import("dayjs/locale/de"); +import("dayjs/locale/el"); +import("dayjs/locale/en"); +import("dayjs/locale/es"); +import("dayjs/locale/fr"); +import("dayjs/locale/he"); +import("dayjs/locale/hr"); +import("dayjs/locale/hu"); +import("dayjs/locale/is"); +import("dayjs/locale/it"); +import("dayjs/locale/ja"); +import("dayjs/locale/ko"); +import("dayjs/locale/lv"); +import("dayjs/locale/nb"); +import("dayjs/locale/nl"); +import("dayjs/locale/nl-be"); +import("dayjs/locale/pl"); +import("dayjs/locale/pt-br"); +import("dayjs/locale/pt"); +import("dayjs/locale/ro"); +import("dayjs/locale/ru"); +import("dayjs/locale/sk"); +import("dayjs/locale/sv"); +import("dayjs/locale/tr"); +import("dayjs/locale/uk"); +import("dayjs/locale/vi"); +import("dayjs/locale/zh-cn"); +import("dayjs/locale/zh-tw"); + +// All i18n resources specified in the plugin `include` option can be loaded +// at once using the import syntax +import messages from "@intlify/unplugin-vue-i18n/messages"; + +export function detectLocale() { + // locale is an RFC 5646 language tag + // https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language + let locale = navigator.language.toLowerCase(); + switch (true) { + case /^ar\b/.test(locale): + locale = "ar"; + break; + case /^bg\b/.test(locale): + locale = "bg"; + break; + case /^cs\b/.test(locale): + locale = "cs"; + break; + case /^lv\b/.test(locale): + locale = "lv"; + break; + case /^he\b/.test(locale): + locale = "he"; + break; + case /^hr\b/.test(locale): + locale = "hr"; + break; + case /^hu\b/.test(locale): + locale = "hu"; + break; + case /^el.*/i.test(locale): + locale = "el"; + break; + case /^es\b/.test(locale): + locale = "es"; + break; + case /^en\b/.test(locale): + locale = "en"; + break; + case /^is\b/.test(locale): + locale = "is"; + break; + case /^it\b/.test(locale): + locale = "it"; + break; + case /^fr\b/.test(locale): + locale = "fr"; + break; + case /^pt-br\b/.test(locale): + locale = "pt-br"; + break; + case /^pt-pt\b/.test(locale): + case /^pt\b/.test(locale): + locale = "pt-pt"; + break; + case /^ja\b/.test(locale): + locale = "ja"; + break; + case /^zh-tw\b/.test(locale): + locale = "zh-tw"; + break; + case /^zh-cn\b/.test(locale): + case /^zh\b/.test(locale): + locale = "zh-cn"; + break; + case /^de\b/.test(locale): + locale = "de"; + break; + case /^ro\b/.test(locale): + locale = "ro"; + break; + case /^ru\b/.test(locale): + locale = "ru"; + break; + case /^pl\b/.test(locale): + locale = "pl"; + break; + case /^ko\b/.test(locale): + locale = "ko"; + break; + case /^sk\b/.test(locale): + locale = "sk"; + break; + case /^tr\b/.test(locale): + locale = "tr"; + break; + case /^uk\b/.test(locale): + locale = "uk"; + break; + case /^vi\b/.test(locale): + locale = "vi"; + break; + case /^sv-se\b/.test(locale): + case /^sv\b/.test(locale): + locale = "sv"; + break; + case /^nl\b/.test(locale): + locale = "nl"; + break; + case /^nl-be\b/.test(locale): + locale = "nl-be"; + break; + case /^nb\b/.test(locale): + case /^no\b/.test(locale): + locale = "no"; + break; + + default: + locale = "en"; + } + + return locale; +} + +// TODO: was this really necessary? +// function removeEmpty(obj: Record): void { +// Object.keys(obj) +// .filter((k) => obj[k] !== null && obj[k] !== undefined && obj[k] !== "") // Remove undef. and null and empty.string. +// .reduce( +// (newObj, k) => +// typeof obj[k] === "object" +// ? Object.assign(newObj, { [k]: removeEmpty(obj[k]) }) // Recurse. +// : Object.assign(newObj, { [k]: obj[k] }), // Copy value. +// {} +// ); +// } + +export const rtlLanguages = ["he", "ar"]; + +export const i18n = createI18n({ + locale: detectLocale(), + fallbackLocale: "en", + messages, + // expose i18n.global for outside components + legacy: true, +}); + +export const isRtl = (locale?: string) => { + // see below + // @ts-expect-error incorrect type when legacy + return rtlLanguages.includes(locale || i18n.global.locale.value); +}; + +export function setLocale(locale: string) { + dayjs.locale(locale); + // according to doc u only need .value if legacy: false but they lied + // https://vue-i18n.intlify.dev/guide/essentials/scope.html#local-scope-1 + // @ts-expect-error incorrect type when legacy + i18n.global.locale.value = locale; +} + +export function setHtmlLocale(locale: string) { + const html = document.documentElement; + html.lang = locale; + if (isRtl(locale)) html.dir = "rtl"; + else html.dir = "ltr"; +} + +export default i18n; diff --git a/frontend/src/i18n/is.json b/frontend/src/i18n/is.json index 40dffd12..40f8fd6d 100644 --- a/frontend/src/i18n/is.json +++ b/frontend/src/i18n/is.json @@ -1,15 +1,20 @@ { - "permanent": "Varanlegt", "buttons": { - "shell": "Sýna skipanaglugga", "cancel": "Hætta við", + "clear": "Hreinsa", "close": "Loka", + "continue": "Continue", "copy": "Afrita", "copyFile": "Afrita skjal", "copyToClipboard": "Afrita", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", "create": "Búa til", "delete": "Eyða", "download": "Sækja", + "file": "File", + "folder": "Folder", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Hide dotfiles", "info": "Upplýsingar", "more": "Meira", "move": "Færa", @@ -17,37 +22,57 @@ "new": "Nýtt", "next": "Næsta", "ok": "OK", - "replace": "Skipta út", + "permalink": "Sækja fastan hlekk", "previous": "Fyrri", + "preview": "Preview", + "publish": "Gefa út", "rename": "Endurnefna", + "replace": "Skipta út", "reportIssue": "Tilkynna vandamál", "save": "Vista", + "schedule": "Áætlun", "search": "Leita", "select": "Velja", - "share": "Deila", - "publish": "Gefa út", "selectMultiple": "Velja mörg", - "schedule": "Áætlun", + "share": "Deila", + "shell": "Sýna skipanaglugga", + "submit": "Submit", "switchView": "Skipta um útlit", "toggleSidebar": "Sýna hliðarstiku", "update": "Vista", "upload": "Hlaða upp", - "permalink": "Sækja fastan hlekk" + "openFile": "Open file", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Hlekkur afritaður!" + "download": { + "downloadFile": "Sækja skjal", + "downloadFolder": "Sækja möppu", + "downloadSelected": "Download Selected" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { "forbidden": "Þú hefur ekki aðgang að þessari síðu.", "internal": "Eitthvað fór úrskeiðis.", - "notFound": "Ekki er hægt að opna þessa síðu." + "notFound": "Ekki er hægt að opna þessa síðu.", + "connection": "The server can't be reached." }, "files": { - "folders": "Möppur", - "files": "Skjöl", "body": "Meginmál", - "clear": "Hreinsa", "closePreview": "Loka forskoðun", + "files": "Skjöl", + "folders": "Möppur", "home": "Heim", "lastModified": "Seinast breytt", "loading": "Hleð...", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Hægt að velja mörg skjöl/möppur", "name": "Nafn", "size": "Stærð", + "sortByLastModified": "Flokka eftir Seinast breytt", "sortByName": "Flokka eftir nafni", "sortBySize": "Flokka eftir stærð", - "sortByLastModified": "Flokka eftir Seinast breytt" + "noPreview": "Preview is not available for this file.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "velja skjal eða möppu", @@ -75,23 +111,30 @@ "help": "Hjálp" }, "login": { - "password": "Lykilorð", - "passwordConfirm": "Staðfesting lykilorðs", - "submit": "Innskráning", "createAnAccount": "Búa til nýjan aðgang", "loginInstead": "Þú ert þegar með aðgang", + "password": "Lykilorð", + "passwordConfirm": "Staðfesting lykilorðs", "passwordsDontMatch": "Lykilorð eru mismunandi", - "usernameTaken": "Þetta norendanafn er þegar í notkun", "signup": "Nýskráning", + "submit": "Innskráning", "username": "Notendanafn", - "wrongCredentials": "Rangar notendaupplýsingar" + "usernameTaken": "Þetta norendanafn er þegar í notkun", + "wrongCredentials": "Rangar notendaupplýsingar", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Varanlegt", "prompts": { "copy": "Afrita", "copyMessage": "Veldu staðsetningu til að afrita gögn: ", "currentlyNavigating": "Núverandi staðsetning:", "deleteMessageMultiple": "Ertu viss um að þú viljir eyða {count} skjölum?", "deleteMessageSingle": "Ertu viss um að þú viljir eyða þessu skjali/möppu?", + "deleteMessageShare": "Are you sure you wish to delete this share({path})?", + "deleteUser": "Are you sure you want to delete this user?", "deleteTitle": "Eyða skjölum", "displayName": "Nafn: ", "download": "Sækja skjöl", @@ -102,43 +145,91 @@ "lastModified": "Seinast breytt", "move": "Færa", "moveMessage": "Velja nýtt hús fyrir skjöl/möppur:", + "newArchetype": "Búðu til nýja færslu sem byggir á frumgerð. Skjalið verður búið til í content möppu. ", "newDir": "Ný mappa", "newDirMessage": "Hvað á mappan að heita?", "newFile": "Nýtt skjal", "newFileMessage": "Hvað á skjalið að heita?", "numberDirs": "Fjöldi mappa", "numberFiles": "Fjöldi skjala", - "replace": "Skipta út", - "replaceMessage": "Eitt af skjölunum sem þú ert að reyna að hlaða upp hefur sama nafn og annað skjal. Viltu skipta nýja skjalinu út fyrir það gamla?\n", "rename": "Endurnefna", "renameMessage": "Settu inn nýtt nafn fyrir", - "show": "Sýna", - "size": "Stærð", + "replace": "Skipta út", + "replaceMessage": "Eitt af skjölunum sem þú ert að reyna að hlaða upp hefur sama nafn og annað skjal. Viltu skipta nýja skjalinu út fyrir það gamla?\n", "schedule": "Áætlun", "scheduleMessage": "Veldu dagsetningu og tíma fyrir áætlaða útgáfu. ", - "newArchetype": "Búðu til nýja færslu sem byggir á frumgerð. Skjalið verður búið til í content möppu. " + "show": "Sýna", + "size": "Stærð", + "upload": "Upload", + "uploadFiles": "Uploading {files} files...", + "uploadMessage": "Select an option to upload.", + "optionalPassword": "Optional password", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Myndir", + "music": "Tónlist", + "pdf": "PDF", + "pressToSearch": "Ýttu á Enter til að leita...", + "search": "Leita...", + "typeToSearch": "Skrifaðu til að leita...", + "types": "Skrárgerðir", + "video": "Myndbönd" }, "settings": { - "instanceName": "Nafn tilviks", - "brandingDirectoryPath": "Mappa fyrir branding-skjöl", - "documentation": "leiðbeiningar", - "branding": "Útlit", - "disableExternalLinks": "Sýna ytri-hlekki (fyrir utan leiðbeiningar)", - "brandingHelp": "Þú getur breytt því hvernig File Browser lítur út með því að breyta nafninu, setja inn nýtt lógó, búa til þína eigin stíla og tekið út GitHub-hlekki. \nTil að lesa meira um custom-branding, kíktu á {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Stjórnandi", "administrator": "Stjórnandi", "allowCommands": "Senda skipanir", "allowEdit": "Breyta, endurnefna og eyða skjölum eða möppum", "allowNew": "Búa til ný skjöl og möppur", "allowPublish": "Gefa út nýjar færslur og síður", + "allowSignup": "Leyfa nýjum notendum að skrá sig", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(engar breytingar ef ekkert er skrifað)", + "branding": "Útlit", + "brandingDirectoryPath": "Mappa fyrir branding-skjöl", + "brandingHelp": "Þú getur breytt því hvernig File Browser lítur út með því að breyta nafninu, setja inn nýtt lógó, búa til þína eigin stíla og tekið út GitHub-hlekki. \nTil að lesa meira um custom-branding, kíktu á {0}.", "changePassword": "Breyta lykilorði", "commandRunner": "Skipanagluggi", "commandRunnerHelp": "Hér geturðu sett inn skipanir sem eru keyrðar eftir því sem þú tilgreinir. Skrifaðu eina skipun í hverja línu. Umhverfisbreyturnar {0} og {1} verða aðgengilegar ({0} miðast við {1}). Til að lesa meira og sjá lista yfir þær skipanir sem eru í boði, vinsamlegast lestu {2}. ", "commandsUpdated": "Skipanastillingar vistaðar!", + "createUserDir": "Auto create user home dir while adding new user", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Base path for user home directories", + "userScopeGenerationPlaceholder": "The scope will be auto generated", + "createUserHomeDirectory": "Create user home directory", "customStylesheet": "Custom Stylesheet", + "defaultUserDescription": "Þetta eru sjálfgefnar stillingar fyrir nýja notendur.", + "disableExternalLinks": "Sýna ytri-hlekki (fyrir utan leiðbeiningar)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "leiðbeiningar", "examples": "Dæmi", + "executeOnShell": "Keyra í skel", + "executeOnShellDescription": "Sjálfgefnar stillingar File Browser eru að keyra skipanir beint með því að sækja binaries. Ef þú villt keyra skipanir í skel (t.d. í Bash eða PowerShell), þá geturðu skilgreint það hér með nauðsynlegum arguments og flags. Ef þetta er stillt, þá verður skipuninni bætt fyrir aftan sem argument. Þetta gildir bæði um skipanir notenda og event hooks.", + "globalRules": "Þetta eru sjálfgegnar aðgangsreglur. Þær gilda um alla notendur. Þú getur tilgreint sérstakar reglur í stillingum fyrir hvern notenda til að ógilda þessar reglur. ", "globalSettings": "Global stillingar", + "hideDotfiles": "Hide dotfiles", + "insertPath": "Settu inn slóð", + "insertRegex": "Setja inn reglulega segð", + "instanceName": "Nafn tilviks", "language": "Tungumál", "lockPassword": "Koma í veg fyrir að notandi breyti lykilorðinu", "newPassword": "Nýja lykilorðið þitt", @@ -146,91 +237,70 @@ "newUser": "Nýr notandi", "password": "Lykilorð", "passwordUpdated": "Lykilorð vistað!", + "path": "Path", + "perm": { + "create": "Búa til sköl og möppur", + "delete": "Eyða skjölum og möppum", + "download": "Sækja", + "execute": "Keyra skipanir", + "modify": "Breyta skjölum", + "rename": "Endurnefna eða færa skjöl og möppur", + "share": "Deila skjölum" + }, "permissions": "Heimildir", "permissionsHelp": "Þú getur stillt notenda sem stjórnanda eða valið einstaklingsbundnar heimildir. Ef þú velur \"Stjórnandi\", þá verða allir aðrir valmöguleikar valdir sjálfrafa. Aðgangstýring notenda er á hendi stjórnenda. \n", "profileSettings": "Stilla prófíl", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "kemur í veg fyrir aðgang að dot-skjali (t.d. .git, .gitignore) í öllum möppum. \n", "ruleExample2": "kemur í veg fyrir aðgang að Caddyfile-skjalinu í root-möppu í sýn notandans. ", "rules": "Reglur", "rulesHelp": "Hér getur þú skilgreint hvaða reglur gilda um notandann. Skjölin sem hann hefur ekki aðgang að eru óaðgengileg og hann sér þau ekki. Stuðst er við reglulegar segðir og slóðir sem miðast við sýn notandans. ", "scope": "Sýn notandans", + "setDateFormat": "Set exact date format", "settingsUpdated": "Stillingar vistaðar!", + "shareDuration": "Share Duration", + "shareManagement": "Share Management", + "shareDeleted": "Share deleted!", + "singleClick": "Use single clicks to open files and directories", + "themes": { + "default": "System default", + "dark": "Dark", + "light": "Light", + "title": "Theme" + }, "user": "Notandi", "userCommands": "Skipanir", "userCommandsHelp": "Listi þar sem gildum er skipt upp með bili og inniheldur tiltækar skipanir fyrir þennan notanda. Til dæmis:\n", "userCreated": "Notandi stofnaður!", + "userDefaults": "Sjálfgefnar notendastillingar", "userDeleted": "Notanda eytt!", "userManagement": "Notendastýring", + "userUpdated": "Notandastillingar vistaðar!", "username": "Notendanafn", "users": "Notendur", - "globalRules": "Þetta eru sjálfgegnar aðgangsreglur. Þær gilda um alla notendur. Þú getur tilgreint sérstakar reglur í stillingum fyrir hvern notenda til að ógilda þessar reglur. ", - "allowSignup": "Leyfa nýjum notendum að skrá sig", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Setja inn reglulega segð", - "insertPath": "Settu inn slóð", - "userUpdated": "Notandastillingar vistaðar!", - "userDefaults": "Sjálfgefnar notendastillingar", - "defaultUserDescription": "Þetta eru sjálfgefnar stillingar fyrir nýja notendur.", - "executeOnShell": "Keyra í skel", - "executeOnShellDescription": "Sjálfgefnar stillingar File Browser eru að keyra skipanir beint með því að sækja binaries. Ef þú villt keyra skipanir í skel (t.d. í Bash eða PowerShell), þá geturðu skilgreint það hér með nauðsynlegum arguments og flags. Ef þetta er stillt, þá verður skipuninni bætt fyrir aftan sem argument. Þetta gildir bæði um skipanir notenda og event hooks.", - "perm": { - "create": "Búa til sköl og möppur", - "delete": "Eyða skjölum og möppum", - "download": "Sækja", - "modify": "Breyta skjölum", - "execute": "Keyra skipanir", - "rename": "Endurnefna eða færa skjöl og möppur", - "share": "Deila skjölum" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Hjálp", + "hugoNew": "Hugo New", "login": "Innskráning", - "signup": "Nýskráning", "logout": "Útskráning", "myFiles": "Gögnin mín", "newFile": "Nýtt skjal", "newFolder": "Ný mappa", + "preview": "Sýnishorn", "settings": "Stillingar", - "siteSettings": "Stillingar síðu", - "hugoNew": "Hugo New", - "preview": "Sýnishorn" + "signup": "Nýskráning", + "siteSettings": "Stillingar síðu" }, - "search": { - "images": "Myndir", - "music": "Tónlist", - "pdf": "PDF", - "types": "Skrárgerðir", - "video": "Myndbönd", - "search": "Leita...", - "typeToSearch": "Skrifaðu til að leita...", - "pressToSearch": "Ýttu á Enter til að leita..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Hlekkur afritaður!" }, "time": { - "unit": "Tímastilling", - "seconds": "Sekúndur", - "minutes": "Mínútur", + "days": "Dagar", "hours": "Klukkutímar", - "days": "Dagar" - }, - "download": { - "downloadFile": "Sækja skjal", - "downloadFolder": "Sækja möppu" + "minutes": "Mínútur", + "seconds": "Sekúndur", + "unit": "Tímastilling" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/it.json b/frontend/src/i18n/it.json index bf171048..a363bd06 100644 --- a/frontend/src/i18n/it.json +++ b/frontend/src/i18n/it.json @@ -1,15 +1,20 @@ { - "permanent": "Permanente", "buttons": { - "shell": "Toggle shell", "cancel": "Annulla", + "clear": "Cancella", "close": "Chiudi", + "continue": "Continua", "copy": "Copia", "copyFile": "Copia file", "copyToClipboard": "Copia negli appunti", + "copyDownloadLinkToClipboard": "Copia link di scarica negli appunti", "create": "Crea", "delete": "Elimina", "download": "Scarica", + "file": "File", + "folder": "Cartella", + "fullScreen": "Abilita schermo intero", + "hideDotfiles": "Nascondi dotfile", "info": "Informazioni", "more": "Altro", "move": "Sposta", @@ -17,48 +22,79 @@ "new": "Nuovo", "next": "Successivo", "ok": "OK", - "replace": "Sostituisci", + "permalink": "Ottieni link permanente", "previous": "Precedente", + "preview": "Anteprima", + "publish": "Publica", "rename": "Rinomina", + "replace": "Sostituisci", "reportIssue": "Segnala un problema", "save": "Salva", + "schedule": "Programma", "search": "Cerca", "select": "Seleziona", - "share": "Condividi", - "publish": "Publica", "selectMultiple": "Seleziona molteplici", - "schedule": "Programma", + "share": "Condividi", + "shell": "Mostra/nascondi shell", + "submit": "Invia", "switchView": "Cambia vista", "toggleSidebar": "Mostra/nascondi la barra laterale", "update": "Aggiorna", "upload": "Carica", - "permalink": "Ottieni link permanente" + "openFile": "Apri file", + "openDirect": "View raw", + "discardChanges": "Ignora", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Link copiato!" + "download": { + "downloadFile": "Scarica file", + "downloadFolder": "Scarica cartella", + "downloadSelected": "Scarica selezionati" + }, + "upload": { + "abortUpload": "Sei sicuro di voler abortire la procedura?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "Non hai i permessi per accedere a questo file.", "internal": "Qualcosa è andato veramente male.", - "notFound": "Questo percorso non può essere raggiunto." + "notFound": "Questo percorso non può essere raggiunto.", + "connection": "Il server non è raggiungibile" }, "files": { - "folders": "Cartelle", - "files": "Files", "body": "Contenuto", - "clear": "Cancella", "closePreview": "Chiudi anteprima", + "files": "File", + "folders": "Cartelle", "home": "Home", "lastModified": "Ultima modifica", "loading": "Caricamento...", "lonely": "Ci si sente soli qui...", - "metadata": "Metadata", + "metadata": "Metadati", "multipleSelectionEnabled": "Selezione multipla attivata", "name": "Nome", - "size": "Grandezza", + "size": "Dimensione", + "sortByLastModified": "Ordina per ultima modifica", "sortByName": "Ordina per nome", "sortBySize": "Ordina per dimensione", - "sortByLastModified": "Ordina per ultima modifica" + "noPreview": "L'anteprima non è disponibile per questo file.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "seleziona un file o una cartella", @@ -75,25 +111,32 @@ "help": "Aiuto" }, "login": { + "createAnAccount": "Crea un account", + "loginInstead": "Hai già un account", "password": "Password", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "Conferma password", + "passwordsDontMatch": "Le password non corrispondono", + "signup": "Registrati", "submit": "Entra", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", "username": "Nome utente", - "wrongCredentials": "Credenziali errate" + "usernameTaken": "Username già usato", + "wrongCredentials": "Credenziali errate", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanente", "prompts": { "copy": "Copia", "copyMessage": "Seleziona la cartella in cui copiare i file:", "currentlyNavigating": "Attualmente navigando su:", - "deleteMessageMultiple": "Sei sicuro di voler eliminare {count} file(s)?", + "deleteMessageMultiple": "Sei sicuro di voler eliminare {count} file?", "deleteMessageSingle": "Sei sicuro di voler eliminare questo file/cartella?", + "deleteMessageShare": "Sei sicuro di voler eliminare questo percorso condiviso ({path})?", + "deleteUser": "Sei sicuro di voler eliminare questo utente?", "deleteTitle": "Elimina", - "displayName": "Nome Mostrato:", + "displayName": "Nome visualizzato:", "download": "Scarica files", "downloadMessage": "Seleziona il formato che vuoi scaricare.", "error": "Qualcosa è andato per il verso storto", @@ -102,43 +145,91 @@ "lastModified": "Ultima modifica", "move": "Sposta", "moveMessage": "Seleziona la nuova posizione per i tuoi file e/o cartella/e:", + "newArchetype": "Crea un nuovo post basato su un modello. Il tuo file verrà creato nella cartella.", "newDir": "Nuova cartella", "newDirMessage": "Scrivi il nome della nuova cartella.", "newFile": "Nuovo file", "newFileMessage": "Scrivi il nome del nuovo file.", "numberDirs": "Numero di cartelle", - "numberFiles": "Numero di files", - "replace": "Sostituisci", - "replaceMessage": "Uno dei file che stai cercando di caricare sta generando un conflitto per via del suo nome. Desideri sostituire il file già esistente?\n", + "numberFiles": "Numero di file", "rename": "Rinomina", "renameMessage": "Inserisci un nuovo nome per", - "show": "Mostra", - "size": "Grandezza", + "replace": "Sostituisci", + "replaceMessage": "Uno dei file che stai cercando di caricare sta generando un conflitto per via del suo nome. Desideri sostituire il file già esistente?\n", "schedule": "Pianifica", "scheduleMessage": "Seleziona data e ora per programmare la pubbilicazione di questo post", - "newArchetype": "Crea un nuovo post basato su un modello. Il tuo file verrà creato nella cartella." + "show": "Mostra", + "size": "Dimensione", + "upload": "Carica", + "uploadFiles": "Inviando {files} file...", + "uploadMessage": "Seleziona un'opzione per il caricamento.", + "optionalPassword": "Password opzionale", + "resolution": "Risoluzione", + "discardEditorChanges": "Sei sicuro di voler scartare le modifiche apportate?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Immagini", + "music": "Musica", + "pdf": "PDF", + "pressToSearch": "Premi Invio per cercare...", + "search": "Cerca...", + "typeToSearch": "Scrivi per cercare...", + "types": "Tipi", + "video": "Video" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Amministratore", "allowCommands": "Esegui comandi", "allowEdit": "Modifica, rinomina ed elimina file o cartelle", "allowNew": "Crea nuovi files o cartelle", "allowPublish": "Pubblica nuovi post e pagine", + "allowSignup": "Permetti agli utenti di registrarsi", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(lascia vuoto per evitare cambiamenti)", + "branding": "Branding", + "brandingDirectoryPath": "Directory del branding", + "brandingHelp": "Puoi personalizzare l'aspetto e il comportamento di File Browser cambiando il suo nome, logo, aggiungendo stili personalizzati e anche disabilitando link esterni verso GitHub.\nPer altre informazioni sul branding personalizzato, vai alla {0}.", "changePassword": "Modifica password", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "commandRunner": "Esecutore di comandi", + "commandRunnerHelp": "Qui puoi impostare i comandi da eseguire negli eventi nominati. Ne devi scrivere uno per riga. Le variabili d'ambiente {0} e {1} sono disponibili, essendo {0} relativo a {1}. Per altre informazioni su questa funzionalità e sulle variabili d'ambiente utilizzabili, leggi la {2}.", "commandsUpdated": "Comandi aggiornati!", - "customStylesheet": "Folgio di stile personalizzato", + "createUserDir": "Crea automaticamente la home directory dell'utente quando lo aggiungi", + "minimumPasswordLength": "Lunghezza minima della password", + "tusUploads": "Tranci di invii", + "tusUploadsHelp": "File Browser supporta tranci di invii fornendo così la possibilità di inviare efficientemente i file anche su reti instabili.", + "tusUploadsChunkSize": "Indica la dimensione massima di una richiesta (invii diretti saranno usati per piccoli invii). Puoi inserire un numero intero per indicare la dimensione in byte, oppure una stringa con l'unità di misura come in 10MB, 1GB, etc.", + "tusUploadsRetryCount": "Numero di tentativi da effettuare se un trancio di file fallisce.", + "userHomeBasePath": "Percorso base per le cartelle utente", + "userScopeGenerationPlaceholder": "La portata verrà autogenerata", + "createUserHomeDirectory": "Crea cartella utente", + "customStylesheet": "Foglio di stile personalizzato", + "defaultUserDescription": "Queste sono le impostazioni predefinite per i nuovi utenti.", + "disableExternalLinks": "Disabilita link esterni (tranne per la documentazione)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "documentazione", "examples": "Esempi", - "globalSettings": "Impostazioni Globali", + "executeOnShell": "Esegui nella shell", + "executeOnShellDescription": "Di default File Browser esegue i comandi chiamando direttamente i loro binari. Se invece vuoi eseguirli su una shell (come Bash o PowerShell), puoi definirli qui con gli argomenti e i flag richiesti. Se impostato, il comando che esegui sarà concatenato come argomento. Questo si applica sia ai comandi utente che agli hook di eventi.", + "globalRules": "Questo è un insieme globale di regole permetti/nega, che si applicano ad ogni utente. Puoi definire regole specifiche per ogni utente, per sovrascrivere queste.", + "globalSettings": "Impostazioni globali", + "hideDotfiles": "Nascondi dotfile", + "insertPath": "Inserisci il percorso", + "insertRegex": "Inserisci la regex", + "instanceName": "Nome dell'istanza", "language": "Lingua", "lockPassword": "Impedisci all'utente di modificare la password", "newPassword": "La tua nuova password", @@ -146,91 +237,70 @@ "newUser": "Nuovo utente", "password": "Password", "passwordUpdated": "Password aggiornata!", + "path": "Percorso", + "perm": { + "create": "Creare file e cartelle", + "delete": "Eliminare file e cartelle", + "download": "Scaricare", + "execute": "Eseguire comandi", + "modify": "Modificare file", + "rename": "Rinominare o spostare file e cartelle", + "share": "Condividere file" + }, "permissions": "Permessi", "permissionsHelp": "È possibile impostare l'utente come amministratore o scegliere i permessi singolarmente. Se si seleziona \"Amministratore\", tutte le altre opzioni saranno automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.\n", "profileSettings": "Impostazioni del profilo", - "ruleExample1": "Impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n", "ruleExample2": "blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.", "rules": "Regole", "rulesHelp": "Qui è possibile definire una serie di regole e permessi per questo specifico utente. I file bloccati non appariranno negli elenchi e non saranno accessibili dagli utenti. all'utente. Sia regex che i percorsi relativi all'ambito di applicazione degli utenti sono supportati.\n", - "scope": "Scopo", + "scope": "Scope", + "setDateFormat": "Fissa il formato di data esatto", "settingsUpdated": "Impostazioni aggiornate!", + "shareDuration": "Durata della condivisione", + "shareManagement": "Gestione delle condivisioni", + "shareDeleted": "Percorso condiviso eliminato!", + "singleClick": "Usa un singolo click per aprire file e cartelle", + "themes": { + "default": "Impostazione predefinita del sistema", + "dark": "Scuro", + "light": "Chiaro", + "title": "Tema" + }, "user": "Utente", "userCommands": "Comandi", "userCommandsHelp": "Una lista separata dal spazi con i comandi disponibili per questo utente. Example:\n", "userCreated": "Utente creato!", + "userDefaults": "Impostazioni predefinite utente", "userDeleted": "Utente eliminato!", "userManagement": "Gestione degli utenti", + "userUpdated": "Utente aggiornato!", "username": "Nome utente", "users": "Utenti", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "Utente aggiornato!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Aiuto", + "hugoNew": "Hugo New", "login": "Login", - "signup": "Signup", "logout": "Esci", "myFiles": "I miei file", "newFile": "Nuovo file", "newFolder": "Nuova cartella", + "preview": "Anteprima", "settings": "Impostazioni", - "siteSettings": "Impostaizoni del sito", - "hugoNew": "Hugo New", - "preview": "Anteprima" + "signup": "Registrati", + "siteSettings": "Impostazioni del sito" }, - "search": { - "images": "Immagini", - "music": "Musica", - "pdf": "PDF", - "types": "Tipi", - "video": "Video", - "search": "Cerca...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Link copiato!" }, "time": { - "unit": "Unità di tempo", - "seconds": "Secondi", - "minutes": "Minuti", + "days": "Giorni", "hours": "Ore", - "days": "Giorni" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "Minuti", + "seconds": "Secondi", + "unit": "Unità di tempo" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/ja.json b/frontend/src/i18n/ja.json index 263a262f..79c29ac8 100644 --- a/frontend/src/i18n/ja.json +++ b/frontend/src/i18n/ja.json @@ -1,236 +1,306 @@ { - "permanent": "永久", "buttons": { - "shell": "Toggle shell", "cancel": "キャンセル", + "clear": "クリアー", "close": "閉じる", + "continue": "続行", "copy": "コピー", - "copyFile": "ファイルをコピー", - "copyToClipboard": "クリップボードにコピー", + "copyFile": "ファイルのコピー", + "copyToClipboard": "共有リンクをコピー", + "copyDownloadLinkToClipboard": "ダウンロードリンクをコピー", "create": "作成", "delete": "削除", "download": "ダウンロード", + "file": "ファイル", + "folder": "フォルダー", + "fullScreen": "Toggle full screen", + "hideDotfiles": "ドットで始まるファイルを表示しない", "info": "情報", - "more": "More", + "more": "さらに", "move": "移動", - "moveFile": "ファイルを移動", + "moveFile": "ファイルの移動", "new": "新規", - "next": "次", + "next": "次へ", "ok": "OK", - "replace": "置き換える", - "previous": "前", - "rename": "名前を変更", + "permalink": "パーマリンクを取得", + "previous": "前へ", + "preview": "Preview", + "publish": "公開", + "rename": "名前の変更", + "replace": "置換する", "reportIssue": "問題を報告", "save": "保存", + "schedule": "スケジュール", "search": "検索", "select": "選択", - "share": "シェア", - "publish": "発表", "selectMultiple": "複数選択", - "schedule": "スケジュール", - "switchView": "表示を切り替わる", - "toggleSidebar": "サイドバーを表示する", + "share": "共有", + "shell": "シェルの切り替え", + "submit": "送信", + "switchView": "表示の切り替え", + "toggleSidebar": "サイドバーの切り替え", "update": "更新", "upload": "アップロード", - "permalink": "固定リンク" + "openFile": "ファイルを開く", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "リンクがコピーされました!" + "download": { + "downloadFile": "ファイルのダウンロード", + "downloadFolder": "フォルダーのダウンロード", + "downloadSelected": "選択した項目のダウンロード" + }, + "upload": { + "abortUpload": "アップロードをキャンセルしますか?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "これにアクセスする権限がありません。", "internal": "内部エラーが発生しました。", - "notFound": "リソースが見つからなりませんでした。" + "notFound": "リソースが見つかりませんでした。", + "connection": "サーバーに接続できませんでした。" }, "files": { - "folders": "フォルダ", - "files": "ファイル", "body": "本文", - "clear": "クリアー", "closePreview": "プレビューを閉じる", + "files": "ファイル", + "folders": "フォルダー", "home": "ホーム", - "lastModified": "最終変更", - "loading": "ローディング...", - "lonely": "ここには何もない...", + "lastModified": "更新日時", + "loading": "読み込み中…", + "lonely": "ここには何もないようです…", "metadata": "メタデータ", - "multipleSelectionEnabled": "複数選択有効", + "multipleSelectionEnabled": "複数選択が有効になっています", "name": "名前", "size": "サイズ", - "sortByName": "名前によるソート", - "sortBySize": "サイズによるソート", - "sortByLastModified": "最終変更日付によるソート" + "sortByLastModified": "更新日時で並べ替え", + "sortByName": "名前で並べ替え", + "sortBySize": "サイズで並べ替え", + "noPreview": "プレビューはこのファイルでは利用できません", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { - "click": "ファイルやディレクトリを選択", + "click": "ファイルやフォルダーを選択", "ctrl": { - "click": "複数のファイルやディレクトリを選択", - "f": "検索を有効にする", - "s": "ファイルを保存またはカレントディレクトリをダウンロード" + "click": "複数のファイルやフォルダーを選択", + "f": "検索画面を開く", + "s": "現在のフォルダーにあるファイルを保存またはダウンロード" }, "del": "選択した項目を削除", - "doubleClick": "ファイルやディレクトリをオープン", - "esc": "選択をクリアーまたはプロンプトを閉じる", - "f1": "このヘルプを表示", + "doubleClick": "ファイルやフォルダーを開く", + "esc": "選択を解除/ダイアログを閉じる", + "f1": "ヘルプを表示", "f2": "ファイルの名前を変更", "help": "ヘルプ" }, "login": { + "createAnAccount": "アカウントを作成", + "loginInstead": "ログインする", "password": "パスワード", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "パスワード(確認用)", + "passwordsDontMatch": "パスワードが一致しません", + "signup": "アカウント作成", "submit": "ログイン", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", - "username": "ユーザ名", - "wrongCredentials": "ユーザ名またはパスワードが間違っています。" - }, - "prompts": { - "copy": "コピー", - "copyMessage": "コピーの目標ディレクトリを選択してください:", - "currentlyNavigating": "現在閲覧しているディレクトリ:", - "deleteMessageMultiple": "{count} つのファイルを本当に削除してよろしいですか。", - "deleteMessageSingle": "このファイル/フォルダを本当に削除してよろしいですか。", - "deleteTitle": "ファイルを削除", - "displayName": "名前:", - "download": "ファイルをダウンロード", - "downloadMessage": "圧縮形式を選択してください。", - "error": "あるエラーが発生しました。", - "fileInfo": "ファイル情報", - "filesSelected": "{count} つのファイルは選択されました。", - "lastModified": "最終変更", - "move": "移動", - "moveMessage": "移動の目標ディレクトリを選択してください:", - "newDir": "新しいディレクトリを作成", - "newDirMessage": "新しいディレクトリの名前を入力してください。", - "newFile": "新しいファイルを作成", - "newFileMessage": "新しいファイルの名前を入力してください。", - "numberDirs": "ディレクトリ個数", - "numberFiles": "ファイル個数", - "replace": "置き換える", - "replaceMessage": "アップロードするファイルの中でかち合う名前が一つあります。 既存のファイルを置き換えりませんか。\n", - "rename": "名前を変更", - "renameMessage": "名前を変更しようファイルは:", - "show": "表示", - "size": "サイズ", - "schedule": "スケジュール", - "scheduleMessage": "このポストの発表日付をスケジュールしてください。", - "newArchetype": "ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。" - }, - "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", - "admin": "管理者", - "administrator": "管理者", - "allowCommands": "コマンドの実行", - "allowEdit": "ファイルやディレクトリの編集、名前変更と削除", - "allowNew": "ファイルとディレクトリの作成", - "allowPublish": "ポストとぺーじの発表", - "avoidChanges": "(変更を避けるために空白にしてください)", - "changePassword": "パスワードを変更", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", - "commandsUpdated": "コマンドは更新されました!", - "customStylesheet": "カスタムスタイルシ ート", - "examples": "例", - "globalSettings": "グローバル設定", - "language": "言語", - "lockPassword": "新しいパスワードを変更に禁止", - "newPassword": "新しいパスワード", - "newPasswordConfirm": "新しいパスワードを確認します", - "newUser": "新しいユーザー", - "password": "パスワード", - "passwordUpdated": "パスワードは更新されました!", - "permissions": "権限", - "permissionsHelp": "あなたはユーザーを管理者に設定し、または権限を個々に設定しできます。\"管理者\"を選択する場合、その他のすべての選択肢は自動的に設定されます。ユーザーの管理は管理者の権限として保留されました。", - "profileSettings": "プロファイル設定", - "ruleExample1": "各フォルダに名前はドットで始まるファイル(例えば、.git、.gitignore)へのアクセスを制限します。", - "ruleExample2": "範囲のルートパスに名前は Caddyfile のファイルへのアクセスを制限します。", - "rules": "規則", - "rulesHelp": "ここに、あなたはこのユーザーの許可または拒否規則を設定できます。ブロックされたファイルはリストに表示されません、それではアクセスも制限されます。正規表現(regex)のサポートと範囲に相対のパスが提供されています。", - "scope": "範囲", - "settingsUpdated": "設定は更新されました!", - "user": "ユーザー", - "userCommands": "ユーザーのコマンド", - "userCommandsHelp": "空白区切りの有効のコマンドのリストを指定してください。例:", - "userCreated": "ユーザーは作成されました!", - "userDeleted": "ユーザーは削除されました!", - "userManagement": "ユーザー管理", "username": "ユーザー名", - "users": "ユーザー", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "ユーザーは更新されました!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" + "usernameTaken": "ユーザー名はすでに取得されています", + "wrongCredentials": "ユーザー名またはパスワードが間違っています", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." } }, - "sidebar": { - "help": "ヘルプ", - "login": "Login", - "signup": "Signup", - "logout": "ログアウト", - "myFiles": "私のファイル", - "newFile": "新しいファイルを作成", - "newFolder": "新しいフォルダを作成", - "settings": "設定", - "siteSettings": "サイト設定", - "hugoNew": "Hugo New", - "preview": "プレビュー" + "permanent": "永久", + "prompts": { + "copy": "コピー", + "copyMessage": "ファイルをコピーする場所を選択してください:", + "currentlyNavigating": "現在閲覧しているディレクトリ:", + "deleteMessageMultiple": "{count} 個のファイルを削除してもよろしいですか?", + "deleteMessageSingle": "このファイル/フォルダーを削除してもよろしいですか?", + "deleteMessageShare": "共有中のファイル({path})を削除してもよろしいですか?", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "ファイルの削除", + "displayName": "表示名:", + "download": "ファイルのダウンロード", + "downloadMessage": "ダウンロードする際の圧縮形式を選んでください:", + "error": "エラーが発生しました", + "fileInfo": "ファイル情報", + "filesSelected": "{count} 個のファイル/フォルダーが選択されています", + "lastModified": "更新日時", + "move": "移動", + "moveMessage": "ファイル/フォルダーの新しいハウスを選択してください:", + "newArchetype": "archetype に基づいて新しい投稿を作成します。ファイルは content フォルダーに作成されます。", + "newDir": "新規フォルダー", + "newDirMessage": "フォルダーの名前を入力してください:", + "newFile": "新規ファイル", + "newFileMessage": "ファイルの名前を入力してください:", + "numberDirs": "ディレクトリの数", + "numberFiles": "ファイルの数", + "rename": "名前変更", + "renameMessage": "変更後のファイルの名前を入力してください", + "replace": "ファイルの置き換え", + "replaceMessage": "アップロードしようとしているファイルと既存のファイルの名前が重複しています。既存のものを置き換えずにアップロードを続けるか、既存のものを置き換えますか?\n", + "schedule": "スケジュール", + "scheduleMessage": "この投稿の公開予定日時を選んでください。", + "show": "表示", + "size": "サイズ", + "upload": "アップロード", + "uploadFiles": "{files} 個のファイルをアップロードしています…", + "uploadMessage": "アップロードするオプションを選択してください。", + "optionalPassword": "パスワード(オプション)", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." }, "search": { "images": "画像", "music": "音楽", "pdf": "PDF", - "types": "種類", - "video": "ビデオ", - "search": "検索...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." + "pressToSearch": "エンターを押して検索します", + "search": "検索", + "typeToSearch": "検索の種類", + "types": "ファイルの種類", + "video": "動画" }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "管理者", + "administrator": "管理者", + "allowCommands": "コマンドの実行", + "allowEdit": "ファイルやフォルダーの編集、名前の変更、削除", + "allowNew": "ファイルやフォルダーの新規作成", + "allowPublish": "新しい投稿やページの公開", + "allowSignup": "ユーザーの新規登録を許可", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(変更しない場合は空白のままにしてください)", + "branding": "ブランディング", + "brandingDirectoryPath": "ブランディングのディレクトリへのパス", + "brandingHelp": "インスタンスの名前の変更、ロゴの変更、カスタムスタイルの追加、GitHub への外部リンクの無効化など、File Browser の見た目や使い勝手をカスタマイズすることができます。\nカスタムブランディングの詳細については、{0}をご覧ください。", + "changePassword": "パスワードの変更", + "commandRunner": "コマンドランナー", + "commandRunnerHelp": "ここでは、指定したイベントの際に実行されるコマンドを設定することができます。1行に1つずつ書く必要があります。環境変数として {0} や {1} が使用可能で、{0} は {1} に関連した変数として扱われます。この機能と使用可能な環境変数の詳細については、{2}をお読みください。", + "commandsUpdated": "コマンドを更新しました!", + "createUserDir": "新規ユーザー追加時にユーザーのホームディレクトリを自動生成する", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "チャンクされたファイルアップロード", + "tusUploadsHelp": "File Browser はチャンクされたファイルアップロードをサポートしており、信頼性の低いネットワーク上でも、効率的で信頼性の高い、再開可能なチャンクされたファイルアップロードを作成することができます。", + "tusUploadsChunkSize": "1チャンクあたりのリクエストの最大サイズ。バイト数を示す整数か、10MB、1GBなどの文字列を入力できます。", + "tusUploadsRetryCount": "チャンクのアップロードに失敗した場合の再試行回数。", + "userHomeBasePath": "ユーザーのホームディレクトリのベースパス", + "userScopeGenerationPlaceholder": "スコープは自動生成されます", + "createUserHomeDirectory": "ユーザーのホームディレクトリを作成する", + "customStylesheet": "カスタムスタイルシート", + "defaultUserDescription": "これらは新規ユーザーのデフォルト設定です。", + "disableExternalLinks": "外部リンクを無効にする(ドキュメントへのリンクを除く)", + "disableUsedDiskPercentage": "ディスク使用率のグラフを無効にする", + "documentation": "ドキュメント", + "examples": "例", + "executeOnShell": "シェルで実行する", + "executeOnShellDescription": "デフォルトでは、File Browser はバイナリを直接呼び出してコマンドを実行します。代わりにシェル(Bash や PowerShell など)で実行したい場合は、必要な引数やフラグをここで指定します。値が指定されている場合、実行するコマンドが引数として追加されます。これは、ユーザーコマンドとイベントフックの両方に適用されます。", + "globalRules": "これはグローバルな許可と不許可のルールセットです。これはすべてのユーザーに適用されます。ユーザーごとに特定のルールを設定することで、これらのルールを上書きすることができます。", + "globalSettings": "グローバル設定", + "hideDotfiles": "ドットで始まるファイルを表示しない", + "insertPath": "パスを入力してください", + "insertRegex": "正規表現を入力してください", + "instanceName": "インスタンス名", + "language": "言語", + "lockPassword": "ユーザーがパスワードを変更できないようにする", + "newPassword": "新しいパスワード", + "newPasswordConfirm": "新しいパスワード(再入力)", + "newUser": "新規ユーザー作成", + "password": "パスワード", + "passwordUpdated": "パスワードを更新しました!", + "path": "パス", + "perm": { + "create": "ファイルやフォルダーの作成", + "delete": "ファイルやフォルダーの削除", + "download": "ダウンロード", + "execute": "コマンドの実行", + "modify": "ファイルの編集", + "rename": "ファイルやフォルダーの編集・移動", + "share": "ファイルの共有" + }, + "permissions": "権限", + "permissionsHelp": "ユーザーを管理者に設定するか、その他の権限を個別に選択することができます。「管理者」を選択すると、他のオプションはすべて自動的にチェックされます。ユーザーを管理するには管理者権限が必要です。\n", + "profileSettings": "プロフィール設定", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": ".git や .gitignore のようなドットから始まるファイルへのアクセスを禁止します。\n", + "ruleExample2": "スコープのルートにある Caddyfile という名前のファイルへのアクセスを禁止します。", + "rules": "ルール", + "rulesHelp": "ここでは、特定のユーザーに対して許可と不許可のルールを設定することができます。ブロックされたファイルはリストに表示されず、ユーザはアクセスできなくなります。正規表現とユーザースコープからの相対パスをサポートしています。\n", + "scope": "スコープ", + "setDateFormat": "正確な日時表記を使用する", + "settingsUpdated": "設定を更新しました!", + "shareDuration": "共有期間", + "shareManagement": "共有の管理", + "shareDeleted": "ファイルの共有を削除しました!", + "singleClick": "ダブルクリックの代わりにクリックでファイルやフォルダーを開く", + "themes": { + "default": "System default", + "dark": "ダーク", + "light": "ライト", + "title": "テーマ" + }, + "user": "ユーザー", + "userCommands": "コマンド", + "userCommandsHelp": "このユーザーが使用可能なコマンドをスペースで区切ったリスト。例:\n", + "userCreated": "ユーザーを作成しました!", + "userDefaults": "ユーザーのデフォルト設定", + "userDeleted": "ユーザーを削除しました!", + "userManagement": "ユーザー管理", + "userUpdated": "ユーザーを更新しました!", + "username": "ユーザー名", + "users": "ユーザー", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "ヘルプ", + "hugoNew": "Hugo New", + "login": "ログイン", + "logout": "ログアウト", + "myFiles": "マイファイル", + "newFile": "新規ファイル", + "newFolder": "新規フォルダー", + "preview": "プレビュー", + "settings": "設定", + "signup": "サインアップ", + "siteSettings": "サイト設定" + }, + "success": { + "linkCopied": "リンクをコピーしました!" }, "time": { - "unit": "時間単位", - "seconds": "秒", - "minutes": "分", + "days": "日", "hours": "時間", - "days": "日" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "分", + "seconds": "秒", + "unit": "時間の単位" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/ko.json b/frontend/src/i18n/ko.json index 028d31f2..ee335cab 100644 --- a/frontend/src/i18n/ko.json +++ b/frontend/src/i18n/ko.json @@ -1,15 +1,20 @@ { - "permanent": "영구", "buttons": { - "shell": "쉘 전환", "cancel": "취소", + "clear": "지우기", "close": "닫기", + "continue": "계속", "copy": "복사", "copyFile": "파일 복사", "copyToClipboard": "클립보드 복사", + "copyDownloadLinkToClipboard": "다운로드 링크 복사", "create": "생성", "delete": "삭제", "download": "다운로드", + "file": "파일", + "folder": "폴더", + "fullScreen": "전체 화면 전환", + "hideDotfiles": "숨김파일(dotfile)을 표시 안 함", "info": "정보", "more": "더보기", "move": "이동", @@ -17,128 +22,216 @@ "new": "신규", "next": "다음", "ok": "확인", - "replace": "대체", + "permalink": "링크 얻기", "previous": "이전", + "preview": "미리보기", + "publish": "게시", "rename": "이름 바꾸기", - "reportIssue": "이슈 보내기", + "replace": "대체", + "reportIssue": "문제 보고", + "resumeTransfer": "이전 전송을 재개", + "resumeTransferTooltip": "서버에 있는 파일 중 전송이 중단되었을 가능성이 있는 작은 파일을 제외하고 충돌하는 모든 파일을 건너뜁니다.", "save": "저장", + "schedule": "일정", "search": "검색", "select": "선택", - "share": "공유", - "publish": "게시", "selectMultiple": "다중 선택", - "schedule": "일정", + "share": "공유", + "shell": "셸 전환", + "submit": "제출", "switchView": "보기 전환", "toggleSidebar": "사이드바 전환", "update": "업데이트", "upload": "업로드", - "permalink": "링크 얻기" + "openFile": "파일 열기", + "openDirect": "원본 보기", + "discardChanges": "변경 사항 취소", + "stopSearch": "검색 중단", + "saveChanges": "변경사항 저장", + "editAsText": "텍스트로 편집", + "increaseFontSize": "글꼴 크기 증가", + "decreaseFontSize": "글꼴 크기 감소", + "overrideAll": "대상 폴더의 모든 파일을 대체", + "skipAll": "충돌하는 모든 파일을 건너뛰기", + "renameAll": "모든 파일의 이름 변경 (복사본 생성)", + "singleDecision": "충돌하는 각 파일을 확인" }, - "success": { - "linkCopied": "링크가 복사되었습니다!" + "download": { + "downloadFile": "파일 다운로드", + "downloadFolder": "폴더 다운로드", + "downloadSelected": "선택 항목 다운로드" + }, + "upload": { + "abortUpload": "업로드를 중단하시겠습니까?" }, "errors": { "forbidden": "접근 권한이 없습니다.", "internal": "오류가 발생하였습니다.", - "notFound": "해당 경로를 찾을 수 없습니다." + "notFound": "해당 경로를 찾을 수 없습니다.", + "connection": "서버에 연결할 수 없습니다." }, "files": { - "folders": "폴더", - "files": "파일", "body": "본문", - "clear": "지우기", "closePreview": "미리보기 닫기", + "files": "파일", + "folders": "폴더", "home": "홈", "lastModified": "최종 수정", - "loading": "로딩중...", - "lonely": "폴더가 비어 있습니다...", + "loading": "불러오는 중...", + "lonely": "외로워요... (비어 있음)", "metadata": "메타데이터", "multipleSelectionEnabled": "다중 선택 켜짐", "name": "이름", "size": "크기", - "sortByName": "이름순", - "sortBySize": "크기순", - "sortByLastModified": "수정시간순 정렬" + "sortByLastModified": "수정 시간으로 정렬", + "sortByName": "이름으로 정렬", + "sortBySize": "크기로 정렬", + "noPreview": "미리 볼 수 없는 파일입니다.", + "csvTooLarge": "CSV 파일이 너무 커서 미리 볼 수 없습니다(5MB 초과). 다운로드 후 보시기 바랍니다.", + "csvLoadFailed": "CSV 파일을 불러오는 데 실패했습니다.", + "showingRows": "{count}개의 행 보기", + "columnSeparator": "열 구분자", + "csvSeparators": { + "comma": "반점 (,)", + "semicolon": "쌍반점 (;)", + "both": "(,) 및 (;) 모두" + }, + "fileEncoding": "파일 인코딩" }, "help": { - "click": "파일이나 디렉토리를 선택해주세요.", + "click": "파일 또는 디렉터리 선택", "ctrl": { - "click": "여러 개의 파일이나 디렉토리를 선택해주세요.", + "click": "여러 개의 파일 또는 디렉터리 선택", "f": "검색창 열기", - "s": "파일 또는 디렉토리 다운로드" + "s": "파일을 저장하거나 디렉터리를 다운로드" }, "del": "선택된 파일 삭제", - "doubleClick": "파일 또는 디렉토리 열기", - "esc": "선택 취소/프롬프트 닫기", + "doubleClick": "파일 또는 디렉터리 열기", + "esc": "선택을 취소하고/또는 프롬프트 닫기", "f1": "정보", "f2": "파일 이름 변경", "help": "도움말" }, "login": { - "password": "비밀번호", - "passwordConfirm": "비밀번호 확인", - "submit": "로그인", "createAnAccount": "계정 생성", "loginInstead": "이미 계정이 있습니다", - "passwordsDontMatch": "비밀번호가 일치하지 않습니다", - "usernameTaken": "사용자 이름이 존재합니다", + "password": "비밀번호", + "passwordConfirm": "비밀번호 확인", + "passwordsDontMatch": "비밀번호가 일치하지 않음", "signup": "가입하기", + "submit": "로그인", "username": "사용자 이름", - "wrongCredentials": "사용자 이름 또는 비밀번호를 확인하십시오" + "usernameTaken": "사용자 이름이 존재함", + "wrongCredentials": "사용자 이름 또는 비밀번호를 확인", + "passwordTooShort": "비밀번호는 최소 {min}자 이상이어야 함", + "logout_reasons": { + "inactivity": "활동이 없어 로그아웃 되었습니다." + } }, + "permanent": "영구", "prompts": { "copy": "복사", - "copyMessage": "복사할 디렉토리:", + "copyMessage": "파일을 복사할 위치:", "currentlyNavigating": "현재 위치:", - "deleteMessageMultiple": "{count} 개의 파일을 삭제하시겠습니까?", - "deleteMessageSingle": "파일 혹은 디렉토리를 삭제하시겠습니까?", + "deleteMessageMultiple": "정말 {count}개의 파일을 삭제하시겠습니까?", + "deleteMessageSingle": "파일 혹은 디렉터리를 삭제하시겠습니까?", + "deleteMessageShare": "이 공유({path})를 삭제하시겠습니까?", + "deleteUser": "이 계정을 삭제하시겠습니까?", "deleteTitle": "파일 삭제", - "displayName": "게시 이름:", + "displayName": "표시 이름:", "download": "파일 다운로드", - "downloadMessage": "다운로드 포맷 설정.", - "error": "에러 발생!", + "downloadMessage": "다운로드 할 형식을 선택하십시오.", + "error": "에러 발생", "fileInfo": "파일 정보", - "filesSelected": "{count} 개의 파일이 선택되었습니다.", + "filesSelected": "{count}개의 파일을 선택했습니다.", "lastModified": "최종 수정", "move": "이동", - "moveMessage": "이동할 화일 또는 디렉토리를 선택하세요:", - "newDir": "새 디렉토리", - "newDirMessage": "새 디렉토리 이름을 입력해주세요.", + "moveMessage": "파일 및 폴더의 새로운 위치를 선택:", + "newArchetype": "원형을 유지하는 새 포스트를 생성합니다. 파일은 콘텐츠 폴더에 생성됩니다.", + "newDir": "새 디렉터리", + "newDirMessage": "새 디렉터리의 이름을 입력해주세요.", "newFile": "새 파일", - "newFileMessage": "새 파일 이름을 입력해주세요.", - "numberDirs": "디렉토리 수", + "newFileMessage": "새 파일의 이름을 입력해주세요.", + "numberDirs": "디렉터리 수", "numberFiles": "파일 수", - "replace": "대체하기", - "replaceMessage": "동일한 파일 이름이 존재합니다. 현재 파일을 덮어쓸까요?\n", "rename": "이름 변경", - "renameMessage": "새로운 이름을 입력하세요.", + "renameMessage": "새 이름을 입력:", + "replace": "대체하기", + "replaceMessage": "업로드하려는 파일 중 하나의 이름이 충돌합니다. 해당 파일을 건너뛰고 계속 업로드하시겠습니까, 아니면 기존 파일을 교체하시겠습니까?\n", + "schedule": "일정", + "scheduleMessage": "이 포스트를 공개할 날짜와 시간을 선택하십시오.", "show": "보기", "size": "크기", - "schedule": "일정", - "scheduleMessage": "이 글을 공개할 시간을 알려주세요.", - "newArchetype": "원형을 유지하는 포스트를 생성합니다. 파일은 컨텐트 폴더에 생성됩니다." + "upload": "업로드", + "uploadFiles": "{files}개의 파일 업로드 중...", + "uploadMessage": "업로드 옵션을 선택하세요.", + "optionalPassword": "비밀번호 (선택)", + "resolution": "해상도", + "discardEditorChanges": "변경 사항을 취소하시겠습니까?", + "replaceOrSkip": "파일 대체 또는 건너뛰기", + "resolveConflict": "어떤 파일을 유지하시겠습니까?", + "singleConflictResolve": "모든 버전을 선택하면 복사한 파일의 이름에 번호를 추가합니다.", + "fastConflictResolve": "대상 폴더에 같은 이름을 가진 파일이 {count}개 있습니다.", + "uploadingFiles": "파일 업로드 중", + "filesInOrigin": "원본 파일", + "filesInDest": "대상 경로의 파일", + "override": "덮어쓰기", + "skip": "건너뛰기", + "forbiddenError": "권한 오류", + "currentPassword": "기존 비밀번호", + "currentPasswordMessage": "기존 비밀번호를 입력해 이 동작을 확인하십시오." + }, + "search": { + "images": "이미지", + "music": "음악", + "pdf": "PDF", + "pressToSearch": "엔터를 눌러 검색...", + "search": "검색...", + "typeToSearch": "검색어 입력...", + "types": "유형", + "video": "비디오" }, "settings": { - "instanceName": "인스턴스 이름", - "brandingDirectoryPath": "브랜드 디렉토리 경로", - "documentation": "문서", - "branding": "브랜딩", - "disableExternalLinks": "외부 링크 감추기", - "brandingHelp": "File Browser 인스턴스는 이름, 로고, 스타일 등을 변경할 수 있습니다. 자세한 사항은 여기{0}에서 확인하세요.", + "aceEditorTheme": "ACE 편집기 테마", "admin": "관리자", "administrator": "관리자", "allowCommands": "명령 실행", - "allowEdit": "파일/디렉토리의 수정/변경/삭제 허용", - "allowNew": "파일/디렉토리 생성 허용", - "allowPublish": "새 포스트/페이지 생성 허용", - "avoidChanges": "(수정하지 않으면 비워두세요)", + "allowEdit": "파일 또는 디렉터리의 수정, 이름 변경, 삭제를 허용", + "allowNew": "파일 및 디렉터리 생성 허용", + "allowPublish": "새 포스트 및 페이지 생성 허용", + "allowSignup": "사용자 가입 허용", + "hideLoginButton": "공개 화면에서 로그인 버튼 숨기기", + "avoidChanges": "(수정하지 않으려면 비워둠)", + "branding": "브랜딩", + "brandingDirectoryPath": "브랜드 디렉터리 경로", + "brandingHelp": "File Browser의 이름을 변경하고, 로고를 바꾸고, 사용자 지정 스타일을 추가하고, GitHub에 대한 외부 링크를 비활성화 하는 등 인스턴스의 모양과 느낌을 사용자화 할 수 있습니다.\n사용자 지정 브랜딩에 대한 자세한 내용은 {0}을(를) 참조하십시오.", "changePassword": "비밀번호 변경", "commandRunner": "명령 실행기", - "commandRunnerHelp": "이벤트에 해당하는 명령을 설정하세요. 줄당 1개의 명령을 적으세요. 환경 변수{0} 와 {1}이 사용가능하며, {0} 은 {1}에 상대 경로 입니다. 자세한 사항은 {2} 를 참조하세요.", + "commandRunnerHelp": "여기서는 명명된 이벤트에서 실행될 명령을 설정할 수 있습니다. 한 줄에 하나씩 작성해야 합니다. 환경 변수 {0} 및 {1}을(를) 사용할 수 있으며, {0}은(는) {1}을 기준으로 합니다. 이 기능 및 사용 가능한 환경 변수에 대한 자세한 내용은 {2}을(를) 참조하십시오.", "commandsUpdated": "명령 수정됨!", - "customStylesheet": "커스텀 스타일시트", - "examples": "예", + "createUserDir": "새로운 유저를 추가할 때 사용자 홈 디렉터리 자동 생성", + "minimumPasswordLength": "최소 비밀번호 길이", + "tusUploads": "분할 업로드", + "tusUploadsHelp": "File Browser는 파일의 분할 업로드를 통해 불안정한 네트워크 환경에서도 효율적이고 안정적이며, 업로드 재개가 가능하도록 합니다.", + "tusUploadsChunkSize": "업로드 요청의 최대 크기를 지정합니다(보다 작은 크기의 업로드는 직접 업로드 방식을 사용합니다). 바이트 크기를 나타내는 정수 또는 10MB, 1GB 등과 같은 문자열을 입력할 수 있습니다.", + "tusUploadsRetryCount": "분할 업로드를 실패할 경우 다시 시도할 횟수입니다.", + "userHomeBasePath": "사용자 홈 디렉터리 기본 경로", + "userScopeGenerationPlaceholder": "범위는 자동 생성", + "createUserHomeDirectory": "사용자 홈 디렉터리 생성", + "customStylesheet": "사용자 지정 스타일시트", + "defaultUserDescription": "다음은 신규 사용자들에 대한 기본 설정입니다.", + "disableExternalLinks": "외부 링크 비활성화(문서 제외)", + "disableUsedDiskPercentage": "사용한 디스크 비율 그래프 비활성화", + "documentation": "문서", + "examples": "예시", + "executeOnShell": "셸에서 실행", + "executeOnShellDescription": "기본적으로 File Browser는 명령어를 해당 바이너리 파일로 직접 실행합니다. 만약 Bash나 PowerShell과 같은 셸에서 명령어를 실행하려면, 필요한 인수와 플래그를 설정하여 셸 환경을 정의할 수 있습니다. 플래그가 설정된 경우, 실행하는 명령어가 인수로 추가됩니다. 이는 사용자 명령어와 이벤트 후크 모두에 적용됩니다.", + "globalRules": "규칙에 대한 전역설정으로 모든 사용자에게 적용됩니다. 지정된 규칙은 사용자 설정을 덮어쓰기 합니다.", "globalSettings": "전역 설정", + "hideDotfiles": "숨김파일(dotfile)을 표시하지 않습니다.", + "insertPath": "경로 입력", + "insertRegex": "정규식 입력", + "instanceName": "인스턴스 이름", "language": "언어", "lockPassword": "사용자에 의한 비밀번호 변경을 허용하지 않음", "newPassword": "새로운 비밀번호", @@ -146,91 +239,74 @@ "newUser": "새로운 사용자", "password": "비밀번호", "passwordUpdated": "비밀번호 수정 완료!", + "path": "경로", + "perm": { + "create": "파일 및 디렉터리 생성하기", + "delete": "파일 및 디렉터리 삭제하기", + "download": "다운로드", + "execute": "명령 실행", + "modify": "파일 편집", + "rename": "파일 및 디렉터리의 이름 변경 또는 이동", + "share": "파일 공유 (다운로드 권한 필요)" + }, "permissions": "권한", - "permissionsHelp": "사용자를 관리자로 만들거나 권한을 부여할 수 있습니다. 관리자를 선택하면, 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 현재 관리자만 할 수 있습니다.\n", + "permissionsHelp": "사용자를 관리자로 설정하거나 개별적으로 권한을 지정할 수 있습니다. \"관리자\"를 선택하면 다른 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 관리자의 권한입니다.\n", "profileSettings": "프로필 설정", - "ruleExample1": "점(.)으로 시작하는 모든 파일의 접근을 방지합니다.(예 .git, .gitignore)\n", + "redirectAfterCopyMove": "복사/이동 후 대상 경로로 이동", + "ruleExample1": "각 폴더에 점(.)으로 시작하는 모든 파일의 접근을 방지합니다. (예시: .git, .gitignore)\n", "ruleExample2": "Caddyfile파일의 접근을 방지합니다.", - "rules": "룰", - "rulesHelp": "사용자별로 규칙을 허용/방지를 지정할 수 있습니다. 방지된 파일은 보이지 않고 사용자들은 접근할 수 없습니다. 사용자의 접근 허용 범위와 관련해 정규표현식(regex)과 경로를 지원합니다.\n", + "rules": "규칙", + "rulesHelp": "여기에서 특정 사용자에 대한 허용 및 차단 규칙 집합을 정의할 수 있습니다. 차단된 파일은 목록에 표시되지 않으며 해당 사용자는 접근할 수 없습니다. 정규 표현식과 사용자 범위에 대한 상대 경로를 지원합니다.\n", "scope": "범위", + "setDateFormat": "날짜 형식 설정", "settingsUpdated": "설정 수정됨!", + "shareDuration": "공유 기간", + "shareManagement": "공유 내역 관리", + "shareDeleted": "공유 삭제됨!", + "singleClick": "단일 클릭으로 파일 및 디렉터리 열기", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "시스템 기본값", + "dark": "어두운 테마", + "light": "밝은 테마", + "title": "테마" + }, "user": "사용자", "userCommands": "명령어", - "userCommandsHelp": "사용에게 허용할 명령어를 공백으로 구분하여 입력하세요. 예:\n", + "userCommandsHelp": "사용자에게 허용할 명령어를 공백으로 구분하여 입력하세요. 예:\n", "userCreated": "사용자 생성됨!", + "userDefaults": "사용자 기본 설정", "userDeleted": "사용자 삭제됨!", "userManagement": "사용자 관리", + "userUpdated": "사용자 수정됨!", "username": "사용자 이름", "users": "사용자", - "globalRules": "규칙에 대한 전역설정으로 모든 사용자에게 적용됩니다. 지정된 규칙은 사용자 설정을 덮어쓰기 합니다.", - "allowSignup": "사용자 가입 허용", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "정규식 입력", - "insertPath": "경로 입력", - "userUpdated": "사용자 수정됨!", - "userDefaults": "사용자 기본 설정", - "defaultUserDescription": "아래 사항은 신규 사용자들에 대한 기본 설정입니다.", - "executeOnShell": "쉘에서 실행", - "executeOnShellDescription": "기본적으로 File Browser 는 바이너리를 명령어로 호출하여 실행합니다. 쉘을 통해 실행하기를 원한다면, Bash 또는 PowerShell 에 필요한 인수와 플래그를 설정하세요. 사용자 명령어와 이벤트 훅에 모두 적용됩니다.", - "perm": { - "create": "파일이나 디렉토리 생성하기", - "delete": "화일이나 디렉토리 삭제하기", - "download": "다운로드", - "modify": "파일 편집", - "execute": "명령 실행", - "rename": "파일 이름 변경 또는 디렉토리 이동", - "share": "파일 공유하기" - } + "currentPassword": "현재 비밀번호" }, "sidebar": { + "diskUsed": "{total} 중 {used} 사용", "help": "도움말", + "hugoNew": "Hugo New", "login": "로그인", - "signup": "가입하기", "logout": "로그아웃", "myFiles": "내 파일", "newFile": "새로운 파일", "newFolder": "새로운 폴더", + "preview": "미리보기", "settings": "설정", - "siteSettings": "사이트 설정", - "hugoNew": "Hugo New", - "preview": "미리보기" + "signup": "가입하기", + "siteSettings": "사이트 설정" }, - "search": { - "images": "이미지", - "music": "음악", - "pdf": "PDF", - "types": "Types", - "video": "비디오", - "search": "검색...", - "typeToSearch": "검색어 입력...", - "pressToSearch": "검색하려면 엔터를 입력하세요" - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "링크가 복사되었습니다!" }, "time": { - "unit": "Time Unit", - "seconds": "초", - "minutes": "분", + "days": "일", "hours": "시", - "days": "일" - }, - "download": { - "downloadFile": "파일 다운로드", - "downloadFolder": "폴더 다운로드" + "minutes": "분", + "seconds": "초", + "unit": "시간 단위" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/lv.json b/frontend/src/i18n/lv.json new file mode 100644 index 00000000..75c3a939 --- /dev/null +++ b/frontend/src/i18n/lv.json @@ -0,0 +1,309 @@ +{ + "buttons": { + "cancel": "Atcelt", + "clear": "Tīrs", + "close": "Aizvērt", + "continue": "Turpināt", + "copy": "Kopēt", + "copyFile": "Kopēt failu", + "copyToClipboard": "Kopēt starpliktuvē", + "copyDownloadLinkToClipboard": "Kopēt lejupielādes saiti starpliktuvē", + "create": "Izveidot", + "delete": "Dzēst", + "download": "Lejupielādēt", + "file": "Fails", + "folder": "Mape", + "fullScreen": "Pārslēgt pilnekrāna režīmu", + "hideDotfiles": "Slēpt punktfailus", + "info": "Informācija", + "more": "Vairāk", + "move": "Pārvietot", + "moveFile": "Pārvietot failu", + "new": "Jauns", + "next": "Nākamais", + "ok": "Labi", + "permalink": "Iegūt pastāvīgo saiti", + "previous": "Iepriekšējais", + "preview": "Priekšskatījums", + "publish": "Publicēt", + "rename": "Pārdēvēt", + "replace": "Aizstāt", + "reportIssue": "Ziņot par problēmu", + "resumeTransfer": "Resume previous transfer", + "resumeTransferTooltip": "Skip all conflicting files, except the ones that are smaller on the server as we suppose that their transfert has been interrupted.", + "save": "Saglabāt", + "schedule": "Grafiks", + "search": "Meklēt", + "select": "Izvēlieties", + "selectMultiple": "Izvēlieties vairākus", + "share": "Dalīties", + "shell": "Pārslēgt apvalku", + "submit": "Iesniegt", + "switchView": "Pārslēgt skatu", + "toggleSidebar": "Pārslēgt sānjoslu", + "update": "Atjaunināt", + "upload": "Augšupielādēt", + "openFile": "Atvērt failu", + "openDirect": "View raw", + "discardChanges": "Izmest", + "stopSearch": "Stop searching", + "saveChanges": "Saglabāt izmaiņas", + "editAsText": "Rediģēt kā tekstu", + "increaseFontSize": "Palieliniet fonta lielumu", + "decreaseFontSize": "Samaziniet fonta lielumu", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Lejupielādēt failu", + "downloadFolder": "Lejupielādēt mapi", + "downloadSelected": "Lejupielādēt atlasīto" + }, + "upload": { + "abortUpload": "Vai tiešām vēlaties pārtraukt?" + }, + "errors": { + "forbidden": "Jums nav atļaujas piekļūt šim.", + "internal": "Kaut kas tiešām nogāja greizi.", + "notFound": "Šo atrašanās vietu nevar sasniegt.", + "connection": "Ar serveri nevar sazināties." + }, + "files": { + "body": "Ķermenis", + "closePreview": "Aizvērt priekšskatījumu", + "files": "Faili", + "folders": "Mapes", + "home": "Sākums", + "lastModified": "Pēdējoreiz modificēts", + "loading": "Notiek ielāde...", + "lonely": "Šeit ir tukša vieta...", + "metadata": "Metadati", + "multipleSelectionEnabled": "Vairākas atlases ir iespējotas", + "name": "Vārds", + "size": "Izmērs", + "sortByLastModified": "Kārtot pēc pēdējās modifikācijas", + "sortByName": "Kārtot pēc nosaukuma", + "sortBySize": "Kārtot pēc izmēra", + "noPreview": "Šim failam nav pieejams priekšskatījums.", + "csvTooLarge": "CSV fails ir pārāk liels priekšskatīšanai (>5 MB). Lūdzu, lejupielādējiet to, lai skatītu", + "csvLoadFailed": "Neizdevās ielādēt CSV failu.", + "showingRows": "Rāda {count} rindu(as)", + "columnSeparator": "Kolonnu atdalītājs", + "csvSeparators": { + "comma": "Komats (,)", + "semicolon": "Semikols (;)", + "both": "Gan (,) gan (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "atlasiet failu vai direktoriju", + "ctrl": { + "click": "atlasīt vairākus failus vai direktorijus", + "f": "atver meklēšanu", + "s": "saglabājiet failu vai lejupielādējiet direktoriju, kurā atrodaties" + }, + "del": "dzēst atlasītos vienumus", + "doubleClick": "atvērt failu vai direktoriju", + "esc": "notīrīt atlasi un/vai aizvērt uzvedni", + "f1": "šo informāciju", + "f2": "pārdēvēt failu", + "help": "Palīdzība" + }, + "login": { + "createAnAccount": "Izveidot kontu", + "loginInstead": "Jau ir konts", + "password": "Parole", + "passwordConfirm": "Paroles apstiprināšana", + "passwordsDontMatch": "Paroles nesakrīt", + "signup": "Reģistrēšanās", + "submit": "Pieteikties", + "username": "Lietotājvārds", + "usernameTaken": "Lietotājvārds jau aizņemts", + "wrongCredentials": "Nepareizi akreditācijas dati", + "passwordTooShort": "Parolei jābūt vismaz {min} rakstzīmju garai", + "logout_reasons": { + "inactivity": "Jūs esat atteicies no sistēmas neaktivitātes dēļ." + } + }, + "permanent": "Pastāvīgs", + "prompts": { + "copy": "Kopēt", + "copyMessage": "Izvēlieties atrašanās vietu, uz kuru kopēt failus:", + "currentlyNavigating": "Pašlaik navigācija:", + "deleteMessageMultiple": "Vai tiešām vēlaties dzēst {count} failu(s)?", + "deleteMessageSingle": "Vai tiešām vēlaties dzēst šo failu/mapi?", + "deleteMessageShare": "Vai tiešām vēlaties dzēst šo koplietojumu({path})?", + "deleteUser": "Vai tiešām vēlaties dzēst šo lietotāju?", + "deleteTitle": "Dzēst failus", + "displayName": "Displeja nosaukums:", + "download": "Lejupielādēt failus", + "downloadMessage": "Izvēlieties formātu, kuru vēlaties lejupielādēt.", + "error": "Kaut kas nogāja greizi", + "fileInfo": "Informācija par failu", + "filesSelected": "{count} atlasīti faili", + "lastModified": "Pēdējās izmaiņas", + "move": "Pārvietot", + "moveMessage": "Izvēlieties jaunu mājvietu failam(iem)/mapei(ēm):", + "newArchetype": "Izveidojiet jaunu ierakstu, pamatojoties uz arhtipu. Jūsu fails tiks izveidots satura mapē.", + "newDir": "Jauna direktorija", + "newDirMessage": "Nosaukums savai jaunajai direktorijai.", + "newFile": "Jauns fails", + "newFileMessage": "Nosauciet savu jauno failu.", + "numberDirs": "Katalogu skaits", + "numberFiles": "Failu skaits", + "rename": "Pārdēvēt", + "renameMessage": "Ievietojiet jaunu nosaukumu", + "replace": "Aizstāt", + "replaceMessage": "Vienam no failiem, kurus mēģināt augšupielādēt, ir konfliktējošs nosaukums. Vai vēlaties izlaist šo failu un turpināt augšupielādi vai aizstāt esošo?\n", + "schedule": "Grafiks", + "scheduleMessage": "Izvēlieties datumu un laiku, lai ieplānotu šī ieraksta publicēšanu.", + "show": "Rādīt", + "size": "Izmērs", + "upload": "Augšupielādēt", + "uploadFiles": "Notiek {files} failu augšupielāde...", + "uploadMessage": "Atlasiet augšupielādes opciju.", + "optionalPassword": "Izvēles parole", + "resolution": "Izšķirtspēja", + "discardEditorChanges": "Vai tiešām vēlaties atmest veiktās izmaiņas?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Attēli", + "music": "Mūzika", + "pdf": "PDF", + "pressToSearch": "Nospiediet taustiņu Enter, lai meklētu...", + "search": "Meklē...", + "typeToSearch": "Ierakstiet, lai meklētu...", + "types": "Veidi", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace redaktora tēma", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "Izpildīt komandas", + "allowEdit": "Rediģēt, pārdēvēt un dzēst failus vai direktorijus", + "allowNew": "Izveidojiet jaunus failus un direktorijus", + "allowPublish": "Publicēt jaunus ierakstus un lapas", + "allowSignup": "Atļaut lietotājiem reģistrēties", + "hideLoginButton": "Paslēpt pieteikšanās pogu publiskajās lapās", + "avoidChanges": "(atstājiet tukšu, lai izvairītos no izmaiņām)", + "branding": "Zīmols", + "brandingDirectoryPath": "Zīmola direktorijas ceļš", + "brandingHelp": "Jūs varat pielāgot sava failu pārlūka instances izskatu un darbību, mainot tās nosaukumu, aizstājot logotipu, pievienojot pielāgotus stilus un pat atspējojot ārējās saites uz GitHub.\nLai iegūtu plašāku informāciju par pielāgotu zīmola veidošanu, lūdzu, skatiet {0}.", + "changePassword": "Mainīt paroli", + "commandRunner": "Komandu skrējējs", + "commandRunnerHelp": "Šeit varat iestatīt komandas, kas tiek izpildītas nosauktajos notikumos. Katrā rindā jāraksta pa vienai. Būs pieejami vides mainīgie {0} un {1}, kas ir {0} relatīvi pret {1}. Lai iegūtu plašāku informāciju par šo funkciju un pieejamajiem vides mainīgajiem, lūdzu, izlasiet {2}.", + "commandsUpdated": "Komandas atjauninātas!", + "createUserDir": "Automātiski izveidot lietotāja mājas direktoriju, pievienojot jaunu lietotāju", + "minimumPasswordLength": "Minimālais paroles garums", + "tusUploads": "Sadalītas augšupielādes", + "tusUploadsHelp": "Failu pārlūks atbalsta failu augšupielādi fragmentos, ļaujot izveidot efektīvu, uzticamu, atsākamu un fragmentos sadalītu failu augšupielādi pat neuzticamos tīklos.", + "tusUploadsChunkSize": "Norāda pieprasījuma maksimālo izmēru (mazākiem augšupielādes apjomiem tiks izmantota tieša augšupielāde). Varat ievadīt vienkāršu veselu skaitli, kas apzīmē baitu izmēru, vai virkni, piemēram, 10 MB, 1 GB utt.", + "tusUploadsRetryCount": "Atkārtotu mēģinājumu skaits, kas jāveic, ja fragmenta augšupielāde neizdodas.", + "userHomeBasePath": "Lietotāja mājas direktoriju bāzes ceļš", + "userScopeGenerationPlaceholder": "Darbības joma tiks ģenerēta automātiski", + "createUserHomeDirectory": "Izveidojiet lietotāja mājas direktoriju", + "customStylesheet": "Pielāgota stila lapa", + "defaultUserDescription": "Šie ir noklusējuma iestatījumi jaunajiem lietotājiem.", + "disableExternalLinks": "Atspējot ārējās saites (izņemot dokumentāciju)", + "disableUsedDiskPercentage": "Atspējot izmantotā diska procentuālās daļas grafiku", + "documentation": "dokumentācija", + "examples": "Piemēri", + "executeOnShell": "Izpildīt uz čaulas", + "executeOnShellDescription": "Pēc noklusējuma failu pārlūks izpilda komandas, tieši izsaucot to bināros failus. Ja vēlaties tās palaist čaulā (piemēram, Bash vai PowerShell), varat to definēt šeit ar nepieciešamajiem argumentiem un karodziņiem. Ja tas ir iestatīts, izpildītā komanda tiks pievienota kā arguments. Tas attiecas gan uz lietotāja komandām, gan notikumu piesaistes rīkiem.", + "globalRules": "Šis ir globāls atļaušanas un aizliegšanas noteikumu kopums. Tie attiecas uz katru lietotāju. Katra lietotāja iestatījumos varat definēt konkrētus noteikumus, lai tos ignorētu.", + "globalSettings": "Globālie iestatījumi", + "hideDotfiles": "Slēpt punktfailus", + "insertPath": "Ievietojiet ceļu", + "insertRegex": "Ievietojiet regex izteiksmi", + "instanceName": "Gadījuma nosaukums", + "language": "Valoda", + "lockPassword": "Neļaut lietotājam mainīt paroli", + "newPassword": "Jūsu jaunā parole", + "newPasswordConfirm": "Apstipriniet savu jauno paroli", + "newUser": "Jauns lietotājs", + "password": "Parole", + "passwordUpdated": "Parole atjaunināta!", + "path": "Ceļš", + "perm": { + "create": "Izveidojiet failus un direktorijus", + "delete": "Dzēst failus un direktorijus", + "download": "Lejupielādēt", + "execute": "Izpildīt komandas", + "modify": "Rediģēt failus", + "rename": "Pārdēvēt vai pārvietot failus un direktorijus", + "share": "Share files (require download permission)" + }, + "permissions": "Atļaujas", + "permissionsHelp": "Varat iestatīt lietotāju kā administratoru vai izvēlēties atļaujas individuāli. Ja atlasīsiet “Administrators”, visas pārējās opcijas tiks automātiski atzīmētas. Lietotāju pārvaldība joprojām ir administratora privilēģija.\n", + "profileSettings": "Profila iestatījumi", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "neļauj piekļūt jebkuram dotfile failam (piemēram, .git, .gitignore) katrā mapē.\n", + "ruleExample2": "bloķē piekļuvi failam ar nosaukumu Caddyfile darbības jomas saknē.", + "rules": "Noteikumi", + "rulesHelp": "Šeit varat definēt atļaušanas un aizliegšanas noteikumu kopu šim konkrētajam lietotājam. Bloķētie faili netiks rādīti sarakstos, un lietotājs tiem nevarēs piekļūt. Mēs atbalstām regulārās izteiksmes un ceļus attiecībā pret lietotāja darbības jomu.\n", + "scope": "Darbības joma", + "setDateFormat": "Iestatiet precīzu datuma formātu", + "settingsUpdated": "Iestatījumi atjaunināti!", + "shareDuration": "Kopīgošanas ilgums", + "shareManagement": "Kopīgošanas pārvaldība", + "shareDeleted": "Kopīgošana ir izdzēsta!", + "singleClick": "Failu un direktoriju atvēršanai izmantojiet vienus klikšķi", + "themes": { + "default": "Sistēmas noklusējums", + "dark": "Tumša", + "light": "Gaiša", + "title": "Tēma" + }, + "user": "Lietotājs", + "userCommands": "Komandas", + "userCommandsHelp": "Ar atstarpi atdalīts saraksts ar šim lietotājam pieejamajām komandām. Piemērs:\n", + "userCreated": "Lietotājs izveidots!", + "userDefaults": "Lietotāja noklusējuma iestatījumi", + "userDeleted": "Lietotājs izdzēsts!", + "userManagement": "Lietotāju pārvaldība", + "userUpdated": "Lietotājs atjaunināts!", + "username": "Lietotājvārds", + "users": "Lietotāji", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "diskUsed": "{used} of {total} used", + "help": "Palīdzība", + "hugoNew": "Hugo Jauns", + "login": "Pieteikties", + "logout": "Atteikties", + "myFiles": "Mani faili", + "newFile": "Jauns fails", + "newFolder": "Jauna mape", + "preview": "Priekšskatījums", + "settings": "Iestatījumi", + "signup": "Reģistrēties", + "siteSettings": "Vietnes iestatījumi" + }, + "success": { + "linkCopied": "Saite nokopēta!" + }, + "time": { + "days": "Dienas", + "hours": "Stundas", + "minutes": "Minūtes", + "seconds": "Sekundes", + "unit": "Laika vienība" + } +} diff --git a/frontend/src/i18n/nl-be.json b/frontend/src/i18n/nl-be.json index 6820245c..f9fb8fd8 100644 --- a/frontend/src/i18n/nl-be.json +++ b/frontend/src/i18n/nl-be.json @@ -1,15 +1,20 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Open shell", "cancel": "Annuleren", + "clear": "Wissen", "close": "Sluiten", + "continue": "Continue", "copy": "Kopiëren", "copyFile": "Bestand kopiëren", "copyToClipboard": "Kopiëren naar klembord", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", "create": "Aanmaken", "delete": "Verwijderen", "download": "Downloaden", + "file": "File", + "folder": "Folder", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Hide dotfiles", "info": "Info", "more": "Meer", "move": "Verplaatsen", @@ -17,37 +22,57 @@ "new": "Nieuw", "next": "Volgende", "ok": "OK", - "replace": "Vervangen", + "permalink": "Maak permanente link", "previous": "Vorige", + "preview": "Preview", + "publish": "Publiceren", "rename": "Hernoemen", + "replace": "Vervangen", "reportIssue": "Fout rapporteren", "save": "Opslaan", + "schedule": "Plannen", "search": "Zoeken", "select": "Selecteren", - "share": "Delen", - "publish": "Publiceren", "selectMultiple": "Meerdere selecteren", - "schedule": "Plannen", + "share": "Delen", + "shell": "Open shell", + "submit": "Submit", "switchView": "Beeld wisselen", "toggleSidebar": "Zijbalk tonen", "update": "Updaten", "upload": "Uploaden", - "permalink": "Maak permanente link" + "openFile": "Open file", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Link gekopieerd!" + "download": { + "downloadFile": "Bestand downloaden", + "downloadFolder": "Map downloaden", + "downloadSelected": "Download Selected" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { "forbidden": "U hebt geen rechten om hier toegang toe te krijgen.", "internal": "Er ging iets mis.", - "notFound": "Deze locatie kan niet worden bereikt." + "notFound": "Deze locatie kan niet worden bereikt.", + "connection": "The server can't be reached." }, "files": { - "folders": "Mappen", - "files": "Bestanden", "body": "Body", - "clear": "Wissen", "closePreview": "Voorvertoon sluiten", + "files": "Bestanden", + "folders": "Mappen", "home": "Home", "lastModified": "Laatst bewerkt", "loading": "Laden...", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Meerdere items selecteren ingeschakeld", "name": "Naam", "size": "Grootte", + "sortByLastModified": "Sorteren op laatst bewerkt", "sortByName": "Sorteren op naam", "sortBySize": "Sorteren op grootte", - "sortByLastModified": "Sorteren op laatst bewerkt" + "noPreview": "Preview is not available for this file.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "selecteer bestand of map", @@ -75,23 +111,30 @@ "help": "Help" }, "login": { - "password": "Wachtwoord", - "passwordConfirm": "Wachtwoordbevestiging ", - "submit": "Log in", "createAnAccount": "Account aanmaken", "loginInstead": "Heeft al een account", + "password": "Wachtwoord", + "passwordConfirm": "Wachtwoordbevestiging ", "passwordsDontMatch": "Wachtwoorden komen niet overeen", - "usernameTaken": "Gebruikersnaam reeds in gebruik", "signup": "Registeren", + "submit": "Log in", "username": "Gebruikersnaam", - "wrongCredentials": "Verkeerde inloggegevens" + "usernameTaken": "Gebruikersnaam reeds in gebruik", + "wrongCredentials": "Verkeerde inloggegevens", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanent", "prompts": { "copy": "Kopiëren", "copyMessage": "Kies een locatie om uw bestanden te kopiëren: ", "currentlyNavigating": "Momenteel zoeken op: ", "deleteMessageMultiple": "Weet u zeker dat u {count} bestand(en) wil verwijderen?", "deleteMessageSingle": "Weet u zeker dat u dit bestand/map wil verwijderen?", + "deleteMessageShare": "Are you sure you wish to delete this share({path})?", + "deleteUser": "Are you sure you want to delete this user?", "deleteTitle": "Bestanden verwijderen", "displayName": "Weergavenaam: ", "download": "Bestanden downloaden", @@ -102,43 +145,91 @@ "lastModified": "Laatst Bewerkt", "move": "Verplaatsen", "moveMessage": "Kies een nieuwe locatie voor je bestand(en)/map(pen)", + "newArchetype": "Maak een nieuw bericht op basis van een archetype. Uw bestand wordt aangemaakt in de inhoudsmap.", "newDir": "Nieuwe map", "newDirMessage": "Schrijf de naam van de nieuwe map", "newFile": "Nieuw bestand", "newFileMessage": "Schrijf de naam van het nieuwe bestand", "numberDirs": "Aantal mappen", "numberFiles": "Aantal bestanden", - "replace": "Vervangen", - "replaceMessage": "Een van de bestanden die u probeert te uploaden, geeft conflicten i.v.m. de naamgeving. Wilt u de bestaande bestanden vervangen?\n", "rename": "Hernoemen", "renameMessage": "Voer een nieuwe naam in voor", - "show": "Tonen", - "size": "Grootte", + "replace": "Vervangen", + "replaceMessage": "Een van de bestanden die u probeert te uploaden, geeft conflicten i.v.m. de naamgeving. Wilt u de bestaande bestanden vervangen?\n", "schedule": "Plannen", "scheduleMessage": "Kies een datum en tijd om de publicatie van dit bericht in te plannen.", - "newArchetype": "Maak een nieuw bericht op basis van een archetype. Uw bestand wordt aangemaakt in de inhoudsmap." + "show": "Tonen", + "size": "Grootte", + "upload": "Upload", + "uploadFiles": "Uploading {files} files...", + "uploadMessage": "Select an option to upload.", + "optionalPassword": "Optional password", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Afbeeldingen", + "music": "Muziek", + "pdf": "PDF", + "pressToSearch": "Druk op enter om te zoeken...", + "search": "Zoeken...", + "typeToSearch": "Typ om te zoeken...", + "types": "Types", + "video": "Video" }, "settings": { - "instanceName": "Instantienaam", - "brandingDirectoryPath": "Branding directory path", - "documentation": "Documentatie", - "branding": "Branding", - "disableExternalLinks": "Schakel externe links uit (behalve documentatie)", - "brandingHelp": "U kunt de looks en feels hoe File Browser wordt getoond wijzigen door de naam aan te passen, het logo te vervangen, een aangepast stylesheet toe te voegen en/of de externe links naar GitHub uit te schakelen.\nVoor meer informatie over custom branding, bekijk {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Commando's uitvoeren", "allowEdit": "Bestanden of mappen aanpassen, hernoemen of verwijderen", "allowNew": "Nieuwe bestanden of mappen aanmaken", "allowPublish": "Publiceer nieuwe berichten en pagina's", + "allowSignup": "Sta gebruikers toe om zich te registreren", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(laat leeg om wijzigingen te voorkomen)", + "branding": "Branding", + "brandingDirectoryPath": "Branding directory path", + "brandingHelp": "U kunt de looks en feels hoe File Browser wordt getoond wijzigen door de naam aan te passen, het logo te vervangen, een aangepast stylesheet toe te voegen en/of de externe links naar GitHub uit te schakelen.\nVoor meer informatie over custom branding, bekijk {0}.", "changePassword": "Wijzig Wachtwoord", "commandRunner": "Command runner", "commandRunnerHelp": "Hier kunt u opdrachten instellen die worden uitgevoerd in de benoemde gebeurtenissen. U moet er één per regel schrijven. De omgevingsvariabelen {0} en {1} zijn beschikbaar, zijnde {0} relatief ten opzichte van {1}. Raadpleeg {2} voor meer informatie over deze functie en de beschikbare omgevingsvariabelen.", "commandsUpdated": "Commando's bijgewerkt!", + "createUserDir": "Maak automatisch een thuismap aan wanneer een nieuwe gebruiker wordt aangemaakt", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Base path for user home directories", + "userScopeGenerationPlaceholder": "The scope will be auto generated", + "createUserHomeDirectory": "Create user home directory", "customStylesheet": "Aangepast Stylesheet", + "defaultUserDescription": "Dit zijn de standaardinstellingen voor nieuwe gebruikers.", + "disableExternalLinks": "Schakel externe links uit (behalve documentatie)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "Documentatie", "examples": "Voorbeelden", + "executeOnShell": "Uitvoeren in de shell", + "executeOnShellDescription": "File Browser voert de opdrachten standaard uit door hun binaire bestanden rechtstreeks op te roepen. Als u ze in plaats daarvan wilt uitvoeren op een shell (zoals Bash of PowerShell), kunt u dit hier definiëren met de vereiste argumenten en vlaggen. Indien ingesteld, wordt de opdracht die u uitvoert, toegevoegd als een argument. Dit is van toepassing op zowel gebruikersopdrachten als event hooks.", + "globalRules": "Dit is een algemene reeks toegestane en niet toegestane regels. Ze zijn van toepassing op elke gebruiker. U kunt specifieke regels voor de instellingen van elke gebruiker definiëren om deze te overschrijven.", "globalSettings": "Algemene Instellingen", + "hideDotfiles": "Hide dotfiles", + "insertPath": "Voeg een pad toe", + "insertRegex": "Regex expressie invoeren", + "instanceName": "Instantienaam", "language": "Taal", "lockPassword": "Voorkom dat de gebruiker het wachtwoord wijzigt", "newPassword": "Uw nieuw wachtwoord", @@ -146,91 +237,70 @@ "newUser": "Nieuwe gebruiker", "password": "Wachtwoord", "passwordUpdated": "Wachtwoord bijgewerkt!", + "path": "Path", + "perm": { + "create": "Bestanden en mappen aanmaken", + "delete": "Bestanden en mappen verwijderen", + "download": "Downloaden", + "execute": "Commando's uitvoeren", + "modify": "Bestanden aanpassen", + "rename": "Bestanden of mappen hernoemen of verplaatsen", + "share": "Bestanden delen" + }, "permissions": "Permissies", "permissionsHelp": "U kunt de gebruiker instellen als beheerder of de machtigingen afzonderlijk kiezen. Als u \"Beheerder\" selecteert, worden alle andere opties automatisch gecontroleerd. Het beheer van gebruikers blijft een privilege van een beheerder.\n", "profileSettings": "Profielinstellingen", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "voorkomt de toegang tot elk puntbestand (zoals .git, .gitignore) in elke map.\n", "ruleExample2": "blokkeert de toegang tot het bestand met de naam Caddyfile in de hoofdmap van het bereik.", "rules": "Regels", "rulesHelp": "Hier kunt u een reeks regels voor toestaan en niet toestaan voor deze specifieke gebruiker definiëren. De geblokkeerde bestanden verschijnen niet in de lijsten en zijn niet toegankelijk voor de gebruiker. We ondersteunen regex en paden relatief ten opzichte van het bereik van gebruikers. \n", "scope": "Scope", + "setDateFormat": "Set exact date format", "settingsUpdated": "Instellingen bijgewerkt!", + "shareDuration": "Share Duration", + "shareManagement": "Share Management", + "shareDeleted": "Share deleted!", + "singleClick": "Use single clicks to open files and directories", + "themes": { + "default": "System default", + "dark": "Dark", + "light": "Light", + "title": "Theme" + }, "user": "Gebruiker", "userCommands": "Commando's", "userCommandsHelp": "Een lijst met beschikbare commando's voor de gebruiker gescheiden door spaties. Voorbeeld: \n", "userCreated": "Gebruiker aangemaakt!", + "userDefaults": "Standaardinstellingen gebruiker", "userDeleted": "Gebruiker verwijderd!", "userManagement": "Gebruikersbeheer", + "userUpdated": "Gebruiker bijgewerkt!", "username": "Gebruikersnaam", "users": "Gebruikers", - "globalRules": "Dit is een algemene reeks toegestane en niet toegestane regels. Ze zijn van toepassing op elke gebruiker. U kunt specifieke regels voor de instellingen van elke gebruiker definiëren om deze te overschrijven.", - "allowSignup": "Sta gebruikers toe om zich te registreren", - "createUserDir": "Maak automatisch een thuismap aan wanneer een nieuwe gebruiker wordt aangemaakt", - "insertRegex": "Regex expressie invoeren", - "insertPath": "Voeg een pad toe", - "userUpdated": "Gebruiker bijgewerkt!", - "userDefaults": "Standaardinstellingen gebruiker", - "defaultUserDescription": "Dit zijn de standaardinstellingen voor nieuwe gebruikers.", - "executeOnShell": "Uitvoeren in de shell", - "executeOnShellDescription": "File Browser voert de opdrachten standaard uit door hun binaire bestanden rechtstreeks op te roepen. Als u ze in plaats daarvan wilt uitvoeren op een shell (zoals Bash of PowerShell), kunt u dit hier definiëren met de vereiste argumenten en vlaggen. Indien ingesteld, wordt de opdracht die u uitvoert, toegevoegd als een argument. Dit is van toepassing op zowel gebruikersopdrachten als event hooks.", - "perm": { - "create": "Bestanden en mappen aanmaken", - "delete": "Bestanden en mappen verwijderen", - "download": "Downloaden", - "modify": "Bestanden aanpassen", - "execute": "Commando's uitvoeren", - "rename": "Bestanden of mappen hernoemen of verplaatsen", - "share": "Bestanden delen" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Help", + "hugoNew": "Hugo nieuw", "login": "Log in", - "signup": "Registeren", "logout": "Uitloggen", "myFiles": "Mijn bestanden", "newFile": "Nieuw bestand", "newFolder": "Nieuwe map", + "preview": "Voorbeeld", "settings": "Instellingen", - "siteSettings": "Site-instellingen", - "hugoNew": "Hugo nieuw", - "preview": "Voorbeeld" + "signup": "Registeren", + "siteSettings": "Site-instellingen" }, - "search": { - "images": "Afbeeldingen", - "music": "Muziek", - "pdf": "PDF", - "types": "Types", - "video": "Video", - "search": "Zoeken...", - "typeToSearch": "Typ om te zoeken...", - "pressToSearch": "Druk op enter om te zoeken..." - }, - "languages": { - "ar": "Arabisch", - "en": "Engels", - "it": "Italiaans", - "fr": "Frans", - "pt": "Portugees", - "ptBR": "Portugees (Brazilië)", - "ja": "Japans", - "zhCN": "Chinees (vereenvoudigd)", - "zhTW": "Chinees (traditioneel)", - "es": "Spaans", - "de": "Duits", - "ru": "Russisch", - "pl": "Pools", - "ko": "Koreaans" + "success": { + "linkCopied": "Link gekopieerd!" }, "time": { - "unit": "Tijdseenheid", - "seconds": "Seconden", - "minutes": "Minuten", + "days": "Dagen", "hours": "Uren", - "days": "Dagen" - }, - "download": { - "downloadFile": "Bestand downloaden", - "downloadFolder": "Map downloaden" + "minutes": "Minuten", + "seconds": "Seconden", + "unit": "Tijdseenheid" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/nl.json b/frontend/src/i18n/nl.json new file mode 100644 index 00000000..1ee9f9e9 --- /dev/null +++ b/frontend/src/i18n/nl.json @@ -0,0 +1,312 @@ +{ + "buttons": { + "cancel": "Annuleren", + "clear": "Wissen", + "close": "Sluiten", + "continue": "Doorgaan", + "copy": "Kopiëren", + "copyFile": "Bestand kopiëren", + "copyToClipboard": "Kopiëren naar klembord", + "copyDownloadLinkToClipboard": "Download-link kopiëren naar klembord", + "create": "Aanmaken", + "delete": "Verwijderen", + "download": "Downloaden", + "file": "Bestand", + "folder": "Map", + "fullScreen": "Volledig scherm wisselen", + "hideDotfiles": "dot-bestanden verbergen", + "info": "Info", + "more": "Meer", + "move": "Verplaatsen", + "moveFile": "Bestand verplaatsen", + "new": "Nieuw", + "next": "Volgende", + "ok": "OK", + "permalink": "Permanente link verkrijgen", + "previous": "Vorige", + "preview": "Voorbeeld", + "publish": "Publiceren", + "rename": "Hernoemen", + "replace": "Vervangen", + "reportIssue": "Probleem melden", + "resumeTransfer": "Vorige overdracht hervatten", + "resumeTransferTooltip": "Alle conflicterende bestanden overslaan, behalve de bestanden die kleiner zijn op de server, omdat we veronderstellen dat hun overdracht is onderbroken.", + "save": "Opslaan", + "schedule": "Plannen", + "search": "Zoeken", + "select": "Selecteren", + "selectMultiple": "Meervoudige selectie", + "share": "Delen", + "shell": "Opdrachtvenster wisselen", + "submit": "Indienen", + "switchView": "Weergave wisselen", + "toggleSidebar": "Zijbalk wisselen", + "update": "Bijwerken", + "upload": "Uploaden", + "openFile": "Bestand openen", + "openDirect": "Raw weergeven", + "discardChanges": "Weggooien", + "stopSearch": "Stoppen met zoeken", + "saveChanges": "Wijzigingen opslaan", + "editAsText": "Als tekst bewerken", + "increaseFontSize": "Lettertype vergroten", + "decreaseFontSize": "Lettertype verkleinen", + "overrideAll": "Alle bestanden in doelmap vervangen", + "skipAll": "Alle conflicterende bestanden overslaan", + "renameAll": "Alle bestanden hernoemen (een kopie maken)", + "singleDecision": "Voor elk conflicterend bestand besluiten" + }, + "download": { + "downloadFile": "Bestand downloaden", + "downloadFolder": "Map downloaden", + "downloadSelected": "Selectie downloaden" + }, + "upload": { + "abortUpload": "Weet u zeker dat u wilt afbreken?" + }, + "errors": { + "forbidden": "U hebt hier geen toegangsrechten.", + "internal": "Er ging iets mis.", + "notFound": "Deze locatie kan niet worden bereikt.", + "connection": "De server kan niet worden bereikt." + }, + "files": { + "body": "Inoud", + "closePreview": "Voorbeeld sluiten", + "files": "Bestanden", + "folders": "Mappen", + "home": "Thuis", + "lastModified": "Laatst aangepast", + "loading": "Laden...", + "lonely": "Het is hier wat leeg...", + "metadata": "Metagegevens", + "multipleSelectionEnabled": "Meervoudige selectie ingeschakeld", + "name": "Naam", + "size": "Grootte", + "sortByLastModified": "Sorteren op laatst aangepast", + "sortByName": "Sorteren op naam", + "sortBySize": "Sorteren op grootte", + "noPreview": "Geen voorbeeld beschikbaar voor dit bestand.", + "csvTooLarge": "CSV-bestand is te groot voor voorbeeld (>5MB). Download het om het te bekijken.", + "csvLoadFailed": "Laden van CSV-bestand is mislukt.", + "showingRows": "{count} rij(en) weergeven", + "columnSeparator": "Kolom-scheidingsteken", + "csvSeparators": { + "comma": "Komma (,)", + "semicolon": "Puntkomma (;)", + "both": "Beide (,) en (;)" + }, + "fileEncoding": "Bestandscodering" + }, + "help": { + "click": "selecteer bestand of map", + "ctrl": { + "click": "selecteer meerdere bestanden of mappen", + "f": "open zoekopdracht", + "s": "sla een bestand op of download de huidige map" + }, + "del": "verwijder geselecteerde items", + "doubleClick": "open een bestand of map", + "esc": "wis de selectie en/of sluit het opdrachtvenster", + "f1": "deze informatie", + "f2": "hernoem bestand", + "help": "Hulp" + }, + "login": { + "createAnAccount": "Account aanmaken", + "loginInstead": "Heeft al een account", + "password": "Wachtwoord", + "passwordConfirm": "Wachtwoord bevestigen", + "passwordsDontMatch": "Wachtwoorden komen niet overeen", + "signup": "Registeren", + "submit": "Inloggen", + "username": "Gebruikersnaam", + "usernameTaken": "Gebruikersnaam reeds in gebruik", + "wrongCredentials": "Inloggegevens zijn incorrect", + "passwordTooShort": "Wachtwoord moet minstens {min} tekens bevatten", + "logout_reasons": { + "inactivity": "U bent uitgelogd vanwege inactiviteit." + } + }, + "permanent": "Permanent", + "prompts": { + "copy": "Kopiëren", + "copyMessage": "Kies een locatie om uw bestanden te kopiëren:", + "currentlyNavigating": "Navigeren op:", + "deleteMessageMultiple": "Weet u zeker dat u {count} bestand(en) wilt verwijderen?", + "deleteMessageSingle": "Weet u zeker dat u dit bestand/deze map wilt verwijderen?", + "deleteMessageShare": "Weet u zeker dat u deze gedeelde map ({path}) wilt verwijderen?", + "deleteUser": "Weet u zeker dat u deze gebruiker wilt verwijderen?", + "deleteTitle": "Bestanden verwijderen", + "displayName": "Weergavenaam:", + "download": "Bestanden downloaden", + "downloadMessage": "Kies het formaat dat u wilt downloaden.", + "error": "Er ging iets fout", + "fileInfo": "Bestandsinformatie", + "filesSelected": "{count} geselecteerde bestanden.", + "lastModified": "Laatst aangepast", + "move": "Verplaatsen", + "moveMessage": "Kies een nieuw Thuis voor uw bestand(en)/map(pen):", + "newArchetype": "Maak een nieuw bericht op basis van een archetype. Uw bestand wordt aangemaakt in de inhoudsmap.", + "newDir": "Nieuwe map", + "newDirMessage": "Voer een naam in voor de nieuwe map.", + "newFile": "Nieuw bestand", + "newFileMessage": "Voer een naam in voor het nieuwe bestand.", + "numberDirs": "Aantal mappen", + "numberFiles": "Aantal bestanden", + "rename": "Hernoemen", + "renameMessage": "Voer een nieuwe naam in voor", + "replace": "Vervangen", + "replaceMessage": "Een van de bestanden die u probeert te uploaden, geeft conflicten i.v.m. de naamgeving. Wilt u de bestaande bestanden vervangen?\n", + "schedule": "Plannen", + "scheduleMessage": "Kies een datum en tijd om de publicatie van dit bericht in te plannen.", + "show": "Weergeven", + "size": "Grootte", + "upload": "Uploaden", + "uploadFiles": "{files} bestanden uploaden...", + "uploadMessage": "Kies een optie bij de upload.", + "optionalPassword": "Optioneel wachtwoord", + "resolution": "Resolutie", + "discardEditorChanges": "Weet u zeker dat u de door u aangebrachte wijzigingen wilt weggooien?", + "replaceOrSkip": "Bestanden vervangen of overslaan", + "resolveConflict": "Welke bestanden wilt u behouden?", + "singleConflictResolve": "Als u beide versies selecteert, wordt er een nummer toegevoegd aan de naam van het gekopieerde bestand.", + "fastConflictResolve": "De doelmap daar bevat {count} bestanden met dezelfde naam.", + "uploadingFiles": "Bestanden uploaden", + "filesInOrigin": "Bestanden in origineel", + "filesInDest": "Bestanden in bestemming", + "override": "Overschrijven", + "skip": "Overslaan", + "forbiddenError": "Verboden Fout", + "currentPassword": "Uw wachtwoord", + "currentPasswordMessage": "Voer uw wachtwoord in om deze actie te valideren." + }, + "search": { + "images": "Afbeeldingen", + "music": "Muziek", + "pdf": "PDF", + "pressToSearch": "Druk op enter om te zoeken...", + "search": "Zoeken...", + "typeToSearch": "Typ om te zoeken...", + "types": "Types", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor-thema", + "admin": "Admin", + "administrator": "Beheerder", + "allowCommands": "Opdrachten uitvoeren", + "allowEdit": "Bestanden of mappen bewerken, hernoemen of verwijderen", + "allowNew": "Nieuwe bestanden of mappen aanmaken", + "allowPublish": "Nieuwe berichten en pagina's publiceren", + "allowSignup": "Gebruikers toestaan om zich te registreren", + "hideLoginButton": "De inlogknop verbergen van openbare pagina's", + "avoidChanges": "(leeg laten om wijzigingen te voorkomen)", + "branding": "Branding", + "brandingDirectoryPath": "Pad naar map met Branding", + "brandingHelp": "U kunt het uiterlijk van uw File Browser aanpassen door de naam te wijzigen, het logo te vervangen, aangepaste stijlen toe te voegen en zelfs externe links naar GitHub uit te schakelen.\nVoor meer informatie over custom branding, bekijk {0}.", + "changePassword": "Wachtwoord wijzigen", + "commandRunner": "Opdracht uitvoeren", + "commandRunnerHelp": "Hier kunt u opdrachten instellen die worden uitgevoerd in de benoemde gebeurtenissen. Noteer één opdracht per regel. De omgevingsvariabelen {0} en {1} zijn beschikbaar, waarbij {0} relatief is ten opzichte van {1}. Raadpleeg {2} voor meer informatie over deze functie en de beschikbare omgevingsvariabelen.", + "commandsUpdated": "Opdrachten bijgewerkt!", + "createUserDir": "Maak bij het aanmaken van een nieuwe gebruiker automatisch een thuismap aan", + "minimumPasswordLength": "Minimale wachtwoordlengte", + "tusUploads": "Uploads in brokken", + "tusUploadsHelp": "File Browser ondersteunt bestandsuploads in brokken, waardoor efficiënte, betrouwbare, hervatbare bestandsuploads kunnen worden verricht, zelfs over onbetrouwbare netwerken.", + "tusUploadsChunkSize": "Geeft de maximale grootte van een verzoek aan (directe uploads worden gebruikt voor kleinere uploads). U kunt een geheel getal invoeren dat de bytegrootte aangeeft, of een tekenreeks zoals 10MB, 1GB enz.", + "tusUploadsRetryCount": "Aantal nieuwe pogingen om uit te voeren als een deel niet kan worden geüpload.", + "userHomeBasePath": "Basispad voor Thuismappen van de gebruikers", + "userScopeGenerationPlaceholder": "Het bereik wordt automatisch gegenereeerd", + "createUserHomeDirectory": "Thuismap voor de gebruiker aanmaken", + "customStylesheet": "Aangepaste stylesheet", + "defaultUserDescription": "Dit zijn de standaardinstellingen voor nieuwe gebruikers.", + "disableExternalLinks": "Externe links uitschakelen (behalve documentatie)", + "disableUsedDiskPercentage": "Grafiek van gebruikte schijfruimte uitschakelen", + "documentation": "documentatie", + "examples": "Voorbeelden", + "executeOnShell": "Uitvoeren in opdrachtvenster", + "executeOnShellDescription": "File Browser voert de opdrachten standaard uit door het rechtstreeks oproepen van hun hun binaire bestanden. Als u ze in plaats daarvan wilt uitvoeren in een opdrachtvenster (zoals Bash of PowerShell), kunt u dit hier definiëren met de vereiste argumenten en vlaggen. Zo wordt de opdracht die u uitvoert, toegevoegd als een argument. Dit is van toepassing op zowel gebruikersopdrachten als event-hooks.", + "globalRules": "Dit is een algemene reeks toestaan/niet toestaan-regels welke van toepassing zijn op alle gebruikers. U kunt voor elke gebruiker specifieke regels definiëren om deze te overschrijven.", + "globalSettings": "Algemene instellingen", + "hideDotfiles": "dot-bestanden verbergen", + "insertPath": "Pad invoegen", + "insertRegex": "Regex-expressie invoegen", + "instanceName": "Naam van de instantie", + "language": "Taal", + "lockPassword": "Voorkomen dat de gebruiker het wachtwoord wijzigt", + "newPassword": "Uw nieuwe wachtwoord", + "newPasswordConfirm": "Uw nieuwe wachtwoord bevestigen", + "newUser": "Nieuwe gebruiker", + "password": "Wachtwoord", + "passwordUpdated": "Wachtwoord bijgewerkt!", + "path": "Pad", + "perm": { + "create": "Bestanden en mappen aanmaken", + "delete": "Bestanden en mappen verwijderen", + "download": "Downloaden", + "execute": "Opdrachten uitvoeren", + "modify": "Bestanden bewerken", + "rename": "Bestanden of mappen hernoemen of verplaatsen", + "share": "Bestanden delen (download toestemming vereisen)" + }, + "permissions": "Machtigingen", + "permissionsHelp": " kunt de gebruiker instellen als beheerder of de machtigingen afzonderlijk kiezen. Als u \"Beheerder\" selecteert, worden alle overige opties automatisch ingeschakeld. Het beheer van gebruikers blijft een privilege van een beheerder.\n", + "profileSettings": "Profielinstellingen", + "redirectAfterCopyMove": "Doorverwijzen naar bestemming na kopiëren/verplaatsen", + "ruleExample1": "voorkomt de toegang tot dot-bestanden (zoals .git, .gitignore) in elke map.\n", + "ruleExample2": "blokkeert de toegang tot het bestand met de naam Caddyfile in de hoofdmap van het bereik.", + "rules": "Regels", + "rulesHelp": "Hier kunt u voor deze specifieke gebruiker een reeks toestaan/niet toestaan-regels definiëren. De geblokkeerde bestanden verschijnen niet in de lijsten en zijn niet toegankelijk voor de gebruiker. Regex wordt ondersteund en paden zijn relatief ten opzichte van het bereik van gebruikers.\n", + "scope": "Bereik", + "setDateFormat": "Exacte datumformaat instellen", + "settingsUpdated": "Instellingen bijgewerkt!", + "shareDuration": "Duur van het delen", + "shareManagement": "Beheer van gedeelde mappen en bestanden", + "shareDeleted": "Delen opheffen!", + "singleClick": "Bestanden en mappen met een enkele klik openen", + "sunsetBody": "Dit project wordt afgebouwd. Het wordt gearchiveerd op 01-09-2026, waarna er geen releases, bugfixes of beveiligingsoplossingen meer zullen worden uitgegeven. Bestaande releases en Docker-afbeeldingen blijven online. Stel deze instantie niet rechtstreeks bloot aan internet zonder authenticatie ervoor.", + "sunsetLink": "Lees de projectstatus, bekende niet-gefixeerde beveiligingsproblemen en verhardingsrichtlijnen", + "sunsetTitle": "File Browser wordt gearchiveerd", + "themes": { + "default": "Systeem standaard", + "dark": "Donker", + "light": "Licht", + "title": "Thema" + }, + "user": "Gebruiker", + "userCommands": "Opdrachten", + "userCommandsHelp": "Een lijst met beschikbare opdrachten voor de gebruiker gescheiden door spaties. Voorbeeld:\n", + "userCreated": "Gebruiker aangemaakt!", + "userDefaults": "Standaardinstellingen van gebruiker", + "userDeleted": "Gebruiker verwijderd!", + "userManagement": "Gebruikers beheren", + "userUpdated": "Gebruiker bijgewerkt!", + "username": "Gebruikersnaam", + "users": "Gebruikers", + "currentPassword": "Uw huidige wachtwoord" + }, + "sidebar": { + "diskUsed": "{used} van {total} gebruikt", + "help": "Hulp", + "hugoNew": "Hugo Nieuw", + "login": "Inloggen", + "logout": "Uitloggen", + "myFiles": "Mijn bestanden", + "newFile": "Nieuw bestand", + "newFolder": "Nieuwe map", + "preview": "Voorbeeld", + "settings": "Instellingen", + "signup": "Registeren", + "siteSettings": "Site-instellingen" + }, + "success": { + "linkCopied": "Link gekopieerd!" + }, + "time": { + "days": "Dagen", + "hours": "Uren", + "minutes": "Minuten", + "seconds": "Seconden", + "unit": "Tijdseenheid" + } +} diff --git a/frontend/src/i18n/no.json b/frontend/src/i18n/no.json new file mode 100644 index 00000000..cd772739 --- /dev/null +++ b/frontend/src/i18n/no.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Avbryt", + "clear": "Fjern", + "close": "Lukk", + "continue": "Fortsett", + "copy": "Kopier", + "copyFile": "Fortsett", + "copyToClipboard": "Kopier til utklippstavlen", + "copyDownloadLinkToClipboard": "Kopier nedlastingslenken til utklippstavlen", + "create": "Opprett", + "delete": "Slett", + "download": "Nedlast", + "file": "Fil", + "folder": "Mappe", + "fullScreen": "Skru på fullskjerm", + "hideDotfiles": "Skjul punktfiler", + "info": "Info", + "more": "Meir", + "move": "Flytt", + "moveFile": "Flytt Fil", + "new": "Ny", + "next": "Neste", + "ok": "Ok", + "permalink": "Få permanent link", + "previous": "Tidligere", + "preview": "Forhåndsvisning", + "publish": "Publiser", + "rename": "Gi nytt navn", + "replace": "Bytt ut\n ", + "reportIssue": "Rapporter problem", + "save": "Lagre", + "schedule": "Planlegg ", + "search": "Søk", + "select": "Velg", + "selectMultiple": "Velg Fleire", + "share": "Del", + "shell": "Skru på shell", + "submit": "Send", + "switchView": "Skift visning", + "toggleSidebar": "Skru på sidebar", + "update": "Opptater", + "upload": "Last opp", + "openFile": "Open file", + "openDirect": "View raw", + "discardChanges": "Slett", + "stopSearch": "Stop searching", + "saveChanges": "Lagre Endringane ", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Nedlast filen", + "downloadFolder": "Nedlast mappen", + "downloadSelected": "Nedlast merket" + }, + "upload": { + "abortUpload": "Er du sikker på at du ønsker å avbryte?" + }, + "errors": { + "forbidden": "Du har ikkje tilgang til denne filen.", + "internal": "Noko gikk virkelig galt.", + "notFound": "Denne lokasjonen kan ikkje bli nådd.", + "connection": "Denne serveren kan ikkje nås." + }, + "files": { + "body": "Kropp", + "closePreview": "Lukk forhandsvisning", + "files": "Filer", + "folders": "Mappe", + "home": "Hjem", + "lastModified": "Sist endret", + "loading": "Laster....", + "lonely": "Det føltes ensomt her...", + "metadata": "Metadata", + "multipleSelectionEnabled": "Fleire seksjoner på", + "name": "Navn", + "size": "Størrelse", + "sortByLastModified": "Sorter etter sist endret", + "sortByName": "Sorter etter navn", + "sortBySize": "Sorter etter størrelse", + "noPreview": "Forhåndsvisning er ikkje tilgjengeleg for denne filen.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "velg fil eller katalog", + "ctrl": { + "click": "velg flere filer eller mapper", + "f": "opner søk", + "s": "lagr en fil eller last ned direktoratet der du er" + }, + "del": "slett markert filer", + "doubleClick": "open en fil eller direktorat", + "esc": "visk av seleksjon og/eller lukk dette varselet", + "f1": "denne informasjonen", + "f2": "gi nytt navn til denne filen", + "help": "Hjelp" + }, + "login": { + "createAnAccount": "Opprett ein konto", + "loginInstead": "Du har allerede ein konto", + "password": "Passord", + "passwordConfirm": "Passordbekreftelse", + "passwordsDontMatch": "Passordene samsvarer ikkje", + "signup": "Registrer deg", + "submit": "Logg inn", + "username": "Brukernavn", + "usernameTaken": "Brukernavn er allerede i bruk", + "wrongCredentials": "Feil legitimasjon", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "Du har blitt logget ut på grunn av inaktivitet" + } + }, + "permanent": "Permanent", + "prompts": { + "copy": "Kopiere", + "copyMessage": "Velg hvor du vil kopiere filene dine:", + "currentlyNavigating": "Navigerer nå på:", + "deleteMessageMultiple": "Er du sikker på at du vil slette {count} fil(er)?", + "deleteMessageSingle": "Er du sikker på at du vil slette denne filen/mappen?", + "deleteMessageShare": "Er du sikker på at du vil slette denne delingen ({path})?", + "deleteUser": "Er du sikker at du vil slette denne brukeren?", + "deleteTitle": "Slett filer", + "displayName": "Vis Navn:", + "download": "Last ned filer", + "downloadMessage": "Velg kva format du ønsker å laste ned.", + "error": "Noko gikk galt.", + "fileInfo": "Fil informasjon", + "filesSelected": "{count} filer valgt.", + "lastModified": "Sist endret", + "move": "Flytt", + "moveMessage": "Velg nytt hjem for filen(e)/mappen(e)din:", + "newArchetype": "Opprett et nytt innlegg basert på en arketype. Filen din opprettes i innholdsmappen.", + "newDir": "Nytt Direktorat", + "newDirMessage": "Navn gi ditt nye direktorat", + "newFile": "Ny fil", + "newFileMessage": "Navn gi ditt nye fil", + "numberDirs": "Nummer av direktorat", + "numberFiles": "Nummer av filer", + "rename": "Gi nytt navn", + "renameMessage": "Sett inn nytt navn for", + "replace": "Bytt ut", + "replaceMessage": "En av filene du prøver å laste opp har et motstridende navn. Vil du hoppe over denne filen og fortsette opplastingen eller erstatte den eksisterende?\n", + "schedule": "Planlegg", + "scheduleMessage": "Velg en dato og et klokkeslett for å planlegge publiseringen av dette innlegget.", + "show": "Vis", + "size": "Størrelse", + "upload": "Last opp", + "uploadFiles": "Laster opp {filer} filer...", + "uploadMessage": "Velg et alternativ for opplasting.", + "optionalPassword": "Valgfritt passord", + "resolution": "Oppløysning", + "discardEditorChanges": "Er du sikker på at du vil forkaste endringene du har gjort?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Bilde", + "music": "Musikk", + "pdf": "PDF", + "pressToSearch": "Trykk enter for å søke...", + "search": "Søk...", + "typeToSearch": "Trykk for å søke...", + "types": "Typer", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "Utfør kommandoer", + "allowEdit": "Rediger, gi nytt navn til og slett filer eller mapper", + "allowNew": "Opprett nye filer og direktorater", + "allowPublish": "Publiser nye innlegg og sider", + "allowSignup": "Tilat brukere å registrere seg", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(la stå tomt for å unngå endringer)", + "branding": "Merkevarebygging", + "brandingDirectoryPath": "Bane for merkevarekatalog", + "brandingHelp": "Du kan tilpasse hvordan Filleser-instansen din ser ut og føles ved å endre navnet, erstatte logoen, legge til egendefinerte stiler og til og med deaktivere eksterne lenker til GitHub.\n\nFor mer informasjon om tilpasset merkevarebygging, se {0}.", + "changePassword": "Skift Passord", + "commandRunner": "Kommandoløper", + "commandRunnerHelp": "Her kan du angi kommandoer som skal utføres i de navngitte hendelsene. Du må skrive én per linje. Miljøvariablene {0} og {1} vil være tilgjengelige, siden de er {0} relative til {1}. For mer informasjon om denne funksjonen og de tilgjengelige miljøvariablene, vennligst les {2}.", + "commandsUpdated": "Komando opptatert!", + "createUserDir": "Opprett brukerens hjemmappe automatisk når du legger til en ny bruker", + "minimumPasswordLength": "Minimum passord lengde", + "tusUploads": "Klumpede opplastinger", + "tusUploadsHelp": "Filleseren støtter opplasting av delte filer, noe som gjør det mulig å lage effektive, pålitelige, gjenopptakbare og delte filer, selv på upålitelige nettverk.", + "tusUploadsChunkSize": "Angir maksimal størrelse på en forespørsel (direkte opplastinger vil bli brukt for mindre opplastinger). Du kan legge inn et heltall som angir bytestørrelsen, eller en streng som 10 MB, 1 GB osv.", + "tusUploadsRetryCount": "Antall nye forsøk som skal utføres hvis en del ikke lastes opp.", + "userHomeBasePath": "Basissti for brukerens hjemmekataloger", + "userScopeGenerationPlaceholder": "Omfanget vil bli generert automatisk", + "createUserHomeDirectory": "Opprett bruker hjemme direktorat", + "customStylesheet": "Egendefinert stilark", + "defaultUserDescription": "Dette er standardinnstillingene for nye brukere.", + "disableExternalLinks": "Deaktiver eksterne lenker (unntatt dokumentasjon)", + "disableUsedDiskPercentage": "Deaktiver grafen for prosentandelen brukt disk", + "documentation": "dokumentasjon", + "examples": "Eksempel", + "executeOnShell": "Kjør på skall", + "executeOnShellDescription": "Som standard kjører Filleseren kommandoene ved å kalle binærfilene direkte. Hvis du heller ønsker å kjøre dem på et skall (som Bash eller PowerShell), kan du definere det her med de nødvendige argumentene og flaggene. Hvis dette er angitt, vil kommandoen du kjører bli lagt til som et argument. Dette gjelder både brukerkommandoer og hendelseshooker.", + "globalRules": "Dette er et globalt sett med regler for tillatelse og forbud. De gjelder for alle brukere. Du kan definere spesifikke regler for hver brukers innstillinger for å overstyre disse.", + "globalSettings": "Globale Innstillinger", + "hideDotfiles": "Skjul punktfiler", + "insertPath": "Sett inn banen", + "insertRegex": "sett inn regex-uttrykk", + "instanceName": "Forekomstnavn", + "language": "Språk", + "lockPassword": "Hindre brukeren i å endre passordet", + "newPassword": "Sett ditt nye passord", + "newPasswordConfirm": "Bekreft ditt nye passord", + "newUser": "Ny bruker", + "password": "Passord", + "passwordUpdated": "Passord opptatert!", + "path": "Veg", + "perm": { + "create": "Opprett filer og direktorater", + "delete": "Slett filer og direktorater", + "download": "Nedlast", + "execute": "Utfør kommandoer", + "modify": "Endre filer", + "rename": "Gi nytt navn eller flytt filer og direktorater", + "share": "Del filer" + }, + "permissions": "Tilaterser", + "permissionsHelp": "Du kan angi brukeren som administrator eller velge tillatelsene individuelt. Hvis du velger «Administrator», vil alle de andre alternativene bli automatisk avkrysset. Administrasjon av brukere er fortsatt et privilegium for en administrator.\n", + "profileSettings": "Profil Innstilinger", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "forhindrer tilgang til noen dotfiler (som .git, .gitignore) i alle mapper.\n", + "ruleExample2": "blokkerer tilgangen til filen med navnet Caddyfile på roten av omfanget.", + "rules": "Regler", + "rulesHelp": "Her kan du definere et sett med tillatelses- og forbudsregler for denne spesifikke brukeren. De blokkerte filene vil ikke vises i listene, og de vil ikke være tilgjengelige for brukeren. Vi støtter regex og stier i forhold til brukerens omfang.", + "scope": "Omfang", + "setDateFormat": "Sett eksakt dato format", + "settingsUpdated": "Innstilinger opptatert!", + "shareDuration": "Del tidsbruk", + "shareManagement": "Del Ledelse", + "shareDeleted": "Delte ting slettet!", + "singleClick": "Bruk enkeltklikk for å åpne filer og mapper", + "themes": { + "default": "Systemstandard", + "dark": "Mørk", + "light": "Lyst", + "title": "Tema" + }, + "user": "Bruker", + "userCommands": "Kommando", + "userCommandsHelp": "En mellomromsseparert liste med tilgjengelige kommandoer for denne brukeren. Eksempel:\n", + "userCreated": "Bruker opprettet!", + "userDefaults": "Bruker systemstandard instillinger", + "userDeleted": "Bruker slettet!", + "userManagement": "Brukeradministrasjon", + "userUpdated": "Bruker opprettet!", + "username": "Brukernavn", + "users": "Bruker", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Hjelp", + "hugoNew": "Hugo Ny", + "login": "Logg inn", + "logout": "Logg Ut", + "myFiles": "Mine filer", + "newFile": "Ny fil", + "newFolder": "Ny mappe", + "preview": "Forhåndsvis", + "settings": "Innstillinger", + "signup": "Registrer deg", + "siteSettings": "Side innstillinger" + }, + "success": { + "linkCopied": "Link koppiert!" + }, + "time": { + "days": "Dager", + "hours": "Timer", + "minutes": "Minutt", + "seconds": "Sekunder", + "unit": "Time format" + } +} diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json index 3efbbd52..61d27665 100644 --- a/frontend/src/i18n/pl.json +++ b/frontend/src/i18n/pl.json @@ -1,236 +1,312 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Toggle shell", "cancel": "Anuluj", + "clear": "Wyczyść", "close": "Zamknij", + "continue": "Kontynuuj", "copy": "Kopiuj", "copyFile": "Kopiuj plik", - "copyToClipboard": "kopiuj do schowka", + "copyToClipboard": "Kopiuj do schowka", + "copyDownloadLinkToClipboard": "Kopiuj link pobierania do schowka", "create": "Utwórz", "delete": "Usuń", "download": "Pobierz", - "info": "Informacja", - "more": "Więce", + "file": "Plik", + "folder": "Folder", + "fullScreen": "Przełącz tryb pełnoekranowy", + "hideDotfiles": "Ukryj pliki poprzedzone kropką", + "info": "Informacje", + "more": "Więcej", "move": "Przenieś", "moveFile": "Przenieś plik", "new": "Nowy", "next": "Następny", "ok": "OK", - "replace": "Zamień", + "permalink": "Uzyskaj stały link", "previous": "Poprzedni", - "rename": "Zmień Nazwę", - "reportIssue": "Zgłoś Problem", - "save": "Zapisz", - "search": "Szukaj", - "select": "Wybierz", - "share": "Udostępnij", + "preview": "Podgląd", "publish": "Opublikuj", + "rename": "Zmień nazwę", + "replace": "Zamień", + "reportIssue": "Zgłoś problem", + "resumeTransfer": "Wznów poprzedni transfer", + "resumeTransferTooltip": "Pomiń wszystkie pliki powodujące konflikty, z wyjątkiem tych, które są mniejsze na serwerze, ponieważ podejrzewamy, że ich transfer został przerwany.", + "save": "Zapisz", + "schedule": "Harmonogram", + "search": "Szukaj", + "select": "Zaznacz", "selectMultiple": "Zaznacz wiele", - "schedule": "Grafik", + "share": "Udostępnij", + "shell": "Przełącz powłokę", + "submit": "Prześlij", "switchView": "Zmień widok", - "toggleSidebar": "Toggle sidebar", + "toggleSidebar": "Przełącz pasek boczny", "update": "Aktualizuj", - "upload": "Upload", - "permalink": "Get Permanent Link" + "upload": "Wyślij", + "openFile": "Otwórz plik", + "openDirect": "Otwórz bezpośrednio", + "discardChanges": "Odrzuć", + "stopSearch": "Zatrzymaj wyszukiwanie", + "saveChanges": "Zapisz zmiany", + "editAsText": "Edytuj jako tekst", + "increaseFontSize": "Zwiększ rozmiar czcionki", + "decreaseFontSize": "Zmniejsz rozmiar czcionki", + "overrideAll": "Zastąp wszystkie pliki w folderze docelowym", + "skipAll": "Pomiń wszystkie pliki powodujące konflikty", + "renameAll": "Zmień nazwy wszystkich plików (utwórz kopię)", + "singleDecision": "Podejmij decyzję dla każdego pliku powodującego konflikt" }, - "success": { - "linkCopied": "Link Skopiowany!" + "download": { + "downloadFile": "Pobierz plik", + "downloadFolder": "Pobierz folder", + "downloadSelected": "Pobierz zaznaczone" + }, + "upload": { + "abortUpload": "Czy na pewno chcesz przerwać?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "Nie masz zezwolenia na dostęp do tego.", "internal": "Pojawił się poważny problem.", - "notFound": "Ten adres nie jest poprawny." + "notFound": "Ta lokalizacja jest nieosiągalna.", + "connection": "Serwer jest nieosiągalny." }, "files": { - "folders": "Foldery", + "body": "Zawartość", + "closePreview": "Zamknij podgląd", "files": "Pliki", - "body": "Body", - "clear": "Wyczyść", - "closePreview": "Zamknij poprzednie", - "home": "Home", - "lastModified": "Ostatnio modyfikowane", + "folders": "Foldery", + "home": "Główny", + "lastModified": "Ostatnio zmodyfikowano", "loading": "Ładowanie...", - "lonely": "Smutno gdy tak pusto...", - "metadata": "Metadata", - "multipleSelectionEnabled": "Multiple selection enabled", + "lonely": "Smutno, gdy tak pusto...", + "metadata": "Metadane", + "multipleSelectionEnabled": "Włączono zaznaczenie wielokrotne", "name": "Nazwa", "size": "Rozmiar", - "sortByName": "Sortuj po nazwie", - "sortBySize": "Sortuj po rozmiarze", - "sortByLastModified": "Sortuj po dacie modyfikacji" + "sortByLastModified": "Sortuj wg ostatniej modyfikacji", + "sortByName": "Sortuj wg nazwy", + "sortBySize": "Sortuj wg rozmiaru", + "noPreview": "Podgląd tego pliku jest niedostępny.", + "csvTooLarge": "Plik CSV jest za duży do podglądu (>5 MB). Pobierz, aby wyświetlić.", + "csvLoadFailed": "Nie udało się załadować pliku CSV.", + "showingRows": "Wyświetlanie wierszy: {count}", + "columnSeparator": "Separator kolumn", + "csvSeparators": { + "comma": "Przecinek (,)", + "semicolon": "Średnik (;)", + "both": "Zarówno (,), jak i (;)" + }, + "fileEncoding": "Kodowanie pliku" }, "help": { - "click": "wybierz plik lub foler", + "click": "zaznacz plik lub folder", "ctrl": { - "click": "wybierz wiele plików lub folderów", + "click": "zaznacz wiele plików lub folderów", "f": "otwórz wyszukiwarkę", "s": "pobierz aktywny plik lub folder" }, - "del": "usuń zaznaczone", + "del": "usuń zaznaczone elementy", "doubleClick": "otwórz plik lub folder", - "esc": "wyczyść zaznaczenie i/lub zamknij okno z powiadomieniem", - "f1": "ta informacja", + "esc": "wyczyść zaznaczenie i/lub zamknij monit", + "f1": "te informacje", "f2": "zmień nazwę pliku", "help": "Pomoc" }, "login": { + "createAnAccount": "Utwórz konto", + "loginInstead": "Mam już konto", "password": "Hasło", - "passwordConfirm": "Password Confirmation", - "submit": "Login", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", + "passwordConfirm": "Potwierdzenie hasła", + "passwordsDontMatch": "Hasła nie pasują do siebie", + "signup": "Rejestracja", + "submit": "Zaloguj", "username": "Nazwa użytkownika", - "wrongCredentials": "Błędne dane logowania" + "usernameTaken": "Ta nazwa użytkownika jest zajęta", + "wrongCredentials": "Błędne dane logowania", + "passwordTooShort": "Wymagana minimalna liczba znaków hasła: {min}", + "logout_reasons": { + "inactivity": "Wylogowano z powodu braku aktywności." + } }, + "permanent": "Permanentny", "prompts": { "copy": "Kopiuj", - "copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki", - "currentlyNavigating": "Currently navigating on:", - "deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?", - "deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?", + "copyMessage": "Wybierz lokalizację docelową:", + "currentlyNavigating": "Aktualnie poruszasz się po:", + "deleteMessageMultiple": "Czy na pewno chcesz usunąć pliki: {count}?", + "deleteMessageSingle": "Czy na pewno chcesz usunąć ten plik/folder?", + "deleteMessageShare": "Czy na pewno chcesz usunąć ten udział ({path})?", + "deleteUser": "Czy na pewno chcesz usunąć tego użytkownika?", "deleteTitle": "Usuń pliki", - "displayName": "Wyświetlana Nazwa:", + "displayName": "Wyświetlana nazwa:", "download": "Pobierz pliki", - "downloadMessage": "Wybierz format, jaki chesz pobrać.", + "downloadMessage": "Wybierz format, w którym chcesz pobrać.", "error": "Pojawił się jakiś błąd", - "fileInfo": "Informacje o pliku", - "filesSelected": "{count} plików zostało zaznaczonych.", - "lastModified": "Osatnio Zmodyfikowane", + "fileInfo": "Informacje o​ pliku", + "filesSelected": "Zaznaczone pliki: {count}", + "lastModified": "Ostatnio zmodyfikowano", "move": "Przenieś", - "moveMessage": "Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):", + "moveMessage": "Wybierz nową lokalizację dla swoich plików/folderów:", + "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.", "newDir": "Nowy folder", - "newDirMessage": "Podaj nazwę tworzonego folderu.", + "newDirMessage": "Nazwij nowy folder.", "newFile": "Nowy plik", - "newFileMessage": "Podaj nazwętworzonego pliku.", - "numberDirs": "Ilość katalogów", - "numberFiles": "Ilość plików", - "replace": "Zamień", - "replaceMessage": "Jednen z plików który próbujesz wrzucić próbje nadpisać plik o tej samej nazwie. Czy chcesz nadpisać poprzedni plik?\n", + "newFileMessage": "Nazwij nowy plik.", + "numberDirs": "Liczba folderów", + "numberFiles": "Liczba plików", "rename": "Zmień nazwę", "renameMessage": "Podaj nową nazwę dla", + "replace": "Zamień", + "replaceMessage": "Jeden z przesyłanych plików chce nadpisać istniejący plik o tej samej nazwie. Chcesz pominąć ten plik i kontynuować przesyłanie reszty plików, czy nadpisać istniejący plik?\n", + "schedule": "Grafik", + "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.", "show": "Pokaż", "size": "Rozmiar", - "schedule": "Grafi", - "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.", - "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze." + "upload": "Wyślij", + "uploadFiles": "Wysyłam pliki: {files}...", + "uploadMessage": "Wybierz opcję przesyłania.", + "optionalPassword": "Opcjonalne hasło", + "resolution": "Rozdzielczość", + "discardEditorChanges": "Czy na pewno chcesz odrzucić wprowadzone zmiany?", + "replaceOrSkip": "Zastąp lub pomiń pliki", + "resolveConflict": "Które pliki chcesz zachować?", + "singleConflictResolve": "Jeśli wybierzesz obie wersje, do nazwy kopiowanego pliku zostanie dodany numer.", + "fastConflictResolve": "W folderze docelowym liczba plików o tej samej nazwie to {count}.", + "uploadingFiles": "Wysyłanie plików", + "filesInOrigin": "Pliki w miejscu pochodzenia", + "filesInDest": "Pliki w miejscu docelowym", + "override": "Zastąp", + "skip": "Pomiń", + "forbiddenError": "Błąd zabronionego dostępu", + "currentPassword": "Twoje hasło", + "currentPasswordMessage": "Wpisz swoje hasło, aby zatwierdzić tę czynność." + }, + "search": { + "images": "Obrazy", + "music": "Muzyka", + "pdf": "PDF", + "pressToSearch": "Naciśnij Enter, aby wyszukać...", + "search": "Szukaj...", + "typeToSearch": "Typ plików do wyszukania...", + "types": "Typy", + "video": "Wideo" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Motyw edytora Ace", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Wykonaj polecenie", - "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów", + "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów", "allowNew": "Tworzenie nowych plików lub folderów", - "allowPublish": "Tworzenie nowych wpisów i stron", - "avoidChanges": "(pozostaw puste aby nie zosatało zmienione)", - "changePassword": "Zmień Hasło", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "allowPublish": "Tworzenie nowych wpisów i stron", + "allowSignup": "Pozwól użytkownikom na rejestrację", + "hideLoginButton": "Ukryj przycisk logowania na stronach publicznych", + "avoidChanges": "(pozostaw puste, aby uniknąć zmian)", + "branding": "Personalizacja", + "brandingDirectoryPath": "Ścieżka do folderu personalizacji", + "brandingHelp": "Możesz zmodyfikować wygląd instancji File Browser poprzez zmianę nazwy, logo, dodanie własnych stylów graficznych, a nawet usunięcia linków do serwisu GitHub. Więcej informacji o modyfikacji wyglądu znajdziesz w {0}.", + "changePassword": "Zmień hasło", + "commandRunner": "Narzędzie do wykonywania poleceń", + "commandRunnerHelp": "Tu możesz ustawić polecenia, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednym na wiersz. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz w {2}.", "commandsUpdated": "Polecenie zaktualizowane!", - "customStylesheet": "Własny Stylesheet", + "createUserDir": "Automatycznie twórz katalog domowy podczas dodawania użytkownika", + "minimumPasswordLength": "Minimalna długość hasła", + "tusUploads": "Przesyłanie we fragmentach", + "tusUploadsHelp": "File Browser wspiera przesyłanie plików we fragmentach, co pozwala na proces przesyłania, który jest wydajny, pewny i możliwy do wznowienia nawet w sieciach o wątpliwej stabilności przesyłu danych.", + "tusUploadsChunkSize": "Oznacza maksymalny rozmiar przesyłanych plików (dla mniejszych plików użyte zostanie przesyłanie bezpośrednie). Możesz ustawić tę wartość zarówno zapisaną samymi cyframi w bajtach, jak i podać ją w formie skróconej, np. poprzez 10MB, 1GB itp.", + "tusUploadsRetryCount": "Liczba prób ponowienia transferu w przypadku wystapienia problemu z przesyłem.", + "userHomeBasePath": "Ścieżka podstawowa dla katalogów domowych użytkowników", + "userScopeGenerationPlaceholder": "Zakres zostanie wygenerowany automatycznie", + "createUserHomeDirectory": "Utwórz katalog domowy użytkownika", + "customStylesheet": "Własny arkusz stylu", + "defaultUserDescription": "To są domyślne ustawienia dla nowych użytkowników.", + "disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)", + "disableUsedDiskPercentage": "Wyłącz wykres procentowy używanego dysku", + "documentation": "dokumentacji", "examples": "Przykłady", - "globalSettings": "Ustawienia Globalne", + "executeOnShell": "Wykonaj w powłoce", + "executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia poprzez bezpośrednie uruchomienie odpowiednich plików binarnych. Jeśli chcesz uruchamiać polecenia z poziomu powłoki (np. Bash lub PowerShell), możesz zdefiniować je tutaj, z wykorzystaniem odpowiednich argumentów i flag. Gdy się na to zdecydujesz, wykonywane polecenie będzie załączone jako argument. Tyczy się to tak poleceń użytkownika, jak i zaczepów zdarzeń.", + "globalRules": "Globalny zestaw reguł zezwalających i zakazujących. Dotyczą każdego użytkownika. Aby zastąpić ustawienia globalne, możesz zdefiniować określone reguły indywidualnie dla każdego użytkownika.", + "globalSettings": "Ustawienia globalne", + "hideDotfiles": "Ukryj pliki poprzedzone kropką", + "insertPath": "Wstaw ścieżkę", + "insertRegex": "Wstaw wyrażenie regularne", + "instanceName": "Nazwa instancji", "language": "Język", "lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła", - "newPassword": "Twoje nowe hasło", - "newPasswordConfirm": "Potwierdź swoje hasło", - "newUser": "Nowy Użytkownik", + "newPassword": "Nowe hasło", + "newPasswordConfirm": "Potwierdź nowe hasło", + "newUser": "Nowy użytkownik", "password": "Hasło", - "passwordUpdated": "Hasło zostało zapisane!", + "passwordUpdated": "Hasło zostało zaktualizowane!", + "path": "Ścieżka", + "perm": { + "create": "Tworzenie plików i folderów", + "delete": "Usuwanie plików i folderów", + "download": "Pobieranie", + "execute": "Wykonywanie poleceń", + "modify": "Edytowanie plików", + "rename": "Zmienianie nazwy lub przenoszenie plików i katalogów", + "share": "Udostępnianie plików (wymaga uprawnienia do pobierania)" + }, "permissions": "Uprawnienia", - "permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n", - "profileSettings": "Twój profil", - "ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n", - "ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.", + "permissionsHelp": "Możesz ustawić użytkownika jako administratora lub wybrać uprawnienia indywidualnie. Jeśli wybierzesz „Administrator”, wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n", + "profileSettings": "Ustawienia profilu", + "redirectAfterCopyMove": "Przekieruj do miejsca docelowego po skopiowaniu lub przeniesieniu", + "ruleExample1": "uniemożliwia dostęp do plików poprzedzonych kropką (takich jak .git, .gitignore) we wszystkich folderach.\n", + "ruleExample2": "blokuje dostęp do pliku o nazwie Caddyfile w katalogu głównym zakresu.", "rules": "Uprawnienia", - "rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n", - "scope": "Scope", - "settingsUpdated": "Uprawnienia Zapisane!", + "rulesHelp": "Tutaj możesz zdefiniować zestaw reguł zezwalających i zakazujących dla tego użytkownika. Zablokowane pliki nie pojawią się na listach i nie będą dostępne dla użytkownika. Obsługujemy wyrażenia regularne i ścieżki względne w stosunku do zakresu użytkownika.\n", + "scope": "Zakres", + "setDateFormat": "Ustaw dokładny format daty", + "settingsUpdated": "Ustawienia zaktualizowane!", + "shareDuration": "Okres udostępniania", + "shareManagement": "Zarządzanie udostępnianiem", + "shareDeleted": "Udostępnienie usunięte!", + "singleClick": "Używaj pojedynczych kliknięć, aby otwierać pliki i foldery", + "sunsetBody": "Ten projekt jest w trakcie zamykania. Zostanie zarchiwizowany 1 września 2026 r., po czym nie będzie żadnych kolejnych wydań, poprawek błędów ani poprawek zabezpieczeń. Istniejące wydania i obrazy Dockera pozostaną online. Nie udostępniaj tej instancji bezpośrednio w internecie bez uwierzytelnienia.", + "sunsetLink": "Przeczytaj stan projektu, znane nierozwiązane problemy bezpieczeństwa i wskazówki dotyczące wzmacniania zabezpieczeń", + "sunsetTitle": "File Browser jest archiwizowany", + "themes": { + "default": "Domyślny systemowy", + "dark": "Ciemny", + "light": "Jasny", + "title": "Motyw" + }, "user": "Użytkownik", "userCommands": "Polecenia", - "userCommandsHelp": "A space separated list with the available commands for this user. Example:\n", + "userCommandsHelp": "Oddzielona spacjami lista z dostępnymi poleceniami dla tego użytkownika. Przykład:\n", "userCreated": "Użytkownik zapisany!", + "userDefaults": "Domyślne ustawienia użytkownika", "userDeleted": "Użytkownik usunięty!", "userManagement": "Zarządzanie użytkownikami", + "userUpdated": "Użytkownik zapisany!", "username": "Nazwa użytkownika", "users": "Użytkownicy", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "Użytkownik zapisany!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" - } + "currentPassword": "Twoje aktualne hasło" }, "sidebar": { + "diskUsed": "Wykorzystano {used} z {total}", "help": "Pomoc", - "login": "Login", - "signup": "Signup", + "hugoNew": "Nowy Hugo", + "login": "Zaloguj", "logout": "Wyloguj", "myFiles": "Moje pliki", "newFile": "Nowy plik", "newFolder": "Nowy folder", + "preview": "Podgląd", "settings": "Ustawienia", - "siteSettings": "Ustawienia Strony", - "hugoNew": "Hugo New", - "preview": "Podgląd" + "signup": "Rejestracja", + "siteSettings": "Ustawienia strony" }, - "search": { - "images": "Zdjęcia", - "music": "Muzyka", - "pdf": "PDF", - "types": "Typy", - "video": "Video", - "search": "Szukaj...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Link skopiowany!" }, "time": { - "unit": "Jednostka czasu", - "seconds": "Sekundy", - "minutes": "Minuty", + "days": "Dni", "hours": "Godziny", - "days": "Dni" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "Minuty", + "seconds": "Sekundy", + "unit": "Jednostka czasu" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/pt-br.json b/frontend/src/i18n/pt-br.json index f8f8576a..6b9c9004 100644 --- a/frontend/src/i18n/pt-br.json +++ b/frontend/src/i18n/pt-br.json @@ -1,53 +1,78 @@ { - "permanent": "Permanente", "buttons": { - "shell": "Toggle shell", "cancel": "Cancelar", + "clear": "Limpar", "close": "Fechar", + "continue": "Continuar", "copy": "Copiar", "copyFile": "Copiar arquivo", "copyToClipboard": "Copiar", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", "create": "Criar", - "delete": "Deletar", + "delete": "Apagar", "download": "Baixar", + "file": "Arquivo", + "folder": "Pasta", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Ocultar dotfiles", "info": "Informações", "more": "Mais", "move": "Mover", "moveFile": "Mover arquivo", "new": "Novo", "next": "Próximo", - "ok": "Ok", - "replace": "Substituir", + "ok": "OK", + "permalink": "Obter link permanente", "previous": "Anterior", + "preview": "Preview", + "publish": "Publicar", "rename": "Renomear", - "reportIssue": "Reportar erro", + "replace": "Substituir", + "reportIssue": "Relatar erro", "save": "Salvar", + "schedule": "Agendar", "search": "Pesquisar", "select": "Selecionar", - "share": "Compartilhar", - "publish": "Publicar", "selectMultiple": "Selecionar múltiplos", - "schedule": "Agendar", + "share": "Compartilhar", + "shell": "Alternar console", + "submit": "Enviar", "switchView": "Alterar modo de visão", "toggleSidebar": "Alternar barra lateral", "update": "Atualizar", "upload": "Enviar", - "permalink": "Obter link permanente" + "openFile": "Abrir", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Link copiado!" + "download": { + "downloadFile": "Baixar arquivo", + "downloadFolder": "Baixar pasta", + "downloadSelected": "Baixar selecionado" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "Você não tem permissões para acessar isto.", "internal": "Ops! Algum erro ocorreu.", - "notFound": "Ops! Nada foi encontrado." + "notFound": "Ops! Nada foi encontrado.", + "connection": "O servidor não pode ser alcançado." }, "files": { - "folders": "Pastas", - "files": "Arquivos", "body": "Corpo", - "clear": "Limpar", "closePreview": "Fechar pré-visualização", + "files": "Arquivos", + "folders": "Pastas", "home": "Início", "lastModified": "Última modificação", "loading": "Carregando. Aguarde, por favor.", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Seleção múltipla ativada", "name": "Nome", "size": "Tamanho", + "sortByLastModified": "Ordenar pela última modificação", "sortByName": "Ordenar pelo nome", "sortBySize": "Ordenar pelo tamanho", - "sortByLastModified": "Ordenar pela última modificação" + "noPreview": "Pré-visualização não disponível para este arquivo.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "selecionar pasta ou arquivo", @@ -67,170 +103,204 @@ "f": "pesquisar", "s": "salvar um arquivo ou baixar a pasta que você está" }, - "del": "deletar os arquivos selecionados", + "del": "apagar os arquivos selecionados", "doubleClick": "abrir pasta ou arquivo", "esc": "limpar seleção e/ou fechar menu", - "f1": "está informação", + "f1": "esta informação", "f2": "renomear arquivo", "help": "Ajuda" }, "login": { + "createAnAccount": "Criar uma conta", + "loginInstead": "Já possui uma conta", "password": "Senha", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "Confirmação de senha", + "passwordsDontMatch": "As senhas não coincidem", + "signup": "Cadastrar", "submit": "Login", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", "username": "Nome do usuário", - "wrongCredentials": "Ops! Dados incorretos." + "usernameTaken": "Nome de usuário já existe", + "wrongCredentials": "Ops! Dados incorretos.", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanente", "prompts": { "copy": "Copiar", "copyMessage": "Escolha um lugar para copiar os arquivos:", "currentlyNavigating": "Navegando em:", - "deleteMessageMultiple": "Deseja deletar {count} arquivo(s)?", - "deleteMessageSingle": "Deseja deletar está pasta/arquivo?", - "deleteTitle": "Deletar arquivos", + "deleteMessageMultiple": "Deseja apagar {count} arquivo(s)?", + "deleteMessageSingle": "Deseja apagar esta pasta/arquivo?", + "deleteMessageShare": "Deseja apagar este compartilhamento ({path})?", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "Apagar arquivos", "displayName": "Nome:", "download": "Baixar arquivos", "downloadMessage": "Escolha o formato do arquivo.", - "error": "Algo de ruim ocorreu", + "error": "Algo de errado ocorreu", "fileInfo": "Informação do arquivo", "filesSelected": "{count} arquivos selecionados.", "lastModified": "Última modificação", "move": "Mover", "moveMessage": "Escolha uma nova pasta para os seus arquivos:", + "newArchetype": "Criar um novo post baseado num \"archetype\". O seu arquivo será criado na pasta \"content\".", "newDir": "Nova pasta", "newDirMessage": "Escreva o nome da nova pasta.", "newFile": "Novo arquivo", "newFileMessage": "Escreva o nome do novo arquivo.", "numberDirs": "Número de pastas", "numberFiles": "Número de arquivos", - "replace": "Substituir", - "replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n", "rename": "Renomear", "renameMessage": "Insira um novo nome para", + "replace": "Substituir", + "replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n", + "schedule": "Agendar", + "scheduleMessage": "Escolha uma data para agendar a publicação deste post.", "show": "Mostrar", "size": "Tamanho", - "schedule": "Agendar", - "scheduleMessage": "Escolha uma data para publicar este post.", - "newArchetype": "Criar um novo post baseado num \"archetype\". O seu arquivo será criado na pasta \"content\"." + "upload": "Enviar", + "uploadFiles": "Enviando {files} arquivos...", + "uploadMessage": "Selecione uma opção para enviar.", + "optionalPassword": "Senha opcional", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Imagens", + "music": "Músicas", + "pdf": "PDF", + "pressToSearch": "Pressione Enter para pesquisar...", + "search": "Pesquise...", + "typeToSearch": "Digite para pesquisar...", + "types": "Tipos", + "video": "Vídeos" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentação", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Executar comandos", - "allowEdit": "Editar, renomear e deletar arquivos ou pastas", + "allowEdit": "Editar, renomear e apagar arquivos ou pastas", "allowNew": "Criar novos arquivos e pastas", "allowPublish": "Publicar novas páginas e conteúdos", + "allowSignup": "Permitir cadastro de usuários", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(deixe em branco para manter)", + "branding": "Customização", + "brandingDirectoryPath": "Diretório de customização", + "brandingHelp": "Você pode mudar a aparência e experiência de sua instância do File Browser alterando seu nome, logotipo, adicionando estilos customizados e até desabilitando links externos para o GitHub.\nPara mais informações sobre customizações, confira {0}.", "changePassword": "Alterar senha", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "commandRunner": "Execução de comandos", + "commandRunnerHelp": "Aqui você pode definir comandos que serão executados nos eventos descritos. Escreva um por linha. As variáveis de ambiente {0} e {1} estão disponíveis, sendo {0} relativo a {1}. Para mais informações sobre esta função e as variáveis de ambiente disponíveis, leia a {2}.", "commandsUpdated": "Comandos atualizados!", + "createUserDir": "Criar diretório Home para novos usuários", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Caminho base para diretórios de usuários", + "userScopeGenerationPlaceholder": "O escopo será gerado automaticamente", + "createUserHomeDirectory": "Criar diretório Home de usuário", "customStylesheet": "Estilos personalizados", + "defaultUserDescription": "Estas são as configurações padrão para novos usuários.", + "disableExternalLinks": "Desabilitar links externos (exceto documentação)", + "disableUsedDiskPercentage": "Desabilitar gráfico de porcentagem de disco usado", + "documentation": "documentação", "examples": "Exemplos", + "executeOnShell": "Executar no console", + "executeOnShellDescription": "Por padrão, o File Browser executa os comandos chamando os binários diretamente. Se ao invés disso desejar executá-los em um console (como Bash ou PowerShell), você pode defini-los aqui com os argumentos e flags necessários. Se definido, o comando que executar será acrescentado como um argumento. Isto se aplica a comandos de usuário e eventos hook.", + "globalRules": "Este é um conjunto global de regras de permissão e restrição que se aplicam a todos os usuários. Você pode definir regras específicas em cada usuário para sobrepor estas.", "globalSettings": "Configurações globais", - "language": "Linguagem", + "hideDotfiles": "Ocultar dotfiles", + "insertPath": "Inserir o caminho", + "insertRegex": "Inserir expressão regular", + "instanceName": "Nome da instância", + "language": "Idioma", "lockPassword": "Não permitir que o usuário altere a senha", "newPassword": "Nova senha", "newPasswordConfirm": "Confirme a nova senha", "newUser": "Novo usuário", "password": "Senha", "passwordUpdated": "Senha atualizada!", + "path": "Path", + "perm": { + "create": "Criar arquivos e diretórios", + "delete": "Apagar arquivos e diretórios", + "download": "Baixar", + "execute": "Executar comandos", + "modify": "Editar arquivos", + "rename": "Renomear ou mover arquivos e diretórios", + "share": "Compartilhar arquivos" + }, "permissions": "Permissões", "permissionsHelp": "Pode definir o usuário como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos usuários é um privilégio restringido aos administradores.\n", "profileSettings": "Configurações do usuário", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n", "ruleExample2": "bloqueia o acesso ao arquivo chamado Caddyfile.", "rules": "Regras", - "rulesHelp": "Aqui pode definir um conjunto de regras para permitir ou bloquear o acesso do utilizador a determinados arquivos ou pastas. Os arquivos bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos arquivos devem ser relativos à base do usuário.\n", - "scope": "Base", + "rulesHelp": "Aqui você pode definir um conjunto de regras para permitir ou bloquear o acesso do usuário a determinados arquivos ou pastas. Os arquivos bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos arquivos devem ser relativos à base do usuário.\n", + "scope": "Escopo", + "setDateFormat": "Definir formato exato de data", "settingsUpdated": "Configurações atualizadas!", + "shareDuration": "Duração do compartilhamento", + "shareManagement": "Gerenciamento do compartilhamento", + "shareDeleted": "Compartilhamento apagado!", + "singleClick": "Usar clique único para abrir arquivos e diretórios", + "themes": { + "default": "System default", + "dark": "Escuro", + "light": "Claro", + "title": "Tema" + }, "user": "Usuário", "userCommands": "Comandos", "userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este usuário. Exemplo:", "userCreated": "Usuário criado!", - "userDeleted": "Usuário eliminado!", - "userManagement": "Gestão de usuários", + "userDefaults": "Configurações padrão de usuário", + "userDeleted": "Usuário apagado!", + "userManagement": "Gerenciamento de usuários", + "userUpdated": "Usuário atualizado!", "username": "Nome do usuário", "users": "Usuários", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Inserir expressão regular", - "insertPath": "Insert the path", - "userUpdated": "Usuário atualizado!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Baixar", - "modify": "Editar arquivos", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Compartilhar arquivos" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajuda", + "hugoNew": "Hugo New", "login": "Login", - "signup": "Signup", "logout": "Sair", "myFiles": "Arquivos", "newFile": "Novo arquivo", "newFolder": "Nova pasta", + "preview": "Pré-visualizar", "settings": "Configurações", - "siteSettings": "Configurações do site", - "hugoNew": "Hugo New", - "preview": "Pré-visualizar" + "signup": "Cadastrar", + "siteSettings": "Configurações do site" }, - "search": { - "images": "Imagens", - "music": "Música", - "pdf": "PDF", - "types": "Tipos", - "video": "Vídeos", - "search": "Pesquise...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Link copiado!" }, "time": { - "unit": "Unidades de Tempo", - "seconds": "Segundos", - "minutes": "Minutos", + "days": "Dias", "hours": "Horas", - "days": "Dias" - }, - "download": { - "downloadFile": "Baixar arquivo", - "downloadFolder": "Baixar pasta" + "minutes": "Minutos", + "seconds": "Segundos", + "unit": "Unidades de Tempo" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/pt-pt.json b/frontend/src/i18n/pt-pt.json new file mode 100644 index 00000000..ae540d9b --- /dev/null +++ b/frontend/src/i18n/pt-pt.json @@ -0,0 +1,312 @@ +{ + "buttons": { + "cancel": "Cancelar", + "clear": "Limpar", + "close": "Fechar", + "continue": "Continuar", + "copy": "Copiar", + "copyFile": "Copiar ficheiro", + "copyToClipboard": "Copiar para a área de transferência", + "copyDownloadLinkToClipboard": "Copiar link do download para a área de transferência", + "create": "Criar", + "delete": "Eliminar", + "download": "Descarregar", + "file": "Ficheiro", + "folder": "Pasta", + "fullScreen": "Alternar ecrã inteiro", + "hideDotfiles": "Ocultar ficheiros começados por ponto", + "info": "Info", + "more": "Mais", + "move": "Mover", + "moveFile": "Mover ficheiro", + "new": "Novo", + "next": "Seguinte", + "ok": "OK", + "permalink": "Obter link permanente", + "previous": "Anterior", + "preview": "Pré-visualizar", + "publish": "Publicar", + "rename": "Mudar o nome", + "replace": "Substituir", + "reportIssue": "Reportar problema", + "resumeTransfer": "Resume previous transfer", + "resumeTransferTooltip": "Skip all conflicting files, except the ones that are smaller on the server as we suppose that their transfert has been interrupted.", + "save": "Guardar", + "schedule": "Agendar", + "search": "Pesquisar", + "select": "Seleccionar", + "selectMultiple": "Seleccionar vários", + "share": "Partilhar", + "shell": "Alternar shell", + "submit": "Enviar", + "switchView": "Alterar vista", + "toggleSidebar": "Alternar barra lateral", + "update": "Actualizar", + "upload": "Enviar", + "openFile": "Abrir ficheiro", + "openDirect": "Ver raw", + "discardChanges": "Descartar", + "stopSearch": "Parar a procura", + "saveChanges": "Guardar alterações", + "editAsText": "Editar como Texto", + "increaseFontSize": "Aumentar o tamanho da letra", + "decreaseFontSize": "Diminuir o tamanho da letra", + "overrideAll": "Substituir todos os ficheiros na pasta de destino", + "skipAll": "Ignorar todos os ficheiros em conflito", + "renameAll": "Mudar o nome a todos os ficheiros (criar uma cópia)", + "singleDecision": "Decidir para cada ficheiro em conflito" + }, + "download": { + "downloadFile": "Descarregar Ficheiro", + "downloadFolder": "Descarregar Pasta", + "downloadSelected": "Descarregar Seleccionados" + }, + "upload": { + "abortUpload": "Tem a certeza que quer abortar?" + }, + "errors": { + "forbidden": "Não tem permissão para aceder a isto.", + "internal": "Algo correu mal.", + "notFound": "Esta localização não pôde ser alcançada.", + "connection": "Este servidor não pôde ser alcançado." + }, + "files": { + "body": "Corpo", + "closePreview": "Fechar pré-visualização", + "files": "Ficheiros", + "folders": "Pastas", + "home": "Início", + "lastModified": "Última modificação", + "loading": "A carregar...", + "lonely": "Sinto-me sózinho...", + "metadata": "Metadados", + "multipleSelectionEnabled": "Selecção múltipla activada", + "name": "Nome", + "size": "Tamanho", + "sortByLastModified": "Ordenar pela última modificação", + "sortByName": "Ordenar pelo nome", + "sortBySize": "Ordenar pelo tamanho", + "noPreview": "Pré-visualização não disponível para este ficheiro.", + "csvTooLarge": "O ficheiro CSV é demasiado grande para pré-visualizar (>5MB). Por favor, descarregue-o para visualizá-lo.", + "csvLoadFailed": "Falha ao carregar o ficheiro CSV.", + "showingRows": "A mostrar {count} linha(s)", + "columnSeparator": "Separador de Coluna", + "csvSeparators": { + "comma": "Vírgula (,)", + "semicolon": "Ponto e vírgula (;)", + "both": "Ambos (,) e (;)" + }, + "fileEncoding": "Codificação do Ficheiro" + }, + "help": { + "click": "seleccionar ficheiro ou pasta", + "ctrl": { + "click": "seleccionar vários ficheiros e pastas", + "f": "abre a pesquisa", + "s": "guarda um ficheiro ou descarrega a pasta onde estiver" + }, + "del": "elimina os itens seleccionados", + "doubleClick": "abre um ficheiro ou pasta", + "esc": "limpa a selecção e/ou fecha o pedido", + "f1": "esta informação", + "f2": "muda o nome ao ficheiro", + "help": "Ajuda" + }, + "login": { + "createAnAccount": "Criar uma conta", + "loginInstead": "Já tenho uma conta", + "password": "Palavra-passe", + "passwordConfirm": "Confirmação da Palavra-passe", + "passwordsDontMatch": "As palavras-passe não coincidem", + "signup": "Registar", + "submit": "Entrar", + "username": "Nome de utilizador", + "usernameTaken": "O nome de utilizador já existe", + "wrongCredentials": "Credenciais erradas", + "passwordTooShort": "A palavra-passe tem de ter pelo menos {min} caracteres", + "logout_reasons": { + "inactivity": "Foi terminada a sessão por inactividade." + } + }, + "permanent": "Permanente", + "prompts": { + "copy": "Copiar", + "copyMessage": "Escolha a localização para copiar os ficheiros:", + "currentlyNavigating": "Actualmente a navegar em:", + "deleteMessageMultiple": "Tem a certeza que quer eliminar {count} ficheiro(s)?", + "deleteMessageSingle": "Tem a certeza que quer eliminar este ficheiro/pasta?", + "deleteMessageShare": "Tem a certeza que quer eliminar esta partilha ({path})?", + "deleteUser": "Tem a certeza que quer eliminar este utilizador?", + "deleteTitle": "Eliminar ficheiros", + "displayName": "Nome a mostrar:", + "download": "Descarregar ficheiros", + "downloadMessage": "Escolha o formato que pretende descarregar.", + "error": "Algo correu mal.", + "fileInfo": "Informação do Ficheiro", + "filesSelected": "{count} ficheiro(s) seleccionado(s)", + "lastModified": "última modificação", + "move": "Mover", + "moveMessage": "Escolha uma nova casa para o(s) seu(s) ficheiro(s)/pasta(s):", + "newArchetype": "Criar uma nova publicação baseado no archetype. O seu ficheiro irá ser criado no conteúdo da pasta.", + "newDir": "Nova pasta", + "newDirMessage": "Nomeie a sua nova pasta.", + "newFile": "Novo ficheiro", + "newFileMessage": "Nomeie o seu novo ficheiro.", + "numberDirs": "Número de pastas", + "numberFiles": "Número de ficheiros", + "rename": "Mudar o nome", + "renameMessage": "Introduza um novo nome para", + "replace": "Substituir", + "replaceMessage": "Um dos ficheiros que está a tentar enviar tem um nome em conflito. Quer ignorar este ficheiro e continuar a enviar ou substituir o existente?\none?\n", + "schedule": "Agendar", + "scheduleMessage": "Escolha a data e hora para agendar a publicação desta publicação.", + "show": "Mostrar", + "size": "Tamanho", + "upload": "Enviar", + "uploadFiles": "A enviar {files} ficheiros...", + "uploadMessage": "Seleccione uma opção para enviar.", + "optionalPassword": "Palavra-passe opcional", + "resolution": "Resolução", + "discardEditorChanges": "Tem a certeza que quer descartar as alterações que fez?", + "replaceOrSkip": "Substituir ou ignorar ficheiros", + "resolveConflict": "Que ficheiros quer manter?", + "singleConflictResolve": "Se seleccionar ambas as versões, um número será adicionar ao nome do ficheiro copiado.", + "fastConflictResolve": "Na pasta de destino há {count} ficheiros com o mesmo nome.", + "uploadingFiles": "A enviar ficheiros", + "filesInOrigin": "Ficheiros na origem", + "filesInDest": "Ficheiros no destino", + "override": "Substituir", + "skip": "Ignorar", + "forbiddenError": "Erro de Proibido", + "currentPassword": "A sua palavra-passe", + "currentPasswordMessage": "Insira a sua palavra-passe para validar esta acção." + }, + "search": { + "images": "Imagens", + "music": "Música", + "pdf": "PDF", + "pressToSearch": "Prima Enter para procurar...", + "search": "Procurar...", + "typeToSearch": "Digite para procurar...", + "types": "Tipos", + "video": "Vídeo" + }, + "settings": { + "aceEditorTheme": "Editor de temas audaz", + "admin": "Admin", + "administrator": "Administrador", + "allowCommands": "Executar comandos", + "allowEdit": "Editar, mudar o nome e eliminar ficheiros ou pastas", + "allowNew": "Criar novos ficheiros e pastas", + "allowPublish": "Publicar novas publicações e páginas", + "allowSignup": "Permitir que utilizadores se registem", + "hideLoginButton": "Ocultar o botão de início de sessão nas páginas públicas", + "avoidChanges": "(deixe em branco para evitar alterações)", + "branding": "Branding", + "brandingDirectoryPath": "Caminho da pasta da marca", + "brandingHelp": "Pode personalizar a aparência da instânciado seu File Browser\nao alterar o seu nome, alterar o logótipo, adicionar estilos personalizados e até mesmo desactivar links externos para o Github.\nPara mais informação acerca de personalização de marca, por favor, veja {0}.", + "changePassword": "Alterar Palavra-passe", + "commandRunner": "Executador de comandos", + "commandRunnerHelp": "Aqui pode definir comandos que são executados nos eventos nomeados. Tem de escrever um por linha. A variável de ambiente {0} e {1} irá estar disponível, sendo {0} relativo a {1}.\nPara mais informação acerca desta funcionalidade e variáveis de ambiente disponíveis, por favor, leia o {2}.", + "commandsUpdated": "Comandos actualizados!", + "createUserDir": "Criar automaticamente a pasta da casa do utilizador quando adicionar um novo utilizador", + "minimumPasswordLength": "Comprimento mínimo da palavra-passe", + "tusUploads": "Envios aos Bocados", + "tusUploadsHelp": "O File Browser suporta envio de ficheiros aos bocados, permitindo a criação de envios eficiente, de confiança e retomáveis de ficheiros aos bocados mesmo em redes instáveis.", + "tusUploadsChunkSize": "Indica o tamanho máximo do pedido (envios directos serão utilizadas para envios pequenos). Pode introduzir um valor inteiro para tamanhos de byte ou uma cadeia como 10MB, 1GB, etc.", + "tusUploadsRetryCount": "Número de tentativas a realizar se um bocado falha ao ser enviado.", + "userHomeBasePath": "O caminho base para a pasta da casa do utilizador", + "userScopeGenerationPlaceholder": "O escopo será gerado automaticamente", + "createUserHomeDirectory": "Criar pasta da casa do utilizador", + "customStylesheet": "Folha de estilo Personalizada", + "defaultUserDescription": "Estes são as definições por defeito para novos utilizadores", + "disableExternalLinks": "Eliminar links externos (excepto documentação)", + "disableUsedDiskPercentage": "Desactivar gráfico de percentagem de uso de disco", + "documentation": "documentação\ndocumentation", + "examples": "Exemplos", + "executeOnShell": "Executar na shell", + "executeOnShellDescription": "Por defeito, o File Browser executa os comandos ao chamar os seus binários\ndirectamenta. Se quiser executá-los mesmo na shell (como o Bash ou PoweShell), pode defini-lo aqui com os argumentos pedidos e flags. Se definido, o comando que executar será acrescentado como um argumento. Isto aplica-se a ambos comandos de utilizador e hooks de eventos.", + "globalRules": "Esta é um conjunto global de regras de permissão e negação. Elas aplicam-se a cada utilizador. Pode definir regras especificas em cada definições de utilizador para contornar estas.", + "globalSettings": "Definições Globais", + "hideDotfiles": "Ocultar ficheiros começados por ponto", + "insertPath": "Introduza o caminho", + "insertRegex": "Introduza expressão regex", + "instanceName": "Nome da instância", + "language": "Idioma", + "lockPassword": "Impedir o utilizador de alterar a palavra-passe", + "newPassword": "A sua nova palavra-passe", + "newPasswordConfirm": "Confirmar a sua palavra-passe", + "newUser": "Novo Utilizador", + "password": "Palavra-passe", + "passwordUpdated": "Palavra-passe atualizada!", + "path": "Caminho", + "perm": { + "create": "Criar ficheiros e pastas", + "delete": "Eliminar ficheiros e pastas", + "download": "Descarregar", + "execute": "Executar comandos", + "modify": "Editar ficheiros", + "rename": "Mudar o nome ou mover ficheiros e pastas", + "share": "Share files (require download permission)" + }, + "permissions": "Permissões", + "permissionsHelp": "Pode definir um utilizador um administrador ou escolher as permissões individualmente. Se escolher \"Administrador\", todas as outras opções serão automaticamente marcadas. A gestão de utilizadores continua a ser um privilégio de um administrador.\n", + "profileSettings": "Definições de Perfil", + "redirectAfterCopyMove": "Redireccionar para o destino depois de copiar/mover", + "ruleExample1": "impede o acesso a qualquer ficheiro começado por ponto (como .git ou .gitignore) em cada pasta.\n", + "ruleExample2": "bloqueia o acesso ao ficheiro chamado Caddyfile na raíz de um escopo.", + "rules": "Regras", + "rulesHelp": "Aqui pode definir um conjunto de regras de permissão e negação para este utilizador especifico. Os ficheiros bloqueados não serão mostrados nas listas e não são acessíveis ao utilizador. Suportamos regex e caminhos relativos ao escopo do utilizador.\n", + "scope": "Escopo", + "setDateFormat": "Definir formato exacto da data", + "settingsUpdated": "Definições actualizadas!", + "shareDuration": "Duração da Partilha", + "shareManagement": "Gestão de Partilhas", + "shareDeleted": "Partilha eliminada!", + "singleClick": "Utilizar cliques únicos para abrir ficheiros e pastas", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "Predefinição do sistema", + "dark": "Escuro", + "light": "Claro", + "title": "Tema" + }, + "user": "Utilizador", + "userCommands": "Comandos", + "userCommandsHelp": "Uma lista separada por espaços com os comandos disponíveis para este utilizador. Exemplo:\n", + "userCreated": "Utilizador criado!", + "userDefaults": "Definições de utilizador por defeito", + "userDeleted": "Utilizador eliminado!", + "userManagement": "Gestão de Utilizadores", + "userUpdated": "Utilizador actualizado!", + "username": "Nome de utilizador", + "users": "Utilizadores", + "currentPassword": "A Sua Palavra-passe Actual" + }, + "sidebar": { + "diskUsed": "{used} of {total} used", + "help": "Ajuda", + "hugoNew": "Hugo New", + "login": "Iniciar sessão", + "logout": "Sair", + "myFiles": "Os meus ficheiros", + "newFile": "Novo ficheiro", + "newFolder": "Nova pasta", + "preview": "Pré-visualizar", + "settings": "Definições", + "signup": "Registar", + "siteSettings": "Definições do Site" + }, + "success": { + "linkCopied": "Link copiado!" + }, + "time": { + "days": "Dias", + "hours": "Horas", + "minutes": "Minutos", + "seconds": "Segundos", + "unit": "Unidade de Tempo" + } +} diff --git a/frontend/src/i18n/pt.json b/frontend/src/i18n/pt.json deleted file mode 100644 index c4d91dee..00000000 --- a/frontend/src/i18n/pt.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "permanent": "Permanente", - "buttons": { - "shell": "Alternar shell", - "cancel": "Cancelar", - "close": "Fechar", - "copy": "Copiar", - "copyFile": "Copiar ficheiro", - "copyToClipboard": "Copiar", - "create": "Criar", - "delete": "Eliminar", - "download": "Descarregar", - "info": "Info", - "more": "Mais", - "move": "Mover", - "moveFile": "Mover ficheiro", - "new": "Novo", - "next": "Próximo", - "ok": "OK", - "replace": "Substituir", - "previous": "Anterior", - "rename": "Alterar nome", - "reportIssue": "Reportar erro", - "save": "Guardar", - "search": "Pesquisar", - "select": "Selecionar", - "share": "Partilhar", - "publish": "Publicar", - "selectMultiple": "Selecionar vários", - "schedule": "Agendar", - "switchView": "Alterar vista", - "toggleSidebar": "Alternar barra lateral", - "update": "Atualizar", - "upload": "Enviar", - "permalink": "Obter link permanente" - }, - "success": { - "linkCopied": "Link copiado!" - }, - "errors": { - "forbidden": "Não tem permissões para aceder a isto", - "internal": "Algo correu bastante mal.", - "notFound": "Esta localização não é alcançável." - }, - "files": { - "folders": "Pastas", - "files": "Ficheiros", - "body": "Corpo", - "clear": "Limpar", - "closePreview": "Fechar pré-visualização", - "home": "Início", - "lastModified": "Última alteração", - "loading": "A carregar...", - "lonely": "Sinto-me sozinho...", - "metadata": "Metadados", - "multipleSelectionEnabled": "Seleção múltipla ativada", - "name": "Nome", - "size": "Tamanho", - "sortByName": "Ordenar pelo nome", - "sortBySize": "Ordenar pelo tamanho", - "sortByLastModified": "Ordenar pela última alteração" - }, - "help": { - "click": "selecionar pasta ou ficheiro", - "ctrl": { - "click": "selecionar várias pastas e ficheiros", - "f": "pesquisar", - "s": "guardar um ficheiro ou descarrega a pasta em que está a navegar" - }, - "del": "eliminar os ficheiros selecionados", - "doubleClick": "abrir pasta ou ficheiro", - "esc": "limpar seleção e/ou fechar menu", - "f1": "esta informação", - "f2": "alterar nome do ficheiro", - "help": "Ajuda" - }, - "login": { - "password": "Palavra-passe", - "passwordConfirm": "Confirmação da palavra-passe", - "submit": "Entrar na conta", - "createAnAccount": "Criar uma conta", - "loginInstead": "Já tenho uma conta", - "passwordsDontMatch": "As palavras-passe não coincidem", - "usernameTaken": "O nome de utilizador já está registado", - "signup": "Registar", - "username": "Nome de utilizador", - "wrongCredentials": "Dados errados" - }, - "prompts": { - "copy": "Copiar", - "copyMessage": "Escolha um lugar para onde copiar os ficheiros:", - "currentlyNavigating": "A navegar em:", - "deleteMessageMultiple": "Quer eliminar {count} ficheiro(s)?", - "deleteMessageSingle": "Quer eliminar esta pasta/ficheiro?", - "deleteTitle": "Eliminar ficheiros", - "displayName": "Nome:", - "download": "Descarregar ficheiros", - "downloadMessage": "Escolha o formato do ficheiro que quer descarregar.", - "error": "Algo correu mal", - "fileInfo": "Informação do ficheiro", - "filesSelected": "{count} ficheiros selecionados.", - "lastModified": "Última alteração", - "move": "Mover", - "moveMessage": "Escolha uma nova casa para os seus ficheiros/pastas:", - "newDir": "Nova pasta", - "newDirMessage": "Escreva o nome da nova pasta.", - "newFile": "Novo ficheiro", - "newFileMessage": "Escreva o nome do novo ficheiro.", - "numberDirs": "Número de pastas", - "numberFiles": "Número de ficheiros", - "replace": "Substituir", - "replaceMessage": "Já existe um ficheiro com nome igual a um dos que está a tentar enviar. Quer substituí-lo?\n", - "rename": "Alterar nome", - "renameMessage": "Insira um novo nome para", - "show": "Mostrar", - "size": "Tamanho", - "schedule": "Agendar", - "scheduleMessage": "Escolha uma data para publicar este post.", - "newArchetype": "Criar um novo post baseado num \"archetype\". O seu ficheiro será criado na pasta \"content\"." - }, - "settings": { - "instanceName": "Nome da instância", - "brandingDirectoryPath": "Caminho da pasta de marca", - "documentation": "documentação", - "branding": "Marca", - "disableExternalLinks": "Desativar links externos (exceto documentação)", - "brandingHelp": "Pode personalizar a aparência do seu Navegador de Ficheiros, alterar o nome, substituindo o logótipo, adicionando estilos personalizados e mesmo desativando links externos para o GitHub.\nPara mais informações sobre marca personalizada, por favor veja {0}.", - "admin": "Admin", - "administrator": "Administrador", - "allowCommands": "Executar comandos", - "allowEdit": "Editar, renomear e eliminar ficheiros ou pastas", - "allowNew": "Criar novos ficheiros e pastas", - "allowPublish": "Publicar novas páginas e conteúdos", - "avoidChanges": "(deixe em branco para manter)", - "changePassword": "Alterar palavra-passe", - "commandRunner": "Execução de comandos", - "commandRunnerHelp": "Aqui pode definir comandos que são executados nos eventos nomeados. Tem de escrever um por linha. As variáveis de ambiente {0} e {1} estarão disponíveis, sendo {0} relativo a {1}. Para mais informações sobre esta funcionalidade e as variáveis de ambiente, veja {2}.", - "commandsUpdated": "Comandos atualizados!", - "customStylesheet": "Folha de estilos personalizada", - "examples": "Exemplos", - "globalSettings": "Configurações globais", - "language": "Linguagem", - "lockPassword": "Não permitir que o utilizador altere a palavra-passe", - "newPassword": "Nova palavra-passe", - "newPasswordConfirm": "Confirme a nova palavra-passe", - "newUser": "Novo utilizador", - "password": "Palavra-passe", - "passwordUpdated": "Palavra-passe atualizada!", - "permissions": "Permissões", - "permissionsHelp": "Pode definir o utilizador como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos utilizadores é um privilégio restringido aos administradores.\n", - "profileSettings": "Configurações do utilizador", - "ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n", - "ruleExample2": "bloqueia o acesso ao ficheiro chamado Caddyfile na raiz.", - "rules": "Regras", - "rulesHelp": "Aqui pode definir um conjunto de regras para permitir ou bloquear o acesso do utilizador a determinados ficheiros ou pastas. Os ficheiros bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos ficheiros devem ser relativos à base do utilizador.\n", - "scope": "Base", - "settingsUpdated": "Configurações atualizadas!", - "user": "Utilizador", - "userCommands": "Comandos", - "userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este utilizados. Exemplo:", - "userCreated": "Utilizador criado!", - "userDeleted": "Utilizador eliminado!", - "userManagement": "Gestão de utilizadores", - "username": "Nome de utilizador", - "users": "Utilizadores", - "globalRules": "Isto é um conjunto global de regras de permissão e negação. Elas aplicam-se a todos os utilizadores. Pode especificar regras específicas para cada configuração do utilizador para sobreporem-se a estas.", - "allowSignup": "Permitir que os utilizadores criem contas", - "createUserDir": "Criar automaticamente a pasta de início ao adicionar um novo utilizador", - "insertRegex": "Inserir expressão regular", - "insertPath": "Inserir o caminho", - "userUpdated": "Utilizador atualizado!", - "userDefaults": "Configurações padrão do utilizador", - "defaultUserDescription": "Estas são as configurações padrão para novos utilizadores.", - "executeOnShell": "Executar na shell", - "executeOnShellDescription": "Por padrão, o Navegador de Ficheiros executa os comandos chamando os seus binários diretamente. Se em vez disso, quiser executá-los numa shell (como Bash ou PowerShell), pode definir isso aqui com os argumentos e bandeiras necessários. Se definido, o comando que executa será anexado como um argumento. Isto aplica-se tanto a comandos do utilizador como a hooks de eventos.", - "perm": { - "create": "Criar ficheiros e pastas", - "delete": "Eliminar ficheiros e pastas", - "download": "Descarregar", - "modify": "Editar ficheiros", - "execute": "Executar comandos", - "rename": "Alterar o nome ou mover ficheiros e pastas", - "share": "Partilhar ficheiros" - } - }, - "sidebar": { - "help": "Ajuda", - "login": "Entrar", - "signup": "Registar", - "logout": "Sair", - "myFiles": "Meus ficheiros", - "newFile": "Novo ficheiro", - "newFolder": "Nova pasta", - "settings": "Configurações", - "siteSettings": "Configurações do site", - "hugoNew": "Hugo New", - "preview": "Pré-visualizar" - }, - "search": { - "images": "Imagens", - "music": "Música", - "pdf": "PDF", - "types": "Tipos", - "video": "Vídeos", - "search": "Pesquisar...", - "typeToSearch": "Escrever para pesquisar...", - "pressToSearch": "Tecla Enter para pesquisar..." - }, - "languages": { - "ar": "Árabe", - "en": "Inglês", - "it": "Italiano", - "fr": "Francês", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "Japonês", - "zhCN": "Chinês simplificado", - "zhTW": "Chinês tradicional", - "es": "Espanhol", - "de": "Alemão", - "ru": "Russo", - "pl": "Polaco", - "ko": "Coreano" - }, - "time": { - "unit": "Unidades de tempo", - "seconds": "Segundos", - "minutes": "Minutos", - "hours": "Horas", - "days": "Dias" - }, - "download": { - "downloadFile": "Descarregar ficheiro", - "downloadFolder": "Descarregar pasta" - } -} \ No newline at end of file diff --git a/frontend/src/i18n/ro.json b/frontend/src/i18n/ro.json index 2a52417d..05202545 100644 --- a/frontend/src/i18n/ro.json +++ b/frontend/src/i18n/ro.json @@ -1,15 +1,20 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Comută linia de comandă", "cancel": "Anulează", + "clear": "Curăță", "close": "Închide", + "continue": "Continue", "copy": "Copiază", "copyFile": "Copiază fișier", "copyToClipboard": "Copiază în clipboard", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", "create": "Crează", "delete": "Șterge", "download": "Descarcă", + "file": "File", + "folder": "Folder", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Hide dotfiles", "info": "Info", "more": "Mai mult", "move": "Mută", @@ -17,37 +22,57 @@ "new": "Nou", "next": "Următor", "ok": "OK", - "replace": "Înlocuiește", + "permalink": "Obține legătura permanentă", "previous": "Precedent", + "preview": "Preview", + "publish": "Puplică", "rename": "Redenumește", + "replace": "Înlocuiește", "reportIssue": "Raportează problemă", "save": "Salvează", + "schedule": "Programare", "search": "Caută", "select": "Selectează", - "share": "Distribuie", - "publish": "Puplică", "selectMultiple": "Selecție multiplă", - "schedule": "Programare", + "share": "Distribuie", + "shell": "Comută linia de comandă", + "submit": "Submit", "switchView": "Schimba vizualizarea", "toggleSidebar": "Comută bara laterală", "update": "Actualizează", "upload": "Încarcă", - "permalink": "Obține legătura permanentă" + "openFile": "Open file", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Legătură copiată!" + "download": { + "downloadFile": "Descarcă fișier", + "downloadFolder": "Descarcă director", + "downloadSelected": "Download Selected" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" }, "errors": { "forbidden": "Nu ai permisiuni sa accesezi asta.", "internal": "Ceva nu a funcționat corect.", - "notFound": "Aceasta locație nu poate fi accesată." + "notFound": "Aceasta locație nu poate fi accesată.", + "connection": "The server can't be reached." }, "files": { - "folders": "Directoare", - "files": "Fișiere", "body": "Corp", - "clear": "Curăță", "closePreview": "Închide previzualizarea", + "files": "Fișiere", + "folders": "Directoare", "home": "Acasă", "lastModified": "Ultima modificare", "loading": "Se încarcă...", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Selecție multiplă activată", "name": "Nume", "size": "Dimensiune", + "sortByLastModified": "Ordonează dup ultima modificare", "sortByName": "Ordonează după nume", "sortBySize": "Ordonează după dimensiune", - "sortByLastModified": "Ordonează dup ultima modificare" + "noPreview": "Preview is not available for this file.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "alege fișier sau director", @@ -75,23 +111,30 @@ "help": "Ajutor" }, "login": { - "password": "Parola", - "passwordConfirm": "Confirmă parola", - "submit": "Autentificare", "createAnAccount": "Crează cont", "loginInstead": "Am deja cont", + "password": "Parola", + "passwordConfirm": "Confirmă parola", "passwordsDontMatch": "Parolele nu se potrivesc", - "usernameTaken": "Utilizatorul există", "signup": "Înregistrare", + "submit": "Autentificare", "username": "Utilizator", - "wrongCredentials": "Informații greșite" + "usernameTaken": "Utilizatorul există", + "wrongCredentials": "Informații greșite", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "Permanent", "prompts": { "copy": "Copiază", "copyMessage": "Alege unde vrei să copiezi fișierele:", "currentlyNavigating": "Navigare curentă în:", "deleteMessageMultiple": "Ești sigur că vrei să ștergi aceste {count} fișier(e)?", "deleteMessageSingle": "Ești sigur că vrei să ștergi acest fișier/director?", + "deleteMessageShare": "Are you sure you wish to delete this share({path})?", + "deleteUser": "Are you sure you want to delete this user?", "deleteTitle": "Șterge fișiere", "displayName": "Nume afișat:", "download": "Descarcă fișiere", @@ -102,43 +145,91 @@ "lastModified": "Ultima modificare", "move": "Mută", "moveMessage": "Alege destinația:", + "newArchetype": "Crează o nouă postare pe baza unui șablon. Fișierul va fi creat in directorul conținut.", "newDir": "Director nou", "newDirMessage": "Scrie numele noului director.", "newFile": "Fișier nou", "newFileMessage": "Scrie numele noului fișier.", "numberDirs": "Numărul directoarelor", "numberFiles": "Numărul fișierelor", - "replace": "Înlocuiește", - "replaceMessage": "Unul din fișierele încărcate intră în conflict din cauza denumrii. Vrei să înlocuiești fișierul existent?\n", "rename": "Redenumește", "renameMessage": "Redactează un nou nume pentru", - "show": "Arată", - "size": "Dimensiune", + "replace": "Înlocuiește", + "replaceMessage": "Unul din fișierele încărcate intră în conflict din cauza denumrii. Vrei să înlocuiești fișierul existent?\n", "schedule": "Programare", "scheduleMessage": "Alege data si ora pentru a programa publicarea acestei postări.", - "newArchetype": "Crează o nouă postare pe baza unui șablon. Fișierul va fi creat in directorul conținut." + "show": "Arată", + "size": "Dimensiune", + "upload": "Upload", + "uploadFiles": "Uploading {files} files...", + "uploadMessage": "Select an option to upload.", + "optionalPassword": "Optional password", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Imagini", + "music": "Muzică", + "pdf": "PDF", + "pressToSearch": "Apasă enter pentru a căuta...", + "search": "Caută...", + "typeToSearch": "Scrie pentru a căuta...", + "types": "Tipuri", + "video": "Video" }, "settings": { - "instanceName": "Numele instanței", - "brandingDirectoryPath": "Calea către directorul de branding", - "documentation": "documentație", - "branding": "Branding", - "disableExternalLinks": "Dezactivează linkurile externe (exceptând documentația)", - "brandingHelp": "Poți personaliza cum arată instanța ta de File Browser modificându-i numele, înlocuindu-i logo-ul, adăugându-i stiluri personalizate si chiar dezactivând linkurile catre GitHub.\nPentru mai multe informații despre branding fă click aici", + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Execută comenzi", "allowEdit": "Modifică, redenumește și șterge fișiere sau directoare", "allowNew": "Crează noi fișiere sau directoare", "allowPublish": "Publică noi pagini și postări", + "allowSignup": "Permite utilizatorilor să se înregistreze", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(lasă gol pentru a nu schimba)", + "branding": "Branding", + "brandingDirectoryPath": "Calea către directorul de branding", + "brandingHelp": "Poți personaliza cum arată instanța ta de File Browser modificându-i numele, înlocuindu-i logo-ul, adăugându-i stiluri personalizate si chiar dezactivând linkurile catre GitHub.\nPentru mai multe informații despre branding fă click aici", "changePassword": "Schimbă parola", "commandRunner": "Rulează comenzi", "commandRunnerHelp": "Aici poti seta comenzile care sunt executate in evenimente. Trebuie să scrii una pe linie. Variabilele de mediu {0} și {1} vor fi disponile, {0} fiind relativă la {1}. Pentru mai multe informații despre acest feature si variabilele de mediu disponibile, cititi {2}.", "commandsUpdated": "Comenzi actualizate!", + "createUserDir": "Auto create user home dir while adding new user", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Base path for user home directories", + "userScopeGenerationPlaceholder": "The scope will be auto generated", + "createUserHomeDirectory": "Create user home directory", "customStylesheet": "CSS personalizat", + "defaultUserDescription": "Acestea sunt setările implicite pentru noii utilizatori.", + "disableExternalLinks": "Dezactivează linkurile externe (exceptând documentația)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "documentație", "examples": "Exemple", + "executeOnShell": "Execută in linia de comandă", + "executeOnShellDescription": "Implicit, File Browser execută comenzile prin apelare directă a binarelor. Daca vrei sa le rulezi într-un shell (cum ar fi Bash sau PowerShell), le poți defini aici cu argumentele necesare. Daca este setata, comanda va fi adăugată ca argument. Se aplică pentru comenzi si hookuri.", + "globalRules": "Acesta este un set global de reguli. Se aplică tuturor utilizatorilor. Poți defini reguli specifice din setările fiecărui utilizator pentru a le suprascrie pe acestea.", "globalSettings": "Setări globale", + "hideDotfiles": "Hide dotfiles", + "insertPath": "Redactează calea", + "insertRegex": "Redactează expresia regulată", + "instanceName": "Numele instanței", "language": "Limba", "lockPassword": "Împiedică utilizatorul să-și schimbe parola", "newPassword": "Noua ta parolă", @@ -146,91 +237,70 @@ "newUser": "Utilizator nou", "password": "Parola", "passwordUpdated": "Parola actualizată!", + "path": "Path", + "perm": { + "create": "Crează fișiere și directoare", + "delete": "Șterge fișiere și directoare", + "download": "Descarcă", + "execute": "Execută comenzi", + "modify": "Modifică fișiere", + "rename": "Redenumește sau mută fișiere și directoare", + "share": "Distribuie fișiere" + }, "permissions": "Permisiuni", "permissionsHelp": "Poți alege ca un utilizator să fie administrator sau să-i alegi permisiunile individual. Dacă alegi \"Administrator\", toate celelalte opțiuni vor fi bifate automat. Gestionarea utilizatorilor rămâne un privilegiu exclusiv al administratorilor.\n", "profileSettings": "Setări profil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "împiedică accesul la fisiere cu punct in față (.), cum ar fi .git, .gitignore în orice director.\n", "ruleExample2": "împiedică accesul la fișierul Caddyfile din rădăcina domeniului.", "rules": "Reguli", "rulesHelp": "Aici poți defini un set de reguli pentru acest utilizator. Fișierele blocate nu vor apărea in lista și nici nu vor putea fi accesate de utilizator. Expresiile regulate si căile relative la domeniul utilizatorului sunt permise.\n", "scope": "Domeniu", + "setDateFormat": "Set exact date format", "settingsUpdated": "Setări actualizate!", + "shareDuration": "Share Duration", + "shareManagement": "Share Management", + "shareDeleted": "Share deleted!", + "singleClick": "Use single clicks to open files and directories", + "themes": { + "default": "System default", + "dark": "Dark", + "light": "Light", + "title": "Theme" + }, "user": "Utilizator", "userCommands": "Comenzi", "userCommandsHelp": "O lista de comenzi disponibile acestui utilizator separate de spații. Exemplu:\n", "userCreated": "Utilizator creat!", + "userDefaults": "Setări implicite", "userDeleted": "Utilizator șters!", "userManagement": "Gestionare utilizatori", + "userUpdated": "Utilizator actualizat!", "username": "Utilizator", "users": "Utilizatori", - "globalRules": "Acesta este un set global de reguli. Se aplică tuturor utilizatorilor. Poți defini reguli specifice din setările fiecărui utilizator pentru a le suprascrie pe acestea.", - "allowSignup": "Permite utilizatorilor să se înregistreze", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Redactează expresia regulată", - "insertPath": "Redactează calea", - "userUpdated": "Utilizator actualizat!", - "userDefaults": "Setări implicite", - "defaultUserDescription": "Acestea sunt setările implicite pentru noii utilizatori.", - "executeOnShell": "Execută in linia de comandă", - "executeOnShellDescription": "Implicit, File Browser execută comenzile prin apelare directă a binarelor. Daca vrei sa le rulezi într-un shell (cum ar fi Bash sau PowerShell), le poți defini aici cu argumentele necesare. Daca este setata, comanda va fi adăugată ca argument. Se aplică pentru comenzi si hookuri.", - "perm": { - "create": "Crează fișiere și directoare", - "delete": "Șterge fișiere și directoare", - "download": "Descarcă", - "modify": "Modifică fișiere", - "execute": "Execută comenzi", - "rename": "Redenumește sau mută fișiere și directoare", - "share": "Distribuie fișiere" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajutor", + "hugoNew": "Hugo nou", "login": "Autentificare", - "signup": "Înregistrare", "logout": "Logout", "myFiles": "Fișierele mele", "newFile": "Fișier nou", "newFolder": "Director nou", + "preview": "Previzualizare", "settings": "Setări", - "siteSettings": "Setări site", - "hugoNew": "Hugo nou", - "preview": "Previzualizare" + "signup": "Înregistrare", + "siteSettings": "Setări site" }, - "search": { - "images": "Imagini", - "music": "Muzică", - "pdf": "PDF", - "types": "Tipuri", - "video": "Video", - "search": "Caută...", - "typeToSearch": "Scrie pentru a căuta...", - "pressToSearch": "Apasă enter pentru a căuta..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Legătură copiată!" }, "time": { - "unit": "Unitate de timp", - "seconds": "Secunde", - "minutes": "Minute", + "days": "Zile", "hours": "Ore", - "days": "Zile" - }, - "download": { - "downloadFile": "Descarcă fișier", - "downloadFolder": "Descarcă director" + "minutes": "Minute", + "seconds": "Secunde", + "unit": "Unitate de timp" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/ru.json b/frontend/src/i18n/ru.json index c544bcea..1cdab2ca 100644 --- a/frontend/src/i18n/ru.json +++ b/frontend/src/i18n/ru.json @@ -1,15 +1,20 @@ { - "permanent": "Постоянный", "buttons": { - "shell": "Toggle shell", "cancel": "Отмена", + "clear": "Очистить", "close": "Закрыть", + "continue": "Продолжить", "copy": "Копировать", "copyFile": "Скопировать файл", "copyToClipboard": "Скопировать в буфер", + "copyDownloadLinkToClipboard": "Скопировать ссылку в буфер", "create": "Создать", "delete": "Удалить", "download": "Скачать", + "file": "Файл", + "folder": "Папка", + "fullScreen": " Развернуть на весь экран", + "hideDotfiles": "Скрыть точечные файлы", "info": "Инфо", "more": "Еще", "move": "Переместить", @@ -17,38 +22,60 @@ "new": "Новый", "next": "Вперед", "ok": "OK", - "replace": "Перезаписать", + "permalink": "Получить постоянную ссылку", "previous": "Назад", + "preview": "Предпросмотр", + "publish": "Опубликовать", "rename": "Переименовать", + "replace": "Перезаписать", "reportIssue": "Сообщить о проблеме", + "resumeTransfer": "Resume previous transfer", + "resumeTransferTooltip": "Skip all conflicting files, except the ones that are smaller on the server as we suppose that their transfert has been interrupted.", "save": "Сохранить", + "schedule": "Планировка", "search": "Поиск", "select": "Выбрать", - "share": "Поделиться", - "publish": "Опубликовать", "selectMultiple": "Мультивыбор", - "schedule": "Планировка", + "share": "Поделиться", + "shell": "Командная строка", + "submit": "Отправить", "switchView": "Вид", "toggleSidebar": "Боковая панель", "update": "Обновить", "upload": "Загрузить", - "permalink": "Получить постоянную ссылку" + "openFile": "Открыть файл", + "openDirect": "View raw", + "discardChanges": "Отказаться", + "stopSearch": "Stop searching", + "saveChanges": "Сохранить", + "editAsText": "Редактировать как текст", + "increaseFontSize": "Увеличить размер шрифта", + "decreaseFontSize": "Уменьшить размер шрифта", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Ссылка скопирована!" + "download": { + "downloadFile": "Скачать файл", + "downloadFolder": "Загрузить папку", + "downloadSelected": "Скачать выбранное" + }, + "upload": { + "abortUpload": "Вы действительно, что хотите прервать операцию?" }, "errors": { - "forbidden": "You don't have permissions to access this.", + "forbidden": "У вас нет прав доступа к этому.", "internal": "Что-то пошло не так.", - "notFound": "Неправильная ссылка." + "notFound": "Неправильная ссылка.", + "connection": "Нет подключения к серверу." }, "files": { - "folders": "Каталоги", - "files": "Файлы", "body": "Тело", - "clear": "Очистить", "closePreview": "Закрыть", - "home": "Дом", + "files": "Файлы", + "folders": "Папки", + "home": "Главная", "lastModified": "Последнее изменение", "loading": "Загрузка...", "lonely": "Здесь пусто...", @@ -56,15 +83,26 @@ "multipleSelectionEnabled": "Мультивыбор включен", "name": "Имя", "size": "Размер", + "sortByLastModified": "Сортировка по дате изменения", "sortByName": "Сортировка по имени", "sortBySize": "Сортировка по размеру", - "sortByLastModified": "Сортировка по изменению" + "noPreview": "Предварительный просмотр для этого файла недоступен.", + "csvTooLarge": "Этот CSV файл слишком большой для предпросмотра (>5 МБ). Скачайте и откройте его локально.", + "csvLoadFailed": "Не удалось загрузить этот CSV.", + "showingRows": "Отображается {count} строк(а)", + "columnSeparator": "Разделитель столбцов", + "csvSeparators": { + "comma": "Запятая (,)", + "semicolon": "Точка с запятой (;)", + "both": "Оба варианта — (,) и (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "выбрать файл или каталог", "ctrl": { "click": "выбрать несколько файлов или каталогов", - "f": "открыть поиск", + "f": "открытые поиски", "s": "скачать файл или текущий каталог" }, "del": "удалить выбранные элементы", @@ -75,70 +113,125 @@ "help": "Помощь" }, "login": { + "createAnAccount": "Создать аккаунт", + "loginInstead": "Уже есть аккаунт", "password": "Пароль", - "passwordConfirm": "Password Confirmation", + "passwordConfirm": "Подтверждение пароля", + "passwordsDontMatch": "Пароли не совпадают", + "signup": "Зарегистрироваться", "submit": "Войти", - "createAnAccount": "Create an account", - "loginInstead": "Already have an account", - "passwordsDontMatch": "Passwords don't match", - "usernameTaken": "Username already taken", - "signup": "Signup", "username": "Имя пользователя", - "wrongCredentials": "Неверные данные" + "usernameTaken": "Данное имя пользователя уже занято", + "wrongCredentials": "Неверные данные", + "passwordTooShort": "Пароль должен состоять как минимум из {min} символов", + "logout_reasons": { + "inactivity": "Сессия завершена после долгого отсутствия." + } }, + "permanent": "Постоянный", "prompts": { "copy": "Копировать", "copyMessage": "Копировать в:", "currentlyNavigating": "Текущий каталог:", "deleteMessageMultiple": "Удалить эти файлы ({count})?", "deleteMessageSingle": "Удалить этот файл/каталог?", + "deleteMessageShare": "Удалить этот общий файл/каталог ({path})?", + "deleteUser": "Вы действительно, хотите удалить пользователя?", "deleteTitle": "Удалить файлы", "displayName": "Отображаемое имя:", "download": "Скачать файлы", - "downloadMessage": "Скачать каталог в следующем формате.", + "downloadMessage": "Выберите формат в котором хотите скачать.", "error": "Ошибка", "fileInfo": "Информация о файле", "filesSelected": "Файлов выбрано: {count}.", "lastModified": "Последнее изменение", "move": "Переместить", - "moveMessage": "Переместить в:", + "moveMessage": "Выберите новый домашний каталог для ваших файлов/папок:", + "newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге.", "newDir": "Новый каталог", "newDirMessage": "Имя нового каталога.", "newFile": "Новый файл", "newFileMessage": "Имя нового файла.", "numberDirs": "Количество каталогов", "numberFiles": "Количество файлов", - "replace": "Заменить", - "replaceMessage": "Имя одного из загружаемых файлов совпадает с уже существующим файлом. Вы хотите заменить существующий?\n", "rename": "Переименовать", "renameMessage": "Новое имя", - "show": "Показать", - "size": "Размер", + "replace": "Заменить", + "replaceMessage": "Имя одного из загружаемых файлов совпадает с уже существующим файлом. Вы хотите заменить существующий?\n", "schedule": "Планировка", "scheduleMessage": "Запланировать дату и время публикации.", - "newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге." + "show": "Показать", + "size": "Размер", + "upload": "Загрузить", + "uploadFiles": "Загружаю {files} файлы...", + "uploadMessage": "Выберите вариант для загрузки.", + "optionalPassword": "Необязательный пароль", + "resolution": "Разрешение", + "discardEditorChanges": "Вы действительно желаете отменить ваши правки?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Изображения", + "music": "Музыка", + "pdf": "PDF", + "pressToSearch": "Нажмите Enter для поиска ...", + "search": "Поиск...", + "typeToSearch": "Введите имя файла ...", + "types": "Типы", + "video": "Видео" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Тема редактора Ace", "admin": "Админ", "administrator": "Администратор", "allowCommands": "Запуск команд", "allowEdit": "Редактирование, переименование и удаление файлов или каталогов", "allowNew": "Создание новых файлов или каталогов", "allowPublish": "Публикация новых записей и страниц", - "avoidChanges": "(пусто для пропуска)", + "allowSignup": "Разрешить пользователям регистрироваться", + "hideLoginButton": "Спрятать кнопку входа с публичных страниц", + "avoidChanges": "(оставьте поле пустым, чтобы избежать изменений)", + "branding": "Брендинг", + "brandingDirectoryPath": "Путь к каталогу брендов", + "brandingHelp": "Вы можете настроить внешний вид файлового браузера, изменив его имя, заменив логотип, добавив собственные стили и даже отключив внешние ссылки на GitHub.\nДополнительную информацию о персонализированном брендинге можно найти на странице {0}.", "changePassword": "Изменение пароля", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "commandRunner": "Запуск команд", + "commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.", "commandsUpdated": "Команды обновлены!", + "createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя", + "minimumPasswordLength": "Минимальная длина пароля", + "tusUploads": "Загруженные файлы", + "tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.", + "tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.", + "tusUploadsRetryCount": "Количество повторных попыток, которые необходимо выполнить, если фрагмент не удалось загрузить.", + "userHomeBasePath": "Путь к домашнему каталогу пользователя", + "userScopeGenerationPlaceholder": "Область действия будет сгенерирована автоматически", + "createUserHomeDirectory": "Создать домашний каталог пользователя", "customStylesheet": "Свой стиль", + "defaultUserDescription": "Это настройки по умолчанию для новых пользователей.", + "disableExternalLinks": "Отключить внешние ссылки (кроме документации)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "документация", "examples": "Примеры", + "executeOnShell": "Выполнить в командной строке", + "executeOnShellDescription": "По умолчанию File Browser выполняет команды, напрямую вызывая их бинарные файлы. Если вы хотите вместо этого запускать их в оболочке (например, Bash или PowerShell), вы можете определить их здесь с необходимыми аргументами и флагами. Если установлено, выполняемая вами команда будет добавлена в качестве аргумента. Это относится как к пользовательским командам, так и к обработчикам событий.", + "globalRules": "Это глобальный набор разрешающих и запрещающих правил. Они применимы к каждому пользователю. Вы можете определить определенные правила для настроек каждого пользователя, чтобы переопределить их.", "globalSettings": "Глобальные настройки", + "hideDotfiles": "Скрыть точечные файлы", + "insertPath": "Вставьте путь", + "insertRegex": "Вставить регулярное выражение", + "instanceName": "Текущее название программы", "language": "Язык", "lockPassword": "Запретить пользователю менять пароль", "newPassword": "Новый пароль", @@ -146,91 +239,71 @@ "newUser": "Новый пользователь", "password": "Пароль", "passwordUpdated": "Пароль обновлен!", + "path": "Путь", + "perm": { + "create": "Создавать файлы и каталоги", + "delete": "Удалять файлы и каталоги", + "download": "Скачивать", + "execute": "Выполнять команды", + "modify": "Редактировать файлы", + "rename": "Переименовывать или перемещать файлы и каталоги", + "share": "Share files (require download permission)" + }, "permissions": "Права доступа", "permissionsHelp": "Можно настроить пользователя как администратора или выбрать разрешения индивидуально. При выборе \"Администратор\", все остальные параметры будут автоматически выбраны. Управление пользователями - привилегия администратора.\n", "profileSettings": "Настройки профиля", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "предотвратить доступ к любому скрытому файлу (например: .git, .gitignore) в каждой папке.\n", "ruleExample2": "блокирует доступ к файлу с именем Caddyfile в корневой области.", "rules": "Права", "rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n", - "scope": "Корень", + "scope": "Область", + "setDateFormat": "Установить точный формат даты", "settingsUpdated": "Настройки применены!", + "shareDuration": "Время расшаренной ссылки", + "shareManagement": "Управление расшаренными ссылками", + "shareDeleted": "Расшаренная ссылка удалена!", + "singleClick": "Открытие файлов и каталогов одним кликом", + "themes": { + "default": " Системные настройки по умолчанию", + "dark": "Темная", + "light": "Светлая", + "title": "Тема" + }, "user": "Пользователь", "userCommands": "Команды", "userCommandsHelp": "Список команд доступных пользователю, разделенный пробелами. Пример:\n", "userCreated": "Пользователь создан!", + "userDefaults": "Настройки пользователя по умолчанию", "userDeleted": "Пользователь удален!", "userManagement": "Управление пользователями", + "userUpdated": "Пользователь изменен!", "username": "Имя пользователя", "users": "Пользователи", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "Пользователь изменен!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "Create files and directories", - "delete": "Delete files and directories", - "download": "Download", - "modify": "Edit files", - "execute": "Execute commands", - "rename": "Rename or move files and directories", - "share": "Share files" - } + "currentPassword": "Your Current Password" }, "sidebar": { + "diskUsed": "{used} of {total} used", "help": "Помощь", - "login": "Login", - "signup": "Signup", - "logout": "Выход", + "hugoNew": "Hugo New", + "login": "Войти", + "logout": "Выйти", "myFiles": "Файлы", "newFile": "Новый файл", "newFolder": "Новый каталог", + "preview": "Предпросмотр", "settings": "Настройки", - "siteSettings": "Настройки сайта", - "hugoNew": "Hugo New", - "preview": "Предпросмотр" + "signup": "Зарегистрироваться", + "siteSettings": "Настройки сайта" }, - "search": { - "images": "Изображения", - "music": "Музыка", - "pdf": "PDF", - "types": "Типы", - "video": "Видео", - "search": "Поиск...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Ссылка скопирована!" }, "time": { - "unit": "Единица времени", - "seconds": "Секунды", - "minutes": "Минуты", + "days": "Дни", "hours": "Часы", - "days": "Дни" - }, - "download": { - "downloadFile": "Download File", - "downloadFolder": "Download Folder" + "minutes": "Минуты", + "seconds": "Секунды", + "unit": "Единица времени" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/sk.json b/frontend/src/i18n/sk.json new file mode 100644 index 00000000..c43b0816 --- /dev/null +++ b/frontend/src/i18n/sk.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Zrušiť", + "clear": "Zrušiť výber", + "close": "Zavrieť", + "continue": "Pokračovať", + "copy": "Kopírovať", + "copyFile": "Kopírovať súbor", + "copyToClipboard": "Kopírovať do schránky", + "copyDownloadLinkToClipboard": "Kopírovať odkaz na stiahnutie do schránky", + "create": "Vytvoriť", + "delete": "Odstrániť", + "download": "Stiahnuť", + "file": "Súbor", + "folder": "Priečinok", + "fullScreen": "Prepnúť na celú obrazovku", + "hideDotfiles": "Skryť súbory začínajúce bodkou", + "info": "Info", + "more": "Viac", + "move": "Presunúť", + "moveFile": "Presunúť súbory", + "new": "Nový", + "next": "Ďalšie", + "ok": "OK", + "permalink": "Získať trvalý odkaz", + "previous": "Predošlé", + "preview": "Náhľad", + "publish": "Zverejniť", + "rename": "Premenovať", + "replace": "Nahradiť", + "reportIssue": "Nahlásiť problém", + "save": "Uložiť", + "schedule": "Naplánovať", + "search": "Hľadať", + "select": "Vybrať", + "selectMultiple": "Vybrať viaceré", + "share": "Zdieľať", + "shell": "Prepnúť shell", + "submit": "Poslať", + "switchView": "Prepnúť pohľad", + "toggleSidebar": "Prepnúť sidebar", + "update": "Aktualizovať", + "upload": "Nahrať", + "openFile": "Otvoriť súbor", + "openDirect": "View raw", + "discardChanges": "Zahodiť", + "stopSearch": "Stop searching", + "saveChanges": "Uložiť zmeny", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Stiahnuť súbor", + "downloadFolder": "Stiahnuť priečinok", + "downloadSelected": "Stiahnuť vybraté" + }, + "upload": { + "abortUpload": "Naozaj chcete prerušiť?" + }, + "errors": { + "forbidden": "You don't have permissions to access this.", + "internal": "Something really went wrong.", + "notFound": "This location can't be reached.", + "connection": "The server can't be reached." + }, + "files": { + "body": "Telo", + "closePreview": "Zavrieť náhľad", + "files": "Súbory", + "folders": "Priečinky", + "home": "Domov", + "lastModified": "Posledná zmena", + "loading": "Načítanie...", + "lonely": "Je tu tak pusto...", + "metadata": "Metadata", + "multipleSelectionEnabled": "Zapnutý viacnásobný výber", + "name": "Názov", + "size": "Veľkosť", + "sortByLastModified": "Zoradiť podľa dátumu", + "sortByName": "Zoradiť podľa názvu", + "sortBySize": "Zoradiť podľa veľkosti", + "noPreview": "Pre tento súbor nie je dostupný náhľad.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "vyberie súbor alebo priečinok", + "ctrl": { + "click": "vyberie viac súborov alebo priečinkov", + "f": "otvorí vyhľadávanie", + "s": "uloží súbor alebo stiahne priečinok tam kde ste" + }, + "del": "odstráni vybraté položky", + "doubleClick": "otvorí súbor alebo priečinok", + "esc": "zruší výber a/alebo zavrie okno", + "f1": "tieto informácie", + "f2": "premenuje súbor", + "help": "Pomoc" + }, + "login": { + "createAnAccount": "Vytvoriť účet", + "loginInstead": "Už mám účet", + "password": "Heslo", + "passwordConfirm": "Potvrdenie hesla", + "passwordsDontMatch": "Heslá nesúhlasia", + "signup": "Registrovať", + "submit": "Prihlásiť", + "username": "Používateľské meno", + "usernameTaken": "Meno je už obsadené", + "wrongCredentials": "Nesprávne prihlasovacie údaje", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "Boli ste odhlásení z dôvodu nečinnosti." + } + }, + "permanent": "Trvalé", + "prompts": { + "copy": "Kopírovať", + "copyMessage": "Zvoľte miesto, kde chcete kopírovať súbory:", + "currentlyNavigating": "Aktuálna cesta:", + "deleteMessageMultiple": "Naozaj chcete odstrániť {count} súbor(ov)?", + "deleteMessageSingle": "Naozaj chcete odstrániť tento súbor/priečinok?", + "deleteMessageShare": "Naozaj chcete odstrániť toto zdieľanie({path})?", + "deleteUser": "Naozaj chcete odstrániť tohto používateľa?", + "deleteTitle": "Odstránenie súborov", + "displayName": "Zobrazený názov:", + "download": "Stiahnuť súbory", + "downloadMessage": "Vyberte formát, ktorý chcete stiahnuť.", + "error": "Niečo sa pokazilo", + "fileInfo": "Informácie o súbore", + "filesSelected": "{count} súborov vybratých.", + "lastModified": "Dátum zmeny", + "move": "Presunúť", + "moveMessage": "Zvoľte nový domov pre vaše súbory/priečinky:", + "newArchetype": "Vytvorí nový príspevok z archetypu. Nový súbor sa vytvorí v priečinku s obsahom.", + "newDir": "Nový priečinok", + "newDirMessage": "Napíšte názov nového priečinka.", + "newFile": "Nový súbor", + "newFileMessage": "Napíšte názov nového súboru.", + "numberDirs": "Počet priečinkov", + "numberFiles": "Počet súborov", + "rename": "Premenovať", + "renameMessage": "Zadajte nový názov pre", + "replace": "Nahradiť", + "replaceMessage": "Niektorý nahrávaný súbor je v konflikte názvov. Chcete nahradiť existujúci súbor?\n", + "schedule": "Naplánovať", + "scheduleMessage": "Pick a date and time to schedule the publication of this post.", + "show": "Zobraziť", + "size": "Veľkosť", + "upload": "Nahrať", + "uploadFiles": "Nahráva sa {files} súborov...", + "uploadMessage": "Zvoľte možnosť nahrávania.", + "optionalPassword": "Voliteľné heslo", + "resolution": "Rozlíšenie", + "discardEditorChanges": "Naozaj chcete zahodiť vykonané zmeny?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Obrázky", + "music": "Hudba", + "pdf": "PDF", + "pressToSearch": "Vyhľadáte stlačením Enter...", + "search": "Hľadať...", + "typeToSearch": "Vyhľadáte písaním...", + "types": "Typy", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrátor", + "allowCommands": "Vykonávať príkazy", + "allowEdit": "Upravovať, premenovať a odstraňovať súbory a priečinky", + "allowNew": "Vytvárať nové súbory a priečinky", + "allowPublish": "Zverejňovať nové príspevky a stránky", + "allowSignup": "Povoliť registráciu používateľov", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(nechajte prázdne, aby sa nezmenilo)", + "branding": "Vlastný vzhľad", + "brandingDirectoryPath": "Cesta k priečinku s vlastným vzhľadom", + "brandingHelp": "Môžete si prispôsobiť ako bude vyzerá váš File Browser instance zmenou jeho názvu, výmenou loga a pridaním vlastný štýlov alebo vypnutím externých odkazov na GitHub.\nViac informácií o vlastnom vzhľade nájdete na {0}.", + "changePassword": "Zmeniť heslo", + "commandRunner": "Spúšťač príkazov", + "commandRunnerHelp": "Sem môžete nastaviť príkazy, ktoré sa vykonajú pri určitých udalostiach. Musíte písať jeden na riadok. Premenné prostredia {0} a {1} sú k dispozícii, s tým že {0} relatívne k {1}. Viac informácií o tejto funkcionalite a dostupných premenných prostredia nájdete na {2}.", + "commandsUpdated": "Príkazy upravené!", + "createUserDir": "Automaticky vytvoriť domovský priečinok pri pridaní používateľa", + "minimumPasswordLength": "Minimálna dĺžka hesla", + "tusUploads": "Nahrávanie po častiach", + "tusUploadsHelp": "Prehliadač súborov podporuje nahrávanie súborov po častiach, čo umožňuje vytváranie efektívnych, spoľahlivých, obnoviteľných a po častiach nahrávaných súborov aj v prípade nespoľahlivých sietí.", + "tusUploadsChunkSize": "Označuje maximálnu veľkosť požiadavky (pre menšie nahratia sa použijú priame nahratia). Môžete zadať celé číslo označujúce veľkosť v bajtoch alebo reťazec ako 10 MB, 1 GB atď.", + "tusUploadsRetryCount": "Počet opakovaných pokusov, ktoré sa majú vykonať, ak sa nepodarí nahrať časť súboru.", + "userHomeBasePath": "Východisková cesta pre domáce adresáre používateľov", + "userScopeGenerationPlaceholder": "Rozsah bude automaticky generovaný", + "createUserHomeDirectory": "Vytvoriť domovský adresár používateľa", + "customStylesheet": "Vlastný Stylesheet", + "defaultUserDescription": "Toto sú predvolané nastavenia nového používateľa.", + "disableExternalLinks": "Vypnúť externé odkazy (okrem dokumentácie)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "dokumentácia", + "examples": "Príklady", + "executeOnShell": "Vykonať cez shell", + "executeOnShellDescription": "Predvolene File Browser vykonáva príkazy volaním priamo ich binárok. Ak ich chcete spúšťať cez shell (napr. Bash alebo PowerShell), môžete ho napísať sem a pridať potrebné argumenty a flagy. Ak je nastavený, tak sa príkazy budú spúšťať pridaním na koniec ako argument. Toto sa týka používateľských príkazov aj udalostí.", + "globalRules": "Toto je globálne nastavenie pravidiel. Aplikujú sa na všetkých používateľov. Môžete definovať špecifické pravidlá pre každého používateľa a prekryť tak pravidlá nastavené tu.", + "globalSettings": "Globálne nastavenia", + "hideDotfiles": "Skryť súbory začínajúce bodkou", + "insertPath": "Vložte cestu", + "insertRegex": "Vložte regex výraz", + "instanceName": "Názov inštalácie", + "language": "Jazyk", + "lockPassword": "Zabrániť používateľovi meniť heslo", + "newPassword": "Nové heslo", + "newPasswordConfirm": "Potvrdenie nového hesla", + "newUser": "Nový používateľ", + "password": "Heslo", + "passwordUpdated": "Heslo zmenené!", + "path": "Cesta", + "perm": { + "create": "Vytvárať súbory a priečinky", + "delete": "Odstraňovať súbory a priečinky", + "download": "Stiahnuť", + "execute": "Vykonávať príkazy", + "modify": "Upravovať súbory", + "rename": "Premenovať a presúvať súbory a priečinky", + "share": "Zdieľať súbory" + }, + "permissions": "Práva", + "permissionsHelp": "Môžete nastaviť používateľa, aby bol administrátorom alebo vybrať práva jednotlivo. Ak zvolíte \"Administrator\", všetky ďalšie budú automaticky zaškrtnuté. Manažment používateľov ostáva v správe administrátora.\n", + "profileSettings": "Nastavenia profilu", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "blokuje prístup ku všetkým súborom začínajúcim bodkou (napríklad .git, .gitignore) v každom priečinku.\n", + "ruleExample2": "blokuje prístup k súborom s názvom Caddyfile v koreňovom priečinku.", + "rules": "Pravidlá", + "rulesHelp": "Tu môžete definovať pravidlá pre konkrétneho používateľa. Blokované súbory používateľ nebude vidieť a ani nebude k nim mať prístup. Podporujeme regex a cesty relatívne k používateľovi.\n", + "scope": "Scope", + "setDateFormat": "Nastaviť presný formát dátumu", + "settingsUpdated": "Nastavenia upravené!", + "shareDuration": "Trvanie zdieľania", + "shareManagement": "Správa zdieľania", + "shareDeleted": "Zdieľanie odstránené!", + "singleClick": "Používať jeden klik na otváranie súborov a priečinkov", + "themes": { + "default": "Predvolené nastavenie systému", + "dark": "Tmavá", + "light": "Svetlá", + "title": "Téma" + }, + "user": "Používateľ", + "userCommands": "Príkazy", + "userCommandsHelp": "Zoznam povolených príkazov oddelených medzerou pre tohoto používateľa. Napríklad:\n", + "userCreated": "Používateľ vytvorený!", + "userDefaults": "Predvolené nastavenia používateľa", + "userDeleted": "Používateľ odstránený!", + "userManagement": "Správa používateľov", + "userUpdated": "Používateľ upravený!", + "username": "Meno používateľa", + "users": "Používatelia", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Pomoc", + "hugoNew": "Nový Hugo", + "login": "Prihlásiť", + "logout": "Odhlásiť", + "myFiles": "Moje súbory", + "newFile": "Nový súbor", + "newFolder": "Nový priečinok", + "preview": "Náhľad", + "settings": "Nastavenia", + "signup": "Registrovať", + "siteSettings": "Nastavenia stránky" + }, + "success": { + "linkCopied": "Odkaz skopírovaný!" + }, + "time": { + "days": "Dni", + "hours": "Hodiny", + "minutes": "Minúty", + "seconds": "Sekundy", + "unit": "Jednotka času" + } +} diff --git a/frontend/src/i18n/sv-se.json b/frontend/src/i18n/sv-se.json index 4a12a6af..5102f9b0 100644 --- a/frontend/src/i18n/sv-se.json +++ b/frontend/src/i18n/sv-se.json @@ -1,15 +1,20 @@ { - "permanent": "Permanent", "buttons": { - "shell": "Växla skal", "cancel": "Avbryt", + "clear": "Rensa", "close": "Stäng", + "continue": "Fortsätt", "copy": "Kopiera", "copyFile": "Kopiera fil", "copyToClipboard": "Kopiera till urklipp", + "copyDownloadLinkToClipboard": "Kopiera hämtningslänk till urklipp", "create": "Skapa", "delete": "Ta bort", "download": "Ladda ner", + "file": "Fil", + "folder": "Mapp", + "fullScreen": "Växla helskärm", + "hideDotfiles": "Dölj punktfiler", "info": "Info", "more": "Mer", "move": "Flytta", @@ -17,37 +22,57 @@ "new": "Nytt", "next": "Nästa", "ok": "OK", - "replace": "Ersätt", + "permalink": "Skapa en permanent länk", "previous": "Föregående", + "preview": "Förhandsvisa", + "publish": "Publisera", "rename": "Ändra namn", + "replace": "Ersätt", "reportIssue": "Rapportera problem", "save": "Spara", + "schedule": "Schema", "search": "Sök", "select": "Välj", - "share": "Dela", - "publish": "Publisera", "selectMultiple": "Välj flera", - "schedule": "Schema", + "share": "Dela", + "shell": "Växla skal", + "submit": "Skicka", "switchView": "Byt vy", "toggleSidebar": "Växla sidofält", "update": "Uppdatera", "upload": "Ladda upp", - "permalink": "Skapa en permanent länk" + "openFile": "Öppna fil", + "openDirect": "View raw", + "discardChanges": "Förkasta", + "stopSearch": "Stop searching", + "saveChanges": "Spara ändringar", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "Länk kopierad" + "download": { + "downloadFile": "Ladda ner fil", + "downloadFolder": "Ladda ner mapp", + "downloadSelected": "Hämta markerade" + }, + "upload": { + "abortUpload": "Är du säker på att du vill avbryta?" }, "errors": { "forbidden": "Du saknar rättigheter till detta", "internal": "Något gick fel", - "notFound": "Det går inte att nå den här platsen." + "notFound": "Det går inte att nå den här platsen.", + "connection": "Servern går inte att nå." }, "files": { - "folders": "Mappar", - "files": "Filer", "body": "Huvud", - "clear": "Rensa", "closePreview": "Stäng förhands granskningen", + "files": "Filer", + "folders": "Mappar", "home": "Hem", "lastModified": "Senast ändrad", "loading": "Laddar.....", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "Flerval är på", "name": "Namn", "size": "Storlek", + "sortByLastModified": "Sortera på senast ändrad", "sortByName": "Sortera på namn", "sortBySize": "Sortera på storlek", - "sortByLastModified": "Sortera på senast ändrad" + "noPreview": "Förhandsvisning är inte tillgänglig för denna fil.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "välj fil eller mapp", @@ -75,23 +111,30 @@ "help": "Hjälp" }, "login": { - "password": "Lösenord", - "passwordConfirm": "Bekräfta lösenord", - "submit": "Logga in", "createAnAccount": "Skapa ett konto", "loginInstead": "Du har redan ett konto", + "password": "Lösenord", + "passwordConfirm": "Bekräfta lösenord", "passwordsDontMatch": "Lösenord matchar inte", - "usernameTaken": "Användarnamn upptaget", "signup": "Registrera", + "submit": "Logga in", "username": "Användarnamn", - "wrongCredentials": "Fel inloggning" + "usernameTaken": "Användarnamn upptaget", + "wrongCredentials": "Fel inloggning", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "Du har blivit utloggad på grund av inaktivitet." + } }, + "permanent": "Permanent", "prompts": { "copy": "Kopiera", "copyMessage": "Välj var dina filer skall sparas:", "currentlyNavigating": "För närvarande navigerar du på:", "deleteMessageMultiple": "Är du säker på att du vill radera {count} filer(na)?", "deleteMessageSingle": "Är du säker på att du vill radera denna fil/mapp", + "deleteMessageShare": "Är du säker på att du vill ta bort denna utdelning({path})?", + "deleteUser": "Är du säker på att du vill ta bort denna användare?", "deleteTitle": "Ta bort filer", "displayName": "Visningsnamn:", "download": "Ladda ner filer", @@ -102,43 +145,91 @@ "lastModified": "Senast ändrad", "move": "Flytta", "moveMessage": "Välj ny plats för din fil (er)/mapp (ar):", + "newArchetype": "Skapa ett nytt inlägg baserat på en arketyp. Din fil kommer att skapas på innehållsmapp.", "newDir": "Ny mapp", "newDirMessage": "Ange namn på din nya mapp.", "newFile": "Ny fil", "newFileMessage": "Ange namn på din nya fil.", "numberDirs": "Antal kataloger", "numberFiles": "Antal filer", - "replace": "Ersätt", - "replaceMessage": "En av filerna som du försöker överföra är i konflikt på grund av dess namn. Vill du ersätta den befintliga?\n", "rename": "Ändra namn", "renameMessage": "Infoga ett nytt namn för", - "show": "Visa", - "size": "Storlek", + "replace": "Ersätt", + "replaceMessage": "En av filerna som du försöker överföra är i konflikt på grund av dess namn. Vill du ersätta den befintliga?\n", "schedule": "Schema", "scheduleMessage": "Pick a date and time to schedule the publication of this post.", - "newArchetype": "Skapa ett nytt inlägg baserat på en arketyp. Din fil kommer att skapas på innehållsmapp." + "show": "Visa", + "size": "Storlek", + "upload": "Ladda upp", + "uploadFiles": "Laddar upp {files} filer...", + "uploadMessage": "Välj ett alternativ att ladda upp.", + "optionalPassword": "Valfritt lösenord", + "resolution": "Upplösning", + "discardEditorChanges": "Är du säker på att du vill förkasta ändringarna du gjort?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Bilder", + "music": "Musik", + "pdf": "PDF", + "pressToSearch": "Tryck på enter för att söka...", + "search": "Sök...", + "typeToSearch": "Skriv för att söka....", + "types": "Typ", + "video": "Video" }, "settings": { - "instanceName": "Instans namn", - "brandingDirectoryPath": "Sökväg till varumärkes katalog", - "documentation": "dokumentation", - "branding": "Varumärke", - "disableExternalLinks": "Inaktivera externa länkar (förutom dokumentation)", - "brandingHelp": "Du kan skräddarsyr hur din fil hanterar instansen ser ut och känns genom att ändra dess namn, ersätter logo typen, lägga till egna stilar och även inaktivera externa länkar till GitHub.\nMer information om anpassad varumärkes profilering finns i {0}.", + "aceEditorTheme": "Tema för Ace editor", "admin": "Admin", "administrator": "Administratör", "allowCommands": "Exekvera kommandon", "allowEdit": "Ändra, döp om och ta bort filer eller mappar", "allowNew": "Skapa nya filer eller mappar", "allowPublish": "Publicera nya inlägg och sidor", + "allowSignup": "Tillåt användare att registrera sig", + "hideLoginButton": "Hide the login button from public pages", "avoidChanges": "(lämna blankt för att undvika ändringar)", + "branding": "Varumärke", + "brandingDirectoryPath": "Sökväg till varumärkes katalog", + "brandingHelp": "Du kan skräddarsyr hur din fil hanterar instansen ser ut och känns genom att ändra dess namn, ersätter logo typen, lägga till egna stilar och även inaktivera externa länkar till GitHub.\nMer information om anpassad varumärkes profilering finns i {0}.", "changePassword": "Ändra lösenord", "commandRunner": "Kommando körare", "commandRunnerHelp": "Här kan du ange kommandon som körs i de namngivna händelserna. Du måste skriva en per rad. Miljövariablerna {0} och {1} kommer att vara tillgängliga, och vara {0} i förhållande till {1}. För mer information om den här funktionen och de tillgängliga miljövariablerna, vänligen läs {2}.", "commandsUpdated": "Kommandon uppdaterade!", + "createUserDir": "Auto skapa användarens hemkatalog när du lägger till nya användare", + "minimumPasswordLength": "Minsta lösenordslängd", + "tusUploads": "Uppdelade uppladdningar", + "tusUploadsHelp": "Filbläddraren stöder uppdelade filuppladdningar, vilket möjliggör effektiva, tillförlitliga, återupptagbara och uppdelade filuppladdningar även på otillförlitliga nätverk.", + "tusUploadsChunkSize": "Anger maximal storlek för en begäran (direkta uppladdningar används för mindre uppladdningar). Du kan ange ett helt tal som anger storleken i byte eller en sträng som 10 MB, 1 GB osv.", + "tusUploadsRetryCount": "Antal försök som ska göras om en del inte kan laddas upp.", + "userHomeBasePath": "Bassökväg för användarnas hemkataloger", + "userScopeGenerationPlaceholder": "Omfånget kommer att automatiskt genereras", + "createUserHomeDirectory": "Skapa användarens hemkatalog", "customStylesheet": "Anpassad formatmall", + "defaultUserDescription": "Detta är standard inställningar för användare.", + "disableExternalLinks": "Inaktivera externa länkar (förutom dokumentation)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "dokumentation", "examples": "Exempel", + "executeOnShell": "Exekvera på skal", + "executeOnShellDescription": "Som standard kör fil bläddraren kommandona genom att anropa deras binärfiler direkt. Om du vill köra dem på ett skal i stället (till exempel bash eller PowerShell), kan du definiera det här med nödvändiga argument och flaggor. Om det är inställt kommer kommandot du kör att läggas till som ett argument. Detta gäller både användar kommandon och händelse krokar.", + "globalRules": "Det här är en global uppsättning regler för att tillåta och inte tillåta. De gäller för alla användare. Du kan definiera specifika regler för varje användares inställningar för att åsidosätta de här inställningarna.", "globalSettings": "Globala inställningar", + "hideDotfiles": "Dölj punktfiler", + "insertPath": "Ange sökväg", + "insertRegex": "Sätt in regex expression", + "instanceName": "Instans namn", "language": "Språk", "lockPassword": "Förhindra att användare kan byta lösenord", "newPassword": "Ditt nya lösenord", @@ -146,91 +237,70 @@ "newUser": "Ny användare", "password": "Lösenord", "passwordUpdated": "Lösenord uppdaterat", + "path": "Sökväg", + "perm": { + "create": "Skapa filer och mappar", + "delete": "Ta bort filer och mappar", + "download": "Ladda ner", + "execute": "Exekvera kommandon", + "modify": "Ändra fil", + "rename": "Byta namn på eller flytta filer och kataloger", + "share": "Dela filer" + }, "permissions": "Rättigheter", "permissionsHelp": "Du kan ange att användaren ska vara administratör eller välja behörigheterna individuellt. Om du väljer \"administratör \" kommer alla andra alternativ att kontrolleras automatiskt. Hanteringen av användare är fortfarande ett privilegium för en administratör.\n", "profileSettings": "Profil inställningar", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "förhindrar åtkomst till en dot-fil (till exempel. git,. gitignore) i varje mapp.\n", "ruleExample2": "blockerar åtkomsten till filen som heter Caddyfilen i roten av scopet.", "rules": "Regler", "rulesHelp": "Här kan du definiera en uppsättning regler för godkänna och neka för den här specifika användaren. Den blockerade filen kommer inte upp i listningarna och kommer inte att vara tillgänglig till användaren. Vi stöder regex och sökvägar i förhållande till användarnas omfång.\n", "scope": "Omfattning", + "setDateFormat": "Ställ in exakt datumformat", "settingsUpdated": "Inställning uppdaterad!", + "shareDuration": "Utdelningstid", + "shareManagement": "Utdelningshantering", + "shareDeleted": "Utdelning borttagen!", + "singleClick": "Använd enkla klick för att öppna filer och kataloger", + "themes": { + "default": "Systemet standard", + "dark": "Mörk", + "light": "Ljus", + "title": "Tema" + }, "user": "Användare", "userCommands": "Kommandon", "userCommandsHelp": "En utrymmesseparerad lista med tillgängliga kommandon för den här användaren. Exempel:\n", "userCreated": "Användare skapad", + "userDefaults": "Standard inställning för användare", "userDeleted": "Användare borttagen", "userManagement": "Användarehantering", + "userUpdated": "Användare uppdaterad!", "username": "Användarnamn", "users": "Användare", - "globalRules": "Det här är en global uppsättning regler för att tillåta och inte tillåta. De gäller för alla användare. Du kan definiera specifika regler för varje användares inställningar för att åsidosätta de här inställningarna.", - "allowSignup": "Tillåt användare att registrera sig", - "createUserDir": "Auto skapa användarens hemkatalog när du lägger till nya användare", - "insertRegex": "Sätt in regex expression", - "insertPath": "Ange sökväg", - "userUpdated": "Användare uppdaterad!", - "userDefaults": "Standard inställning för användare", - "defaultUserDescription": "Detta är standard inställningar för användare.", - "executeOnShell": "Exekvera på skal", - "executeOnShellDescription": "Som standard kör fil bläddraren kommandona genom att anropa deras binärfiler direkt. Om du vill köra dem på ett skal i stället (till exempel bash eller PowerShell), kan du definiera det här med nödvändiga argument och flaggor. Om det är inställt kommer kommandot du kör att läggas till som ett argument. Detta gäller både användar kommandon och händelse krokar.", - "perm": { - "create": "Skapa filer och mappar", - "delete": "Ta bort filer och mappar", - "download": "Ladda ner", - "modify": "Ändra fil", - "execute": "Exekvera kommandon", - "rename": "Byta namn på eller flytta filer och kataloger", - "share": "Dela filer" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Hjälp", + "hugoNew": "Hugo ny", "login": "Logga in", - "signup": "Registrera", "logout": "Logga ut", "myFiles": "Mina filer", "newFile": "Ny fil", "newFolder": "Ny mapp", + "preview": "Visa", "settings": "Inställningar", - "siteSettings": "System inställningar", - "hugoNew": "Hugo ny", - "preview": "Visa" + "signup": "Registrera", + "siteSettings": "System inställningar" }, - "search": { - "images": "Bilder", - "music": "Musik", - "pdf": "PDF", - "types": "Typ", - "video": "Video", - "search": "Sök...", - "typeToSearch": "Skriv för att söka....", - "pressToSearch": "Tryck på enter för att söka..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "Länk kopierad" }, "time": { - "unit": "Tidsenhet", - "seconds": "Sekunder", - "minutes": "Minuter", + "days": "Dagar", "hours": "Timmar", - "days": "Dagar" - }, - "download": { - "downloadFile": "Ladda ner fil", - "downloadFolder": "Ladda ner mapp" + "minutes": "Minuter", + "seconds": "Sekunder", + "unit": "Tidsenhet" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/tr.json b/frontend/src/i18n/tr.json new file mode 100644 index 00000000..e0608217 --- /dev/null +++ b/frontend/src/i18n/tr.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Vazgeç", + "clear": "Temizle", + "close": "Kapat", + "continue": "Continue", + "copy": "Kopyala", + "copyFile": "Dosyayı kopyala", + "copyToClipboard": "Panoya kopyala", + "copyDownloadLinkToClipboard": "Copy download link to clipboard", + "create": "Oluştur", + "delete": "Sil", + "download": "İndir", + "file": "File", + "folder": "Folder", + "fullScreen": "Toggle full screen", + "hideDotfiles": "Nokta dosyalarını gizle", + "info": "Bilgi", + "more": "Daha fazla", + "move": "Taşı", + "moveFile": "Dosyayı taşı", + "new": "Yeni", + "next": "Sonraki", + "ok": "Tamam", + "permalink": "Kalıcı Bağlantı Alın", + "previous": "Önceki", + "preview": "Preview", + "publish": "Yayınla", + "rename": "Yeniden anlandır", + "replace": "Değiştir", + "reportIssue": "Sorun bildir", + "save": "Kaydet", + "schedule": "Planla", + "search": "Ara", + "select": "Seç", + "selectMultiple": "Çoklu seçim", + "share": "Paylaş", + "shell": "Komut satırı aç/kapat", + "submit": "Gönder", + "switchView": "Görünümü değiştir", + "toggleSidebar": "Menüyü aç/kapat", + "update": "Güncelle", + "upload": "Yükle", + "openFile": "Dosyayı aç", + "openDirect": "View raw", + "discardChanges": "Discard", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Dosyayı indir", + "downloadFolder": "Klasörü indir", + "downloadSelected": "Seçilileri indir" + }, + "upload": { + "abortUpload": "Are you sure you wish to abort?" + }, + "errors": { + "forbidden": "Buna erişim izniniz yok.", + "internal": "Bir şeyler ters gitti.", + "notFound": "Bu konuma ulaşılamıyor.", + "connection": "Sunucuya ulaşılamıyor." + }, + "files": { + "body": "Sayfa", + "closePreview": "Önizlemeyi kapat", + "files": "Dosyalar", + "folders": "Klasörler", + "home": "Ana dizin", + "lastModified": "Son güncellenme", + "loading": "Yükleniyor...", + "lonely": "Burada yalnızlık hissediyorum...", + "metadata": "meta veri", + "multipleSelectionEnabled": "Çoklu seçim etkin", + "name": "İsim", + "size": "Boyut", + "sortByLastModified": "Güncelleme tarihine göre sırala", + "sortByName": "İsme göre sırala", + "sortBySize": "Boyuta göre sırala", + "noPreview": "Bu dosya için önizleme aktif değil", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "dosya veya klasör seçin", + "ctrl": { + "click": "çoklu dosya ve klasör seçin", + "f": "Aramayı aç", + "s": "bir dosyayı kaydedin veya bulunduğunuz dizini indirin" + }, + "del": "seçilileri sil", + "doubleClick": "dosya veya dizini açın", + "esc": "seçimi temizle veya kapatın", + "f1": "bu bilgi", + "f2": "dosyayı yeniden adlandır", + "help": "Yardım" + }, + "login": { + "createAnAccount": "Bir hesap oluşturun", + "loginInstead": "Zaten hesabınız var mı", + "password": "Şifre", + "passwordConfirm": "Şifre tekrarı", + "passwordsDontMatch": "Şifreler uyuşmuyor", + "signup": "Üye Ol", + "submit": "Giriş", + "username": "Kullanıcı adı", + "usernameTaken": "Kullanıcı adı mevcut", + "wrongCredentials": "Yanlış hesap bilgileri", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Kalıcı", + "prompts": { + "copy": "Kopyala", + "copyMessage": "Dosyalarınızı kopyalayacağınız yeri seçin:", + "currentlyNavigating": "Şu anki lokasyon:", + "deleteMessageMultiple": "{count} dosyayı/dosyaları silmek istediğinizden emin misiniz?", + "deleteMessageSingle": "Bu dosyayı/klasörü silmek istediğinizden emin misiniz?", + "deleteMessageShare": "Bu paylaşımı({path}) silmek istediğinizden emin misiniz?", + "deleteUser": "Are you sure you want to delete this user?", + "deleteTitle": "Dosyaları sil", + "displayName": "Görünen Ad:", + "download": "Dosyaları indirŞ", + "downloadMessage": "İndirmek istediğiniz formatı seçin.", + "error": "Bir şeyler yanlış gitti", + "fileInfo": "Dosya bilgisi", + "filesSelected": "{count} dosya seçildi.", + "lastModified": "Son güncellenme", + "move": "Taşı", + "moveMessage": "Dosya(lar)ınız/klasör(ler)iniz için yeni ana dizin seçin:", + "newArchetype": "Bir prototip temelinde yeni bir gönderi oluşturun. Dosyanız içerik klasöründe oluşturulacaktır.", + "newDir": "Yeni dizin", + "newDirMessage": "Yeni dizinin adını yazın.", + "newFile": "Yeni dosya", + "newFileMessage": "Yeni dosyanın adını yazın.", + "numberDirs": "Dizin sayısı", + "numberFiles": "Dosya sayısı", + "rename": "Yeniden adlandır", + "renameMessage": "için yeni bir ad girin", + "replace": "Değiştir", + "replaceMessage": "Yüklemeye çalıştığınız dosyalardan biri, adı nedeniyle çakışıyor. Mevcut olanı değiştirmek istiyor musunuz?\n", + "schedule": "Planla", + "scheduleMessage": "Bu paylaşımın yayınlanmasını planlamak için bir tarih ve saat seçin.", + "show": "Göster", + "size": "Boyut", + "upload": "Gönder", + "uploadFiles": "Uploading {files} files...", + "uploadMessage": "Yüklemek için bir seçenek belirleyin.", + "optionalPassword": "İsteğe bağlı şifre", + "resolution": "Resolution", + "discardEditorChanges": "Are you sure you wish to discard the changes you've made?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Görseller", + "music": "Müzik", + "pdf": "PDF", + "pressToSearch": "Aramak için enter'a basın...", + "search": "Ara...", + "typeToSearch": "Aramak için yazın...", + "types": "Türler", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Yönetim", + "administrator": "Yönetici", + "allowCommands": "Komutları çalıştır", + "allowEdit": "Dosyaları veya dizinleri düzenleyin, yeniden adlandırın ve silin", + "allowNew": "Yeni dosyalar ve dizinler oluşturun", + "allowPublish": "Yeni linkler ve sayfaları yayınlayın", + "allowSignup": "Kullanıcıların kaydolmasına izin ver", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(değişiklikleri önlemek için boş bırakın)", + "branding": "Marka", + "brandingDirectoryPath": "Marka dizin yolu", + "brandingHelp": "Adını değiştirerek, logoyu değiştirerek, özel stiller ekleyerek ve hatta GitHub'a harici bağlantıları devre dışı bırakarak Filebrowser örneğinizin görünüşünü ve hissini özelleştirebilirsiniz.\nÖzel marka bilinci oluşturma hakkında daha fazla bilgi için lütfen {0} sayfasına göz atın.", + "changePassword": "Şifre Değiştir", + "commandRunner": "Komut satırı", + "commandRunnerHelp": "Burada, adlandırılmış olaylarda yürütülen komutları ayarlayabilirsiniz. Her satıra bir tane yazmalısınız. {0} ve {1} ortam değişkenleri, {1}'ye göre {0} olacak şekilde kullanılabilir olacaktır. Bu özellik ve mevcut ortam değişkenleri hakkında daha fazla bilgi için lütfen {2}'yi okuyun.", + "commandsUpdated": "Komutlar güncellendi!", + "createUserDir": "Kullanıcı eklerken, kullanıcı ana dizinini otomatik oluştur", + "minimumPasswordLength": "Minimum password length", + "tusUploads": "Chunked Uploads", + "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", + "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", + "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", + "userHomeBasePath": "Base path for user home directories", + "userScopeGenerationPlaceholder": "The scope will be auto generated", + "createUserHomeDirectory": "Create user home directory", + "customStylesheet": "Özel CSS", + "defaultUserDescription": "Bu, yeni kullanıcılar için varsayılan ayarlardır.", + "disableExternalLinks": "Harici bağlantıları devre dışı bırakın (dökümantasyon hariç)", + "disableUsedDiskPercentage": "Disable used disk percentage graph", + "documentation": "dökümantasyon", + "examples": "Örnekler", + "executeOnShell": "Komut satırında çalıştır", + "executeOnShellDescription": "Varsayılan olarak, FileBrowser komutları doğrudan dosyaları çağırarak yürütür. Bunları komut satırında çalıştırmak istiyorsanız (Bash veya PowerShell gibi), burada gerekli argümanlar ve flagler tanımlayabilirsiniz. Ayarlanırsa, yürüttüğünüz komut argüman olarak eklenir. Bu, hem kullanıcı komutları hem de event hooklar için geçerlidir.", + "globalRules": "Bu, genel bir izin verme ve izin vermeme kurallar bütünüdür. Her kullanıcı için geçerlidirler. Bunları geçersiz kılmak için her kullanıcının ayarlarında belirli kurallar tanımlayabilirsiniz.", + "globalSettings": "Genel Ayarlar", + "hideDotfiles": ". ile başlayan dosyaları gizle", + "insertPath": "Dizini ekle", + "insertRegex": "Regex ifadesini ekle", + "instanceName": "Instance adı", + "language": "Dil", + "lockPassword": "Kullanıcının parolayı değiştirmesini engelle", + "newPassword": "Yeni şifre", + "newPasswordConfirm": "Yeni şifre tekrarı", + "newUser": "Yeni Kullanıcı", + "password": "Şifre", + "passwordUpdated": "Şifre güncellendi", + "path": "Yol", + "perm": { + "create": "Dosyalar ve dizinler oluşturun", + "delete": "Dosyalar ve dizinleri silin", + "download": "İndir", + "execute": "Komutları çalıştır", + "modify": "Dosyaları değiştir", + "rename": "Dosyaları ve dizinleri yeniden adlandırın veya taşıyın", + "share": "Dosyaları paylaş" + }, + "permissions": "İzinler", + "permissionsHelp": "Kullanıcıyı yönetici olarak ayarlayabilir veya izinleri ayrı ayrı seçebilirsiniz. \"Yönetici\"yi seçerseniz, diğer tüm seçenekler otomatik olarak kontrol edilecektir. Kullanıcıların yönetimi, bir yöneticinin yetkisi olarak kalır.\n", + "profileSettings": "Profil ayarları", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "her klasördeki herhangi bir noktalı dosyaya (.git, .gitignore gibi) erişimi engeller.\n", + "ruleExample2": "Root erişimidenki CaddyFile dosyalarına erişimi engelle.", + "rules": "Kurallar", + "rulesHelp": "Burada, bu belirli kullanıcı için bir dizi izin verme ve izin vermeme kuralı tanımlayabilirsiniz. Engellenen dosyalar listelerde görünmeyecek ve kullanıcı bunlara erişemeyecek. Kullanıcı erişimine göre regex ifadeleri destekliyoruz.\n", + "scope": "Kapsam", + "setDateFormat": "Set exact date format", + "settingsUpdated": "Ayarlar güncellendi!", + "shareDuration": "Paylaşım süresi", + "shareManagement": "Paylaşım yönetimi", + "shareDeleted": "Paylaşım silindi!", + "singleClick": "Dosyaları ve dizinleri açmak için tek tıklamayı kullanın", + "themes": { + "default": "System default", + "dark": "Dark", + "light": "Light", + "title": "Theme" + }, + "user": "Kullanıcı", + "userCommands": "Komutları", + "userCommandsHelp": "Bu kullanıcı için mevcut komutları içeren boşlukla ayrılmış bir liste. Örnek:\n", + "userCreated": "Kullanıcı oluşturuldu!", + "userDefaults": "Kullanıcı varsayılan ayarları", + "userDeleted": "Kullanıcı silindi!", + "userManagement": "Kullanıcı yönetimi", + "userUpdated": "Kullanıcı güncellendi!", + "username": "Kullanıcı adı", + "users": "Kullanıcılar", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Yardım", + "hugoNew": "Yeni Hugo", + "login": "Giriş", + "logout": "Çıkış", + "myFiles": "Dosyalarım", + "newFile": "Yeni dosya", + "newFolder": "Yeni klasör", + "preview": "Önizleme", + "settings": "Ayarlar", + "signup": "Kayıt", + "siteSettings": "Site ayarları!" + }, + "success": { + "linkCopied": "Link kopyalandı!" + }, + "time": { + "days": "Gün", + "hours": "Saat", + "minutes": "Dakika", + "seconds": "Saniye", + "unit": "Zaman birimi" + } +} diff --git a/frontend/src/i18n/uk.json b/frontend/src/i18n/uk.json new file mode 100644 index 00000000..0eea7357 --- /dev/null +++ b/frontend/src/i18n/uk.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Відмінити", + "clear": "Очистити", + "close": "Закрити", + "continue": "Продовжити", + "copy": "Копіювати", + "copyFile": "Копіювати файл", + "copyToClipboard": "Копіювати в буфер обміну", + "copyDownloadLinkToClipboard": "Скопіювати завантажувальне посилання в буфер обміну", + "create": "Створити", + "delete": "Видалити", + "download": "Завантажити", + "file": "Файл", + "folder": "Папка", + "fullScreen": "Перемкнути повноекранний режим", + "hideDotfiles": "Приховати точкові файли", + "info": "Інфо", + "more": "Більше", + "move": "Перемістити", + "moveFile": "Перемістити файл", + "new": "Новий", + "next": "Далі", + "ok": "ОК", + "permalink": "Отримати постійне посилання", + "previous": "Назад", + "preview": "Попередній перегляд", + "publish": "Опублікувати", + "rename": "Перейменувати", + "replace": "Замінити", + "reportIssue": "Повідомити про помилку", + "save": "Зберегти", + "schedule": "Планування", + "search": "Пошук", + "select": "Вибрати", + "selectMultiple": "Мультивибір", + "share": "Поділитися", + "shell": "Командний рядок", + "submit": "Відправити", + "switchView": "Вид", + "toggleSidebar": "Бічна панель", + "update": "Оновити", + "upload": "Вивантажити", + "openFile": "Відкрити файл", + "openDirect": "View raw", + "discardChanges": "Скасувати", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Завантажити файл", + "downloadFolder": "Завантажити папку", + "downloadSelected": "Завантажити вибране" + }, + "upload": { + "abortUpload": "Ви впевнені, що хочете перервати?" + }, + "errors": { + "forbidden": "У вас немає прав доступу до цього.", + "internal": "Щось пішло не так.", + "notFound": "Неправильне посилання.", + "connection": "Немає підключення до сервера." + }, + "files": { + "body": "Тіло", + "closePreview": "Закрити", + "files": "Файли", + "folders": "Папки", + "home": "Домівка", + "lastModified": "Останній раз змінено", + "loading": "Завантаження...", + "lonely": "Тут порожньо...", + "metadata": "Метадані", + "multipleSelectionEnabled": "Мультивибір включений", + "name": "Ім'я", + "size": "Розмір", + "sortByLastModified": "Сортувати за останнім зміненням", + "sortByName": "Сортувати за іменем", + "sortBySize": "Сортувати за розміром", + "noPreview": "Попередній перегляд для цього файлу недоступний.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "вибрати файл чи каталог", + "ctrl": { + "click": "вибрати кілька файлів чи каталогів", + "f": "відкрити пошук", + "s": "завантажити файл або поточний каталог" + }, + "del": "видалити вибрані елементи", + "doubleClick": "відкрити файл чи каталог", + "esc": "очистити виділення та/або закрити вікно", + "f1": "допомога", + "f2": "перейменувати файл", + "help": "Допомога" + }, + "login": { + "createAnAccount": "Створити обліковий запис", + "loginInstead": "Вже є обліковий запис", + "password": "Пароль", + "passwordConfirm": "Підтвердження паролю", + "passwordsDontMatch": "Паролі не співпадають", + "signup": "Зареєструватися", + "submit": "Увійти", + "username": "Ім'я користувача", + "usernameTaken": "Ім'я користувача вже використовується", + "wrongCredentials": "Неправильне ім'я користувача або пароль", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Постійний", + "prompts": { + "copy": "Копіювати", + "copyMessage": "Копіювати в:", + "currentlyNavigating": "Поточний каталог:", + "deleteMessageMultiple": "Видалити ці файли ({count})?", + "deleteMessageSingle": "Видалити цей файл/каталог?", + "deleteMessageShare": "Видалити цей спільний файл/каталог ({path})?", + "deleteUser": "Видалити цього користувача?", + "deleteTitle": "Видалити файли", + "displayName": "Відображене ім'я:", + "download": "Завантажити файли", + "downloadMessage": "Виберіть формат, в якому хочете завантажити.", + "error": "Помилка", + "fileInfo": "Інформація про файл", + "filesSelected": "Файлів вибрано: {count}.", + "lastModified": "Останній раз змінено", + "move": "Перемістити", + "moveMessage": "Перемістити в:", + "newArchetype": "Створіть новий запис на основі архетипу. Файл буде створено у каталозі.", + "newDir": "Новий каталог", + "newDirMessage": "Ім'я нового каталогу.", + "newFile": "Новий файл", + "newFileMessage": "Ім'я нового файлу.", + "numberDirs": "Кількість каталогів", + "numberFiles": "Кількість файлів", + "rename": "Перейменувати", + "renameMessage": "Нове ім'я", + "replace": "Замінити", + "replaceMessage": "Ім'я одного з файлів, що завантажуються, збігається з вже існуючим файлом. Ви бажаєте замінити існуючий?\n", + "schedule": "Планування", + "scheduleMessage": "Запланувати дату та час публікації.", + "show": "Показати", + "size": "Розмір", + "upload": "Вивантажити", + "uploadFiles": "Вивантаження {files} файлів...", + "uploadMessage": "Виберіть варіант для вивантаження.", + "optionalPassword": "Необов'язковий пароль", + "resolution": "Розширення", + "discardEditorChanges": "Чи дійсно ви хочете скасувати поточні зміни?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Зображення", + "music": "Музика", + "pdf": "PDF", + "pressToSearch": "Натисніть ENTER для пошуку", + "search": "Пошук...", + "typeToSearch": "Введіть ім'я файлу...", + "types": "Типи", + "video": "Відео" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Адмін", + "administrator": "Адміністратор", + "allowCommands": "Запуск команд", + "allowEdit": "Редагування, перейменування та видалення файлів чи каталогів", + "allowNew": "Створення нових файлів або каталогів", + "allowPublish": "Публікація нових записів та сторінок", + "allowSignup": "Дозволити користувачам реєструватися", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(залишіть поле порожнім, щоб уникнути змін)", + "branding": "Брендинг", + "brandingDirectoryPath": "Шлях до каталогу брендів", + "brandingHelp": "Ви можете налаштувати зовнішній вигляд файлового браузера, змінивши його ім'я, замінивши логотип, додавши власні стилі та навіть відключивши зовнішні посилання на GitHub.\nДодаткову інформацію про персоналізований брендинг можна знайти на сторінці {0}.", + "changePassword": "Зміна пароля", + "commandRunner": "Запуск команд", + "commandRunnerHelp": "Тут ви можете встановити команди, які будуть виконуватися у зазначених подіях. Ви повинні вказати по одній команді в кожному рядку. Змінні середовища {0} та {1} будуть доступні, будучи {0} щодо {1}. Додаткові відомості про цю функцію та доступні змінні середовища див. у {2}.", + "commandsUpdated": "Команди оновлені!", + "createUserDir": "Автоматичне створення домашнього каталогу користувача при додаванні нового користувача", + "minimumPasswordLength": "Мінімальна довжина паролю", + "tusUploads": "Фрагментовані завантаження", + "tusUploadsHelp": "File Browser підтримує завантаження частинами, дозволяючи створення ефективних, надійних, відновлюваних та фрагментованих завантажень навіть при ненадійному з'єднанні.", + "tusUploadsChunkSize": "Максимальний розмір запиту (для менших завантажень використовуватиметься пряме завантаження). Ви можете ввести цілочисельне значення у байтах або ж рядок на кшталт 10MB, 1GB тощо", + "tusUploadsRetryCount": "Кількість повторних спроб які потрібно виконати, якщо фрагмент не вдалося завантажити", + "userHomeBasePath": "Основний шлях для домашніх каталогів користувачів", + "userScopeGenerationPlaceholder": "Кореневий каталог буде згенеровано автоматично", + "createUserHomeDirectory": "Створити домашній каталог користувача", + "customStylesheet": "Свій стиль", + "defaultUserDescription": "Це налаштування за замовчуванням для нових користувачів.", + "disableExternalLinks": "Вимкнути зовнішні посилання (крім документації)", + "disableUsedDiskPercentage": "Вимкнути графік використання диску", + "documentation": "документація", + "examples": "Приклади", + "executeOnShell": "Виконати в командному рядку", + "executeOnShellDescription": "За замовчуванням File Browser виконує команди, безпосередньо викликаючи їх бінарні файли. Якщо ви хочете замість цього запускати їх в оболонці (наприклад, Bash або PowerShell), ви можете визначити їх тут з необхідними аргументами та прапорами. Якщо встановлено, виконуєма вами команда буде додана як аргумент. Це стосується як користувацьких команд, так і обробників подій.", + "globalRules": "Це глобальний набір дозволяючих та забороняючих правил. Вони застосовні до кожного користувача. Ви можете визначити певні правила для налаштувань кожного користувача, щоб перевизначити їх.", + "globalSettings": "Глобальні налаштування", + "hideDotfiles": "Приховати точкові файли", + "insertPath": "Вставте шлях", + "insertRegex": "Вставити регулярний вираз", + "instanceName": "Поточна назва програми", + "language": "Мова", + "lockPassword": "Заборонити користувачеві змінювати пароль", + "newPassword": "Новий пароль", + "newPasswordConfirm": "Підтвердження нового пароля", + "newUser": "Новий користувач", + "password": "Пароль", + "passwordUpdated": "Пароль оновлено!", + "path": "Шлях", + "perm": { + "create": "Створювати файли та каталоги", + "delete": "Видаляти файли та каталоги", + "download": "Завантажувати", + "execute": "Виконувати команди", + "modify": "Редагувати файли", + "rename": "Перейменовувати або переміщувати файли та каталоги", + "share": "Ділітися файлами" + }, + "permissions": "Дозволи", + "permissionsHelp": "Можна налаштувати користувача як адміністратора чи вибрати індивідуальні дозволи. При виборі \"Адміністратор\" всі інші параметри будуть автоматично вибрані. Керування користувачами - привілей адміністратора.\n", + "profileSettings": "Налаштування профілю", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "запобігти доступу до будь-якого прихованого файлу (наприклад: .git, .gitignore) у кожній папці.\n", + "ruleExample2": "блокує доступ до файлу з ім'ям Caddyfile у кореневій області.", + "rules": "Права", + "rulesHelp": "Тут ви можете визначити набір дозволів та заборон для цього конкретного користувача. Блоковані файли не відображатимуться у списках і не будуть доступними для користувача. Є підтримка регулярних виразів та відносних шляхів.\n", + "scope": "Корінь", + "setDateFormat": "Встановити точний формат дати", + "settingsUpdated": "Налаштування застосовані!", + "shareDuration": "Тривалість спільного посилання", + "shareManagement": "Управління спільними посиланнями", + "shareDeleted": "Спільне посилання видалено!", + "singleClick": "Відкриття файлів та каталогів одним кліком", + "themes": { + "default": "За замовчуванням (системна)", + "dark": "Темна", + "light": "Світла", + "title": "Тема" + }, + "user": "Користувач", + "userCommands": "Команди", + "userCommandsHelp": "Список команд, доступних користувачу, розділений пробілами. Наприклад:\n", + "userCreated": "Користувача створено!", + "userDefaults": "Налаштування користувача за замовчуванням", + "userDeleted": "Користувача видалено!", + "userManagement": "Керування користувачами", + "userUpdated": "Користувача змінено!", + "username": "Ім'я користувача", + "users": "Користувачі", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Допомога", + "hugoNew": "Hugo New", + "login": "Увійти", + "logout": "Вийти", + "myFiles": "Файли", + "newFile": "Новий файл", + "newFolder": "Новий каталог", + "preview": "Перегляд", + "settings": "Налаштування", + "signup": "Зареєструватися", + "siteSettings": "Налаштування сайту" + }, + "success": { + "linkCopied": "Посилання скопійоване!" + }, + "time": { + "days": "Дні", + "hours": "Години", + "minutes": "Хвилини", + "seconds": "Секунди", + "unit": "Одиниця часу" + } +} diff --git a/frontend/src/i18n/vi.json b/frontend/src/i18n/vi.json new file mode 100644 index 00000000..3b84ab46 --- /dev/null +++ b/frontend/src/i18n/vi.json @@ -0,0 +1,306 @@ +{ + "buttons": { + "cancel": "Hủy", + "clear": "Xóa", + "close": "Đóng", + "continue": "Tiếp tục", + "copy": "Sao chép", + "copyFile": "Sao chép tập tin", + "copyToClipboard": "Sao chép vào clipboard", + "copyDownloadLinkToClipboard": "Sao chép liên kết tải xuống vào clipboard", + "create": "Tạo", + "delete": "Xóa", + "download": "Tải xuống", + "file": "Tập tin", + "folder": "Thư mục", + "fullScreen": "Toàn màn hình", + "hideDotfiles": "Ẩn tập tin ẩn", + "info": "Thông tin", + "more": "Thêm", + "move": "Di chuyển", + "moveFile": "Di chuyển tập tin", + "new": "Mới", + "next": "Tiếp theo", + "ok": "OK", + "permalink": "Lấy liên kết vĩnh viễn", + "previous": "Trước", + "preview": "Xem trước", + "publish": "Xuất bản", + "rename": "Đổi tên", + "replace": "Thay thế", + "reportIssue": "Báo cáo sự cố", + "save": "Lưu", + "schedule": "Lên lịch", + "search": "Tìm kiếm", + "select": "Chọn", + "selectMultiple": "Chọn nhiều", + "share": "Chia sẻ", + "shell": "Chuyển đổi shell", + "submit": "Gửi", + "switchView": "Chuyển chế độ xem", + "toggleSidebar": "Thanh bên", + "update": "Cập nhật", + "upload": "Tải lên", + "openFile": "Mở tệp", + "openDirect": "View raw", + "discardChanges": "Hủy bỏ thay đổi", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" + }, + "download": { + "downloadFile": "Tải xuống tệp tin", + "downloadFolder": "Tải xuống thư mục", + "downloadSelected": "Tải xuống đã chọn" + }, + "upload": { + "abortUpload": "Bạn có chắc chắn muốn hủy tải lên không?" + }, + "errors": { + "forbidden": "Bạn không có quyền truy cập vào nội dung này.", + "internal": "Đã xảy ra lỗi nghiêm trọng.", + "notFound": "Không thể truy cập vị trí này.", + "connection": "Không thể kết nối đến máy chủ." + }, + "files": { + "body": "Nội dung", + "closePreview": "Đóng xem trước", + "files": "Tập tin", + "folders": "Thư mục", + "home": "Trang chủ", + "lastModified": "Sửa đổi lần cuối", + "loading": "Đang tải...", + "lonely": "Không có gì ở đây...", + "metadata": "Siêu dữ liệu", + "multipleSelectionEnabled": "Đã bật chọn nhiều", + "name": "Tên", + "size": "Kích thước", + "sortByLastModified": "Sắp xếp theo ngày sửa đổi", + "sortByName": "Sắp xếp theo tên", + "sortBySize": "Sắp xếp theo kích thước", + "noPreview": "Không có bản xem trước cho tập tin này.", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" + }, + "help": { + "click": "chọn tập tin hoặc thư mục", + "ctrl": { + "click": "chọn nhiều tập tin hoặc thư mục", + "f": "mở tìm kiếm", + "s": "lưu tập tin hoặc tải thư mục hiện tại" + }, + "del": "xóa các mục đã chọn", + "doubleClick": "mở tập tin hoặc thư mục", + "esc": "hủy chọn và/hoặc đóng hộp thoại", + "f1": "mở trợ giúp này", + "f2": "đổi tên tập tin", + "help": "Trợ giúp" + }, + "login": { + "createAnAccount": "Tạo tài khoản", + "loginInstead": "Đã có tài khoản", + "password": "Mật khẩu", + "passwordConfirm": "Xác nhận mật khẩu", + "passwordsDontMatch": "Mật khẩu không khớp", + "signup": "Đăng ký", + "submit": "Đăng nhập", + "username": "Tên người dùng", + "usernameTaken": "Tên người dùng đã tồn tại", + "wrongCredentials": "Thông tin đăng nhập không đúng", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } + }, + "permanent": "Vĩnh viễn", + "prompts": { + "copy": "Sao chép", + "copyMessage": "Chọn vị trí để sao chép tệp của bạn:", + "currentlyNavigating": "Đang điều hướng tại:", + "deleteMessageMultiple": "Bạn có chắc chắn muốn xóa {count} tệp không?", + "deleteMessageSingle": "Bạn có chắc chắn muốn xóa tệp/thư mục này không?", + "deleteMessageShare": "Bạn có chắc chắn muốn xóa chia sẻ này ({path}) không?", + "deleteUser": "Bạn có chắc chắn muốn xóa người dùng này không?", + "deleteTitle": "Xóa tệp", + "displayName": "Tên hiển thị:", + "download": "Tải xuống tệp", + "downloadMessage": "Chọn định dạng bạn muốn tải xuống.", + "error": "Đã xảy ra lỗi", + "fileInfo": "Thông tin tệp", + "filesSelected": "{count} tệp đã được chọn.", + "lastModified": "Chỉnh sửa lần cuối", + "move": "Di chuyển", + "moveMessage": "Chọn vị trí mới cho tệp/thư mục của bạn:", + "newArchetype": "Tạo một bài viết mới dựa trên nguyên mẫu. Tệp của bạn sẽ được tạo trong thư mục nội dung.", + "newDir": "Thư mục mới", + "newDirMessage": "Đặt tên cho thư mục mới của bạn.", + "newFile": "Tệp mới", + "newFileMessage": "Đặt tên cho tệp mới của bạn.", + "numberDirs": "Số lượng thư mục", + "numberFiles": "Số lượng tệp", + "rename": "Đổi tên", + "renameMessage": "Nhập tên mới cho", + "replace": "Thay thế", + "replaceMessage": "Một trong những tệp bạn đang cố tải lên có tên trùng lặp. Bạn có muốn bỏ qua tệp này và tiếp tục tải lên hay thay thế tệp hiện có?\n", + "schedule": "Lên lịch", + "scheduleMessage": "Chọn ngày và giờ để lên lịch xuất bản bài viết này.", + "show": "Hiển thị", + "size": "Kích thước", + "upload": "Tải lên", + "uploadFiles": "Đang tải lên {files} tệp...", + "uploadMessage": "Chọn một tùy chọn để tải lên.", + "optionalPassword": "Mật khẩu tùy chọn", + "resolution": "Độ phân giải", + "discardEditorChanges": "Bạn có chắc chắn muốn hủy bỏ các thay đổi đã thực hiện không?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "Hình ảnh", + "music": "Nhạc", + "pdf": "PDF", + "pressToSearch": "Nhấn Enter để tìm kiếm...", + "search": "Tìm kiếm...", + "typeToSearch": "Nhập để tìm kiếm...", + "types": "Loại", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Quản trị viên", + "administrator": "Người quản trị", + "allowCommands": "Thực thi lệnh", + "allowEdit": "Chỉnh sửa, đổi tên và xóa tệp hoặc thư mục", + "allowNew": "Tạo tệp và thư mục mới", + "allowPublish": "Xuất bản bài viết và trang mới", + "allowSignup": "Cho phép người dùng đăng ký", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(để trống để tránh thay đổi)", + "branding": "Thương hiệu", + "brandingDirectoryPath": "Đường dẫn thư mục thương hiệu", + "brandingHelp": "Bạn có thể tùy chỉnh giao diện và trải nghiệm của File Browser bằng cách thay đổi tên, thay thế logo, thêm kiểu tùy chỉnh và thậm chí vô hiệu hóa các liên kết bên ngoài đến GitHub.\nĐể biết thêm thông tin về tùy chỉnh thương hiệu, vui lòng xem {0}.", + "changePassword": "Đổi mật khẩu", + "commandRunner": "Trình chạy lệnh", + "commandRunnerHelp": "Tại đây, bạn có thể thiết lập các lệnh được thực thi trong các sự kiện đã định. Bạn phải viết một lệnh trên mỗi dòng. Các biến môi trường {0} và {1} sẽ có sẵn, trong đó {0} tương đối với {1}. Để biết thêm thông tin về tính năng này và các biến môi trường có sẵn, vui lòng đọc {2}.", + "commandsUpdated": "Lệnh đã được cập nhật!", + "createUserDir": "Tự động tạo thư mục chính của người dùng khi thêm người dùng mới", + "minimumPasswordLength": "Độ dài mật khẩu tối thiểu", + "tusUploads": "Tải lên theo phân đoạn", + "tusUploadsHelp": "File Browser hỗ trợ tải lên tệp theo phân đoạn, giúp việc tải lên trở nên hiệu quả, đáng tin cậy, có thể tiếp tục và phù hợp với mạng không ổn định.", + "tusUploadsChunkSize": "Kích thước tối đa của một yêu cầu (tải lên trực tiếp sẽ được sử dụng cho các tệp nhỏ hơn). Bạn có thể nhập một số nguyên biểu thị kích thước theo byte hoặc một chuỗi như 10MB, 1GB, v.v.", + "tusUploadsRetryCount": "Số lần thử lại nếu một phân đoạn tải lên thất bại.", + "userHomeBasePath": "Đường dẫn cơ bản của thư mục chính người dùng", + "userScopeGenerationPlaceholder": "Phạm vi sẽ được tạo tự động", + "createUserHomeDirectory": "Tạo thư mục chính của người dùng", + "customStylesheet": "Bảng định dạng tùy chỉnh", + "defaultUserDescription": "Đây là cài đặt mặc định cho người dùng mới.", + "disableExternalLinks": "Vô hiệu hóa các liên kết bên ngoài (trừ tài liệu)", + "disableUsedDiskPercentage": "Vô hiệu hóa biểu đồ phần trăm dung lượng đã sử dụng", + "documentation": "tài liệu", + "examples": "Ví dụ", + "executeOnShell": "Thực thi trên shell", + "executeOnShellDescription": "Theo mặc định, File Browser thực thi lệnh bằng cách gọi trực tiếp các tệp nhị phân của chúng. Nếu bạn muốn chạy chúng trên shell (chẳng hạn như Bash hoặc PowerShell), bạn có thể định nghĩa tại đây cùng với các tham số và cờ cần thiết. Nếu được đặt, lệnh bạn thực thi sẽ được thêm làm đối số. Điều này áp dụng cho cả lệnh người dùng và hook sự kiện.", + "globalRules": "Đây là tập hợp quy tắc chung về quyền cho phép và từ chối. Chúng áp dụng cho mọi người dùng. Bạn có thể đặt quy tắc riêng cho từng người dùng để ghi đè các quy tắc chung này.", + "globalSettings": "Cài đặt chung", + "hideDotfiles": "Ẩn tệp ẩn (dotfiles)", + "insertPath": "Nhập đường dẫn", + "insertRegex": "Nhập biểu thức regex", + "instanceName": "Tên phiên bản", + "language": "Ngôn ngữ", + "lockPassword": "Ngăn người dùng thay đổi mật khẩu", + "newPassword": "Mật khẩu mới của bạn", + "newPasswordConfirm": "Xác nhận mật khẩu mới", + "newUser": "Người dùng mới", + "password": "Mật khẩu", + "passwordUpdated": "Mật khẩu đã được cập nhật!", + "path": "Đường dẫn", + "perm": { + "create": "Tạo tệp và thư mục", + "delete": "Xóa tệp và thư mục", + "download": "Tải xuống", + "execute": "Thực thi lệnh", + "modify": "Chỉnh sửa tệp", + "rename": "Đổi tên hoặc di chuyển tệp và thư mục", + "share": "Chia sẻ tệp" + }, + "permissions": "Quyền", + "permissionsHelp": "Bạn có thể đặt người dùng làm quản trị viên hoặc chọn quyền riêng lẻ. Nếu chọn \"Người quản trị\", tất cả các tùy chọn khác sẽ tự động được chọn. Việc quản lý người dùng vẫn là đặc quyền của quản trị viên.\n", + "profileSettings": "Cài đặt hồ sơ", + "redirectAfterCopyMove": "Redirect to destination after copy/move", + "ruleExample1": "ngăn truy cập vào bất kỳ tệp ẩn nào (chẳng hạn như .git, .gitignore) trong mọi thư mục.\n", + "ruleExample2": "chặn truy cập vào tệp có tên Caddyfile trong thư mục gốc của phạm vi.", + "rules": "Quy tắc", + "rulesHelp": "Tại đây, bạn có thể xác định một tập hợp quy tắc cho phép hoặc từ chối cho người dùng cụ thể này. Các tệp bị chặn sẽ không hiển thị trong danh sách và người dùng không thể truy cập chúng. Chúng tôi hỗ trợ regex và đường dẫn tương đối với phạm vi của người dùng.\n", + "scope": "Phạm vi", + "setDateFormat": "Đặt định dạng ngày chính xác", + "settingsUpdated": "Cài đặt đã được cập nhật!", + "shareDuration": "Thời gian chia sẻ", + "shareManagement": "Quản lý chia sẻ", + "shareDeleted": "Chia sẻ đã bị xóa!", + "singleClick": "Dùng một lần nhấp để mở tệp và thư mục", + "themes": { + "default": "Mặc định hệ thống", + "dark": "Tối", + "light": "Sáng", + "title": "Chủ đề" + }, + "user": "Người dùng", + "userCommands": "Lệnh", + "userCommandsHelp": "Danh sách lệnh được phân tách bằng khoảng trắng dành cho người dùng này. Ví dụ:\n", + "userCreated": "Người dùng đã được tạo!", + "userDefaults": "Cài đặt mặc định của người dùng", + "userDeleted": "Người dùng đã bị xóa!", + "userManagement": "Quản lý người dùng", + "userUpdated": "Người dùng đã được cập nhật!", + "username": "Tên người dùng", + "users": "Người dùng", + "currentPassword": "Your Current Password" + }, + "sidebar": { + "help": "Trợ giúp", + "hugoNew": "Hugo New", + "login": "Đăng nhập", + "logout": "Đăng xuất", + "myFiles": "Tập tin của tôi", + "newFile": "Tập tin mới", + "newFolder": "Thư mục mới", + "preview": "Xem trước", + "settings": "Cài đặt", + "signup": "Đăng ký", + "siteSettings": "Cài đặt trang" + }, + "success": { + "linkCopied": "Liên kết đã được sao chép!" + }, + "time": { + "days": "Ngày", + "hours": "Giờ", + "minutes": "Phút", + "seconds": "Giây", + "unit": "Đơn vị" + } +} diff --git a/frontend/src/i18n/zh-cn.json b/frontend/src/i18n/zh-cn.json index 861a8601..d03298fb 100644 --- a/frontend/src/i18n/zh-cn.json +++ b/frontend/src/i18n/zh-cn.json @@ -1,236 +1,312 @@ { - "permanent": "永久", "buttons": { - "shell": "激活 shell", "cancel": "取消", + "clear": "清空", "close": "关闭", + "continue": "继续", "copy": "复制", "copyFile": "复制文件", "copyToClipboard": "复制到剪贴板", + "copyDownloadLinkToClipboard": "复制下载链接到剪贴板", "create": "创建", "delete": "删除", "download": "下载", + "file": "文件", + "folder": "文件夹", + "fullScreen": "切换全屏", + "hideDotfiles": "不显示隐藏文件", "info": "信息", "more": "更多", "move": "移动", "moveFile": "移动文件", - "new": "新", + "new": "新建", "next": "下一个", "ok": "确定", - "replace": "替换", + "permalink": "获取永久链接", "previous": "上一个", + "preview": "预览", + "publish": "发布", "rename": "重命名", - "reportIssue": "报告问题", + "replace": "替换", + "reportIssue": "反馈问题", + "resumeTransfer": "恢复之前的传输任务", + "resumeTransferTooltip": "跳过所有同名冲突文件;服务器端文件更小则判定为传输中断,保留该文件并继续传输。", "save": "保存", + "schedule": "计划", "search": "搜索", "select": "选择", + "selectMultiple": "多选", "share": "分享", - "publish": "发布", - "selectMultiple": "选择多个", - "schedule": "计划", - "switchView": "切换显示方式", + "shell": "切换终端", + "submit": "提交", + "switchView": "切换视图", "toggleSidebar": "切换侧边栏", "update": "更新", "upload": "上传", - "permalink": "获取永久链接" + "openFile": "打开文件", + "openDirect": "查看原始内容", + "discardChanges": "放弃", + "stopSearch": "停止搜索", + "saveChanges": "保存更改", + "editAsText": "以文本模式编辑", + "increaseFontSize": "放大字体", + "decreaseFontSize": "缩小字体", + "overrideAll": "替换目标文件夹中的所有文件", + "skipAll": "跳过所有冲突文件", + "renameAll": "全部重命名(创建副本)", + "singleDecision": "逐个处理冲突文件" }, - "success": { - "linkCopied": "链接已复制!" + "download": { + "downloadFile": "下载文件", + "downloadFolder": "下载文件夹", + "downloadSelected": "下载选中项" + }, + "upload": { + "abortUpload": "你确定要中止吗?" }, "errors": { - "forbidden": "你无权限访问", - "internal": "服务器出了点问题。", - "notFound": "找不到文件。" + "forbidden": "权限不足,拒绝访问", + "internal": "服务器内部错误", + "notFound": "该位置无法访问。", + "connection": "无法连接服务器" }, "files": { - "folders": "文件夹", - "files": "文件", "body": "内容", - "clear": "清空", "closePreview": "关闭预览", - "home": "主页", - "lastModified": "最后修改", + "files": "文件", + "folders": "文件夹", + "home": "首页", + "lastModified": "修改时间", "loading": "加载中...", - "lonely": "这里没有任何文件...", + "lonely": "暂无任何文件...", "metadata": "元数据", - "multipleSelectionEnabled": "多选模式已开启", + "multipleSelectionEnabled": "已开启多选模式", "name": "名称", "size": "大小", + "sortByLastModified": "按修改时间排序", "sortByName": "按名称排序", "sortBySize": "按大小排序", - "sortByLastModified": "按最后修改时间排序" + "noPreview": "该文件暂不支持预览", + "csvTooLarge": "CSV 文件过大(>5MB),无法预览,请下载后查看", + "csvLoadFailed": "CSV 文件加载失败", + "showingRows": "当前显示 {count} 行数据", + "columnSeparator": "列分隔符", + "csvSeparators": { + "comma": "逗号 (,)", + "semicolon": "分号 (;)", + "both": "逗号 (,) 和分号 (;)" + }, + "fileEncoding": "文件编码" }, "help": { - "click": "选择文件或目录", + "click": "选中文件或文件夹", "ctrl": { - "click": "选择多个文件或目录", + "click": "多选文件或文件夹", "f": "打开搜索框", "s": "保存文件或下载当前文件夹" }, "del": "删除所选的文件/文件夹", "doubleClick": "打开文件/文件夹", - "esc": "清除已选项或关闭提示信息", - "f1": "显示该帮助信息", - "f2": "重命名文件/文件夹", + "esc": "取消选中或关闭提示框", + "f1": "打开帮助", + "f2": "重命名文件", "help": "帮助" }, "login": { + "createAnAccount": "注册账号", + "loginInstead": "已有账号", "password": "密码", "passwordConfirm": "确认密码", - "submit": "登录", - "createAnAccount": "创建用户", - "loginInstead": "已有用户登录", - "passwordsDontMatch": "密码不一致", - "usernameTaken": "用户名已经被使用", + "passwordsDontMatch": "两次输入的密码不一致", "signup": "注册", + "submit": "登录", "username": "用户名", - "wrongCredentials": "用户名或密码错误" + "usernameTaken": "用户名已经被使用", + "wrongCredentials": "用户名或密码错误", + "passwordTooShort": "密码长度至少为 {min} 位字符", + "logout_reasons": { + "inactivity": "因长时间未操作,系统已自动登出." + } }, + "permanent": "永久", "prompts": { "copy": "复制", - "copyMessage": "请选择欲复制至的目录:", + "copyMessage": "请选择目标目录:", "currentlyNavigating": "当前目录:", - "deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?", - "deleteMessageSingle": "你确定要删除这个文件/文件夹吗?", + "deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?", + "deleteMessageSingle": "你确定要删除这个文件/文件夹吗?", + "deleteMessageShare": "你确定要删除这个分享({path})吗?", + "deleteUser": "确定要删除该用户吗?", "deleteTitle": "删除文件", "displayName": "名称:", "download": "下载文件", - "downloadMessage": "请选择要下载的压缩格式。", - "error": "出了一点问题...", + "downloadMessage": "请选择要下载的压缩包格式。", + "error": "出现未知错误...", "fileInfo": "文件信息", - "filesSelected": "已选择 {count} 个文件。", - "lastModified": "最后修改", + "filesSelected": "已选中 {count} 个文件", + "lastModified": "修改时间", "move": "移动", - "moveMessage": "请选择欲移动至的目录:", - "newDir": "新建目录", - "newDirMessage": "请输入新目录的名称。", + "moveMessage": "请选择目标目录:", + "newArchetype": "基于模板新建文档,文件将创建在内容目录中。", + "newDir": "新建文件夹", + "newDirMessage": "请输入新文件夹的名称。", "newFile": "新建文件", "newFileMessage": "请输入新文件的名称。", - "numberDirs": "目录数", - "numberFiles": "文件数", - "replace": "替换", - "replaceMessage": "您尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?", + "numberDirs": "文件夹数量", + "numberFiles": "文件数量", "rename": "重命名", - "renameMessage": "请输入新名称,旧名称为:", - "show": "揭示", - "size": "大小", + "renameMessage": "请输入新名称", + "replace": "替换", + "replaceMessage": "你上传的文件与已有文件重名,是否跳过该文件继续上传,或是替换原有文件?\n", "schedule": "计划", - "scheduleMessage": "请选择发布这篇帖子的日期。", - "newArchetype": "创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。" - }, - "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "品牌信息文件夹路径", - "documentation": "帮助文档", - "branding": "品牌", - "disableExternalLinks": "禁止外部链接(帮助文档除外)", - "brandingHelp": "您可以通过改变名称,更换商标,加入自定义样式,甚至禁用外部链接来自定义File Browser的外观和给人的感觉。\n想获得更多信息,请查看 {0} 。", - "admin": "管理员", - "administrator": "管理员", - "allowCommands": "执行命令(Linux 代码)", - "allowEdit": "编辑、重命名或删除文件/目录", - "allowNew": "创建新文件和目录", - "allowPublish": "发布新的帖子与页面", - "avoidChanges": "(留空以避免更改)", - "changePassword": "更改密码", - "commandRunner": "命令执行器", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", - "commandsUpdated": "命令已更新!", - "customStylesheet": "自定义样式表", - "examples": "例子", - "globalSettings": "全局设置", - "language": "语言", - "lockPassword": "禁止用户修改密码", - "newPassword": "您的新密码", - "newPasswordConfirm": "重输一遍新密码", - "newUser": "新建用户", - "password": "密码", - "passwordUpdated": "密码已更新!", - "permissions": "权限", - "permissionsHelp": "您可以将该用户设置为管理员,也可以单独选择各项权限。如果选择了“管理员”,则其他的选项会被自动勾上,同时该用户可以管理其他用户。", - "profileSettings": "个人设置", - "ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。", - "ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。", - "rules": "规则", - "rulesHelp": "您可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持相对于目录范围的路径。", - "scope": "目录范围", - "settingsUpdated": "设置已更新!", - "user": "用户", - "userCommands": "用户命令(Linux 代码)", - "userCommandsHelp": "指定该用户可以执行的命令(Linux 代码),用空格分隔。例如:", - "userCreated": "用户已创建!", - "userDeleted": "用户已删除!", - "userManagement": "用户管理", - "username": "用户名", - "users": "用户", - "globalRules": "这是全局允许与禁止规则。它们作用于所有用户。您可以给每个用户定义单独的特殊规则来覆盖全局规则。", - "allowSignup": "允许用户注册", - "createUserDir": "在添加新用户的同时自动创建用户的个人目录", - "insertRegex": "插入正则表达式", - "insertPath": "Insert the path", - "userUpdated": "用户已更新!", - "userDefaults": "用户默认设置", - "defaultUserDescription": "这些是新用户的默认设置", - "executeOnShell": "在Shell中执行", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "创建文件和文件夹", - "delete": "删除文件和文件夹", - "download": "下载", - "modify": "编辑", - "execute": "执行命令", - "rename": "重命名或移动文件和文件夹", - "share": "分享文件" - } - }, - "sidebar": { - "help": "帮助", - "login": "登录", - "signup": "注册", - "logout": "登出", - "myFiles": "我的文件", - "newFile": "新建文件", - "newFolder": "新建文件夹", - "settings": "设置", - "siteSettings": "网站设置", - "hugoNew": "Hugo New", - "preview": "预览" + "scheduleMessage": "请选择文档发布的日期和时间", + "show": "显示", + "size": "大小", + "upload": "上传", + "uploadFiles": "正在上传 {files} ...", + "uploadMessage": "请选择上传选项", + "optionalPassword": "密码(选填,留空则无需密码)", + "resolution": "分辨率", + "discardEditorChanges": "是否放弃已修改的内容?", + "replaceOrSkip": "替换或跳过文件", + "resolveConflict": "保留哪些文件?", + "singleConflictResolve": "若同时保留两个版本,复制的文件会自动追加序号。", + "fastConflictResolve": "目标目录内存在 {count} 个同名文件", + "uploadingFiles": "正在上传文件", + "filesInOrigin": "源文件", + "filesInDest": "目标文件", + "override": "覆盖", + "skip": "跳过", + "forbiddenError": "权限错误", + "currentPassword": "当前密码", + "currentPasswordMessage": "请输入当前密码以验证操作" }, "search": { "images": "图像", "music": "音乐", "pdf": "PDF", - "types": "类型", - "video": "视频", + "pressToSearch": "按下回车开始搜索...", "search": "搜索...", - "typeToSearch": "输入搜索...", - "pressToSearch": "回车搜索..." + "typeToSearch": "输入内容进行搜索...", + "types": "类型", + "video": "视频" }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "settings": { + "aceEditorTheme": "Ace编辑器主题", + "admin": "管理员", + "administrator": "管理员", + "allowCommands": "允许执行终端命令", + "allowEdit": "编辑、重命名或删除文件/文件夹", + "allowNew": "创建新文件和文件夹", + "allowPublish": "发布新的帖子与页面", + "allowSignup": "允许用户注册", + "hideLoginButton": "从公开页面隐藏登录按钮", + "avoidChanges": "(留空则不修改)", + "branding": "品牌", + "brandingDirectoryPath": "品牌资源目录路径", + "brandingHelp": "你可以修改站点名称、更换Logo、添加自定义样式,也可以禁用外部GitHub链接,来自定义本文件管理器界面。\n详情请查看 {0}。", + "changePassword": "更改密码", + "commandRunner": "命令执行器", + "commandRunnerHelp": "在此设置事件触发命令,单行单条。环境变量 {0}、{1} 可用,{0} 相对 {1} 生效。功能与变量详情请参考 {2}。", + "commandsUpdated": "命令已更新!", + "createUserDir": "新增用户时自动创建用户主目录", + "minimumPasswordLength": "最小密码长度", + "tusUploads": "分块上传", + "tusUploadsHelp": "支持文件分片上传,网络不佳时仍可稳定传输,并支持断点续传。", + "tusUploadsChunkSize": "分块大小(例如:10MB、1GB);小于该值的文件将直接上传。", + "tusUploadsRetryCount": "分块上传失败时的重试次数", + "userHomeBasePath": "用户主目录的路径", + "userScopeGenerationPlaceholder": "自动生成目录范围", + "createUserHomeDirectory": "创建用户主目录", + "customStylesheet": "自定义样式表", + "defaultUserDescription": "以下为新用户的默认配置", + "disableExternalLinks": "禁止外部链接(帮助文档除外)", + "disableUsedDiskPercentage": "禁用磁盘已用空间展示", + "documentation": "帮助文档", + "examples": "示例", + "executeOnShell": "通过终端执行", + "executeOnShellDescription": "默认直接调用程序执行命令。如需通过终端运行(如Bash、PowerShell 等),可在此配置解释器、参数及选项,执行命令将自动作为参数传入。本设置对用户命令和事件钩子均生效。", + "globalRules": "全局访问规则,对所有用户生效。也可单独为用户设置规则来覆盖全局规则。", + "globalSettings": "全局设置", + "hideDotfiles": "不显示隐藏文件", + "insertPath": "插入路径", + "insertRegex": "插入正则表达式", + "instanceName": "站点名称", + "language": "语言", + "lockPassword": "禁止用户修改密码", + "newPassword": "新密码", + "newPasswordConfirm": "再次输入新密码", + "newUser": "新建用户", + "password": "密码", + "passwordUpdated": "密码已更新!", + "path": "路径", + "perm": { + "create": "创建文件和文件夹", + "delete": "删除文件和文件夹", + "download": "下载", + "execute": "执行命令", + "modify": "编辑", + "rename": "重命名或移动文件和文件夹", + "share": "分享文件(需开启下载权限)" + }, + "permissions": "权限", + "permissionsHelp": "你可以将该用户设置为管理员或单独选择各项权限。如果你选择了“管理员”,则其他的选项会被自动选中,同时该用户可以管理其他用户。\n", + "profileSettings": "个人设置", + "redirectAfterCopyMove": "复制/移动后转到目标位置", + "ruleExample1": "禁止用户访问所有目录下以 . 开头的隐藏文件(隐藏文件, 例如: .git, .gitignore)。\n", + "ruleExample2": "禁止用户访问个人根目录下的 Caddyfile 文件。", + "rules": "规则", + "rulesHelp": "可为用户配置黑白名单规则,被限制的文件将隐藏且无法访问。支持正则表达式、相对用户目录的路径写法。\n", + "scope": "目录范围", + "setDateFormat": "显示精确的日期格式", + "settingsUpdated": "设置已更新!", + "shareDuration": "分享期限", + "shareManagement": "分享管理", + "shareDeleted": "分享已删除!", + "singleClick": "单击打开文件/文件夹", + "sunsetBody": "This project is being wound down. It is archived on 2026-09-01, after which there will be no further releases, bug fixes, or security fixes. Existing releases and Docker images stay online. Do not expose this instance directly to the internet without authentication in front of it.", + "sunsetLink": "Read the project status, known unfixed security issues, and hardening guidance", + "sunsetTitle": "File Browser is being archived", + "themes": { + "default": "系统默认", + "dark": "深色", + "light": "浅色", + "title": "主题" + }, + "user": "用户", + "userCommands": "可用终端命令", + "userCommandsHelp": "指定该用户可执行的终端命令,多个命令用空格分隔。示例:\n", + "userCreated": "用户已创建!", + "userDefaults": "用户默认设置", + "userDeleted": "用户已删除!", + "userManagement": "用户管理", + "userUpdated": "用户信息已更新!", + "username": "用户名", + "users": "用户", + "currentPassword": "当前密码" + }, + "sidebar": { + "diskUsed": "已使用 {used} / 总容量 {total}", + "help": "帮助", + "hugoNew": "Hugo 新建", + "login": "登录", + "logout": "退出", + "myFiles": "我的文件", + "newFile": "新建文件", + "newFolder": "新建文件夹", + "preview": "预览", + "settings": "设置", + "signup": "注册", + "siteSettings": "站点设置" + }, + "success": { + "linkCopied": "链接已复制!" }, "time": { - "unit": "时间单位", - "seconds": "秒", - "minutes": "分钟", + "days": "天", "hours": "小时", - "days": "天" - }, - "download": { - "downloadFile": "下载文件", - "downloadFolder": "下载文件夹" + "minutes": "分钟", + "seconds": "秒", + "unit": "时间单位" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/zh-tw.json b/frontend/src/i18n/zh-tw.json index 279af4fb..edced1fb 100644 --- a/frontend/src/i18n/zh-tw.json +++ b/frontend/src/i18n/zh-tw.json @@ -1,15 +1,20 @@ { - "permanent": "永久", "buttons": { - "shell": "切換 shell", "cancel": "取消", + "clear": "清空", "close": "關閉", + "continue": "繼續", "copy": "複製", "copyFile": "複製檔案", "copyToClipboard": "複製到剪貼簿", + "copyDownloadLinkToClipboard": "複製到剪貼簿", "create": "建立", "delete": "刪除", "download": "下載", + "file": "檔案", + "folder": "資料夾", + "fullScreen": "切換全螢幕", + "hideDotfiles": "隱藏隱藏檔案", "info": "資訊", "more": "更多", "move": "移動", @@ -17,37 +22,57 @@ "new": "新", "next": "下一個", "ok": "確認", - "replace": "更換", + "permalink": "獲取永久連結", "previous": "上一個", + "preview": "預覽", + "publish": "發佈", "rename": "重新命名", + "replace": "更換", "reportIssue": "報告問題", "save": "儲存", + "schedule": "計畫", "search": "搜尋", "select": "選擇", - "share": "分享", - "publish": "發佈", "selectMultiple": "選擇多個", - "schedule": "計畫", + "share": "分享", + "shell": "切換 shell", + "submit": "提交", "switchView": "切換顯示方式", "toggleSidebar": "切換側邊欄", "update": "更新", "upload": "上傳", - "permalink": "獲取永久連結" + "openFile": "開啟檔案", + "openDirect": "View raw", + "discardChanges": "放棄變更", + "stopSearch": "Stop searching", + "saveChanges": "Save changes", + "editAsText": "Edit as Text", + "increaseFontSize": "Increase font size", + "decreaseFontSize": "Decrease font size", + "overrideAll": "Replace all files in destination folder", + "skipAll": "Skip all conflicting files", + "renameAll": "Rename all files (create a copy)", + "singleDecision": "Decide for each conflicting file" }, - "success": { - "linkCopied": "連結已複製!" + "download": { + "downloadFile": "下載檔案", + "downloadFolder": "下載資料夾", + "downloadSelected": "下載已選擇" + }, + "upload": { + "abortUpload": "你確定要中止嗎?" }, "errors": { "forbidden": "您無權訪問。", "internal": "伺服器出了點問題。", - "notFound": "找不到檔案。" + "notFound": "找不到檔案。", + "connection": "無法連接到伺服器。" }, "files": { - "folders": "資料夾", - "files": "檔案", "body": "内容", - "clear": "清空", "closePreview": "關閉預覽", + "files": "檔案", + "folders": "資料夾", "home": "主頁", "lastModified": "最後修改", "loading": "讀取中...", @@ -56,9 +81,20 @@ "multipleSelectionEnabled": "多選模式已開啟", "name": "名稱", "size": "大小", + "sortByLastModified": "按最後修改時間排序", "sortByName": "按名稱排序", "sortBySize": "按大小排序", - "sortByLastModified": "按最後修改時間排序" + "noPreview": "此檔案無法預覽。", + "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvLoadFailed": "Failed to load CSV file.", + "showingRows": "Showing {count} row(s)", + "columnSeparator": "Column Separator", + "csvSeparators": { + "comma": "Comma (,)", + "semicolon": "Semicolon (;)", + "both": "Both (,) and (;)" + }, + "fileEncoding": "File Encoding" }, "help": { "click": "選擇檔案或目錄", @@ -75,23 +111,30 @@ "help": "幫助" }, "login": { - "password": "密碼", - "passwordConfirm": "確認密碼", - "submit": "登入", "createAnAccount": "新建賬戶", "loginInstead": "已有賬戶登錄", + "password": "密碼", + "passwordConfirm": "確認密碼", "passwordsDontMatch": "密碼不匹配", - "usernameTaken": "用戶名已存在", "signup": "註冊", + "submit": "登入", "username": "帳號", - "wrongCredentials": "帳號或密碼錯誤" + "usernameTaken": "用戶名已存在", + "wrongCredentials": "帳號或密碼錯誤", + "passwordTooShort": "Password must be at least {min} characters", + "logout_reasons": { + "inactivity": "You have been logged out due to inactivity." + } }, + "permanent": "永久", "prompts": { "copy": "複製", "copyMessage": "請選擇欲複製至的目錄:", "currentlyNavigating": "目前目錄:", "deleteMessageMultiple": "你確定要刪除這 {count} 個檔案嗎?", "deleteMessageSingle": "你確定要刪除這個檔案/資料夾嗎?", + "deleteMessageShare": "你確定要刪除這個分享({path})嗎?", + "deleteUser": "你確定要刪除這個使用者嗎?", "deleteTitle": "刪除檔案", "displayName": "名稱:", "download": "下載檔案", @@ -102,43 +145,91 @@ "lastModified": "最後修改", "move": "移動", "moveMessage": "請選擇欲移動至的目錄:", + "newArchetype": "建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。", "newDir": "建立目錄", "newDirMessage": "請輸入新目錄的名稱。", "newFile": "建立檔案", "newFileMessage": "請輸入新檔案的名稱。", "numberDirs": "目錄數", "numberFiles": "檔案數", - "replace": "替換", - "replaceMessage": "您嘗試上傳的檔案中有一個與現有檔案的名稱存在衝突。是否取代現有的同名檔案?", "rename": "重新命名", "renameMessage": "請輸入新名稱,舊名稱為:", + "replace": "替換", + "replaceMessage": "您嘗試上傳的檔案中有一個與現有檔案的名稱存在衝突。是否取代現有的同名檔案?", + "schedule": "計畫", + "scheduleMessage": "請選擇發佈這篇貼文的日期與時間。", "show": "顯示", "size": "大小", - "schedule": "計畫", - "scheduleMessage": "請選擇發佈這篇貼文的日期。", - "newArchetype": "建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。" + "upload": "上傳", + "uploadFiles": "正在上傳 {files} ...", + "uploadMessage": "選擇上傳項。", + "optionalPassword": "密碼(選填,不填即無密碼)", + "resolution": "解析度", + "discardEditorChanges": "你確定要放棄所做的變更嗎?", + "replaceOrSkip": "Replace or skip files", + "resolveConflict": "Which files do you want to keep?", + "singleConflictResolve": "If you select both versions, a number will be added to the name of the copied file.", + "fastConflictResolve": "The destination folder there are {count} files with same name.", + "uploadingFiles": "Uploading files", + "filesInOrigin": "Files in origin", + "filesInDest": "Files in destination", + "override": "Overwrite", + "skip": "Skip", + "forbiddenError": "Forbidden Error", + "currentPassword": "Your password", + "currentPasswordMessage": "Enter your password to validate this action." + }, + "search": { + "images": "影像", + "music": "音樂", + "pdf": "PDF", + "pressToSearch": "按確認鍵搜尋...", + "search": "搜尋...", + "typeToSearch": "輸入以搜尋...", + "types": "類型", + "video": "影片" }, "settings": { - "instanceName": "Instance name", - "brandingDirectoryPath": "Branding directory path", - "documentation": "documentation", - "branding": "Branding", - "disableExternalLinks": "Disable external links (except documentation)", - "brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.", + "aceEditorTheme": "Ace editor theme", "admin": "管理員", "administrator": "管理員", "allowCommands": "執行命令", "allowEdit": "編輯、重命名或刪除檔案/目錄", - "allowNew": "創建新檔案和目錄", + "allowNew": "建立新檔案和目錄", "allowPublish": "發佈新的貼文與頁面", - "avoidChanges": "(留空以避免更改)", + "allowSignup": "允許使用者註冊", + "hideLoginButton": "Hide the login button from public pages", + "avoidChanges": "(留空以避免更改)", + "branding": "品牌", + "brandingDirectoryPath": "品牌資訊資料夾路徑", + "brandingHelp": "您可以通過改變例項名稱,更換Logo,加入自定義樣式,甚至禁用到Github的外部連結來自定義File Browser的外觀和給人的感覺。\n想獲得更多資訊,請檢視 {0} 。", "changePassword": "更改密碼", - "commandRunner": "Command runner", - "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", + "commandRunner": "命令執行器", + "commandRunnerHelp": "在這裡你可以設定在下面的事件中執行的命令。每行必須寫一條命令。可以在命令中使用環境變數 {0} 和 {1}。關於此功能和可用環境變數的更多資訊,請閱讀{2}.", "commandsUpdated": "命令已更新!", - "customStylesheet": "自定義樣式表", + "createUserDir": "在新增新使用者的同時自動建立使用者的個人目錄", + "minimumPasswordLength": "密碼最短長度", + "tusUploads": "分塊上傳", + "tusUploadsHelp": "File Browser 支援分塊上傳,在不佳的網絡環境下也可進行高效、可靠、可續的檔案上傳", + "tusUploadsChunkSize": "分塊上傳大小,例如 10MB 或 1GB", + "tusUploadsRetryCount": "分塊上傳失敗時的重試次數", + "userHomeBasePath": "使用者主目錄的路徑", + "userScopeGenerationPlaceholder": "自動生成目錄範圍", + "createUserHomeDirectory": "建立使用者主目錄", + "customStylesheet": "自定義樣式表(CSS)", + "defaultUserDescription": "這些是新使用者的預設設定。", + "disableExternalLinks": "禁止外部連結(幫助文件除外)", + "disableUsedDiskPercentage": "停用已使用磁碟空間百分比圖", + "documentation": "幫助文件", "examples": "範例", + "executeOnShell": "在Shell中執行", + "executeOnShellDescription": "預設情況下,File Browser通過直接呼叫命令的二進位制包來執行命令,如果想在shell中執行(如Bash、PowerShell),你可以在這裡定義所使用的shell和參數。如果設定了這個選項,所執行的命令會作為參數追加在後面。本選項對使用者命令和事件鉤子都生效。", + "globalRules": "這是全局允許與禁止規則。它們作用於所有使用者。您可以給每個使用者定義單獨的特殊規則來覆蓋全局規則。", "globalSettings": "全域設定", + "hideDotfiles": "隱藏隱藏檔案", + "insertPath": "插入路徑", + "insertRegex": "插入正規表示式", + "instanceName": "例項名稱", "language": "語言", "lockPassword": "禁止使用者修改密碼", "newPassword": "您的新密碼", @@ -146,91 +237,70 @@ "newUser": "建立使用者", "password": "密碼", "passwordUpdated": "密碼已更新!", + "path": "路徑", + "perm": { + "create": "建立檔案和資料夾", + "delete": "刪除檔案和資料夾", + "download": "下載", + "execute": "執行命令", + "modify": "編輯檔案", + "rename": "重命名或移動檔案/資料夾", + "share": "分享檔案" + }, "permissions": "權限", "permissionsHelp": "您可以將該使用者設置為管理員,也可以單獨選擇各項權限。如果選擇了“管理員”,則其他的選項會被自動勾上,同時該使用者可以管理其他使用者。", "profileSettings": "個人設定", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "封鎖使用者存取所有資料夾下任何以 . 開頭的檔案(隱藏文件, 例如: .git, .gitignore)。", "ruleExample2": "封鎖使用者存取其目錄範圍的根目錄下名為 Caddyfile 的檔案。", "rules": "規則", "rulesHelp": "您可以為該使用者製定一組黑名單或白名單式的規則,被屏蔽的檔案將不會顯示在清單中,使用者也無權限存取,支持相對於目錄範圍的路徑。", "scope": "目錄範圍", + "setDateFormat": "顯示精確的日期格式", "settingsUpdated": "設定已更新!", + "shareDuration": "分享期限", + "shareManagement": "分享管理", + "shareDeleted": "分享已刪除!", + "singleClick": "使用單擊開啟檔案和目錄", + "themes": { + "default": "系統預設", + "dark": "深色", + "light": "淺色", + "title": "主題" + }, "user": "使用者", - "userCommands": "使用者命令", - "userCommandsHelp": "指定該使用者可以執行的命令,用空格分隔。例如:", + "userCommands": "使用者命令(Shell 命令)", + "userCommandsHelp": "指定該使用者可以執行的命令(Shell 命令),用空格分隔。例如:", "userCreated": "使用者已建立!", + "userDefaults": "使用者預設選項", "userDeleted": "使用者已刪除!", "userManagement": "使用者管理", + "userUpdated": "使用者已更新!", "username": "使用者名稱", "users": "使用者", - "globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.", - "allowSignup": "Allow users to signup", - "createUserDir": "Auto create user home dir while adding new user", - "insertRegex": "Insert regex expression", - "insertPath": "Insert the path", - "userUpdated": "使用者已更新!", - "userDefaults": "User default settings", - "defaultUserDescription": "This are the default settings for new users.", - "executeOnShell": "Execute on shell", - "executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.", - "perm": { - "create": "建立檔案和資料夾", - "delete": "刪除檔案和資料夾", - "download": "下載", - "modify": "編輯檔案", - "execute": "Execute commands", - "rename": "重命名或移動檔案/資料夾", - "share": "分享檔案" - } + "currentPassword": "Your Current Password" }, "sidebar": { "help": "幫助", + "hugoNew": "Hugo 新建", "login": "登入", - "signup": "註冊", "logout": "登出", "myFiles": "我的檔案", "newFile": "建立檔案", "newFolder": "建立資料夾", + "preview": "預覽", "settings": "設定", - "siteSettings": "網站設定", - "hugoNew": "Hugo New", - "preview": "預覽" + "signup": "註冊", + "siteSettings": "網站設定" }, - "search": { - "images": "影像", - "music": "音樂", - "pdf": "PDF", - "types": "類型", - "video": "影片", - "search": "搜尋...", - "typeToSearch": "Type to search...", - "pressToSearch": "Press enter to search..." - }, - "languages": { - "ar": "العربية", - "en": "English", - "it": "Italiano", - "fr": "Français", - "pt": "Português", - "ptBR": "Português (Brasil)", - "ja": "日本語", - "zhCN": "中文 (简体)", - "zhTW": "中文 (繁體)", - "es": "Español", - "de": "Deutsch", - "ru": "Русский", - "pl": "Polski", - "ko": "한국어" + "success": { + "linkCopied": "連結已複製!" }, "time": { - "unit": "時間單位", - "seconds": "秒", - "minutes": "分鐘", + "days": "天", "hours": "小時", - "days": "天" - }, - "download": { - "downloadFile": "下載檔案", - "downloadFolder": "下載資料夾" + "minutes": "分鐘", + "seconds": "秒", + "unit": "時間單位" } -} \ No newline at end of file +} diff --git a/frontend/src/index.d.ts b/frontend/src/index.d.ts new file mode 100644 index 00000000..11a8c6e2 --- /dev/null +++ b/frontend/src/index.d.ts @@ -0,0 +1 @@ +declare module "*.vue"; diff --git a/frontend/src/main.js b/frontend/src/main.js deleted file mode 100644 index 520bb8d7..00000000 --- a/frontend/src/main.js +++ /dev/null @@ -1,43 +0,0 @@ -import { sync } from 'vuex-router-sync' -import store from '@/store' -import router from '@/router' -import i18n from '@/i18n' -import Vue from '@/utils/vue' -import { recaptcha, loginPage } from '@/utils/constants' -import { login, validateLogin } from '@/utils/auth' -import App from '@/App' - -sync(store, router) - -async function start () { - if (loginPage) { - await validateLogin() - } else { - await login('', '', '') - } - - if (recaptcha) { - await new Promise (resolve => { - const check = () => { - if (typeof window.grecaptcha === 'undefined') { - setTimeout(check, 100) - } else { - resolve() - } - } - - check() - }) - } - - new Vue({ - el: '#app', - store, - router, - i18n, - template: '', - components: { App } - }) -} - -start() diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 00000000..f6b7ac78 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,106 @@ +import { disableExternal } from "@/utils/constants"; +import { createApp } from "vue"; +import VueNumberInput from "@chenfengyuan/vue-number-input"; +import VueLazyload from "vue-lazyload"; +import Toast, { POSITION, useToast } from "vue-toastification"; +import type { + ToastOptions, + PluginOptions, +} from "vue-toastification/dist/types/types"; +import createPinia from "@/stores"; +import router from "@/router"; +import i18n, { isRtl } from "@/i18n"; +import App from "@/App.vue"; +import CustomToast from "@/components/CustomToast.vue"; + +import dayjs from "dayjs"; +import localizedFormat from "dayjs/plugin/localizedFormat"; +import relativeTime from "dayjs/plugin/relativeTime"; +import duration from "dayjs/plugin/duration"; + +import "./css/styles.css"; + +// register dayjs plugins globally +dayjs.extend(localizedFormat); +dayjs.extend(relativeTime); +dayjs.extend(duration); + +const pinia = createPinia(router); + +const app = createApp(App); + +app.component(VueNumberInput.name || "vue-number-input", VueNumberInput); +app.use(VueLazyload); +app.use(Toast, { + transition: "Vue-Toastification__bounce", + maxToasts: 10, + newestOnTop: true, +} satisfies PluginOptions); + +app.use(i18n); +app.use(pinia); +app.use(router); + +app.mixin({ + mounted() { + // expose vue instance to components + this.$el.__vue__ = this; + }, +}); + +// provide v-focus for components +app.directive("focus", { + mounted: async (el) => { + // initiate focus for the element + el.focus(); + }, +}); + +const toastConfig = { + position: POSITION.BOTTOM_CENTER, + timeout: 4000, + closeOnClick: true, + pauseOnFocusLoss: true, + pauseOnHover: true, + draggable: true, + draggablePercent: 0.6, + showCloseButtonOnHover: false, + hideProgressBar: false, + closeButton: "button", + icon: true, +} satisfies ToastOptions; + +app.provide("$showSuccess", (message: string) => { + const $toast = useToast(); + $toast.success( + { + component: CustomToast, + props: { + message: message, + }, + }, + { ...toastConfig, rtl: isRtl() } + ); +}); + +app.provide("$showError", (error: Error | string, displayReport = true) => { + const $toast = useToast(); + $toast.error( + { + component: CustomToast, + props: { + message: (error as Error).message || error, + isReport: !disableExternal && displayReport, + // TODO: could you add this to the component itself? + reportText: i18n.global.t("buttons.reportIssue"), + }, + }, + { + ...toastConfig, + timeout: 0, + rtl: isRtl(), + } + ); +}); + +router.isReady().then(() => app.mount("#app")); diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js deleted file mode 100644 index 63a26b1a..00000000 --- a/frontend/src/router/index.js +++ /dev/null @@ -1,150 +0,0 @@ -import Vue from 'vue' -import Router from 'vue-router' -import Login from '@/views/Login' -import Layout from '@/views/Layout' -import Files from '@/views/Files' -import Share from '@/views/Share' -import Users from '@/views/settings/Users' -import User from '@/views/settings/User' -import Settings from '@/views/Settings' -import GlobalSettings from '@/views/settings/Global' -import ProfileSettings from '@/views/settings/Profile' -import Error403 from '@/views/errors/403' -import Error404 from '@/views/errors/404' -import Error500 from '@/views/errors/500' -import store from '@/store' -import { baseURL } from '@/utils/constants' - -Vue.use(Router) - -const router = new Router({ - base: baseURL, - mode: 'history', - routes: [ - { - path: '/login', - name: 'Login', - component: Login, - beforeEnter: (to, from, next) => { - if (store.getters.isLogged) { - return next({ path: '/files' }) - } - - document.title = 'Login' - next() - } - }, - { - path: '/*', - component: Layout, - children: [ - { - path: '/share/*', - name: 'Share', - component: Share - }, - { - path: '/files/*', - name: 'Files', - component: Files, - meta: { - requiresAuth: true - } - }, - { - path: '/settings', - name: 'Settings', - component: Settings, - redirect: { - path: '/settings/profile' - }, - meta: { - requiresAuth: true - }, - children: [ - { - path: '/settings/profile', - name: 'Profile Settings', - component: ProfileSettings - }, - { - path: '/settings/global', - name: 'Global Settings', - component: GlobalSettings, - meta: { - requiresAdmin: true - } - }, - { - path: '/settings/users', - name: 'Users', - component: Users, - meta: { - requiresAdmin: true - } - }, - { - path: '/settings/users/*', - name: 'User', - component: User, - meta: { - requiresAdmin: true - } - } - ] - }, - { - path: '/403', - name: 'Forbidden', - component: Error403 - }, - { - path: '/404', - name: 'Not Found', - component: Error404 - }, - { - path: '/500', - name: 'Internal Server Error', - component: Error500 - }, - { - path: '/files', - redirect: { - path: '/files/' - } - }, - { - path: '/*', - redirect: to => `/files${to.path}` - } - ] - } - ] -}) - -router.beforeEach((to, from, next) => { - document.title = to.name - - if (to.matched.some(record => record.meta.requiresAuth)) { - if (!store.getters.isLogged) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - - return - } - - if (to.matched.some(record => record.meta.requiresAdmin)) { - if (!store.state.user.perm.admin) { - next({ path: '/403' }) - return - } - } - } - - next() -}) - -export default router diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 00000000..e6e88d31 --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,220 @@ +import type { RouteLocation } from "vue-router"; +import { createRouter, createWebHistory } from "vue-router"; +import Login from "@/views/Login.vue"; +import Layout from "@/views/Layout.vue"; +import Files from "@/views/Files.vue"; +import Share from "@/views/Share.vue"; +import Users from "@/views/settings/Users.vue"; +import User from "@/views/settings/User.vue"; +import Settings from "@/views/Settings.vue"; +import GlobalSettings from "@/views/settings/Global.vue"; +import ProfileSettings from "@/views/settings/Profile.vue"; +import Shares from "@/views/settings/Shares.vue"; +import Errors from "@/views/Errors.vue"; +import { useAuthStore } from "@/stores/auth"; +import { baseURL, name } from "@/utils/constants"; +import i18n from "@/i18n"; +import { recaptcha, loginPage } from "@/utils/constants"; +import { login, validateLogin } from "@/utils/auth"; + +const titles = { + Login: "sidebar.login", + Share: "buttons.share", + Files: "files.files", + Settings: "sidebar.settings", + ProfileSettings: "settings.profileSettings", + Shares: "settings.shareManagement", + GlobalSettings: "settings.globalSettings", + Users: "settings.users", + User: "settings.user", + Forbidden: "errors.forbidden", + NotFound: "errors.notFound", + InternalServerError: "errors.internal", +}; + +const routes = [ + { + path: "/login", + name: "Login", + component: Login, + }, + { + path: "/share", + component: Layout, + children: [ + { + path: ":path*", + name: "Share", + component: Share, + }, + ], + }, + { + path: "/files", + component: Layout, + meta: { + requiresAuth: true, + }, + children: [ + { + path: ":path*", + name: "Files", + component: Files, + }, + ], + }, + { + path: "/settings", + component: Layout, + meta: { + requiresAuth: true, + }, + children: [ + { + path: "", + name: "Settings", + component: Settings, + redirect: { + path: "/settings/profile", + }, + children: [ + { + path: "profile", + name: "ProfileSettings", + component: ProfileSettings, + }, + { + path: "shares", + name: "Shares", + component: Shares, + }, + { + path: "global", + name: "GlobalSettings", + component: GlobalSettings, + meta: { + requiresAdmin: true, + }, + }, + { + path: "users", + name: "Users", + component: Users, + meta: { + requiresAdmin: true, + }, + }, + { + path: "users/:id", + name: "User", + component: User, + meta: { + requiresAdmin: true, + }, + }, + ], + }, + ], + }, + { + path: "/403", + name: "Forbidden", + component: Errors, + props: { + errorCode: 403, + showHeader: true, + }, + }, + { + path: "/404", + name: "NotFound", + component: Errors, + props: { + errorCode: 404, + showHeader: true, + }, + }, + { + path: "/500", + name: "InternalServerError", + component: Errors, + props: { + errorCode: 500, + showHeader: true, + }, + }, + { + path: "/:catchAll(.*)*", + redirect: (to: RouteLocation) => { + const catchAll = to.params.catchAll; + if (!catchAll) return "/files/"; + return `/files/${Array.isArray(catchAll) ? catchAll.join("/") : catchAll}`; + }, + }, +]; + +async function initAuth() { + if (loginPage) { + await validateLogin(); + } else { + await login("", "", ""); + } + + if (recaptcha) { + await new Promise((resolve) => { + const check = () => { + if (typeof window.grecaptcha === "undefined") { + setTimeout(check, 100); + } else { + resolve(); + } + }; + + check(); + }); + } +} + +const router = createRouter({ + history: createWebHistory(baseURL), + routes, +}); + +router.beforeResolve(async (to, from) => { + const title = i18n.global.t(titles[to.name as keyof typeof titles]); + document.title = title + " - " + name; + + const authStore = useAuthStore(); + + // this will only be null on first route + if (from.name == null) { + try { + await initAuth(); + } catch (error) { + console.error(error); + } + } + + if (to.path.endsWith("/login") && authStore.isLoggedIn) { + return { path: "/files/" }; + } + + if (to.matched.some((record) => record.meta.requiresAuth)) { + if (!authStore.isLoggedIn) { + return { + path: "/login", + query: { redirect: to.fullPath }, + }; + } + + if (to.matched.some((record) => record.meta.requiresAdmin)) { + if (authStore.user === null || !authStore.user.perm.admin) { + return { path: "/403" }; + } + } + } + + return; +}); + +export { router, router as default }; diff --git a/frontend/src/store/getters.js b/frontend/src/store/getters.js deleted file mode 100644 index 9831b7b9..00000000 --- a/frontend/src/store/getters.js +++ /dev/null @@ -1,9 +0,0 @@ -const getters = { - isLogged: state => state.user !== null, - isFiles: state => !state.loading && state.route.name === 'Files', - isListing: (state, getters) => getters.isFiles && state.req.isDir, - isEditor: (state, getters) => getters.isFiles && (state.req.type === 'text' || state.req.type === 'textImmutable'), - selectedCount: state => state.selected.length -} - -export default getters diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js deleted file mode 100644 index 25c37bb8..00000000 --- a/frontend/src/store/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import mutations from './mutations' -import getters from './getters' - -Vue.use(Vuex) - -const state = { - user: null, - req: {}, - oldReq: {}, - clipboard: { - key: '', - items: [] - }, - jwt: '', - progress: 0, - loading: false, - reload: false, - selected: [], - multiple: false, - show: null, - showShell: false, - showMessage: null, - showConfirm: null -} - -export default new Vuex.Store({ - strict: true, - state, - getters, - mutations -}) diff --git a/frontend/src/store/mutations.js b/frontend/src/store/mutations.js deleted file mode 100644 index 747c91be..00000000 --- a/frontend/src/store/mutations.js +++ /dev/null @@ -1,91 +0,0 @@ -import * as i18n from '@/i18n' -import moment from 'moment' - -const mutations = { - closeHovers: state => { - state.show = null - state.showMessage = null - }, - toggleShell: (state) => { - state.showShell = !state.showShell - }, - showHover: (state, value) => { - if (typeof value !== 'object') { - state.show = value - return - } - - state.show = value.prompt - state.showMessage = value.message - state.showConfirm = value.confirm - }, - showError: (state, value) => { - state.show = 'error' - state.showMessage = value - }, - showSuccess: (state, value) => { - state.show = 'success' - state.showMessage = value - }, - setLoading: (state, value) => { state.loading = value }, - setReload: (state, value) => { state.reload = value }, - setUser: (state, value) => { - if (value === null) { - state.user = null - return - } - - let locale = value.locale - - if (locale === '') { - locale = i18n.detectLocale() - } - - moment.locale(locale) - i18n.default.locale = locale - state.user = value - }, - setJWT: (state, value) => (state.jwt = value), - multiple: (state, value) => (state.multiple = value), - addSelected: (state, value) => (state.selected.push(value)), - addPlugin: (state, value) => { - state.plugins.push(value) - }, - removeSelected: (state, value) => { - let i = state.selected.indexOf(value) - if (i === -1) return - state.selected.splice(i, 1) - }, - resetSelected: (state) => { - state.selected = [] - }, - updateUser: (state, value) => { - if (typeof value !== 'object') return - - for (let field in value) { - if (field === 'locale') { - moment.locale(value[field]) - i18n.default.locale = value[field] - } - - state.user[field] = value[field] - } - }, - updateRequest: (state, value) => { - state.oldReq = state.req - state.req = value - }, - updateClipboard: (state, value) => { - state.clipboard.key = value.key - state.clipboard.items = value.items - }, - resetClipboard: (state) => { - state.clipboard.key = '' - state.clipboard.items = [] - }, - setProgress: (state, value) => { - state.progress = value - } -} - -export default mutations diff --git a/frontend/src/stores/auth.ts b/frontend/src/stores/auth.ts new file mode 100644 index 00000000..c33db87a --- /dev/null +++ b/frontend/src/stores/auth.ts @@ -0,0 +1,46 @@ +import { defineStore } from "pinia"; +import { detectLocale, setLocale } from "@/i18n"; +import { cloneDeep } from "lodash-es"; + +export const useAuthStore = defineStore("auth", { + // convert to a function + state: (): { + user: IUser | null; + jwt: string; + logoutTimer: number | null; + } => ({ + user: null, + jwt: "", + logoutTimer: null, + }), + getters: { + // user and jwt getter removed, no longer needed + isLoggedIn: (state) => state.user !== null, + }, + actions: { + // no context as first argument, use `this` instead + setUser(user: IUser) { + if (user === null) { + this.user = null; + return; + } + + setLocale(user.locale || detectLocale()); + this.user = user; + }, + updateUser(user: Partial) { + if (user.locale) { + setLocale(user.locale); + } + + this.user = { ...this.user, ...cloneDeep(user) } as IUser; + }, + // easily reset state using `$reset` + clearUser() { + this.$reset(); + }, + setLogoutTimer(logoutTimer: number | null) { + this.logoutTimer = logoutTimer; + }, + }, +}); diff --git a/frontend/src/stores/clipboard.ts b/frontend/src/stores/clipboard.ts new file mode 100644 index 00000000..5ad8a775 --- /dev/null +++ b/frontend/src/stores/clipboard.ts @@ -0,0 +1,24 @@ +import { defineStore } from "pinia"; + +export const useClipboardStore = defineStore("clipboard", { + // convert to a function + state: (): { + key: string; + items: ClipItem[]; + path?: string; + } => ({ + key: "", + items: [], + path: undefined, + }), + getters: { + // user and jwt getter removed, no longer needed + }, + actions: { + // no context as first argument, use `this` instead + // easily reset state using `$reset` + resetClipboard() { + this.$reset(); + }, + }, +}); diff --git a/frontend/src/stores/file.ts b/frontend/src/stores/file.ts new file mode 100644 index 00000000..6ffe35d6 --- /dev/null +++ b/frontend/src/stores/file.ts @@ -0,0 +1,65 @@ +import { defineStore } from "pinia"; + +export const useFileStore = defineStore("file", { + // convert to a function + state: (): { + req: Resource | null; + oldReq: Resource | null; + reload: boolean; + selected: number[]; + multiple: boolean; + isFiles: boolean; + preselect: string | null; + } => ({ + req: null, + oldReq: null, + reload: false, + selected: [], + multiple: false, + isFiles: false, + preselect: null, + }), + getters: { + selectedCount: (state) => state.selected.length, + // route: () => { + // const routerStore = useRouterStore(); + // return routerStore.router.currentRoute; + // }, + // isFiles: (state) => { + // const layoutStore = useLayoutStore(); + // return !layoutStore.loading && state.route._value.name === "Files"; + // }, + isListing: (state) => { + return state.isFiles && state?.req?.isDir; + }, + }, + actions: { + // no context as first argument, use `this` instead + toggleMultiple() { + this.multiple = !this.multiple; + }, + updateRequest(value: Resource | null) { + const selectedItems = this.selected.map((i) => this.req?.items[i]); + this.oldReq = this.req; + this.req = value; + + this.selected = []; + + if (!this.req?.items) return; + this.selected = this.req.items + .filter((item) => + selectedItems.some((rItem) => rItem?.url === item.url) + ) + .map((item) => item.index); + }, + removeSelected(value: any) { + const i = this.selected.indexOf(value); + if (i === -1) return; + this.selected.splice(i, 1); + }, + // easily reset state using `$reset` + clearFile() { + this.$reset(); + }, + }, +}); diff --git a/frontend/src/stores/index.ts b/frontend/src/stores/index.ts new file mode 100644 index 00000000..4173f75a --- /dev/null +++ b/frontend/src/stores/index.ts @@ -0,0 +1,12 @@ +import { createPinia as _createPinia } from "pinia"; +import { markRaw } from "vue"; +import type { Router } from "vue-router"; + +export default function createPinia(router: Router) { + const pinia = _createPinia(); + pinia.use(({ store }) => { + store.router = markRaw(router); + }); + + return pinia; +} diff --git a/frontend/src/stores/layout.ts b/frontend/src/stores/layout.ts new file mode 100644 index 00000000..fbd6d99f --- /dev/null +++ b/frontend/src/stores/layout.ts @@ -0,0 +1,86 @@ +import { defineStore } from "pinia"; +// import { useAuthPreferencesStore } from "./auth-preferences"; +// import { useAuthEmailStore } from "./auth-email"; + +export const useLayoutStore = defineStore("layout", { + // convert to a function + state: (): { + loading: boolean; + prompts: PopupProps[]; + showShell: boolean | null; + } => ({ + loading: false, + prompts: [], + showShell: false, + }), + getters: { + currentPrompt(state) { + return state.prompts.length > 0 + ? state.prompts[state.prompts.length - 1] + : null; + }, + currentPromptName(): string | null | undefined { + return this.currentPrompt?.prompt; + }, + // user and jwt getter removed, no longer needed + }, + actions: { + // no context as first argument, use `this` instead + toggleShell() { + this.showShell = !this.showShell; + }, + setCloseOnPrompt(closeFunction: () => Promise, onPrompt: string) { + const prompt = this.prompts.find((prompt) => prompt.prompt === onPrompt); + if (prompt) { + prompt.close = closeFunction; + } + }, + showHover(value: PopupProps | string) { + if (typeof value !== "object") { + this.prompts.push({ + prompt: value, + confirm: null, + action: undefined, + saveAction: undefined, + props: null, + close: null, + }); + return; + } + + this.prompts.push({ + prompt: value.prompt, + confirm: value?.confirm, + action: value?.action, + saveAction: value?.saveAction, + props: value?.props, + close: value?.close, + }); + }, + showError() { + this.prompts.push({ + prompt: "error", + confirm: null, + action: undefined, + props: null, + close: null, + }); + }, + showSuccess() { + this.prompts.push({ + prompt: "success", + confirm: null, + action: undefined, + props: null, + close: null, + }); + }, + closeHovers() { + this.prompts.pop()?.close?.(); + }, + // easily reset state using `$reset` + clearLayout() { + this.$reset(); + }, + }, +}); diff --git a/frontend/src/stores/router.ts b/frontend/src/stores/router.ts new file mode 100644 index 00000000..e598824c --- /dev/null +++ b/frontend/src/stores/router.ts @@ -0,0 +1,14 @@ +import { defineStore } from "pinia"; + +/** + * Dummy store for exposing router to be used in other stores + * @example + * // route: () => { + * // const routerStore = useRouterStore(); + * // return routerStore.router.currentRoute; + * // }, + */ +export const useRouterStore = defineStore("routerStore", () => { + // can be an empty definition + return {}; +}); diff --git a/frontend/src/stores/upload.ts b/frontend/src/stores/upload.ts new file mode 100644 index 00000000..065679fd --- /dev/null +++ b/frontend/src/stores/upload.ts @@ -0,0 +1,198 @@ +import { defineStore } from "pinia"; +import { useFileStore } from "./file"; +import { files as api } from "@/api"; +import buttons from "@/utils/buttons"; +import { computed, inject, markRaw, ref } from "vue"; +import * as tus from "@/api/tus"; + +// TODO: make this into a user setting +const UPLOADS_LIMIT = 5; + +const beforeUnload = (event: Event) => { + event.preventDefault(); + // To remove >> is deprecated + // event.returnValue = ""; +}; + +export const useUploadStore = defineStore("upload", () => { + const $showError = inject("$showError")!; + + let progressInterval: number | null = null; + + // + // STATE + // + + const allUploads = ref([]); + const activeUploads = ref>(new Set()); + const lastUpload = ref(-1); + const totalBytes = ref(0); + const sentBytes = ref(0); + + // + // ACTIONS + // + + const upload = ( + path: string, + name: string, + file: File | null, + overwrite: boolean, + type: ResourceType + ) => { + if (!hasActiveUploads() && !hasPendingUploads()) { + window.addEventListener("beforeunload", beforeUnload); + buttons.loading("upload"); + } + + const upload: Upload = { + path, + name, + file, + overwrite, + type, + totalBytes: file?.size || 1, + sentBytes: 0, + // Stores rapidly changing sent bytes value without causing component re-renders + rawProgress: markRaw({ + sentBytes: 0, + }), + }; + + totalBytes.value += upload.totalBytes; + allUploads.value.push(upload); + + processUploads(); + }; + + const abort = () => { + // Resets the state by preventing the processing of the remaning uploads + lastUpload.value = Infinity; + tus.abortAllUploads(); + }; + + // + // GETTERS + // + + const pendingUploadCount = computed( + () => + allUploads.value.length - + (lastUpload.value + 1) + + activeUploads.value.size + ); + + // + // PRIVATE FUNCTIONS + // + + const hasActiveUploads = () => activeUploads.value.size > 0; + + const hasPendingUploads = () => + allUploads.value.length > lastUpload.value + 1; + + const isActiveUploadsOnLimit = () => activeUploads.value.size < UPLOADS_LIMIT; + + const processUploads = async () => { + if (!hasActiveUploads() && !hasPendingUploads()) { + const fileStore = useFileStore(); + window.removeEventListener("beforeunload", beforeUnload); + buttons.success("upload"); + reset(); + fileStore.reload = true; + } + + if (isActiveUploadsOnLimit() && hasPendingUploads()) { + if (progressInterval === null) { + // Update the state in a fixed time interval. Guard on the handle, not + // on the active count: this runs again every time the queue drains to + // zero with work still pending, and reassigning would leak the timer. + progressInterval = window.setInterval(syncState, 1000); + } + + const upload = nextUpload(); + let succeeded = true; + + if (upload.type === "dir") { + await api.post(upload.path).catch((err) => { + succeeded = false; + $showError(err); + }); + } else { + const onUpload = (event: ProgressEvent) => { + upload.rawProgress.sentBytes = event.loaded; + }; + + await api + .post(upload.path, upload.file!, upload.overwrite, onUpload) + .catch((err) => { + succeeded = false; + if (err.message !== "Upload aborted") $showError(err); + }); + } + + finishUpload(upload, succeeded); + } + }; + + const nextUpload = (): Upload => { + lastUpload.value++; + + const upload = allUploads.value[lastUpload.value]; + activeUploads.value.add(upload); + + return upload; + }; + + const finishUpload = (upload: Upload, succeeded: boolean) => { + if (succeeded) { + sentBytes.value += upload.totalBytes - upload.sentBytes; + upload.sentBytes = upload.totalBytes; + } else { + // Credit only what actually reached the server and drop the rest from the + // total. Counting a failed upload as fully sent makes the bar report 100% + // while nothing was written, which reads as success. + sentBytes.value += upload.rawProgress.sentBytes - upload.sentBytes; + totalBytes.value -= upload.totalBytes - upload.rawProgress.sentBytes; + upload.sentBytes = upload.rawProgress.sentBytes; + } + upload.file = null; + + activeUploads.value.delete(upload); + processUploads(); + }; + + const syncState = () => { + for (const upload of activeUploads.value) { + sentBytes.value += upload.rawProgress.sentBytes - upload.sentBytes; + upload.sentBytes = upload.rawProgress.sentBytes; + } + }; + + const reset = () => { + if (progressInterval !== null) { + clearInterval(progressInterval); + progressInterval = null; + } + + allUploads.value = []; + activeUploads.value = new Set(); + lastUpload.value = -1; + totalBytes.value = 0; + sentBytes.value = 0; + }; + + return { + // STATE + activeUploads, + totalBytes, + sentBytes, + + // ACTIONS + upload, + abort, + + // GETTERS + pendingUploadCount, + }; +}); diff --git a/frontend/src/types/api.d.ts b/frontend/src/types/api.d.ts new file mode 100644 index 00000000..f4864724 --- /dev/null +++ b/frontend/src/types/api.d.ts @@ -0,0 +1,34 @@ +type ApiMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; + +type ApiContent = + | Blob + | File + | Pick, "read"> + | ""; + +interface ApiOpts { + method?: ApiMethod; + headers?: object; + body?: any; + signal?: AbortSignal; +} + +interface TusSettings { + retryCount: number; + chunkSize: number; +} + +type ChecksumAlg = "md5" | "sha1" | "sha256" | "sha512"; + +interface Share { + hash: string; + path: string; + expire?: any; + userID?: number; + hasPassword?: boolean; + username?: string; +} + +interface SearchParams { + [key: string]: string; +} diff --git a/frontend/src/types/file.d.ts b/frontend/src/types/file.d.ts new file mode 100644 index 00000000..067598b0 --- /dev/null +++ b/frontend/src/types/file.d.ts @@ -0,0 +1,90 @@ +interface ResourceBase { + path: string; + name: string; + size: number; + extension: string; + modified: string; // ISO 8601 datetime + mode: number; + isDir: boolean; + isSymlink: boolean; + type: ResourceType; + url: string; +} + +interface Resource extends ResourceBase { + items: ResourceItem[]; + numDirs: number; + numFiles: number; + sorting: Sorting; + hash?: string; + token?: string; + index: number; + subtitles?: string[]; + content?: string; + rawContent?: ArrayBuffer; +} + +interface ResourceItem extends ResourceBase { + index: number; + subtitles?: string[]; +} + +type ResourceType = + | "dir" + | "video" + | "audio" + | "image" + | "pdf" + | "text" + | "blob" + | "textImmutable"; + +type DownloadFormat = + | "zip" + | "tar" + | "targz" + | "tarbz2" + | "tarxz" + | "tarlz4" + | "tarsz" + | null; + +interface ClipItem { + from: string; + name: string; + size?: number; + isDir?: boolean; + modified?: string; +} + +interface BreadCrumb { + name: string; + url: string; +} + +interface ConflictingItem { + lastModified: number | string | undefined; + size: number | undefined; +} + +interface ConflictingResource { + index: number; + name: string; + origin: ConflictingItem; + dest: ConflictingItem; + checked: Array<"origin" | "dest", "origin-resume">; + isSmallerOnServer?: boolean; +} + +interface CsvData { + headers: string[]; + rows: string[][]; +} + +interface RecursiveEntry { + path: string; + name: string; + size: number; + modified: string; + isDir: boolean; +} diff --git a/frontend/src/types/global.d.ts b/frontend/src/types/global.d.ts new file mode 100644 index 00000000..287388f0 --- /dev/null +++ b/frontend/src/types/global.d.ts @@ -0,0 +1,17 @@ +export {}; + +declare global { + interface Window { + FileBrowser: any; + grecaptcha: any; + } + + interface HTMLElement { + // TODO: no idea what the exact type is + __vue__: any; + } + + interface HTMLElement { + clickOutsideEvent?: (event: Event) => void; + } +} diff --git a/frontend/src/types/layout.d.ts b/frontend/src/types/layout.d.ts new file mode 100644 index 00000000..a5c3f160 --- /dev/null +++ b/frontend/src/types/layout.d.ts @@ -0,0 +1,10 @@ +interface PopupProps { + prompt: string; + confirm?: any; + action?: PopupAction; + saveAction?: () => void; + props?: any; + close?: (() => Promise) | null; +} + +type PopupAction = (e: Event) => void; diff --git a/frontend/src/types/settings.d.ts b/frontend/src/types/settings.d.ts new file mode 100644 index 00000000..18672bdf --- /dev/null +++ b/frontend/src/types/settings.d.ts @@ -0,0 +1,62 @@ +interface ISettings { + signup: boolean; + createUserDir: boolean; + hideLoginButton: boolean; + minimumPasswordLength: number; + userHomeBasePath: string; + defaults: SettingsDefaults; + authMethod: string; + rules: any[]; + branding: SettingsBranding; + tus: SettingsTus; + shell: string[]; + commands: SettingsCommand; +} + +interface SettingsDefaults { + scope: string; + locale: string; + viewMode: ViewModeType; + singleClick: boolean; + redirectAfterCopyMove: boolean; + sorting: Sorting; + perm: Permissions; + commands: any[]; + hideDotfiles: boolean; + dateFormat: boolean; + aceEditorTheme: string; +} + +interface SettingsBranding { + name: string; + disableExternal: boolean; + disableUsedPercentage: boolean; + files: string; + theme: UserTheme; + color: string; +} + +interface SettingsTus { + chunkSize: number; + retryCount: number; +} + +interface SettingsCommand { + after_copy?: string[]; + after_delete?: string[]; + after_rename?: string[]; + after_save?: string[]; + after_upload?: string[]; + before_copy?: string[]; + before_delete?: string[]; + before_rename?: string[]; + before_save?: string[]; + before_upload?: string[]; +} + +interface SettingsUnit { + KB: number; + MB: number; + GB: number; + TB: number; +} diff --git a/frontend/src/types/toast.d.ts b/frontend/src/types/toast.d.ts new file mode 100644 index 00000000..5a691ed4 --- /dev/null +++ b/frontend/src/types/toast.d.ts @@ -0,0 +1,2 @@ +type IToastSuccess = (message: string) => void; +type IToastError = (error: Error | string, displayReport?: boolean) => void; diff --git a/frontend/src/types/upload.d.ts b/frontend/src/types/upload.d.ts new file mode 100644 index 00000000..06946523 --- /dev/null +++ b/frontend/src/types/upload.d.ts @@ -0,0 +1,24 @@ +type Upload = { + path: string; + name: string; + file: File | null; + type: ResourceType; + overwrite: boolean; + totalBytes: number; + sentBytes: number; + rawProgress: { + sentBytes: number; + }; +}; + +interface UploadEntry { + name: string; + size: number; + isDir: boolean; + fullPath?: string; + to?: string; + file?: File; + overwrite?: boolean; +} + +type UploadList = UploadEntry[]; diff --git a/frontend/src/types/user.d.ts b/frontend/src/types/user.d.ts new file mode 100644 index 00000000..317f1e43 --- /dev/null +++ b/frontend/src/types/user.d.ts @@ -0,0 +1,69 @@ +interface IUser { + id: number; + username: string; + password: string; + scope: string; + locale: string; + perm: Permissions; + commands: string[]; + rules: IRule[]; + lockPassword: boolean; + hideDotfiles: boolean; + singleClick: boolean; + redirectAfterCopyMove: boolean; + dateFormat: boolean; + viewMode: ViewModeType; + sorting?: Sorting; + aceEditorTheme: string; +} + +type ViewModeType = "list" | "mosaic" | "mosaic gallery"; + +interface IUserForm { + id?: number; + username?: string; + password?: string; + scope?: string; + locale?: string; + perm?: Permissions; + commands?: string[]; + rules?: IRule[]; + lockPassword?: boolean; + hideDotfiles?: boolean; + singleClick?: boolean; + redirectAfterCopyMove?: boolean; + dateFormat?: boolean; +} + +interface Permissions { + admin: boolean; + copy: boolean; + create: boolean; + delete: boolean; + download: boolean; + execute: boolean; + modify: boolean; + move: boolean; + rename: boolean; + share: boolean; + shell: boolean; + upload: boolean; +} + +interface Sorting { + by: string; + asc: boolean; +} + +interface IRule { + allow: boolean; + path: string; + regex: boolean; + regexp: IRegexp; +} + +interface IRegexp { + raw: string; +} + +type UserTheme = "light" | "dark" | ""; diff --git a/frontend/src/types/utif.d.ts b/frontend/src/types/utif.d.ts new file mode 100644 index 00000000..1919070b --- /dev/null +++ b/frontend/src/types/utif.d.ts @@ -0,0 +1 @@ +declare module "utif"; diff --git a/frontend/src/utils/__tests__/check-conflict.test.ts b/frontend/src/utils/__tests__/check-conflict.test.ts new file mode 100644 index 00000000..fb02494d --- /dev/null +++ b/frontend/src/utils/__tests__/check-conflict.test.ts @@ -0,0 +1,447 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { checkConflict } from "@/utils/upload"; +import { files as api } from "@/api"; + +vi.mock("@/api", () => ({ + files: { + fetch: vi.fn(), + fetchAll: vi.fn(), + }, +})); + +vi.mock("@/api/utils", () => ({ + removePrefix: (value: string) => value.replace(/^\/files/, ""), +})); + +// upload.ts imports these at module load; they reach window-bound constants +// which don't exist in the node test environment. checkConflict never uses +// them, so empty stubs keep the import graph from blowing up. +vi.mock("@/stores/layout", () => ({ useLayoutStore: vi.fn() })); +vi.mock("@/stores/upload", () => ({ useUploadStore: vi.fn() })); +vi.mock("@/utils/url", () => ({ default: {} })); + +type ServerEntry = { + path: string; + name: string; + size: number; + modified: string; + isDir: boolean; +}; + +// The destination's direct listing, used for copy/move and for flat uploads. +function mockListing(entries: ServerEntry[]) { + vi.mocked(api.fetch).mockResolvedValue({ items: entries } as Resource); +} + +// The recursive walk of the destination, used only for nested (folder) uploads. +function mockRecursiveListing(entries: ServerEntry[]) { + vi.mocked(api.fetchAll).mockResolvedValue(entries); +} + +// A move/copy/drag item carries name (raw) and to (URL-encoded) but no +// fullPath - mirroring what Move.vue / Copy.vue / ListingItem.vue build. +function moveItem(name: string, dest: string, size = 12) { + return { + from: `/files/source/${encodeURIComponent(name)}`, + to: dest + encodeURIComponent(name), + name, + size, + isDir: false, + overwrite: false, + rename: false, + }; +} + +describe("checkConflict", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("detects a conflict for a plain filename", async () => { + mockListing([ + { + path: "/target/file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem("file.txt", "/files/target/")], + "/files/target/" + ); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe("/target/file.txt"); + }); + + // Regression for #6006: pressing Upload awaited a full server-side recursive + // walk of the destination before a single byte was sent, so the UI sat there + // doing nothing on a large destination. A flat upload can only collide with a + // direct child, which the plain listing already covers. + it("does not walk the destination tree for a flat upload", async () => { + mockListing([]); + + await checkConflict( + [{ name: "file.txt", size: 12, isDir: false }], + "/files/target/" + ); + + expect(api.fetch).toHaveBeenCalledWith("/files/target/"); + expect(api.fetchAll).not.toHaveBeenCalled(); + }); + + // ...but a folder upload lands entries below the destination, so it still + // needs the recursive listing to see them. + it("walks the destination tree for a nested upload", async () => { + mockRecursiveListing([]); + + await checkConflict( + [ + { + name: "file.txt", + size: 12, + isDir: false, + fullPath: "folder/file.txt", + }, + ], + "/files/target/" + ); + + expect(api.fetchAll).toHaveBeenCalledWith("/files/target/"); + expect(api.fetch).not.toHaveBeenCalled(); + }); + + // Regression for #5957: names with encodable characters (spaces, "#", + // non-ASCII) were keyed by the URL-encoded `to` value and never matched the + // server's raw path, so the conflict modal was skipped and the backend + // returned a bare 409 instead. + it.each(["my file.txt", "résumé.pdf", "a#b.txt"])( + "detects a conflict for %s (encodable characters)", + async (name) => { + mockListing([ + { + path: `/target/${name}`, + name, + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem(name, "/files/target/")], + "/files/target/" + ); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe(`/target/${name}`); + } + ); + + it("reports no conflict when the destination has no matching name", async () => { + mockListing([ + { + path: "/target/other.txt", + name: "other.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem("my file.txt", "/files/target/")], + "/files/target/" + ); + + expect(conflicts).toHaveLength(0); + }); + + it("detects nested conflicts for folder uploads via fullPath", async () => { + mockRecursiveListing([ + { + path: "/target/folder", + name: "folder", + size: 0, + modified: "2026-06-04T00:00:00Z", + isDir: true, + }, + { + path: "/target/folder/nested file.txt", + name: "nested file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const files = [ + { name: "folder", size: 0, isDir: true, fullPath: "folder" }, + { + name: "nested file.txt", + size: 12, + isDir: false, + fullPath: "folder/nested file.txt", + }, + ]; + + const conflicts = await checkConflict(files, "/files/target/"); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe("/target/folder/nested file.txt"); + }); + + // The "upload folder" file input pushes only files (with a relative + // fullPath) and no directory entries. Conflict detection must still find a + // nested file even though its parent folder is not in the upload list. + it("detects nested conflicts when no directory entries are present", async () => { + mockRecursiveListing([ + { + path: "/target/folder/deep/file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const files = [ + { + name: "file.txt", + size: 12, + isDir: false, + fullPath: "folder/deep/file.txt", + }, + ]; + + const conflicts = await checkConflict(files, "/files/target/"); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe("/target/folder/deep/file.txt"); + }); + + // Copy/move only needs the target directory's direct children. A recursive + // walk can make the UI look frozen on large destinations (regression #6005). + it("checks only the direct destination listing for copy/move", async () => { + mockListing([ + { + path: "/target/file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + { + path: "/target/folder", + name: "folder", + size: 0, + modified: "2026-06-04T00:00:00Z", + isDir: true, + }, + ]); + + const items = [ + moveItem("file.txt", "/files/target/"), + { ...moveItem("folder", "/files/target/", 0), isDir: true }, + ]; + + const conflicts = await checkConflict(items, "/files/target/", true); + + expect(api.fetch).toHaveBeenCalledWith("/files/target/"); + expect(api.fetchAll).not.toHaveBeenCalled(); + expect(conflicts).toHaveLength(2); + expect(conflicts.map((conflict) => conflict.name)).toEqual([ + "/target/file.txt", + "/target/folder", + ]); + }); + + // Uploads merge into an existing folder, so the directory itself must not be + // reported - only the files inside it can conflict. + it("ignores a directory conflict for uploads (default)", async () => { + mockListing([ + { + path: "/target/folder", + name: "folder", + size: 0, + modified: "2026-06-04T00:00:00Z", + isDir: true, + }, + ]); + + const files = [ + { name: "folder", size: 0, isDir: true, fullPath: "folder" }, + ]; + + const conflicts = await checkConflict(files, "/files/target/"); + + expect(conflicts).toHaveLength(0); + }); + + it("returns no conflicts when the destination listing fails", async () => { + vi.mocked(api.fetch).mockRejectedValue(new Error("404")); + + const conflicts = await checkConflict( + [moveItem("file.txt", "/files/target/")], + "/files/target/" + ); + + expect(conflicts).toHaveLength(0); + }); + + // Regression for #5980: a FileBrowser server running on Windows returns + // backslash-separated paths, Without normalizing them, the prefix strip and + // key lookup never match, so the conflict modal is skipped and the backend + // returns a bare 409. + it("detects a conflict for backslash-separated server paths (Windows)", async () => { + mockListing([ + { + path: "\\target\\file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem("file.txt", "/files/target/")], + "/files/target/" + ); + + expect(conflicts).toHaveLength(1); + }); + + it("detects nested conflicts for backslash-separated server paths (Windows)", async () => { + mockRecursiveListing([ + { + path: "\\target\\folder\\nested file.txt", + name: "nested file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const files = [ + { + name: "nested file.txt", + size: 12, + isDir: false, + fullPath: "folder/nested file.txt", + }, + ]; + + const conflicts = await checkConflict(files, "/files/target/"); + + expect(conflicts).toHaveLength(1); + }); + + it.each([ + ["forward slashes", "/target/My SubDir/file.txt"], + ["Windows backslashes", "\\target\\My SubDir\\file.txt"], + ])( + "detects conflicts below an encoded destination path with %s", + async (_label, serverPath) => { + mockListing([ + { + path: serverPath, + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem("file.txt", "/files/target/My%20SubDir/")], + "/files/target/My%20SubDir/" + ); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe("/target/My SubDir/file.txt"); + } + ); + + it("detects nested folder-upload conflicts below an encoded destination path", async () => { + mockRecursiveListing([ + { + path: "\\target\\My SubDir\\folder\\nested file.txt", + name: "nested file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [ + { + name: "nested file.txt", + size: 12, + isDir: false, + fullPath: "folder/nested file.txt", + }, + ], + "/files/target/My%20SubDir/" + ); + + expect(conflicts).toHaveLength(1); + expect(conflicts[0].name).toBe("/target/My SubDir/folder/nested file.txt"); + }); + + it("leaves malformed destination path segments unchanged", async () => { + mockListing([ + { + path: "/target/bad%ZZ/file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [moveItem("file.txt", "/files/target/bad%ZZ/")], + "/files/target/bad%ZZ/" + ); + + expect(conflicts).toHaveLength(1); + }); + + it("does not match files outside the decoded destination path", async () => { + mockRecursiveListing([ + { + path: "/target/My SubDir/other.txt", + name: "other.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + { + path: "/target/My Other SubDir/folder/file.txt", + name: "file.txt", + size: 10, + modified: "2026-06-04T00:00:00Z", + isDir: false, + }, + ]); + + const conflicts = await checkConflict( + [ + { + name: "file.txt", + size: 12, + isDir: false, + fullPath: "folder/file.txt", + }, + ], + "/files/target/My%20SubDir/" + ); + + expect(conflicts).toHaveLength(0); + }); +}); diff --git a/frontend/src/utils/__tests__/upload.test.ts b/frontend/src/utils/__tests__/upload.test.ts new file mode 100644 index 00000000..552e4f97 --- /dev/null +++ b/frontend/src/utils/__tests__/upload.test.ts @@ -0,0 +1,74 @@ +import { describe, it, expect } from "vitest"; + +/** + * Reproduces the path-building logic from scanFiles() in upload.ts (lines 118-138). + * + * readReaderContent() is called when traversing a dropped folder. The browser's + * FileSystemDirectoryReader.readEntries() returns entries in batches — you must + * call it repeatedly until it returns an empty array. Each recursive call in the + * current code appends "/" to the directory, so the second batch and beyond get + * double (or triple, etc.) slashes in the constructed fullPath. + */ + +type Entry = { name: string; isFile: boolean; isDirectory: boolean }; + +function simulateScanFiles(dirName: string, entryBatches: Entry[][]): string[] { + const paths: string[] = []; + let batchIndex = 0; + + // Mirrors readEntry() for files — records fullPath as `${directory}${file.name}` + function readEntry(entry: Entry, directory = ""): void { + if (entry.isFile) { + paths.push(`${directory}${entry.name}`); + } + } + + // Mirrors readReaderContent() from upload.ts lines 118-138 + function readReaderContent(directory: string): void { + const entries = + batchIndex < entryBatches.length ? entryBatches[batchIndex] : []; + batchIndex++; + + if (entries.length > 0) { + const dirWithSlash = directory.endsWith("/") + ? directory + : `${directory}/`; + for (const entry of entries) { + readEntry(entry, dirWithSlash); + } + readReaderContent(dirWithSlash); + } + } + + // Initial call mirrors readEntry() for a directory — upload.ts line 111-114 + readReaderContent(dirName); + return paths; +} + +describe("scanFiles path construction", () => { + it("should not produce double slashes when readEntries returns multiple batches", () => { + // Two batches: simulates a large directory where the browser splits + // readEntries() results across multiple calls + const paths = simulateScanFiles("TestFolder", [ + [ + { name: "file1.xlsx", isFile: true, isDirectory: false }, + { name: "file2.xlsx", isFile: true, isDirectory: false }, + ], + [{ name: "file3.xlsx", isFile: true, isDirectory: false }], + ]); + + expect(paths).toHaveLength(3); + + for (const p of paths) { + expect(p, `path "${p}" contains double slash`).not.toContain("//"); + } + }); + + it("single batch should work fine (no regression)", () => { + const paths = simulateScanFiles("TestFolder", [ + [{ name: "file1.xlsx", isFile: true, isDirectory: false }], + ]); + + expect(paths).toEqual(["TestFolder/file1.xlsx"]); + }); +}); diff --git a/frontend/src/utils/auth.js b/frontend/src/utils/auth.js deleted file mode 100644 index 7ae6c1fe..00000000 --- a/frontend/src/utils/auth.js +++ /dev/null @@ -1,88 +0,0 @@ -import store from '@/store' -import router from '@/router' -import { Base64 } from 'js-base64' -import { baseURL } from '@/utils/constants' - -export function parseToken (token) { - const parts = token.split('.') - - if (parts.length !== 3) { - throw new Error('token malformed') - } - - const data = JSON.parse(Base64.decode(parts[1])) - - localStorage.setItem('jwt', token) - store.commit('setJWT', token) - store.commit('setUser', data.user) -} - -export async function validateLogin () { - try { - if (localStorage.getItem('jwt')) { - await renew(localStorage.getItem('jwt')) - } - } catch (_) { - console.warn('Invalid JWT token in storage') // eslint-disable-line - } -} - -export async function login (username, password, recaptcha) { - const data = { username, password, recaptcha } - - const res = await fetch(`${baseURL}/api/login`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(data) - }) - - const body = await res.text() - - if (res.status === 200) { - parseToken(body) - } else { - throw new Error(body) - } -} - -export async function renew (jwt) { - const res = await fetch(`${baseURL}/api/renew`, { - method: 'POST', - headers: { - 'X-Auth': jwt, - } - }) - - const body = await res.text() - - if (res.status === 200) { - parseToken(body) - } else { - throw new Error(body) - } -} - -export async function signup (username, password) { - const data = { username, password } - - const res = await fetch(`${baseURL}/api/signup`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(data) - }) - - if (res.status !== 200) { - throw new Error(res.status) - } -} - -export function logout () { - store.commit('setJWT', '') - store.commit('setUser', null) - localStorage.setItem('jwt', null) - router.push({path: '/login'}) -} diff --git a/frontend/src/utils/auth.ts b/frontend/src/utils/auth.ts new file mode 100644 index 00000000..e75714f2 --- /dev/null +++ b/frontend/src/utils/auth.ts @@ -0,0 +1,141 @@ +import { useAuthStore } from "@/stores/auth"; +import router from "@/router"; +import type { JwtPayload } from "jwt-decode"; +import { jwtDecode } from "jwt-decode"; +import { authMethod, baseURL, noAuth, logoutPage } from "./constants"; +import { StatusError } from "@/api/utils"; +import { setSafeTimeout } from "@/api/utils"; + +export function parseToken(token: string) { + // falsy or malformed jwt will throw InvalidTokenError + const data = jwtDecode(token); + + document.cookie = `auth=${token}; Path=/; SameSite=Strict;`; + + localStorage.setItem("jwt", token); + + const authStore = useAuthStore(); + authStore.jwt = token; + authStore.setUser(data.user); + + // proxy auth with custom logout subject to unknown external timeout + if (logoutPage !== "/login" && authMethod === "proxy") { + console.warn("idle timeout disabled with proxy auth and custom logout"); + return; + } + + if (authStore.logoutTimer) { + clearTimeout(authStore.logoutTimer); + } + + const expiresAt = new Date(data.exp! * 1000); + const timeout = expiresAt.getTime() - Date.now(); + authStore.setLogoutTimer( + setSafeTimeout(() => { + logout("inactivity"); + }, timeout) + ); +} + +export async function validateLogin() { + try { + if (localStorage.getItem("jwt")) { + await renew(localStorage.getItem("jwt")); + } + } catch (error) { + console.warn("Invalid JWT token in storage"); + throw error; + } +} + +export async function login( + username: string, + password: string, + recaptcha: string +) { + const data = { username, password, recaptcha }; + + const res = await fetch(`${baseURL}/api/login`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }); + + const body = await res.text(); + + if (res.status === 200) { + parseToken(body); + } else { + throw new StatusError( + body || `${res.status} ${res.statusText}`, + res.status + ); + } +} + +export async function renew(jwt: string) { + const res = await fetch(`${baseURL}/api/renew`, { + method: "POST", + headers: { + "X-Auth": jwt, + }, + }); + + const body = await res.text(); + + if (res.status === 200) { + parseToken(body); + } else { + throw new StatusError( + body || `${res.status} ${res.statusText}`, + res.status + ); + } +} + +export async function signup(username: string, password: string) { + const data = { username, password }; + + const res = await fetch(`${baseURL}/api/signup`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }); + + if (res.status !== 200) { + const body = await res.text(); + throw new StatusError( + body || `${res.status} ${res.statusText}`, + res.status + ); + } +} + +export function logout(reason?: string) { + document.cookie = "auth=; Max-Age=0; Path=/; SameSite=Strict;"; + + const authStore = useAuthStore(); + authStore.clearUser(); + + localStorage.setItem("jwt", ""); + if (noAuth) { + window.location.reload(); + } else if (logoutPage !== "/login") { + document.location.href = `${logoutPage}`; + } else { + if (typeof reason === "string" && reason.trim() !== "") { + router.push({ + path: "/login", + query: { "logout-reason": reason }, + }); + } else { + router.push({ + path: "/login", + }); + } + } +} diff --git a/frontend/src/utils/buttons.js b/frontend/src/utils/buttons.js deleted file mode 100644 index 8536b813..00000000 --- a/frontend/src/utils/buttons.js +++ /dev/null @@ -1,66 +0,0 @@ -function loading (button) { - let el = document.querySelector(`#${button}-button > i`) - - if (el === undefined || el === null) { - console.log('Error getting button ' + button) // eslint-disable-line - return - } - - el.dataset.icon = el.innerHTML - el.style.opacity = 0 - - setTimeout(() => { - el.classList.add('spin') - el.innerHTML = 'autorenew' - el.style.opacity = 1 - }, 100) -} - -function done (button) { - let el = document.querySelector(`#${button}-button > i`) - - if (el === undefined || el === null) { - console.log('Error getting button ' + button) // eslint-disable-line - return - } - - el.style.opacity = 0 - - setTimeout(() => { - el.classList.remove('spin') - el.innerHTML = el.dataset.icon - el.style.opacity = 1 - }, 100) -} - -function success (button) { - let el = document.querySelector(`#${button}-button > i`) - - if (el === undefined || el === null) { - console.log('Error getting button ' + button) // eslint-disable-line - return - } - - el.style.opacity = 0 - - setTimeout(() => { - el.classList.remove('spin') - el.innerHTML = 'done' - el.style.opacity = 1 - - setTimeout(() => { - el.style.opacity = 0 - - setTimeout(() => { - el.innerHTML = el.dataset.icon - el.style.opacity = 1 - }, 100) - }, 500) - }, 100) -} - -export default { - loading, - done, - success -} diff --git a/frontend/src/utils/buttons.ts b/frontend/src/utils/buttons.ts new file mode 100644 index 00000000..30ed74f2 --- /dev/null +++ b/frontend/src/utils/buttons.ts @@ -0,0 +1,83 @@ +function loading(button: string) { + const el: HTMLButtonElement | null = document.querySelector( + `#${button}-button > i` + ); + + if (el === undefined || el === null) { + console.log("Error getting button " + button); + return; + } + + if (el.innerHTML == "autorenew" || el.innerHTML == "done") { + return; + } + + el.dataset.icon = el.innerHTML; + el.style.opacity = "0"; + + setTimeout(() => { + if (el) { + el.classList.add("spin"); + el.innerHTML = "autorenew"; + el.style.opacity = "1"; + } + }, 100); +} + +function done(button: string) { + const el: HTMLButtonElement | null = document.querySelector( + `#${button}-button > i` + ); + + if (el === undefined || el === null) { + console.log("Error getting button " + button); + return; + } + + el.style.opacity = "0"; + + setTimeout(() => { + if (el !== null) { + el.classList.remove("spin"); + el.innerHTML = el?.dataset?.icon || ""; + el.style.opacity = "1"; + } + }, 100); +} + +function success(button: string) { + const el: HTMLButtonElement | null = document.querySelector( + `#${button}-button > i` + ); + + if (el === undefined || el === null) { + console.log("Error getting button " + button); + return; + } + + el.style.opacity = "0"; + + setTimeout(() => { + if (el !== null) { + el.classList.remove("spin"); + el.innerHTML = "done"; + el.style.opacity = "1"; + } + setTimeout(() => { + if (el) el.style.opacity = "0"; + + setTimeout(() => { + if (el !== null) { + el.innerHTML = el?.dataset?.icon || ""; + el.style.opacity = "1"; + } + }, 100); + }, 500); + }, 100); +} + +export default { + loading, + done, + success, +}; diff --git a/frontend/src/utils/clipboard.ts b/frontend/src/utils/clipboard.ts new file mode 100644 index 00000000..53e03589 --- /dev/null +++ b/frontend/src/utils/clipboard.ts @@ -0,0 +1,118 @@ +// Based on code by the following links: +// https://stackoverflow.com/a/74528564 +// https://web.dev/articles/async-clipboard + +interface ClipboardArgs { + text?: string; + data?: ClipboardItems; +} + +interface ClipboardOpts { + permission?: boolean; +} + +export function copy(data: ClipboardArgs, opts?: ClipboardOpts) { + return new Promise((resolve, reject) => { + if ( + // Clipboard API requires secure context + window.isSecureContext && + typeof navigator.clipboard !== "undefined" + ) { + if (opts?.permission) { + getPermission("clipboard-write") + .then(() => writeToClipboard(data).then(resolve).catch(reject)) + .catch(reject); + } else { + writeToClipboard(data).then(resolve).catch(reject); + } + } else if ( + document.queryCommandSupported && + document.queryCommandSupported("copy") && + data.text // old method only supports text + ) { + const textarea = createTemporaryTextarea(data.text); + const body = document.activeElement || document.body; + try { + body.appendChild(textarea); + textarea.focus(); + textarea.select(); + document.execCommand("copy"); + resolve(); + } catch (e) { + reject(e); + } finally { + body.removeChild(textarea); + } + } else { + reject( + new Error("None of copying methods are supported by this browser!") + ); + } + }); +} + +export function read() { + return new Promise((resolve, reject) => { + if ( + // Clipboard API requires secure context + window.isSecureContext && + typeof navigator.clipboard !== "undefined" + ) { + navigator.clipboard.readText().then(resolve).catch(reject); + } else { + reject(); + } + }); +} + +function getPermission(name: string) { + return new Promise((resolve, reject) => { + typeof navigator.permissions !== "undefined" && + navigator.permissions + // @ts-expect-error chrome specific api + .query({ name }) + .then((permission) => { + if (permission.state === "granted" || permission.state === "prompt") { + resolve(); + } else { + reject(new Error("Permission denied!")); + } + }); + }); +} + +function writeToClipboard(data: ClipboardArgs) { + if (data.text) { + return navigator.clipboard.writeText(data.text); + } + if (data.data) { + return navigator.clipboard.write(data.data); + } + + return new Promise((resolve, reject) => { + reject(new Error("No data was supplied!")); + }); +} + +const styles = { + fontSize: "12pt", + position: "fixed", + top: 0, + left: 0, + width: "2em", + height: "2em", + padding: 0, + margin: 0, + border: "none", + outline: "none", + boxShadow: "none", + background: "transparent", +}; + +function createTemporaryTextarea(text: string) { + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.setAttribute("readonly", ""); + Object.assign(textarea.style, styles); + return textarea; +} diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js deleted file mode 100644 index ad23cc98..00000000 --- a/frontend/src/utils/constants.js +++ /dev/null @@ -1,28 +0,0 @@ -const name = window.FileBrowser.Name || 'File Browser' -const disableExternal = window.FileBrowser.DisableExternal -const baseURL = window.FileBrowser.BaseURL -const staticURL = window.FileBrowser.StaticURL -const recaptcha = window.FileBrowser.ReCaptcha -const recaptchaKey = window.FileBrowser.ReCaptchaKey -const signup = window.FileBrowser.Signup -const version = window.FileBrowser.Version -const logoURL = `${staticURL}/img/logo.svg` -const noAuth = window.FileBrowser.NoAuth -const authMethod = window.FileBrowser.AuthMethod -const loginPage = window.FileBrowser.LoginPage -const theme = window.FileBrowser.Theme - -export { - name, - disableExternal, - baseURL, - logoURL, - recaptcha, - recaptchaKey, - signup, - version, - noAuth, - authMethod, - loginPage, - theme -} diff --git a/frontend/src/utils/constants.ts b/frontend/src/utils/constants.ts new file mode 100644 index 00000000..0580205a --- /dev/null +++ b/frontend/src/utils/constants.ts @@ -0,0 +1,46 @@ +const name: string = window.FileBrowser.Name || "File Browser"; +const disableExternal: boolean = window.FileBrowser.DisableExternal; +const disableUsedPercentage: boolean = window.FileBrowser.DisableUsedPercentage; +const baseURL: string = window.FileBrowser.BaseURL; +const staticURL: string = window.FileBrowser.StaticURL; +const recaptcha: string = window.FileBrowser.ReCaptcha; +const recaptchaKey: string = window.FileBrowser.ReCaptchaKey; +const signup: boolean = window.FileBrowser.Signup; +const version: string = window.FileBrowser.Version; +const logoURL = `${staticURL}/img/logo.svg`; +const noAuth: boolean = window.FileBrowser.NoAuth; +const authMethod = window.FileBrowser.AuthMethod; +const logoutPage: string = window.FileBrowser.LogoutPage; +const loginPage: boolean = window.FileBrowser.LoginPage; +const theme: UserTheme = window.FileBrowser.Theme; +const enableThumbs: boolean = window.FileBrowser.EnableThumbs; +const resizePreview: boolean = window.FileBrowser.ResizePreview; +const enableExec: boolean = window.FileBrowser.EnableExec; +const tusSettings = window.FileBrowser.TusSettings; +const origin = window.location.origin; +const tusEndpoint = `/api/tus`; +const hideLoginButton = window.FileBrowser.HideLoginButton; + +export { + name, + disableExternal, + disableUsedPercentage, + baseURL, + logoURL, + recaptcha, + recaptchaKey, + signup, + version, + noAuth, + authMethod, + logoutPage, + loginPage, + theme, + enableThumbs, + resizePreview, + enableExec, + tusSettings, + origin, + tusEndpoint, + hideLoginButton, +}; diff --git a/frontend/src/utils/cookie.js b/frontend/src/utils/cookie.js deleted file mode 100644 index 5004b602..00000000 --- a/frontend/src/utils/cookie.js +++ /dev/null @@ -1,4 +0,0 @@ -export default function (name) { - let re = new RegExp('(?:(?:^|.*;\\s*)' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$') - return document.cookie.replace(re, '$1') -} diff --git a/frontend/src/utils/cookie.ts b/frontend/src/utils/cookie.ts new file mode 100644 index 00000000..bdebf4f0 --- /dev/null +++ b/frontend/src/utils/cookie.ts @@ -0,0 +1,6 @@ +export default function (name: string) { + const re = new RegExp( + "(?:(?:^|.*;\\s*)" + name + "\\s*\\=\\s*([^;]*).*$)|^.*$" + ); + return document.cookie.replace(re, "$1"); +} diff --git a/frontend/src/utils/css.js b/frontend/src/utils/css.js deleted file mode 100644 index 15ab99fe..00000000 --- a/frontend/src/utils/css.js +++ /dev/null @@ -1,28 +0,0 @@ -export default function getRule (rules) { - for (let i = 0; i < rules.length; i++) { - rules[i] = rules[i].toLowerCase() - } - - let result = null - let find = Array.prototype.find - - find.call(document.styleSheets, styleSheet => { - result = find.call(styleSheet.cssRules, cssRule => { - let found = false - - if (cssRule instanceof window.CSSStyleRule) { - for (let i = 0; i < rules.length; i++) { - if (cssRule.selectorText.toLowerCase() === rules[i]) { - found = true - } - } - } - - return found - }) - - return result != null - }) - - return result -} diff --git a/frontend/src/utils/css.ts b/frontend/src/utils/css.ts new file mode 100644 index 00000000..aca6c62a --- /dev/null +++ b/frontend/src/utils/css.ts @@ -0,0 +1,31 @@ +export default function getRule(rules: string[]) { + for (let i = 0; i < rules.length; i++) { + rules[i] = rules[i].toLowerCase(); + } + + let result = null; + const find = Array.prototype.find; + + find.call(document.styleSheets, (styleSheet: CSSStyleSheet) => { + result = find.call(styleSheet.cssRules, (cssRule: CSSRule) => { + let found = false; + + // faster than checking instanceof for every element + if (cssRule.constructor.name === "CSSStyleRule") { + for (let i = 0; i < rules.length; i++) { + if ( + (cssRule as CSSStyleRule).selectorText.toLowerCase() === rules[i] + ) { + found = true; + } + } + } + + return found; + }); + + return result != null; + }); + + return result as CSSStyleRule | null; +} diff --git a/frontend/src/utils/encodings.ts b/frontend/src/utils/encodings.ts new file mode 100644 index 00000000..9be1017a --- /dev/null +++ b/frontend/src/utils/encodings.ts @@ -0,0 +1,268 @@ +export const availableEncodings = [ + // encodings + "utf-8", + "ibm866", + "iso-8859-2", + "iso-8859-3", + "iso-8859-4", + "iso-8859-5", + "iso-8859-6", + "iso-8859-7", + "iso-8859-8", + "iso-8859-8-i", + "iso-8859-10", + "iso-8859-13", + "iso-8859-14", + "iso-8859-15", + "iso-8859-16", + "koi8-r", + "koi8-u", + "macintosh", + "windows-874", + "windows-1250", + "windows-1251", + "windows-1252", + "windows-1253", + "windows-1254", + "windows-1255", + "windows-1256", + "windows-1257", + "windows-1258", + "x-mac-cyrillic", + "gbk", + "gb18030", + "big5", + "euc-jp", + "iso-2022-jp", + "shift_jis", + "euc-kr", + "utf-16be", + "utf-16le", + // label encodings + "unicode-1-1-utf-8", + "utf8", + "866", + "cp866", + "csibm866", + "csisolatin2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2", + "csisolatin3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3", + "csisolatin4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4", + "csisolatincyrillic", + "cyrillic", + "iso-ir-144", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988", + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987", + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek", + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual", + "csiso88598i", + "logical", + "csisolatin6", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6", + "iso8859-13", + "iso885913", + "iso8859-14", + "iso885914", + "csisolatin9", + "iso8859-15", + "iso885915", + "l9", + "latin9", + "cskoi8r", + "koi", + "koi8", + "koi8_r", + "csmacintosh", + "mac", + "x-mac-roman", + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "cp1250", + "x-cp1250", + "cp1251", + "x-cp1251", + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "x-cp1252", + "cp1253", + "x-cp1253", + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "x-cp1254", + "cp1255", + "x-cp1255", + "cp1256", + "x-cp1256", + "cp1257", + "x-cp1257", + "cp1258", + "x-cp1258", + "x-mac-ukrainian", + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "iso-ir-58", + "x-gbk", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5", + "cseucpkdfmtjapanese", + "x-euc-jp", + "csiso2022jp", + "csshiftjis", + "ms_kanji", + "shift-jis", + "sjis", + "windows-31j", + "x-sjis", + "cseuckr", + "csksc56011987", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949", + "utf-16", +]; + +export function decode(content: ArrayBuffer, encoding: string): string { + const decoder = new TextDecoder(encoding); + return decoder.decode(content); +} + +export function isEncodableResponse(url: string): boolean { + const extensions = [".csv"]; + + if (typeof TextDecoder === "undefined") { + return false; + } + + for (const extension of extensions) { + if (url.endsWith(extension)) { + return true; + } + } + + return false; +} + +export async function makeRawResource( + res: Response, + url: string +): Promise { + const buffer = await res.arrayBuffer(); + return { + items: [], + numDirs: 0, + numFiles: 0, + sorting: {} as Sorting, + index: 0, + extension: getExtension(url), + isDir: false, + isSymlink: false, + path: url, + size: buffer.byteLength, + modified: new Date().toISOString(), + name: url.split("/").pop() || "", + type: "text", + mode: 0, + url: `/files${url}`, + rawContent: buffer, + content: decode(buffer, "utf-8"), + }; +} + +function getExtension(url: string): string { + const lastDotIndex = url.lastIndexOf("."); + if (lastDotIndex === -1) { + return ""; + } + return url.substring(lastDotIndex); +} diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts new file mode 100644 index 00000000..faca1539 --- /dev/null +++ b/frontend/src/utils/index.ts @@ -0,0 +1,28 @@ +import { partial } from "filesize"; + +/** + * Formats filesize as KiB/MiB/... + */ +export const filesize = partial({ base: 2 }); + +export const vClickOutside = { + created(el: HTMLElement, binding: any) { + el.clickOutsideEvent = (event: Event) => { + const target = event.target; + + if (target instanceof Node) { + if (!el.contains(target)) { + binding.value(event); + } + } + }; + + document.addEventListener("click", el.clickOutsideEvent); + }, + + unmounted(el: HTMLElement) { + if (el.clickOutsideEvent) { + document.removeEventListener("click", el.clickOutsideEvent); + } + }, +}; diff --git a/frontend/src/utils/theme.ts b/frontend/src/utils/theme.ts new file mode 100644 index 00000000..0244b044 --- /dev/null +++ b/frontend/src/utils/theme.ts @@ -0,0 +1,50 @@ +import { theme } from "./constants"; +import "ace-builds"; +import { themesByName } from "ace-builds/src-noconflict/ext-themelist"; + +export const getTheme = (): UserTheme => { + return (document.documentElement.className as UserTheme) || theme; +}; + +export const setTheme = (theme: UserTheme) => { + const html = document.documentElement; + if (!theme) { + html.className = getMediaPreference(); + } else { + html.className = theme; + } +}; + +export const toggleTheme = (): void => { + const activeTheme = getTheme(); + if (activeTheme === "light") { + setTheme("dark"); + } else { + setTheme("light"); + } +}; + +export const getMediaPreference = (): UserTheme => { + const hasDarkPreference = window.matchMedia( + "(prefers-color-scheme: dark)" + ).matches; + if (hasDarkPreference) { + return "dark"; + } else { + return "light"; + } +}; + +export const getEditorTheme = (themeName: string) => { + if (!themeName.startsWith("ace/theme/")) { + themeName = `ace/theme/${themeName}`; + } + const themeKey = themeName.replace("ace/theme/", ""); + if (themesByName[themeKey] !== undefined) { + return themeName; + } else if (getTheme() === "dark") { + return "ace/theme/twilight"; + } else { + return "ace/theme/chrome"; + } +}; diff --git a/frontend/src/utils/upload.ts b/frontend/src/utils/upload.ts new file mode 100644 index 00000000..71a2d60b --- /dev/null +++ b/frontend/src/utils/upload.ts @@ -0,0 +1,278 @@ +import { useLayoutStore } from "@/stores/layout"; +import { useUploadStore } from "@/stores/upload"; +import url from "@/utils/url"; +import { files as api } from "@/api"; +import { removePrefix } from "@/api/utils"; + +/** + * The path used to detect conflicts against the server's recursive listing. + * + * It MUST be the raw, un-encoded path relative to the destination: + * - `fullPath` is set for folder uploads and drag & drop (e.g. "sub/file.txt"). + * - `name` is the leaf for every other case (copy/move/paste/single upload), + * which is always a flat top-level entry. + * + * We never key on `item.to`: it is URL-encoded (`dest + encodeURIComponent(name)`) + * and would miss conflicts for any name with encodable characters (spaces, "#", + * non-ASCII, ...), surfacing a raw 409 error instead of the conflict modal. + * @param item + */ +function conflictKey(item: UploadEntry): string { + return (item.fullPath || item.name).replace(/^\/+/, ""); +} + +type ServerConflictEntry = { + path: string; + name: string; + size: number; + modified: string; +}; + +async function fetchConflictEntries( + basePath: string, + recursive: boolean +): Promise { + if (recursive) { + return await api.fetchAll(basePath); + } + + const destination = await api.fetch(basePath); + return destination.items ?? []; +} + +/** + * Whether any entry lands below the destination rather than directly in it. + * Only then does conflict detection need the whole destination tree. + */ +function hasNestedEntries(files: UploadList): boolean { + return files.some((file) => conflictKey(file).includes("/")); +} + +function conflictPath(entry: ServerConflictEntry): string { + return entry.path.replace(/\\/g, "/"); +} + +function decodePath(path: string): string { + return path + .split("/") + .map((segment) => { + try { + return decodeURIComponent(segment); + } catch { + return segment; + } + }) + .join("/"); +} + +function buildConflictMap( + serverEntries: ServerConflictEntry[], + basePath: string, + includeDirectories: boolean +): Map { + const serverMap = new Map(); + const normBase = decodePath(removePrefix(basePath)).replace(/\/+$/, ""); + for (const entry of serverEntries) { + // A Windows server may return OS-native backslash separators; normalize to + // forward slashes so the prefix strip and key lookup line up. + const path = conflictPath(entry); + const key = includeDirectories + ? entry.name + : path.startsWith(normBase) + ? path.slice(normBase.length) + : path; + serverMap.set(key.replace(/^\/+/, ""), entry); + } + + return serverMap; +} + +/** + * Return the entries from `files` that already exist under `basePath` on the + * server, so the caller can prompt the user to overwrite/rename/skip. + * + * Directory handling differs by action, hence `includeDirectories`: + * - Upload (false): existing folders are silently merged, so only files count. + * - Copy/move (true): these move flat top-level selections, so a same-named + * direct child is the only preflight conflict the backend will reject. + * + * The destination tree is only walked recursively when an entry actually lands + * below the destination (a folder upload). Walking it for a flat upload made + * pressing Upload wait on a full server-side walk of the whole subtree before + * a single byte was sent, which reads as a frozen UI on a large destination. + * + * @param files - flat upload list to check + * @param basePath - server destination path (e.g. "/files/uploads/") + * @param includeDirectories - report directories as conflicts (copy/move) + */ +export async function checkConflict( + files: UploadList, + basePath: string, + includeDirectories = false +): Promise { + if (files.length === 0) return []; + + const recursive = !includeDirectories && hasNestedEntries(files); + + let serverEntries: ServerConflictEntry[]; + try { + serverEntries = await fetchConflictEntries(basePath, recursive); + } catch { + // The destination doesn't exist yet, so nothing can conflict. + return []; + } + + const serverMap = buildConflictMap( + serverEntries, + basePath, + includeDirectories + ); + + const conflicts: ConflictingResource[] = []; + files.forEach((file, index) => { + if (file.isDir && !includeDirectories) return; // see directory note above + + const server = serverMap.get(conflictKey(file)); + if (!server) return; + + conflicts.push({ + index, + name: conflictPath(server), + origin: { lastModified: file.file?.lastModified, size: file.size }, + dest: { lastModified: server.modified, size: server.size }, + checked: ["origin"], + isSmallerOnServer: file.size > server.size, + }); + }); + + return conflicts; +} + +export function scanFiles(dt: DataTransfer): Promise { + return new Promise((resolve) => { + let reading = 0; + const contents: UploadList = []; + + if (dt.items) { + // ts didn't like the for of loop even tho + // it is the official example on MDN + // for (const item of dt.items) { + for (let i = 0; i < dt.items.length; i++) { + const item = dt.items[i]; + if ( + item.kind === "file" && + typeof item.webkitGetAsEntry === "function" + ) { + const entry = item.webkitGetAsEntry(); + entry && readEntry(entry); + } + } + } else { + resolve(dt.files); + } + + function readEntry(entry: FileSystemEntry, directory = ""): void { + if (entry.isFile) { + reading++; + (entry as FileSystemFileEntry).file((file) => { + reading--; + + contents.push({ + file, + name: file.name, + size: file.size, + isDir: false, + fullPath: `${directory}${file.name}`, + }); + + if (reading === 0) { + resolve(contents); + } + }); + } else if (entry.isDirectory) { + const dir = { + isDir: true, + size: 0, + fullPath: `${directory}${entry.name}`, + name: entry.name, + }; + + contents.push(dir); + + readReaderContent( + (entry as FileSystemDirectoryEntry).createReader(), + `${directory}${entry.name}` + ); + } + } + + function readReaderContent( + reader: FileSystemDirectoryReader, + directory: string + ): void { + reading++; + + reader.readEntries((entries) => { + reading--; + if (entries.length > 0) { + const dirWithSlash = directory.endsWith("/") + ? directory + : `${directory}/`; + for (const entry of entries) { + readEntry(entry, dirWithSlash); + } + + readReaderContent(reader, dirWithSlash); + } + + if (reading === 0) { + resolve(contents); + } + }); + } + }); +} + +function detectType(mimetype: string): ResourceType { + if (mimetype.startsWith("video")) return "video"; + if (mimetype.startsWith("audio")) return "audio"; + if (mimetype.startsWith("image")) return "image"; + if (mimetype.startsWith("pdf")) return "pdf"; + if (mimetype.startsWith("text")) return "text"; + return "blob"; +} + +export function handleFiles( + files: UploadList, + base: string, + overwrite = false +) { + const uploadStore = useUploadStore(); + const layoutStore = useLayoutStore(); + + layoutStore.closeHovers(); + + for (const file of files) { + let path = base; + + if (file.fullPath !== undefined) { + path += url.encodePath(file.fullPath); + } else { + path += url.encodeRFC5987ValueChars(file.name); + } + + if (file.isDir) { + path += "/"; + } + + const type = file.isDir ? "dir" : detectType((file.file as File).type); + + uploadStore.upload( + path, + file.name, + file.file ?? null, + file.overwrite || overwrite, + type + ); + } +} diff --git a/frontend/src/utils/url.js b/frontend/src/utils/url.js deleted file mode 100644 index 44779d3a..00000000 --- a/frontend/src/utils/url.js +++ /dev/null @@ -1,26 +0,0 @@ -function removeLastDir (url) { - var arr = url.split('/') - if (arr.pop() === '') { - arr.pop() - } - - return arr.join('/') -} - -// this code borrow from mozilla -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#Examples -function encodeRFC5987ValueChars(str) { - return encodeURIComponent(str). - // Note that although RFC3986 reserves "!", RFC5987 does not, - // so we do not need to escape it - replace(/['()]/g, escape). // i.e., %27 %28 %29 - replace(/\*/g, '%2A'). - // The following are not required for percent-encoding per RFC5987, - // so we can allow for a little better readability over the wire: |`^ - replace(/%(?:7C|60|5E)/g, unescape); -} - -export default { - encodeRFC5987ValueChars: encodeRFC5987ValueChars, - removeLastDir: removeLastDir -} diff --git a/frontend/src/utils/url.ts b/frontend/src/utils/url.ts new file mode 100644 index 00000000..063fa6d2 --- /dev/null +++ b/frontend/src/utils/url.ts @@ -0,0 +1,42 @@ +export function removeLastDir(url: string) { + const arr = url.split("/"); + if (arr.pop() === "") { + arr.pop(); + } + + return arr.join("/"); +} + +// this function is taken from mozilla +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#Examples +export function encodeRFC5987ValueChars(str: string) { + return ( + encodeURIComponent(str) + // The following creates the sequences %27 %28 %29 %2A (Note that + // the valid encoding of "*" is %2A, which necessitates calling + // toUpperCase() to properly encode). Although RFC3986 reserves "!", + // RFC5987 does not, so we do not need to escape it. + .replace( + /['()*]/g, + (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}` + ) + // The following are not required for percent-encoding per RFC5987, + // so we can allow for a little better readability over the wire: |`^ + .replace(/%(7C|60|5E)/g, (str, hex) => + String.fromCharCode(parseInt(hex, 16)) + ) + ); +} + +export function encodePath(str: string) { + return str + .split("/") + .map((v) => encodeURIComponent(v)) + .join("/"); +} + +export default { + encodeRFC5987ValueChars, + removeLastDir, + encodePath, +}; diff --git a/frontend/src/utils/vue.js b/frontend/src/utils/vue.js deleted file mode 100644 index b96d5816..00000000 --- a/frontend/src/utils/vue.js +++ /dev/null @@ -1,55 +0,0 @@ -import Vue from 'vue' -import Noty from 'noty' -import i18n from '@/i18n' -import { disableExternal } from '@/utils/constants' - -Vue.config.productionTip = true - -const notyDefault = { - type: 'info', - layout: 'bottomRight', - timeout: 1000, - progressBar: true -} - -Vue.prototype.$noty = (opts) => { - new Noty(Object.assign({}, notyDefault, opts)).show() -} - -Vue.prototype.$showSuccess = (message) => { - new Noty(Object.assign({}, notyDefault, { - text: message, - type: 'success' - })).show() -} - -Vue.prototype.$showError = (error) => { - let btns = [ - Noty.button(i18n.t('buttons.close'), '', function () { - n.close() - }) - ] - - if (!disableExternal) { - btns.unshift(Noty.button(i18n.t('buttons.reportIssue'), '', function () { - window.open('https://github.com/filebrowser/filebrowser/issues/new/choose') - })) - } - - let n = new Noty(Object.assign({}, notyDefault, { - text: error.message || error, - type: 'error', - timeout: null, - buttons: btns - })) - - n.show() -} - -Vue.directive('focus', { - inserted: function (el) { - el.focus() - } -}) - -export default Vue diff --git a/frontend/src/views/Errors.vue b/frontend/src/views/Errors.vue new file mode 100644 index 00000000..a895ea9e --- /dev/null +++ b/frontend/src/views/Errors.vue @@ -0,0 +1,57 @@ + + + diff --git a/frontend/src/views/Files.vue b/frontend/src/views/Files.vue index af54a91c..8952f209 100644 --- a/frontend/src/views/Files.vue +++ b/frontend/src/views/Files.vue @@ -1,242 +1,184 @@ - diff --git a/frontend/src/views/Layout.vue b/frontend/src/views/Layout.vue index 8db58b32..5a91bee5 100644 --- a/frontend/src/views/Layout.vue +++ b/frontend/src/views/Layout.vue @@ -1,43 +1,54 @@ - diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index 5464a053..c7f64a5b 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -1,95 +1,139 @@ - diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 5b010243..113d6af1 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -1,20 +1,84 @@ - diff --git a/frontend/src/views/Share.vue b/frontend/src/views/Share.vue index bbc15d75..331a612b 100644 --- a/frontend/src/views/Share.vue +++ b/frontend/src/views/Share.vue @@ -1,67 +1,542 @@ + + + + diff --git a/frontend/src/views/files/FileListing.vue b/frontend/src/views/files/FileListing.vue new file mode 100644 index 00000000..00901f06 --- /dev/null +++ b/frontend/src/views/files/FileListing.vue @@ -0,0 +1,1132 @@ + + + diff --git a/frontend/src/views/files/__tests__/upload-conflict-resolution.test.ts b/frontend/src/views/files/__tests__/upload-conflict-resolution.test.ts new file mode 100644 index 00000000..40c88bb7 --- /dev/null +++ b/frontend/src/views/files/__tests__/upload-conflict-resolution.test.ts @@ -0,0 +1,229 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import FileListing from "@/views/files/FileListing.vue"; +import UploadPrompt from "@/components/prompts/Upload.vue"; + +const harness = vi.hoisted(() => ({ + checkConflict: vi.fn(), + scanFiles: vi.fn(), + handleFiles: vi.fn(), + queueUpload: vi.fn(), + showHover: vi.fn(), + closeHovers: vi.fn(), + fileStore: { + req: { items: [] }, + selected: [] as number[], + selectedCount: 0, + multiple: false, + preselect: "", + }, +})); + +vi.mock("@/stores/auth", () => ({ + useAuthStore: () => ({ user: null }), +})); +vi.mock("@/stores/clipboard", () => ({ + useClipboardStore: () => ({ items: [], $patch: vi.fn() }), +})); +vi.mock("@/stores/file", () => ({ + useFileStore: () => harness.fileStore, +})); +vi.mock("@/stores/layout", () => ({ + useLayoutStore: () => ({ + currentPrompt: null, + showHover: harness.showHover, + closeHovers: harness.closeHovers, + }), +})); +vi.mock("@/stores/upload", () => ({ + useUploadStore: () => ({ upload: harness.queueUpload }), +})); +vi.mock("@/api", () => ({ + users: {}, + files: {}, +})); +vi.mock("@/utils/constants", () => ({ enableExec: false })); +vi.mock("@/utils/auth", () => ({})); +vi.mock("@/router", () => ({ default: {} })); +vi.mock("@/i18n", () => ({ default: {} })); +vi.mock("@/utils/upload", () => ({ + checkConflict: harness.checkConflict, + scanFiles: harness.scanFiles, + handleFiles: harness.handleFiles, +})); +vi.mock("@/utils/css", () => ({ default: vi.fn() })); +// Reaches document.querySelector, which the node test environment lacks. +vi.mock("@/utils/buttons", () => ({ + default: { loading: vi.fn(), done: vi.fn(), success: vi.fn() }, +})); +vi.mock("@/components/header/HeaderBar.vue", () => ({ default: {} })); +vi.mock("@/components/header/Action.vue", () => ({ default: {} })); +vi.mock("@/components/Search.vue", () => ({ default: {} })); +vi.mock("@/components/files/ListingItem.vue", () => ({ default: {} })); +vi.mock("@/components/ContextMenu.vue", () => ({ default: {} })); +vi.mock("vue-router", () => ({ + useRoute: () => ({ path: "/files/target/" }), + onBeforeRouteUpdate: vi.fn(), +})); +vi.mock("vue-i18n", async (importOriginal) => ({ + ...(await importOriginal()), + useI18n: () => ({ t: (key: string) => key }), +})); +vi.mock("pinia", async (importOriginal) => ({ + ...(await importOriginal()), + storeToRefs: () => ({ req: { value: harness.fileStore.req } }), +})); +vi.mock("vue", async (importOriginal) => ({ + ...(await importOriginal()), + inject: () => vi.fn(), + watch: vi.fn(), + onMounted: vi.fn(), + onBeforeUnmount: vi.fn(), + useSSRContext: () => ({ modules: new Set() }), +})); + +const file = (name: string): UploadEntry => ({ + file: { name, size: 12, type: "text/plain" } as File, + name, + size: 12, + isDir: false, +}); + +const conflict = ( + index: number, + checked: Array<"origin" | "dest"> +): ConflictingResource => ({ + index, + name: `/target/file-${index}.txt`, + origin: { size: 12 }, + dest: { size: 10 }, + checked, + isSmallerOnServer: true, +}); + +function setup(component: any) { + return component.setup({}, { expose: vi.fn() }); +} + +function confirmPrompt(result: ConflictingResource[]) { + const prompt = harness.showHover.mock.calls[0][0]; + prompt.confirm({ preventDefault: vi.fn() }, result); +} + +async function runActualHandleFiles() { + const [files, path, overwrite] = harness.handleFiles.mock.calls[0]; + const actual = + await vi.importActual("@/utils/upload"); + actual.handleFiles(files, path, overwrite); +} + +function uploadFlags() { + return harness.queueUpload.mock.calls.map((call) => call[3]); +} + +describe("upload conflict resolution", () => { + beforeEach(() => { + vi.clearAllMocks(); + harness.fileStore.preselect = ""; + vi.stubGlobal("window", { + innerWidth: 1024, + innerHeight: 768, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + }); + vi.stubGlobal("document", { + getElementsByClassName: () => [], + }); + }); + + it("authorizes an explicit drag/drop Replace choice", async () => { + const upload = file("file-0.txt"); + harness.scanFiles.mockResolvedValue([upload]); + harness.checkConflict.mockResolvedValue([conflict(0, ["origin"])]); + const bindings = setup(FileListing); + + await bindings.drop({ + preventDefault: vi.fn(), + dataTransfer: { files: [upload.file], items: [] }, + target: { + classList: { contains: () => false }, + parentElement: null, + }, + }); + confirmPrompt([conflict(0, ["origin"])]); + await runActualHandleFiles(); + + expect(uploadFlags()).toEqual([true]); + }); + + it("keeps the forbidden both-selected upload overwrite-safe", async () => { + const upload = file("file-0.txt"); + harness.scanFiles.mockResolvedValue([upload]); + harness.checkConflict.mockResolvedValue([conflict(0, ["origin"])]); + const bindings = setup(FileListing); + + await bindings.drop({ + preventDefault: vi.fn(), + dataTransfer: { files: [upload.file], items: [] }, + target: { + classList: { contains: () => false }, + parentElement: null, + }, + }); + confirmPrompt([conflict(0, ["origin", "dest"])]); + await runActualHandleFiles(); + + expect(uploadFlags()).toEqual([false]); + }); + + it("applies Replace only to the selected file in a mixed batch", async () => { + const conflicting = file("file-0.txt"); + const nonconflicting = file("new-file.txt"); + harness.checkConflict.mockResolvedValue([conflict(0, ["origin"])]); + const bindings = setup(FileListing); + + await bindings.uploadInput({ + currentTarget: { files: [conflicting.file, nonconflicting.file] }, + }); + confirmPrompt([conflict(0, ["origin"])]); + await runActualHandleFiles(); + + expect(uploadFlags()).toEqual([true, false]); + }); + + it("keeps a nonconflicting sibling protected after Skip", async () => { + const conflicting = file("file-0.txt"); + const nonconflicting = file("late-file.txt"); + harness.checkConflict.mockResolvedValue([conflict(0, ["origin"])]); + const bindings = setup(FileListing); + + await bindings.uploadInput({ + currentTarget: { files: [conflicting.file, nonconflicting.file] }, + }); + confirmPrompt([conflict(0, ["dest"])]); + await runActualHandleFiles(); + + expect(harness.queueUpload).toHaveBeenCalledTimes(1); + expect(harness.queueUpload).toHaveBeenCalledWith( + "/files/target/late-file.txt", + "late-file.txt", + nonconflicting.file, + false, + "text" + ); + }); + + it("matches the Upload prompt per-file overwrite semantics", async () => { + const conflicting = file("file-0.txt"); + const nonconflicting = file("new-file.txt"); + harness.checkConflict.mockResolvedValue([conflict(0, ["origin"])]); + const bindings = setup(UploadPrompt); + + await bindings.uploadInput({ + currentTarget: { files: [conflicting.file, nonconflicting.file] }, + }); + confirmPrompt([conflict(0, ["origin"])]); + await runActualHandleFiles(); + + expect(uploadFlags()).toEqual([true, false]); + }); +}); diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index a0fbfa8a..7a308cd7 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -1,176 +1,448 @@ - diff --git a/frontend/src/views/settings/Profile.vue b/frontend/src/views/settings/Profile.vue index 32d80404..ffb20f0d 100644 --- a/frontend/src/views/settings/Profile.vue +++ b/frontend/src/views/settings/Profile.vue @@ -1,103 +1,221 @@ - diff --git a/frontend/src/views/settings/Shares.vue b/frontend/src/views/settings/Shares.vue new file mode 100644 index 00000000..e1076ec9 --- /dev/null +++ b/frontend/src/views/settings/Shares.vue @@ -0,0 +1,159 @@ + + + diff --git a/frontend/src/views/settings/User.vue b/frontend/src/views/settings/User.vue index 01581d21..63e0d2a2 100644 --- a/frontend/src/views/settings/User.vue +++ b/frontend/src/views/settings/User.vue @@ -1,148 +1,211 @@ - diff --git a/frontend/src/views/settings/Users.vue b/frontend/src/views/settings/Users.vue index fcbe100b..3d2e5486 100644 --- a/frontend/src/views/settings/Users.vue +++ b/frontend/src/views/settings/Users.vue @@ -1,48 +1,71 @@ - diff --git a/frontend/test-results/.last-run.json b/frontend/test-results/.last-run.json new file mode 100644 index 00000000..544c11fb --- /dev/null +++ b/frontend/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "failed", + "failedTests": [] +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 00000000..7b77334a --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,29 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": [ + "src/**/__tests__/*", + // Excluding non-TS Vue files which use the old Options API. + // This can be removed once those files are properly migrated to + // the new Composition API with TS support. + "src/components/Shell.vue", + "src/components/prompts/Copy.vue", + "src/components/prompts/Move.vue", + "src/components/prompts/Delete.vue", + "src/components/prompts/FileList.vue", + "src/components/prompts/Rename.vue", + "src/components/prompts/Share.vue" + ], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client", "@intlify/unplugin-vue-i18n/messages"], + "paths": { + "@/*": ["./src/*"] + }, + // Version 0.8.0 of @vue/tsconfig enabled this automatically. + // Disabling for now since it's causing quite a lot of errors. + // Should be revisited. + "noUncheckedIndexedAccess": false + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..66b5e570 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 00000000..29e91674 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,17 @@ +{ + "extends": "@tsconfig/node24/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 00000000..08159177 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,81 @@ +import path from "node:path"; +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"; +import legacy from "@vitejs/plugin-legacy"; +import { compression } from "vite-plugin-compression2"; + +const plugins = [ + vue(), + VueI18nPlugin({ + include: [path.resolve(__dirname, "./src/i18n/**/*.json")], + }), + legacy({ + // defaults already drop IE support + targets: ["defaults"], + }), + compression({ include: /\.js$/, deleteOriginalAssets: false }), +]; + +const resolve = { + alias: { + // vue: "@vue/compat", + "@/": `${path.resolve(__dirname, "src")}/`, + }, +}; + +// https://vitejs.dev/config/ +export default defineConfig(({ command }) => { + if (command === "serve") { + return { + plugins, + resolve, + server: { + proxy: { + "/api/command": { + target: "ws://127.0.0.1:8080", + ws: true, + }, + "/api": "http://127.0.0.1:8080", + }, + }, + }; + } else { + // command === 'build' + return { + plugins, + resolve, + base: "", + build: { + rollupOptions: { + input: { + index: path.resolve(__dirname, "./public/index.html"), + }, + output: { + manualChunks: (id) => { + // bundle dayjs files in a single chunk + // this avoids having small files for each locale + if (id.includes("dayjs/")) { + return "dayjs"; + // bundle i18n in a separate chunk + } else if (id.includes("i18n/")) { + return "i18n"; + } + }, + }, + }, + }, + experimental: { + renderBuiltUrl(filename, { hostType }) { + if (hostType === "js") { + return { runtime: `window.__prependStaticUrl("${filename}")` }; + } else if (hostType === "html") { + return `[{[ .StaticURL ]}]/${filename}`; + } else { + return { relative: true }; + } + }, + }, + }; + } +}); diff --git a/frontend/vue.config.js b/frontend/vue.config.js deleted file mode 100644 index c966ee81..00000000 --- a/frontend/vue.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - runtimeCompiler: true, - publicPath: '[{[ .StaticURL ]}]' -} \ No newline at end of file diff --git a/go.mod b/go.mod index 7e2e3bed..fab731a0 100644 --- a/go.mod +++ b/go.mod @@ -1,41 +1,84 @@ module github.com/filebrowser/filebrowser/v2 +go 1.25.0 + require ( - github.com/DataDog/zstd v1.4.0 // indirect - github.com/GeertJohan/go.rice v1.0.0 - github.com/Sereal/Sereal v0.0.0-20190430203904-6faf9605eb56 // indirect - github.com/asdine/storm v2.1.2+incompatible - github.com/caddyserver/caddy v1.0.3 - github.com/daaku/go.zipexe v1.0.1 // indirect - github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/asdine/storm/v3 v3.2.1 + github.com/asticode/go-astisub v0.42.0 github.com/disintegration/imaging v1.6.2 - github.com/dsnet/compress v0.0.1 // indirect - github.com/golang/snappy v0.0.1 // indirect - github.com/gorilla/mux v1.7.3 - github.com/gorilla/websocket v1.4.1 - github.com/hacdias/fileutils v0.0.0-20181202104838-227b317161a1 - github.com/maruel/natural v0.0.0-20180416170133-dbcb3e2e8cf1 - github.com/mholt/archiver v3.1.1+incompatible + github.com/dsoprea/go-exif/v3 v3.0.1 + github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 + github.com/golang-jwt/jwt/v5 v5.3.1 + github.com/gorilla/mux v1.8.1 + github.com/gorilla/websocket v1.5.3 + github.com/jellydator/ttlcache/v3 v3.4.1 + github.com/maruel/natural v1.3.0 + github.com/marusama/semaphore/v2 v2.5.0 + github.com/mholt/archives v0.1.5 github.com/mitchellh/go-homedir v1.1.0 - github.com/nwaples/rardecode v1.0.0 // indirect - github.com/pelletier/go-toml v1.6.0 - github.com/pierrec/lz4 v0.0.0-20190131084431-473cd7ce01a1 // indirect - github.com/spf13/afero v1.2.2 - github.com/spf13/cobra v0.0.5 - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.6.1 + github.com/redis/go-redis/v9 v9.21.0 + github.com/samber/lo v1.53.0 + github.com/shirou/gopsutil/v4 v4.26.6 + github.com/spf13/afero v1.15.0 + github.com/spf13/cobra v1.10.2 + github.com/spf13/pflag v1.0.10 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce - github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect - github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect - go.etcd.io/bbolt v1.3.3 - golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 - golang.org/x/net v0.0.0-20200528225125-3c3fba18258b // indirect - golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect - golang.org/x/text v0.3.2 // indirect - google.golang.org/appengine v1.5.0 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.0.0 - gopkg.in/yaml.v2 v2.2.7 + go.etcd.io/bbolt v1.5.0 + golang.org/x/crypto v0.54.0 + golang.org/x/image v0.44.0 + golang.org/x/text v0.40.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 + gopkg.in/yaml.v3 v3.0.1 ) -go 1.14 +require ( + github.com/STARRY-S/zip v0.2.3 // indirect + github.com/andybalholm/brotli v1.2.2 // indirect + github.com/asticode/go-astikit v0.59.0 // indirect + github.com/asticode/go-astits v1.15.0 // indirect + github.com/bodgit/plumbing v1.3.0 // indirect + github.com/bodgit/sevenzip v1.6.5 // indirect + github.com/bodgit/windows v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect + github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect + github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect + github.com/ebitengine/purego v0.10.2 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect + github.com/go-errors/errors v1.5.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/golang/geo v0.0.0-20260713102120-857a528af641 // indirect + github.com/golang/snappy v1.0.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/klauspost/compress v1.19.1 // indirect + github.com/klauspost/pgzip v1.2.6 // indirect + github.com/mikelolasagasti/xz v1.0.1 // indirect + github.com/minio/minlz v1.2.0 // indirect + github.com/nwaples/rardecode/v2 v2.2.5 // indirect + github.com/pelletier/go-toml/v2 v2.4.3 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sagikazarmark/locafero v0.12.0 // indirect + github.com/sorairolake/lzip-go v0.3.8 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/stangelandcl/ppmd v0.1.1 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/ulikunitz/xz v0.5.16 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.uber.org/atomic v1.11.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + go4.org v0.0.0-20260112195520-a5071408f32f // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) diff --git a/go.sum b/go.sum index f29e3441..285bbec9 100644 --- a/go.sum +++ b/go.sum @@ -1,321 +1,270 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/zstd v1.4.0 h1:vhoV+DUHnRZdKW1i5UMjAk2G4JY8wN4ayRfYDNdEhwo= -github.com/DataDog/zstd v1.4.0/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/GeertJohan/go.incremental v1.0.0 h1:7AH+pY1XUgQE4Y1HcXYaMqAI0m9yrFqo/jt0CW30vsg= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0 h1:KkI6O9uMaQU3VEKaj01ulavtF7o1fWT7+pk/4voiMLQ= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Sereal/Sereal v0.0.0-20190430203904-6faf9605eb56 h1:3trCIB5GsAOIY8NxlfMztCYIhVsW9V5sZ+brsecjaiI= -github.com/Sereal/Sereal v0.0.0-20190430203904-6faf9605eb56/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM= -github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/asdine/storm v2.1.2+incompatible h1:dczuIkyqwY2LrtXPz8ixMrU/OFgZp71kbKTHGrXYt/Q= -github.com/asdine/storm v2.1.2+incompatible/go.mod h1:RarYDc9hq1UPLImuiXK3BIWPJLdIygvV3PsInK0FbVQ= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= -github.com/caddyserver/caddy v1.0.3 h1:i9gRhBgvc5ifchwWtSe7pDpsdS9+Q0Rw9oYQmYUTw1w= -github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= -github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= -github.com/daaku/go.zipexe v1.0.1 h1:wV4zMsDOI2SZ2m7Tdz1Ps96Zrx+TzaK15VbUaGozw0M= -github.com/daaku/go.zipexe v1.0.1/go.mod h1:5xWogtqlYnfBXkSB1o9xysukNP9GTvaNkqzUZbt3Bw8= +github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= +github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/STARRY-S/zip v0.2.3 h1:luE4dMvRPDOWQdeDdUxUoZkzUIpTccdKdhHHsQJ1fm4= +github.com/STARRY-S/zip v0.2.3/go.mod h1:lqJ9JdeRipyOQJrYSOtpNAiaesFO6zVDsE8GIGFaoSk= +github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM= +github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM= +github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= +github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/asdine/storm/v3 v3.2.1 h1:I5AqhkPK6nBZ/qJXySdI7ot5BlXSZ7qvDY1zAn5ZJac= +github.com/asdine/storm/v3 v3.2.1/go.mod h1:LEpXwGt4pIqrE/XcTvCnZHT5MgZCV6Ub9q7yQzOFWr0= +github.com/asticode/go-astikit v0.20.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0= +github.com/asticode/go-astikit v0.30.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0= +github.com/asticode/go-astikit v0.59.0 h1:tjbwDym+MTSxqkAhJoHRZmHMXK6Jv4vGx+97FptKH6k= +github.com/asticode/go-astikit v0.59.0/go.mod h1:fV43j20UZYfXzP9oBn33udkvCvDvCDhzjVqoLFuuYZE= +github.com/asticode/go-astisub v0.42.0 h1:IJuJJTQwCSFeY9bx1kTzdCwkIeG27wj4CAh6nHc+pvY= +github.com/asticode/go-astisub v0.42.0/go.mod h1:WTkuSzFB+Bp7wezuSf2Oxulj5A8zu2zLRVFf6bIFQK8= +github.com/asticode/go-astits v1.8.0/go.mod h1:DkOWmBNQpnr9mv24KfZjq4JawCFX1FCqjLVGvO0DygQ= +github.com/asticode/go-astits v1.15.0 h1:yRyCiUc8Jj4F7clt2GDxHghMpWuFL5rkaLuGUd2/0J4= +github.com/asticode/go-astits v1.15.0/go.mod h1:QSHmknZ51pf6KJdHKZHJTLlMegIrhega3LPWz3ND/iI= +github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= +github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= +github.com/bodgit/sevenzip v1.6.5 h1:7H7BxgmeX0j6UX42lH+KXQ92WgMQJ49DoocFdfHbCng= +github.com/bodgit/sevenzip v1.6.5/go.mod h1:GhuB6Lq1xCpP1sps+horjZ8lgiKPJcy2zUX3prla9wc= +github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= +github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= +github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E= +github.com/dsoprea/go-exif/v3 v3.0.0-20200717053412-08f1b6708903/go.mod h1:0nsO1ce0mh5czxGeLo4+OCZ/C6Eo6ZlMWsz7rH/Gxv8= +github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk= +github.com/dsoprea/go-exif/v3 v3.0.0-20221003160559-cf5cd88aa559/go.mod h1:rW6DMEv25U9zCtE5ukC7ttBRllXj7g7TAHl7tQrT5No= +github.com/dsoprea/go-exif/v3 v3.0.0-20221003171958-de6cb6e380a8/go.mod h1:akyZEJZ/k5bmbC9gA612ZLQkcED8enS9vuTiuAkENr0= +github.com/dsoprea/go-exif/v3 v3.0.1 h1:/IE4iW7gvY7BablV1XY0unqhMv26EYpOquVMwoBo/wc= +github.com/dsoprea/go-exif/v3 v3.0.1/go.mod h1:10HkA1Wz3h398cDP66L+Is9kKDmlqlIJGPv8pk4EWvc= +github.com/dsoprea/go-logging v0.0.0-20190624164917-c4f10aab7696/go.mod h1:Nm/x2ZUNRW6Fe5C3LxdY1PyZY5wmDv/s5dkPJ/VB3iA= +github.com/dsoprea/go-logging v0.0.0-20200517223158-a10564966e9d/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= +github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg= +github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= +github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf/go.mod h1:95+K3z2L0mqsVYd6yveIv1lmtT3tcQQ3dVakPySffW8= +github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e/go.mod h1:uAzdkPTub5Y9yQwXe8W4m2XuP0tK4a9Q/dantD0+uaU= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003142440-7a1927d49d9d/go.mod h1:LVjRU0RNUuMDqkPTxcALio0LWPFPXxxFCvVGVAwEpFc= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003160719-7bc88537c05e/go.mod h1:VZ7cB0pTjm1ADBWhJUOHESu4ZYy9JN+ZPqjfiW09EPU= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 h1:DilThiXje0z+3UQ5YjYiSRRzVdtamFpvBQXKwMglWqw= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349/go.mod h1:4GC5sXji84i/p+irqghpPFZBF8tRN/Q7+700G0/DLe8= +github.com/ebitengine/purego v0.10.2 h1:W809HbnvzAxgdm+aOvlSekrM16wGCdT/e76+9tS7gzE= +github.com/ebitengine/purego v0.10.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-acme/lego v2.5.0+incompatible h1:5fNN9yRQfv8ymH3DSsxla+4aYeQt2IgfZqHKVnK8f0s= -github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= +github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= +github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/geo v0.0.0-20260713102120-857a528af641 h1:cpoobkgVGCE6bC5kJkOfwfM6hAtZuvoBjnCLECxG4AU= +github.com/golang/geo v0.0.0-20260713102120-857a528af641/go.mod h1:Mymr9kRGDc64JPr03TSZmuIBODZ3KyswLzm1xL0HFA8= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hacdias/fileutils v0.0.0-20181202104838-227b317161a1 h1:2MkEawJQTmAr6YI7T7j7SKxdTmYJOcaJZfzeVPr56PM= -github.com/hacdias/fileutils v0.0.0-20181202104838-227b317161a1/go.mod h1:lwnswzFVSy7B/k81M5rOLUU0fOBKHrDRIkPIBZd7PBo= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jellydator/ttlcache/v3 v3.4.1 h1:bOdXmXiycyK6E6Qjyuj5vl+/vU3SCOoDs8a86NbHjAQ= +github.com/jellydator/ttlcache/v3 v3.4.1/go.mod h1:j7LO12PNghFg5+0v9budMAT4rDK4JY969jb9vOdOBBk= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk= +github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= +github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/maruel/natural v0.0.0-20180416170133-dbcb3e2e8cf1 h1:PEhRT94KBTY4E0KdCYmhvDGWjSFBxc68j2M6PMRix8U= -github.com/maruel/natural v0.0.0-20180416170133-dbcb3e2e8cf1/go.mod h1:wI697HNhDFM/vBruYM3ckbszQ2+DOIeH9qdBKMdf288= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= -github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2 h1:xKE9kZ5C8gelJC3+BNM6LJs1x21rivK7yxfTZMAuY2s= -github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= -github.com/miekg/dns v1.1.3 h1:1g0r1IvskvgL8rR+AcHzUA+oFmGcQlaIm4IqakufeMM= -github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/maruel/natural v1.3.0 h1:VsmCsBmEyrR46RomtgHs5hbKADGRVtliHTyCOLFBpsg= +github.com/maruel/natural v1.3.0/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= +github.com/marusama/semaphore/v2 v2.5.0 h1:o/1QJD9DBYOWRnDhPwDVAXQn6mQYD0gZaS1Tpx6DJGM= +github.com/marusama/semaphore/v2 v2.5.0/go.mod h1:z9nMiNUekt/LTpTUQdpp+4sJeYqUGpwMHfW0Z8V8fnQ= +github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ= +github.com/mholt/archives v0.1.5/go.mod h1:3TPMmBLPsgszL+1As5zECTuKwKvIfj6YcwWPpeTAXF4= +github.com/mikelolasagasti/xz v1.0.1 h1:Q2F2jX0RYJUG3+WsM+FJknv+6eVjsjXNDV0KJXZzkD0= +github.com/mikelolasagasti/xz v1.0.1/go.mod h1:muAirjiOUxPRXwm9HdDtB3uoRPrGnL85XHtokL9Hcgc= +github.com/minio/minlz v1.2.0 h1:6IOBuiHg04QxvbFfgFLT/9sMaO/UhL7S+ApW1mK8q5A= +github.com/minio/minlz v1.2.0/go.mod h1:Ls9H7nlkASeCcdl5thjVD5Eraj6z+zGa7xtq57jIKD4= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nwaples/rardecode v1.0.0 h1:r7vGuS5akxOnR4JQSkko62RJ1ReCMXxQRPtxsiFMBOs= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4= -github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= -github.com/pierrec/lz4 v0.0.0-20190131084431-473cd7ce01a1 h1:0utzB5Mn6QyMzIeOn+oD7pjKQLjJwfM9bz6TkPPdxcw= -github.com/pierrec/lz4 v0.0.0-20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/nwaples/rardecode/v2 v2.2.5 h1:L5doqgGfQwI7qADJMqnkrSB86rpPsqQDrHeO0HWa5JY= +github.com/nwaples/rardecode/v2 v2.2.5/go.mod h1:7uz379lSxPe6j9nvzxUZ+n7mnJNgjsRNb6IbvGVHRmw= +github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdDPYVpY= +github.com/pelletier/go-toml/v2 v2.4.3/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= +github.com/pkg/profile v1.4.0/go.mod h1:NWz/XGvpEW1FyYQ7fCx4dqYBLlfTcE+A9FLAkNKqjFE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= -github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E= +github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= +github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/shirou/gopsutil/v4 v4.26.6 h1:Mzr/npDtQC/xpeEuQKHZt8Zo9CmPvhTj8nkR8w5TLDs= +github.com/shirou/gopsutil/v4 v4.26.6/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= +github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik= +github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/stangelandcl/ppmd v0.1.1 h1:c25QazhlWUn5nmR1QOzafKhQxBicAr7GGCKER2aJ8H8= +github.com/stangelandcl/ppmd v0.1.1/go.mod h1:Rrv7M+/2P5jYr/GMLhBl7Ug3uJ1bUiVzr5LbbaV6xgY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ulikunitz/xz v0.5.6 h1:jGHAfXawEGZQ3blwU5wnWKQJvAraT7Ftq9EXjnXYgt8= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.16 h1:ld6NyySjx5lowVKwJvMRLnW5nxKX/xnpSiFYZ/Lxur0= +github.com/ulikunitz/xz v0.5.16/go.mod h1:H9Rt/W6/Qj27PGauhQc6nfCDy7vHpzsOThBSaYDoEhw= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25 h1:jsG6UpNLt9iAsb0S2AGW28DveNzzgmbXR+ENoPjUeIU= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.5.0 h1:S7GAl7Fxv12yohbwFfIbQCGDWbQbtDGPET4P/bD4lxU= +go.etcd.io/bbolt v1.5.0/go.mod h1:mkltfYE5aUHQxUct9N9V+Kp7aSjFqjgrhcXIS70Lrdk= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +go4.org v0.0.0-20260112195520-a5071408f32f h1:ziUVAjmTPwQMBmYR1tbdRFJPtTcQUI12fH9QQjfb0Sw= +go4.org v0.0.0-20260112195520-a5071408f32f/go.mod h1:ZRJnO5ZI4zAwMFp+dS1+V6J6MSyAowhRqAE+DPa1Xp0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= +golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225 h1:kNX+jCowfMYzvlSvJu5pQWEmyWFrBXJ3PBy10xKMXK8= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= +golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b h1:IYiJPiJfzktmDAO1HQiwjMjwjlYKHAL7KzeD544RJPs= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a h1:1n5lsVfiQW3yfsRGu98756EH1YthsFqr/5mxHduZW2A= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e h1:ZytStCyV048ZqDsWHiYDdoI2Vd4msMcrDECFxS+tL9c= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/http/auth.go b/http/auth.go index 41f0551e..4da5adcf 100644 --- a/http/auth.go +++ b/http/auth.go @@ -1,36 +1,47 @@ -package http +package fbhttp import ( "encoding/json" + "errors" "log" "net/http" "os" "strings" "time" - jwt "github.com/dgrijalva/jwt-go" - "github.com/dgrijalva/jwt-go/request" + "github.com/golang-jwt/jwt/v5" + "github.com/golang-jwt/jwt/v5/request" - "github.com/filebrowser/filebrowser/v2/errors" + fbAuth "github.com/filebrowser/filebrowser/v2/auth" + fberrors "github.com/filebrowser/filebrowser/v2/errors" + "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/users" ) const ( - TokenExpirationTime = time.Hour * 2 + DefaultTokenExpirationTime = time.Hour * 2 + + maxAuthBodySize = 1 << 20 // 1 MiB ) type userInfo struct { - ID uint `json:"id"` - Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` - Perm users.Permissions `json:"perm"` - Commands []string `json:"commands"` - LockPassword bool `json:"lockPassword"` + ID uint `json:"id"` + Locale string `json:"locale"` + ViewMode users.ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"` + Perm users.Permissions `json:"perm"` + Commands []string `json:"commands"` + LockPassword bool `json:"lockPassword"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + Username string `json:"username"` + AceEditorTheme string `json:"aceEditorTheme"` } type authToken struct { User userInfo `json:"user"` - jwt.StandardClaims + jwt.RegisteredClaims } type extractor []string @@ -45,38 +56,89 @@ func (e extractor) ExtractToken(r *http.Request) (string, error) { return token, nil } - auth := r.URL.Query().Get("auth") - if auth == "" { - return "", request.ErrNoTokenInRequest + if r.Method == http.MethodGet { + cookie, _ := r.Cookie("auth") + if cookie != nil && strings.Count(cookie.Value, ".") == 2 { + return cookie.Value, nil + } } - return auth, nil + return "", request.ErrNoTokenInRequest +} + +func renewableErr(err error, r *http.Request, d *data, tk *authToken) bool { + if d.settings.AuthMethod != fbAuth.MethodProxyAuth || err == nil { + return false + } + + if d.settings.LogoutPage == settings.DefaultLogoutPage { + return false + } + + if !errors.Is(err, jwt.ErrTokenExpired) { + return false + } + + // The expiration is only waived because the trusted proxy, not the token, + // decides when the session ends. Require the proxy to still assert the same + // identity on this request, otherwise a token that leaked before it expired + // would authenticate on its own forever. + return proxyAsserts(r, d, tk.User.ID) +} + +// proxyAsserts reports whether the proxy-auth header on r identifies the user +// the token was issued for. The username is resolved through the user store, so +// that it is matched exactly as a regular proxy login would match it. +func proxyAsserts(r *http.Request, d *data, id uint) bool { + auther, err := d.store.Auth.Get(fbAuth.MethodProxyAuth) + if err != nil { + return false + } + + proxy, ok := auther.(*fbAuth.ProxyAuth) + if !ok || proxy.Header == "" { + return false + } + + username := r.Header.Get(proxy.Header) + if username == "" { + return false + } + + user, err := d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, username) + if err != nil { + return false + } + + return user.ID == id } func withUser(fn handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - keyFunc := func(token *jwt.Token) (interface{}, error) { + keyFunc := func(_ *jwt.Token) (interface{}, error) { return d.settings.Key, nil } var tk authToken - token, err := request.ParseFromRequest(r, &extractor{}, keyFunc, request.WithClaims(&tk)) - - if err != nil || !token.Valid { - return http.StatusForbidden, nil + p := jwt.NewParser(jwt.WithValidMethods([]string{jwt.SigningMethodHS256.Alg()}), jwt.WithExpirationRequired()) + token, err := request.ParseFromRequest(r, &extractor{}, keyFunc, request.WithClaims(&tk), request.WithParser(p)) + if (err != nil || !token.Valid) && !renewableErr(err, r, d, &tk) { + return http.StatusUnauthorized, nil } - expired := !tk.VerifyExpiresAt(time.Now().Add(time.Hour).Unix(), true) - updated := d.store.Users.LastUpdate(tk.User.ID) > tk.IssuedAt + expiresSoon := tk.ExpiresAt != nil && time.Until(tk.ExpiresAt.Time) < time.Hour + updated := tk.IssuedAt != nil && tk.IssuedAt.Unix() < d.store.Users.LastUpdate(tk.User.ID) - if expired || updated { + if expiresSoon || updated { w.Header().Add("X-Renew-Token", "true") } - d.user, err = d.store.Users.Get(d.server.Root, tk.User.ID) + d.user, err = d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, tk.User.ID) if err != nil { return http.StatusInternalServerError, err } + + canonicalizeRequestPath(r) return fn(w, r, d) } } @@ -91,19 +153,26 @@ func withAdmin(fn handleFunc) handleFunc { }) } -var loginHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - auther, err := d.store.Auth.Get(d.settings.AuthMethod) - if err != nil { - return http.StatusInternalServerError, err - } +func loginHandler(tokenExpireTime time.Duration) handleFunc { + return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if r.Body != nil { + r.Body = http.MaxBytesReader(w, r.Body, maxAuthBodySize) + } - user, err := auther.Auth(r, d.store.Users, d.server.Root) - if err == os.ErrPermission { - return http.StatusForbidden, nil - } else if err != nil { - return http.StatusInternalServerError, err - } else { - return printToken(w, r, d, user) + auther, err := d.store.Auth.Get(d.settings.AuthMethod) + if err != nil { + return http.StatusInternalServerError, err + } + + user, err := auther.Auth(r, d.store.Users, d.settings, d.server) + switch { + case errors.Is(err, os.ErrPermission): + return http.StatusForbidden, nil + case err != nil: + return http.StatusInternalServerError, err + } + + return printToken(w, r, d, user, tokenExpireTime) } } @@ -121,6 +190,8 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, return http.StatusBadRequest, nil } + r.Body = http.MaxBytesReader(w, r.Body, maxAuthBodySize) + info := &signupBody{} err := json.NewDecoder(r.Body).Decode(info) if err != nil { @@ -137,23 +208,32 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, d.settings.Defaults.Apply(user) - pwd, err := users.HashPwd(info.Password) + // Users signed up via the signup handler should never become admins, even + // if that is the default permission. + user.Perm.Admin = false + + // Self-registered users should not inherit execution capabilities from + // default settings, regardless of what the administrator has configured + // as the default. Execution rights must be explicitly granted by an admin. + user.Perm.Execute = false + user.Commands = []string{} + + pwd, err := users.ValidateAndHashPwd(info.Password, d.settings.MinimumPasswordLength) if err != nil { - return http.StatusInternalServerError, err + return http.StatusBadRequest, err } user.Password = pwd - userHome, err := d.settings.MakeUserDir(user.Username, user.Scope, d.server.Root) + derivedScope, err := d.settings.CreateUserHome(user, d.server.Root, false) if err != nil { - log.Printf("create user: failed to mkdir user home dir: [%s]", userHome) return http.StatusInternalServerError, err } - user.Scope = userHome - log.Printf("new user: %s, home dir: [%s].", user.Username, userHome) - err = d.store.Users.Save(user) - if err == errors.ErrExist { + log.Printf("new user: %s, home dir: [%s].", user.Username, user.Scope) + + err = d.store.Users.SaveProvisioned(user, derivedScope) + if errors.Is(err, fberrors.ErrExist) { return http.StatusConflict, err } else if err != nil { return http.StatusInternalServerError, err @@ -162,23 +242,32 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, return http.StatusOK, nil } -var renewHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - return printToken(w, r, d, d.user) -}) +func renewHandler(tokenExpireTime time.Duration) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + w.Header().Set("X-Renew-Token", "false") + return printToken(w, r, d, d.user, tokenExpireTime) + }) +} -func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User) (int, error) { +func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User, tokenExpirationTime time.Duration) (int, error) { claims := &authToken{ User: userInfo{ - ID: user.ID, - Locale: user.Locale, - ViewMode: user.ViewMode, - Perm: user.Perm, - LockPassword: user.LockPassword, - Commands: user.Commands, + ID: user.ID, + Locale: user.Locale, + ViewMode: user.ViewMode, + SingleClick: user.SingleClick, + RedirectAfterCopyMove: user.RedirectAfterCopyMove, + Perm: user.Perm, + LockPassword: user.LockPassword, + Commands: user.Commands, + HideDotfiles: user.HideDotfiles, + DateFormat: user.DateFormat, + Username: user.Username, + AceEditorTheme: user.AceEditorTheme, }, - StandardClaims: jwt.StandardClaims{ - IssuedAt: time.Now().Unix(), - ExpiresAt: time.Now().Add(TokenExpirationTime).Unix(), + RegisteredClaims: jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(time.Now()), + ExpiresAt: jwt.NewNumericDate(time.Now().Add(tokenExpirationTime)), Issuer: "File Browser", }, } @@ -189,7 +278,7 @@ func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.Use return http.StatusInternalServerError, err } - w.Header().Set("Content-Type", "cty") + w.Header().Set("Content-Type", "text/plain") if _, err := w.Write([]byte(signed)); err != nil { return http.StatusInternalServerError, err } diff --git a/http/auth_test.go b/http/auth_test.go new file mode 100644 index 00000000..9389ecbb --- /dev/null +++ b/http/auth_test.go @@ -0,0 +1,151 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/asdine/storm/v3" + "github.com/golang-jwt/jwt/v5" + + fbAuth "github.com/filebrowser/filebrowser/v2/auth" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" +) + +// Regression for the username-normalization home-directory collision +// (GHSA-7rc3-g7h6-22m7): with Signup and CreateUserDir enabled, two distinct +// usernames that cleanUsername() normalizes to the same directory must not be +// handed the same home directory. The second registration is rejected. +func TestSignupRejectsCollidingNormalizedScope(t *testing.T) { + root := t.TempDir() + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := st.Settings.Save(&settings.Settings{ + Key: []byte("test-signing-key"), + Signup: true, + CreateUserDir: true, + UserHomeBasePath: "/users", + MinimumPasswordLength: 1, + }); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + + server := &settings.Server{Root: root} + + signup := func(username string) *httptest.ResponseRecorder { + body := `{"username":"` + username + `","password":"CollidePw12345!"}` + req, _ := http.NewRequest(http.MethodPost, "/signup", strings.NewReader(body)) + rec := httptest.NewRecorder() + handle(signupHandler, "", st, server).ServeHTTP(rec, req) + return rec + } + + // Victim registers first and gets /users/teamone-x. + if rec := signup("teamone-x"); rec.Code != http.StatusOK { + t.Fatalf("first signup: expected 200, got %d body=%q", rec.Code, rec.Body.String()) + } + + // Attacker picks a distinct username that normalizes to the same scope. + if rec := signup("teamone/x"); rec.Code != http.StatusConflict { + t.Fatalf("VULNERABLE: colliding signup expected 409, got %d body=%q", rec.Code, rec.Body.String()) + } + + // The shared scope must still be owned solely by the first user. + owner, err := st.Users.GetByScope("/users/teamone-x") + if err != nil { + t.Fatalf("expected first user to own the scope: %v", err) + } + if owner.Username != "teamone-x" { + t.Fatalf("scope owner = %q, want teamone-x", owner.Username) + } +} + +// Regression for GHSA-v3jv-rmh2-635j: under proxy auth with a non-default +// logout page the JWT expiration is waived, because the proxy owns the session +// lifetime. That exception used to apply to every route on the strength of the +// token alone, so a token stolen before it expired kept working — and could be +// renewed — indefinitely. The proxy must still assert the same identity. +func TestExpiredTokenNeedsProxyAssertion(t *testing.T) { + const proxyHeader = "X-Fb-User" + + key := []byte("test-signing-key") + perm := users.Permissions{Download: true} + st := scopedUserStorage(t, t.TempDir(), perm, key) + + if err := st.Settings.Save(&settings.Settings{ + Key: key, + AuthMethod: fbAuth.MethodProxyAuth, + LogoutPage: "/logged-out", + }); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + if err := st.Auth.Save(&fbAuth.ProxyAuth{Header: proxyHeader}); err != nil { + t.Fatalf("failed to save auther: %v", err) + } + + expired := &authToken{ + User: userInfo{ID: 1, Username: "u", Perm: perm}, + RegisteredClaims: jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(time.Now().Add(-2 * time.Hour)), + ExpiresAt: jwt.NewNumericDate(time.Now().Add(-time.Hour)), + }, + } + expiredToken, err := jwt.NewWithClaims(jwt.SigningMethodHS256, expired).SignedString(key) + if err != nil { + t.Fatalf("failed to sign token: %v", err) + } + + protected := withUser(func(w http.ResponseWriter, _ *http.Request, _ *data) (int, error) { + _, writeErr := w.Write([]byte("protected")) + return 0, writeErr + }) + + get := func(token, proxyUser string) *httptest.ResponseRecorder { + req, _ := http.NewRequest(http.MethodGet, "/", http.NoBody) + req.Header.Set("X-Auth", token) + if proxyUser != "" { + req.Header.Set(proxyHeader, proxyUser) + } + rec := httptest.NewRecorder() + handle(protected, "", st, &settings.Server{}).ServeHTTP(rec, req) + return rec + } + + t.Run("expired token alone is rejected", func(t *testing.T) { + if rec := get(expiredToken, ""); rec.Code != http.StatusUnauthorized { + t.Errorf("VULNERABLE: expired token without the proxy header = %d, body=%q; want 401", rec.Code, rec.Body.String()) + } + }) + + t.Run("expired token for another identity is rejected", func(t *testing.T) { + if rec := get(expiredToken, "someone-else"); rec.Code != http.StatusUnauthorized { + t.Errorf("VULNERABLE: expired token with a foreign proxy identity = %d; want 401", rec.Code) + } + }) + + t.Run("expired token the proxy still asserts is accepted", func(t *testing.T) { + if rec := get(expiredToken, "u"); rec.Code != http.StatusOK { + t.Errorf("expired token asserted by the proxy = %d, body=%q; want 200", rec.Code, rec.Body.String()) + } + }) + + t.Run("valid token needs no assertion", func(t *testing.T) { + if rec := get(signToken(t, perm, key), ""); rec.Code != http.StatusOK { + t.Errorf("valid token = %d, body=%q; want 200", rec.Code, rec.Body.String()) + } + }) +} diff --git a/http/commands.go b/http/commands.go index cdb5ea1e..f0380c50 100644 --- a/http/commands.go +++ b/http/commands.go @@ -1,4 +1,4 @@ -package http +package fbhttp import ( "bufio" @@ -6,6 +6,7 @@ import ( "log" "net/http" "os/exec" + "slices" "strings" "time" @@ -27,12 +28,12 @@ var ( cmdNotAllowed = []byte("Command not allowed.") ) -func wsErr(ws *websocket.Conn, r *http.Request, status int, err error) { //nolint:unparam +func wsErr(ws *websocket.Conn, r *http.Request, status int, err error) { txt := http.StatusText(status) if err != nil || status >= 400 { log.Printf("%s: %v %s %v", r.URL.Path, status, r.RemoteAddr, err) } - if err := ws.WriteControl(websocket.CloseInternalServerErr, []byte(txt), time.Now().Add(WSWriteDeadline)); err != nil { //nolint:shadow + if err := ws.WriteControl(websocket.CloseInternalServerErr, []byte(txt), time.Now().Add(WSWriteDeadline)); err != nil { log.Print(err) } } @@ -47,7 +48,7 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d var raw string for { - _, msg, err := conn.ReadMessage() //nolint:shadow + _, msg, err := conn.ReadMessage() if err != nil { wsErr(conn, r, http.StatusInternalServerError, err) return 0, nil @@ -59,23 +60,32 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d } } - if !d.user.CanExecute(strings.Split(raw, " ")[0]) { - if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { //nolint:shadow + // Fail fast + if !d.server.EnableExec || !d.user.Perm.Execute { + if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { wsErr(conn, r, http.StatusInternalServerError, err) } return 0, nil } - command, err := runner.ParseCommand(d.settings, raw) + command, name, err := runner.ParseCommand(d.settings, raw) if err != nil { - if err := conn.WriteMessage(websocket.TextMessage, []byte(err.Error())); err != nil { //nolint:shadow + if err := conn.WriteMessage(websocket.TextMessage, []byte(err.Error())); err != nil { wsErr(conn, r, http.StatusInternalServerError, err) } return 0, nil } - cmd := exec.Command(command[0], command[1:]...) //nolint:gosec + if !slices.Contains(d.user.Commands, name) { + if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { + wsErr(conn, r, http.StatusInternalServerError, err) + } + + return 0, nil + } + + cmd := exec.Command(command[0], command[1:]...) cmd.Dir = d.user.FullPath(r.URL.Path) stdout, err := cmd.StdoutPipe() diff --git a/http/data.go b/http/data.go index 8fdff7be..57efa12d 100644 --- a/http/data.go +++ b/http/data.go @@ -1,12 +1,14 @@ -package http +package fbhttp import ( "log" "net/http" + gopath "path" "strconv" "github.com/tomasen/realip" + "github.com/filebrowser/filebrowser/v2/rules" "github.com/filebrowser/filebrowser/v2/runner" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/storage" @@ -22,19 +24,39 @@ type data struct { store *storage.Storage user *users.User raw interface{} + + // checkerPrefix is prepended to every path before evaluating rules. It is + // set when the user's filesystem has been rebased onto a subdirectory (as + // done for public shares), so that rules — which are relative to the user's + // original scope — are still matched against the real path instead of the + // rebased one. Empty for regular requests. + checkerPrefix string } // Check implements rules.Checker. func (d *data) Check(path string) bool { + if d.user.HideDotfiles && rules.MatchHidden(d.rulePath(path)) { + return false + } + + return d.CheckRules(path) +} + +// CheckRules reports whether the global and user rules allow path. Unlike +// Check, it ignores HideDotfiles: hiding dotfiles is a display preference, so +// it must not stop a user from operating on a tree that contains one. +func (d *data) CheckRules(path string) bool { + path = d.rulePath(path) + allow := true for _, rule := range d.settings.Rules { - if rule.Matches(path) { + if rule.Matches(path, d.server.CaseInsensitiveFs) { allow = rule.Allow } } for _, rule := range d.user.Rules { - if rule.Matches(path) { + if rule.Matches(path, d.server.CaseInsensitiveFs) { allow = rule.Allow } } @@ -42,31 +64,59 @@ func (d *data) Check(path string) bool { return allow } +// rulePath canonicalizes path into the form the rules are written in. +func (d *data) rulePath(path string) string { + // Rules are written as "/"-separated virtual paths, but callers hand us + // paths built by the OS as well as ones taken from the request: afero.Walk + // and filepath.Join use "\" on Windows, where the filesystem also treats it + // as a separator. Canonicalize first so the authorization decision does not + // depend on which separator the caller happened to use. + path = slashClean(path) + + // When the filesystem has been rebased (e.g. a public share rooted at a + // subdirectory), the incoming path is relative to that root. Resolve it + // back to the user's original scope before matching rules, otherwise rules + // targeting paths below the share root would be silently bypassed. + if d.checkerPrefix != "" { + path = gopath.Join(d.checkerPrefix, path) + } + + return path +} + func handle(fn handleFunc, prefix string, store *storage.Storage, server *settings.Server) http.Handler { handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + for k, v := range globalHeaders { + w.Header().Set(k, v) + } + settings, err := store.Settings.Get() if err != nil { - log.Fatalln("ERROR: couldn't get settings") + log.Fatalf("ERROR: couldn't get settings: %v\n", err) return } status, err := fn(w, r, &data{ - Runner: &runner.Runner{Settings: settings}, + Runner: &runner.Runner{Enabled: server.EnableExec, Settings: settings}, store: store, settings: settings, server: server, }) - if status != 0 { - txt := http.StatusText(status) - http.Error(w, strconv.Itoa(status)+" "+txt, status) - } - if status >= 400 || err != nil { clientIP := realip.FromRequest(r) log.Printf("%s: %v %s %v", r.URL.Path, status, clientIP, err) } + + if status != 0 { + txt := http.StatusText(status) + if status == http.StatusBadRequest && err != nil { + txt += " (" + err.Error() + ")" + } + http.Error(w, strconv.Itoa(status)+" "+txt, status) + return + } }) - return http.StripPrefix(prefix, handler) + return stripPrefix(prefix, handler) } diff --git a/http/headers.go b/http/headers.go new file mode 100644 index 00000000..a18e7b53 --- /dev/null +++ b/http/headers.go @@ -0,0 +1,8 @@ +//go:build !dev + +package fbhttp + +// global headers to append to every response +var globalHeaders = map[string]string{ + "Cache-Control": "no-cache, no-store, must-revalidate", +} diff --git a/http/http.go b/http/http.go index c4b99918..46ab9508 100644 --- a/http/http.go +++ b/http/http.go @@ -1,42 +1,57 @@ -package http +package fbhttp import ( + "io/fs" "net/http" "github.com/gorilla/mux" + "github.com/spf13/afero" + "github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/storage" ) type modifyRequest struct { - What string `json:"what"` // Answer to: what data type? - Which []string `json:"which"` // Answer to: which fields? + What string `json:"what"` // Answer to: what data type? + Which []string `json:"which"` // Answer to: which fields? + CurrentPassword string `json:"current_password"` // Answer to: user logged password } -func NewHandler(store *storage.Storage, server *settings.Server) (http.Handler, error) { +func NewHandler( + imgSvc ImgService, + fileCache FileCache, + uploadCache UploadCache, + store *storage.Storage, + server *settings.Server, + assetsFs fs.FS, +) (http.Handler, error) { server.Clean() + server.CaseInsensitiveFs = files.CaseInsensitive(afero.NewOsFs(), server.Root) r := mux.NewRouter() - index, static := getStaticHandlers(store, server) - - // NOTE: This fixes the issue where it would redirect if people did not put a - // trailing slash in the end. I hate this decision since this allows some awful - // URLs https://www.gorillatoolkit.org/pkg/mux#Router.SkipClean - r = r.SkipClean(true) + r.Use(func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Security-Policy", `default-src 'self'; style-src 'unsafe-inline';`) + next.ServeHTTP(w, r) + }) + }) + index, static := getStaticHandlers(store, server, assetsFs) monkey := func(fn handleFunc, prefix string) http.Handler { return handle(fn, prefix, store, server) } + r.HandleFunc("/health", healthHandler) r.PathPrefix("/static").Handler(static) r.NotFoundHandler = index api := r.PathPrefix("/api").Subrouter() - api.Handle("/login", monkey(loginHandler, "")) + tokenExpirationTime := server.GetTokenExpirationTime(DefaultTokenExpirationTime) + api.Handle("/login", monkey(loginHandler(tokenExpirationTime), "")) api.Handle("/signup", monkey(signupHandler, "")) - api.Handle("/renew", monkey(renewHandler, "")) + api.Handle("/renew", monkey(renewHandler(tokenExpirationTime), "")) users := api.PathPrefix("/users").Subrouter() users.Handle("", monkey(usersGetHandler, "")).Methods("GET") @@ -45,12 +60,21 @@ func NewHandler(store *storage.Storage, server *settings.Server) (http.Handler, users.Handle("/{id:[0-9]+}", monkey(userGetHandler, "")).Methods("GET") users.Handle("/{id:[0-9]+}", monkey(userDeleteHandler, "")).Methods("DELETE") + api.PathPrefix("/resources/recursive").Handler(monkey(resourceGetRecursiveHandler, "/api/resources/recursive")).Methods("GET") api.PathPrefix("/resources").Handler(monkey(resourceGetHandler, "/api/resources")).Methods("GET") - api.PathPrefix("/resources").Handler(monkey(resourceDeleteHandler, "/api/resources")).Methods("DELETE") - api.PathPrefix("/resources").Handler(monkey(resourcePostPutHandler, "/api/resources")).Methods("POST") - api.PathPrefix("/resources").Handler(monkey(resourcePostPutHandler, "/api/resources")).Methods("PUT") - api.PathPrefix("/resources").Handler(monkey(resourcePatchHandler, "/api/resources")).Methods("PATCH") + api.PathPrefix("/resources").Handler(monkey(resourceDeleteHandler(fileCache), "/api/resources")).Methods("DELETE") + api.PathPrefix("/resources").Handler(monkey(resourcePostHandler(fileCache), "/api/resources")).Methods("POST") + api.PathPrefix("/resources").Handler(monkey(resourcePutHandler, "/api/resources")).Methods("PUT") + api.PathPrefix("/resources").Handler(monkey(resourcePatchHandler(fileCache), "/api/resources")).Methods("PATCH") + api.PathPrefix("/tus").Handler(monkey(tusPostHandler(uploadCache), "/api/tus")).Methods("POST") + api.PathPrefix("/tus").Handler(monkey(tusHeadHandler(uploadCache), "/api/tus")).Methods("HEAD", "GET") + api.PathPrefix("/tus").Handler(monkey(tusPatchHandler(uploadCache), "/api/tus")).Methods("PATCH") + api.PathPrefix("/tus").Handler(monkey(tusDeleteHandler(uploadCache), "/api/tus")).Methods("DELETE") + + api.PathPrefix("/usage").Handler(monkey(diskUsage, "/api/usage")).Methods("GET") + + api.Handle("/shares", monkey(shareListHandler, "")).Methods("GET") api.PathPrefix("/share").Handler(monkey(shareGetsHandler, "/api/share")).Methods("GET") api.PathPrefix("/share").Handler(monkey(sharePostHandler, "/api/share")).Methods("POST") api.PathPrefix("/share").Handler(monkey(shareDeleteHandler, "/api/share")).Methods("DELETE") @@ -59,9 +83,11 @@ func NewHandler(store *storage.Storage, server *settings.Server) (http.Handler, api.Handle("/settings", monkey(settingsPutHandler, "")).Methods("PUT") api.PathPrefix("/raw").Handler(monkey(rawHandler, "/api/raw")).Methods("GET") - api.PathPrefix("/preview/{size}/{path:.*}").Handler(monkey(previewHandler, "/api/preview")).Methods("GET") + api.PathPrefix("/preview/{size}/{path:.*}"). + Handler(monkey(previewHandler(imgSvc, fileCache, server.EnableThumbnails, server.ResizePreview), "/api/preview")).Methods("GET") api.PathPrefix("/command").Handler(monkey(commandsHandler, "/api/command")).Methods("GET") api.PathPrefix("/search").Handler(monkey(searchHandler, "/api/search")).Methods("GET") + api.PathPrefix("/subtitle").Handler(monkey(subtitleHandler, "/api/subtitle")).Methods("GET") public := api.PathPrefix("/public").Subrouter() public.PathPrefix("/dl").Handler(monkey(publicDlHandler, "/api/public/dl/")).Methods("GET") diff --git a/http/preview.go b/http/preview.go index c219dbb2..327313ce 100644 --- a/http/preview.go +++ b/http/preview.go @@ -1,101 +1,159 @@ -package http +//go:generate go-enum --sql --marshal --names --file $GOFILE +package fbhttp import ( + "bytes" + "context" + "errors" "fmt" - "image" + "io" "net/http" - "github.com/disintegration/imaging" "github.com/gorilla/mux" "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/img" ) -const ( - sizeThumb = "thumb" - sizeBig = "big" +/* +ENUM( +thumb +big ) +*/ +type PreviewSize int -type imageProcessor func(src image.Image) (image.Image, error) +type ImgService interface { + FormatFromExtension(ext string) (img.Format, error) + Resize(ctx context.Context, in io.Reader, width, height int, out io.Writer, options ...img.Option) error +} -var previewHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - if !d.user.Perm.Download { - return http.StatusAccepted, nil - } - vars := mux.Vars(r) - size := vars["size"] - if size != sizeBig && size != sizeThumb { - return http.StatusNotImplemented, nil - } +type FileCache interface { + Store(ctx context.Context, key string, value []byte) error + Load(ctx context.Context, key string) ([]byte, bool, error) + Delete(ctx context.Context, key string) error +} - file, err := files.NewFileInfo(files.FileOptions{ - Fs: d.user.Fs, - Path: "/" + vars["path"], - Modify: d.user.Perm.Modify, - Expand: true, - Checker: d, - }) - if err != nil { - return errToStatus(err), err - } - - setContentDisposition(w, r, file) - - switch file.Type { - case "image": - return handleImagePreview(w, r, file, size) - default: - return http.StatusNotImplemented, fmt.Errorf("can't create preview for %s type", file.Type) - } -}) - -func handleImagePreview(w http.ResponseWriter, r *http.Request, file *files.FileInfo, size string) (int, error) { - format, err := imaging.FormatFromExtension(file.Extension) - if err != nil { - // Unsupported extensions directly return the raw data - if err == imaging.ErrUnsupportedFormat { - return rawFileHandler(w, r, file) +func previewHandler(imgSvc ImgService, fileCache FileCache, enableThumbnails, resizePreview bool) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if !d.user.Perm.Download { + return http.StatusAccepted, nil } + vars := mux.Vars(r) + + previewSize, err := ParsePreviewSize(vars["size"]) + if err != nil { + return http.StatusBadRequest, err + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + // Preview reads its path from mux.Vars, not r.URL.Path, so it does + // not get the canonicalization withUser applies. + Path: slashClean(vars["path"]), + Modify: d.user.Perm.Modify, + Expand: true, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + setContentDisposition(w, r, file) + + switch file.Type { + case "image": + return handleImagePreview(w, r, imgSvc, fileCache, file, previewSize, enableThumbnails, resizePreview) + default: + return http.StatusNotImplemented, fmt.Errorf("can't create preview for %s type", file.Type) + } + }) +} + +func handleImagePreview( + w http.ResponseWriter, + r *http.Request, + imgSvc ImgService, + fileCache FileCache, + file *files.FileInfo, + previewSize PreviewSize, + enableThumbnails, resizePreview bool, +) (int, error) { + if (previewSize == PreviewSizeBig && !resizePreview) || + (previewSize == PreviewSizeThumb && !enableThumbnails) { + return rawFileHandler(w, r, file) + } + + format, err := imgSvc.FormatFromExtension(file.Extension) + // Unsupported extensions directly return the raw data + if errors.Is(err, img.ErrUnsupportedFormat) || format == img.FormatGif { + return rawFileHandler(w, r, file) + } + if err != nil { return errToStatus(err), err } + cacheKey := previewCacheKey(file, previewSize) + resizedImage, ok, err := fileCache.Load(r.Context(), cacheKey) + if err != nil { + return errToStatus(err), err + } + if !ok { + resizedImage, err = createPreview(imgSvc, fileCache, file, previewSize) + if err != nil { + return errToStatus(err), err + } + } + + w.Header().Set("Cache-Control", "private") + http.ServeContent(w, r, file.Name, file.ModTime, bytes.NewReader(resizedImage)) + + return 0, nil +} + +func createPreview(imgSvc ImgService, fileCache FileCache, + file *files.FileInfo, previewSize PreviewSize) ([]byte, error) { fd, err := file.Fs.Open(file.Path) if err != nil { - return errToStatus(err), err + return nil, err } defer fd.Close() - if format == imaging.GIF && size == sizeBig { - if _, err := rawFileHandler(w, r, file); err != nil { //nolint: govet - return errToStatus(err), err - } - return 0, nil - } + var ( + width int + height int + options []img.Option + ) - var imgProcessor imageProcessor - switch size { - case sizeBig: - imgProcessor = func(img image.Image) (image.Image, error) { - return imaging.Fit(img, 1080, 1080, imaging.Lanczos), nil - } - case sizeThumb: - imgProcessor = func(img image.Image) (image.Image, error) { - return imaging.Thumbnail(img, 128, 128, imaging.Box), nil - } + switch previewSize { + case PreviewSizeBig: + width = 1080 + height = 1080 + options = append(options, img.WithMode(img.ResizeModeFit), img.WithQuality(img.QualityMedium)) + case PreviewSizeThumb: + width = 256 + height = 256 + options = append(options, img.WithMode(img.ResizeModeFill), img.WithQuality(img.QualityLow), img.WithFormat(img.FormatJpeg)) default: - return http.StatusBadRequest, fmt.Errorf("unsupported preview size %s", size) + return nil, img.ErrUnsupportedFormat } - img, err := imaging.Decode(fd, imaging.AutoOrientation(true)) - if err != nil { - return errToStatus(err), err + buf := &bytes.Buffer{} + if err := imgSvc.Resize(context.Background(), fd, width, height, buf, options...); err != nil { + return nil, err } - img, err = imgProcessor(img) - if err != nil { - return errToStatus(err), err - } - if imaging.Encode(w, img, format) != nil { - return errToStatus(err), err - } - return 0, nil + + go func() { + cacheKey := previewCacheKey(file, previewSize) + if err := fileCache.Store(context.Background(), cacheKey, buf.Bytes()); err != nil { + fmt.Printf("failed to cache resized image: %v", err) + } + }() + + return buf.Bytes(), nil +} + +func previewCacheKey(f *files.FileInfo, previewSize PreviewSize) string { + return fmt.Sprintf("%x%x%x", f.RealPath(), f.ModTime.Unix(), previewSize) } diff --git a/http/preview_enum.go b/http/preview_enum.go new file mode 100644 index 00000000..2bb1a078 --- /dev/null +++ b/http/preview_enum.go @@ -0,0 +1,100 @@ +// Code generated by go-enum +// DO NOT EDIT! + +package fbhttp + +import ( + "database/sql/driver" + "fmt" + "strings" +) + +const ( + // PreviewSizeThumb is a PreviewSize of type Thumb + PreviewSizeThumb PreviewSize = iota + // PreviewSizeBig is a PreviewSize of type Big + PreviewSizeBig +) + +const _PreviewSizeName = "thumbbig" + +var _PreviewSizeNames = []string{ + _PreviewSizeName[0:5], + _PreviewSizeName[5:8], +} + +// PreviewSizeNames returns a list of possible string values of PreviewSize. +func PreviewSizeNames() []string { + tmp := make([]string, len(_PreviewSizeNames)) + copy(tmp, _PreviewSizeNames) + return tmp +} + +var _PreviewSizeMap = map[PreviewSize]string{ + 0: _PreviewSizeName[0:5], + 1: _PreviewSizeName[5:8], +} + +// String implements the Stringer interface. +func (x PreviewSize) String() string { + if str, ok := _PreviewSizeMap[x]; ok { + return str + } + return fmt.Sprintf("PreviewSize(%d)", x) +} + +var _PreviewSizeValue = map[string]PreviewSize{ + _PreviewSizeName[0:5]: 0, + _PreviewSizeName[5:8]: 1, +} + +// ParsePreviewSize attempts to convert a string to a PreviewSize +func ParsePreviewSize(name string) (PreviewSize, error) { + if x, ok := _PreviewSizeValue[name]; ok { + return x, nil + } + return PreviewSize(0), fmt.Errorf("%s is not a valid PreviewSize, try [%s]", name, strings.Join(_PreviewSizeNames, ", ")) +} + +// MarshalText implements the text marshaller method +func (x PreviewSize) MarshalText() ([]byte, error) { + return []byte(x.String()), nil +} + +// UnmarshalText implements the text unmarshaller method +func (x *PreviewSize) UnmarshalText(text []byte) error { + name := string(text) + tmp, err := ParsePreviewSize(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Scan implements the Scanner interface. +func (x *PreviewSize) Scan(value interface{}) error { + var name string + + switch v := value.(type) { + case string: + name = v + case []byte: + name = string(v) + case nil: + *x = PreviewSize(0) + return nil + } + + tmp, err := ParsePreviewSize(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Value implements the driver Valuer interface. +func (x PreviewSize) Value() (driver.Value, error) { + return x.String(), nil +} diff --git a/http/public.go b/http/public.go index 4467613d..b8fdf52c 100644 --- a/http/public.go +++ b/http/public.go @@ -1,40 +1,99 @@ -package http +package fbhttp import ( + "crypto/subtle" + "errors" "net/http" + "net/url" + "path" + "path/filepath" "strings" "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/share" + "golang.org/x/crypto/bcrypt" ) var withHashFile = func(fn handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - link, err := d.store.Share.GetByHash(r.URL.Path) - if err != nil { - link, err = d.store.Share.GetByHash(ifPathWithName(r)) - if err != nil { - return errToStatus(err), err - } - } - - user, err := d.store.Users.Get(d.server.Root, link.UserID) + id, ifPath := ifPathWithName(r) + link, err := d.store.Share.GetByHash(id) if err != nil { return errToStatus(err), err } + status, err := authenticateShareRequest(r, link) + if status != 0 || err != nil { + return status, err + } + + user, err := d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, link.UserID) + if err != nil { + return errToStatus(err), err + } + + if !user.Perm.Share || !user.Perm.Download { + return http.StatusForbidden, nil + } + d.user = user - file, err := files.NewFileInfo(files.FileOptions{ - Fs: d.user.Fs, - Path: link.Path, - Modify: d.user.Perm.Modify, - Expand: false, - Checker: d, + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: link.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + CalcImgRes: d.server.TypeDetectionByHeader, + Checker: d, + Token: link.Token, }) if err != nil { return errToStatus(err), err } + // share base path. Canonicalized because it roots both the rebased + // filesystem and checkerPrefix below, and a stored path that is not + // "/"-separated would make the two disagree on Windows. + basePath := slashClean(link.Path) + + // file relative path + filePath := "" + + if file.IsDir { + filePath = ifPath + } + + // set fs root to the shared file/folder. Unless external symlinks are + // explicitly allowed, this is a ScopedFs (not a bare BasePathFs) so the + // share is also symlink-confined: a link inside the shared subtree that + // points elsewhere in the owner's scope — outside the share — must not be + // followed. + d.user.Fs = files.NewFs(d.user.Fs, basePath, d.server.FollowExternalSymlinks) + + // the filesystem is now rebased onto basePath, so paths handed to the + // rule checker are relative to it. Resolve them back to the user's + // original scope so deny rules below the share root keep applying. + d.checkerPrefix = basePath + + file, err = files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: filePath, + Modify: d.user.Perm.Modify, + Expand: true, + Checker: d, + Token: link.Token, + }) + if err != nil { + return errToStatus(err), err + } + + if file.IsDir { + // extract name from the last directory in the path + name := filepath.Base(strings.TrimRight(link.Path, string(filepath.Separator))) + file.Name = name + } + d.raw = file return fn(w, r, d) } @@ -42,19 +101,31 @@ var withHashFile = func(fn handleFunc) handleFunc { // ref to https://github.com/filebrowser/filebrowser/pull/727 // `/api/public/dl/MEEuZK-v/file-name.txt` for old browsers to save file with correct name -func ifPathWithName(r *http.Request) string { +func ifPathWithName(r *http.Request) (id, filePath string) { pathElements := strings.Split(r.URL.Path, "/") // prevent maliciously constructed parameters like `/api/public/dl/XZzCDnK2_not_exists_hash_name` // len(pathElements) will be 1, and golang will panic `runtime error: index out of range` - if len(pathElements) < 2 { //nolint: mnd - return r.URL.Path + + switch len(pathElements) { + case 1: + return r.URL.Path, "/" + default: + // Public share routes do not pass through withUser, so canonicalize the + // share-relative path here instead. + return pathElements[0], slashClean(path.Join(pathElements[1:]...)) } - id := pathElements[len(pathElements)-2] - return id } var publicShareHandler = withHashFile(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - return renderJSON(w, r, d.raw) + file := d.raw.(*files.FileInfo) + + if file.IsDir { + file.Sorting = files.Sorting{By: "name", Asc: false} + file.ApplySort() + return renderJSON(w, r, file) + } + + return renderJSON(w, r, file) }) var publicDlHandler = withHashFile(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { @@ -65,3 +136,35 @@ var publicDlHandler = withHashFile(func(w http.ResponseWriter, r *http.Request, return rawDirHandler(w, r, d, file) }) + +func authenticateShareRequest(r *http.Request, l *share.Link) (int, error) { + if l.PasswordHash == "" { + return 0, nil + } + + if subtle.ConstantTimeCompare([]byte(r.URL.Query().Get("token")), []byte(l.Token)) == 1 { + return 0, nil + } + + password := r.Header.Get("X-SHARE-PASSWORD") + password, err := url.QueryUnescape(password) + if err != nil { + return 0, err + } + if password == "" { + return http.StatusUnauthorized, nil + } + if err := bcrypt.CompareHashAndPassword([]byte(l.PasswordHash), []byte(password)); err != nil { + if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) { + return http.StatusUnauthorized, nil + } + return 0, err + } + + return 0, nil +} + +func healthHandler(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(`{"status":"OK"}`)) +} diff --git a/http/public_symlink_test.go b/http/public_symlink_test.go new file mode 100644 index 00000000..0343046e --- /dev/null +++ b/http/public_symlink_test.go @@ -0,0 +1,246 @@ +package fbhttp + +import ( + "archive/zip" + "bytes" + "io" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/asdine/storm/v3" + "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/share" + "github.com/filebrowser/filebrowser/v2/storage" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" + "github.com/spf13/afero" +) + +// symlinkShareStorage builds a storage whose single user is rooted at a real +// on-disk scope containing a public share "/shared" with a symlinked +// descendant "link -> ../private". Skips the test if symlinks are unavailable. +func symlinkShareStorage(t *testing.T) *storage.Storage { + t.Helper() + scope := t.TempDir() + if err := os.MkdirAll(filepath.Join(scope, "shared"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(filepath.Join(scope, "private"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "private", "secret.txt"), []byte("symlink-secret"), 0o600); err != nil { + t.Fatal(err) + } + if err := os.Symlink(filepath.Join(scope, "private"), filepath.Join(scope, "shared", "link")); err != nil { + t.Skipf("cannot create symlink on this platform: %v", err) + } + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := st.Share.Save(&share.Link{Hash: "h", UserID: 1, Path: "/shared"}); err != nil { + t.Fatalf("failed to save share: %v", err) + } + if err := st.Users.Save(&users.User{ + Username: "username", + Password: "pw", + Perm: users.Permissions{Share: true, Download: true}, + }); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := st.Settings.Save(&settings.Settings{Key: []byte("key")}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + st.Users = &customFSUser{ + Store: st.Users, + fs: files.NewScopedFs(afero.NewOsFs(), scope), + } + return st +} + +// Reproduces GHSA-hf77-9m7w-fq8q: a public directory share whose subtree +// contains a symlink to a directory outside the share. Requesting a regular +// file behind that linked ancestor must NOT disclose its contents. +func TestPublicShareSymlinkDescendantDisclosure(t *testing.T) { + cases := map[string]struct { + handler handleFunc + path string + }{ + "direct file download via dl handler": {handler: publicDlHandler, path: "h/link/secret.txt"}, + "share info via share handler": {handler: publicShareHandler, path: "h/link/secret.txt"}, + "listing of linked dir": {handler: publicShareHandler, path: "h/link/"}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + st := symlinkShareStorage(t) + + req := newHTTPRequest(t, func(r *http.Request) { r.URL.Path = tc.path }) + recorder := httptest.NewRecorder() + handler := handle(tc.handler, "", st, &settings.Server{}) + handler.ServeHTTP(recorder, req) + + result := recorder.Result() + defer result.Body.Close() + body, _ := io.ReadAll(result.Body) + + t.Logf("status=%d body=%q", result.StatusCode, string(body)) + if result.StatusCode == http.StatusOK { + t.Errorf("VULNERABLE: leaked path outside share (status 200, body=%q)", string(body)) + } + }) + } +} + +// The listing of the public share root must omit the escaping symlink "link" +// entirely (no target metadata leak). +func TestPublicShareSymlinkListingOmitsEscapingLink(t *testing.T) { + st := symlinkShareStorage(t) + + req := newHTTPRequest(t, func(r *http.Request) { r.URL.Path = "h/" }) + recorder := httptest.NewRecorder() + handler := handle(publicShareHandler, "", st, &settings.Server{}) + handler.ServeHTTP(recorder, req) + + result := recorder.Result() + defer result.Body.Close() + body, _ := io.ReadAll(result.Body) + if result.StatusCode != http.StatusOK { + t.Fatalf("share root listing failed: status=%d body=%q", result.StatusCode, string(body)) + } + if strings.Contains(string(body), "\"link\"") { + t.Errorf("VULNERABLE: listing exposes escaping symlink: %s", string(body)) + } +} + +// With Server.FollowExternalSymlinks enabled (the opt-in for issue #5998), a +// symlink inside a public share that points outside it is followed: the file +// behind it downloads and the link shows up in the share listing. This is the +// inverse of TestPublicShareSymlinkDescendantDisclosure / ...ListingOmitsEscapingLink. +func TestPublicShareSymlinkFollowedWhenEnabled(t *testing.T) { + scope := t.TempDir() + if err := os.MkdirAll(filepath.Join(scope, "shared"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(filepath.Join(scope, "outside"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(scope, "outside", "data.txt"), []byte("payload"), 0o600); err != nil { + t.Fatal(err) + } + if err := os.Symlink(filepath.Join(scope, "outside"), filepath.Join(scope, "shared", "link")); err != nil { + t.Skipf("cannot create symlink on this platform: %v", err) + } + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := st.Share.Save(&share.Link{Hash: "h", UserID: 1, Path: "/shared"}); err != nil { + t.Fatalf("failed to save share: %v", err) + } + if err := st.Users.Save(&users.User{ + Username: "username", + Password: "pw", + Perm: users.Permissions{Share: true, Download: true}, + }); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := st.Settings.Save(&settings.Settings{Key: []byte("key")}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + // Follow-external mode: the user filesystem is a bare BasePathFs. + st.Users = &customFSUser{ + Store: st.Users, + fs: files.NewFs(afero.NewOsFs(), scope, true), + followExternal: true, + } + + srv := &settings.Server{FollowExternalSymlinks: true} + + // The file behind the symlink downloads. + req := newHTTPRequest(t, func(r *http.Request) { r.URL.Path = "h/link/data.txt" }) + recorder := httptest.NewRecorder() + handle(publicDlHandler, "", st, srv).ServeHTTP(recorder, req) + result := recorder.Result() + defer result.Body.Close() + body, _ := io.ReadAll(result.Body) + if result.StatusCode != http.StatusOK { + t.Fatalf("expected to download file behind followed symlink, got status=%d body=%q", result.StatusCode, string(body)) + } + if !strings.Contains(string(body), "payload") { + t.Fatalf("expected payload content, got %q", string(body)) + } + + // The link shows up in the share root listing. + req = newHTTPRequest(t, func(r *http.Request) { r.URL.Path = "h/" }) + recorder = httptest.NewRecorder() + handle(publicShareHandler, "", st, srv).ServeHTTP(recorder, req) + result = recorder.Result() + defer result.Body.Close() + body, _ = io.ReadAll(result.Body) + if result.StatusCode != http.StatusOK { + t.Fatalf("share root listing failed: status=%d body=%q", result.StatusCode, string(body)) + } + if !strings.Contains(string(body), "\"link\"") { + t.Fatalf("expected followed symlink to appear in listing: %s", string(body)) + } +} + +// Reproduces the archive variant of GHSA-hf77-9m7w-fq8q: downloading the whole +// public share as a zip must not pull in files reached through a symlinked +// descendant. +func TestPublicShareSymlinkArchiveDisclosure(t *testing.T) { + st := symlinkShareStorage(t) + + // Request the whole share root as an archive. + req := newHTTPRequest(t, func(r *http.Request) { r.URL.Path = "h/" }) + recorder := httptest.NewRecorder() + handler := handle(publicDlHandler, "", st, &settings.Server{}) + handler.ServeHTTP(recorder, req) + + result := recorder.Result() + defer result.Body.Close() + body, _ := io.ReadAll(result.Body) + if result.StatusCode != http.StatusOK { + t.Fatalf("archive request failed: status=%d body=%q", result.StatusCode, string(body)) + } + + zr, err := zip.NewReader(bytes.NewReader(body), int64(len(body))) + if err != nil { + t.Fatalf("failed to read zip: %v", err) + } + for _, f := range zr.File { + if strings.Contains(f.Name, "secret.txt") { + t.Errorf("VULNERABLE: archive includes file behind symlinked descendant: %q", f.Name) + } + rc, err := f.Open() + if err != nil { + continue + } + content, _ := io.ReadAll(rc) + rc.Close() + if bytes.Contains(content, []byte("symlink-secret")) { + t.Errorf("VULNERABLE: archive entry %q leaks out-of-scope content", f.Name) + } + } +} diff --git a/http/public_test.go b/http/public_test.go new file mode 100644 index 00000000..c728102d --- /dev/null +++ b/http/public_test.go @@ -0,0 +1,292 @@ +package fbhttp + +import ( + "fmt" + "net/http" + "net/http/httptest" + "path/filepath" + "testing" + + "github.com/asdine/storm/v3" + "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/rules" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/share" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" + "github.com/spf13/afero" +) + +func TestPublicShareHandlerAuthentication(t *testing.T) { + t.Parallel() + + const passwordBcrypt = "$2y$10$TFAmdCbyd/mEZDe5fUeZJu.MaJQXRTwdqb/IQV.eTn6dWrF58gCSe" + testCases := map[string]struct { + share *share.Link + req *http.Request + sharePerm bool + downloadPerm bool + expectedStatusCode int + }{ + "Public share, no auth required": { + share: &share.Link{Hash: "h", UserID: 1}, + req: newHTTPRequest(t), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 200, + }, + "Private share, no auth provided, 401": { + share: &share.Link{Hash: "h", UserID: 1, PasswordHash: passwordBcrypt, Token: "123"}, + req: newHTTPRequest(t), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 401, + }, + "Private share, authentication via token": { + share: &share.Link{Hash: "h", UserID: 1, PasswordHash: passwordBcrypt, Token: "123"}, + req: newHTTPRequest(t, func(r *http.Request) { r.URL.RawQuery = "token=123" }), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 200, + }, + "Private share, authentication via invalid token, 401": { + share: &share.Link{Hash: "h", UserID: 1, PasswordHash: passwordBcrypt, Token: "123"}, + req: newHTTPRequest(t, func(r *http.Request) { r.URL.RawQuery = "token=1234" }), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 401, + }, + "Private share, authentication via password": { + share: &share.Link{Hash: "h", UserID: 1, PasswordHash: passwordBcrypt, Token: "123"}, + req: newHTTPRequest(t, func(r *http.Request) { r.Header.Set("X-SHARE-PASSWORD", "password") }), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 200, + }, + "Private share, authentication via invalid password, 401": { + share: &share.Link{Hash: "h", UserID: 1, PasswordHash: passwordBcrypt, Token: "123"}, + req: newHTTPRequest(t, func(r *http.Request) { r.Header.Set("X-SHARE-PASSWORD", "wrong-password") }), + sharePerm: true, + downloadPerm: true, + expectedStatusCode: 401, + }, + "Share owner lost share permission, 403": { + share: &share.Link{Hash: "h", UserID: 1}, + req: newHTTPRequest(t), + sharePerm: false, + downloadPerm: true, + expectedStatusCode: 403, + }, + "Share owner lost download permission, 403": { + share: &share.Link{Hash: "h", UserID: 1}, + req: newHTTPRequest(t), + sharePerm: true, + downloadPerm: false, + expectedStatusCode: 403, + }, + } + + for name, tc := range testCases { + for handlerName, handler := range map[string]handleFunc{"public share handler": publicShareHandler, "public dl handler": publicDlHandler} { + name, tc, handlerName, handler := name, tc, handlerName, handler + t.Run(fmt.Sprintf("%s: %s", handlerName, name), func(t *testing.T) { + t.Parallel() + + dbPath := filepath.Join(t.TempDir(), "db") + db, err := storm.Open(dbPath) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + + t.Cleanup(func() { + if err := db.Close(); err != nil { + t.Errorf("failed to close db: %v", err) + } + }) + + storage, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := storage.Share.Save(tc.share); err != nil { + t.Fatalf("failed to save share: %v", err) + } + if err := storage.Users.Save(&users.User{ + Username: "username", + Password: "pw", + Perm: users.Permissions{ + Share: tc.sharePerm, + Download: tc.downloadPerm, + }, + }); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := storage.Settings.Save(&settings.Settings{Key: []byte("key")}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + + storage.Users = &customFSUser{ + Store: storage.Users, + fs: &afero.MemMapFs{}, + } + + recorder := httptest.NewRecorder() + handler := handle(handler, "", storage, &settings.Server{}) + + handler.ServeHTTP(recorder, tc.req) + result := recorder.Result() + defer result.Body.Close() + if result.StatusCode != tc.expectedStatusCode { + t.Errorf("expected status code %d, got status code %d", tc.expectedStatusCode, result.StatusCode) + } + }) + } + } +} + +// TestPublicShareHandlerRules ensures that owner rules keep applying to paths +// below a shared directory, even though the share rebases the filesystem onto +// that directory. A deny rule relative to the owner's scope must not be +// bypassable by requesting the blocked path through the public share. +func TestPublicShareHandlerRules(t *testing.T) { + t.Parallel() + + testCases := map[string]struct { + handler handleFunc + path string + expectedStatusCode int + }{ + "blocked file via dl handler, 403": { + handler: publicDlHandler, + path: "h/private/secret.txt", + expectedStatusCode: 403, + }, + "blocked dir listing via share handler, 403": { + handler: publicShareHandler, + path: "h/private/", + expectedStatusCode: 403, + }, + "blocked dir download via dl handler, 403": { + handler: publicDlHandler, + path: "h/private/", + expectedStatusCode: 403, + }, + "allowed file via dl handler, 200": { + handler: publicDlHandler, + path: "h/public/readme.txt", + expectedStatusCode: 200, + }, + "allowed dir listing via share handler, 200": { + handler: publicShareHandler, + path: "h/public/", + expectedStatusCode: 200, + }, + } + + for name, tc := range testCases { + name, tc := name, tc + t.Run(name, func(t *testing.T) { + t.Parallel() + + dbPath := filepath.Join(t.TempDir(), "db") + db, err := storm.Open(dbPath) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { + if err := db.Close(); err != nil { + t.Errorf("failed to close db: %v", err) + } + }) + + storage, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := storage.Share.Save(&share.Link{Hash: "h", UserID: 1, Path: "/projects"}); err != nil { + t.Fatalf("failed to save share: %v", err) + } + if err := storage.Users.Save(&users.User{ + Username: "username", + Password: "pw", + Perm: users.Permissions{Share: true, Download: true}, + Rules: []rules.Rule{ + {Allow: false, Path: "/projects/private"}, + }, + }); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := storage.Settings.Save(&settings.Settings{Key: []byte("key")}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + + fs := files.NewScopedFs(afero.NewOsFs(), t.TempDir()) + if err := fs.MkdirAll("/projects/private", 0o755); err != nil { + t.Fatalf("failed to create private dir: %v", err) + } + if err := fs.MkdirAll("/projects/public", 0o755); err != nil { + t.Fatalf("failed to create public dir: %v", err) + } + if err := afero.WriteFile(fs, "/projects/private/secret.txt", []byte("top secret"), 0o600); err != nil { + t.Fatalf("failed to write secret file: %v", err) + } + if err := afero.WriteFile(fs, "/projects/public/readme.txt", []byte("hello"), 0o600); err != nil { + t.Fatalf("failed to write public file: %v", err) + } + + storage.Users = &customFSUser{ + Store: storage.Users, + fs: fs, + } + + req := newHTTPRequest(t, func(r *http.Request) { r.URL.Path = tc.path }) + + recorder := httptest.NewRecorder() + handler := handle(tc.handler, "", storage, &settings.Server{}) + + handler.ServeHTTP(recorder, req) + result := recorder.Result() + defer result.Body.Close() + if result.StatusCode != tc.expectedStatusCode { + t.Errorf("expected status code %d, got status code %d", tc.expectedStatusCode, result.StatusCode) + } + }) + } +} + +func newHTTPRequest(t *testing.T, requestModifiers ...func(*http.Request)) *http.Request { + t.Helper() + r, err := http.NewRequest(http.MethodGet, "h", http.NoBody) + if err != nil { + t.Fatalf("failed to construct request: %v", err) + } + for _, modify := range requestModifiers { + modify(r) + } + return r +} + +type customFSUser struct { + users.Store + fs afero.Fs + // followExternal mirrors Server.FollowExternalSymlinks: when set, the + // provided fs is used as-is (a bare BasePathFs that follows symlinks); + // otherwise it is wrapped in a symlink-confining ScopedFs. + followExternal bool +} + +func (cu *customFSUser) Get(baseScope string, followExternalSymlinks bool, id interface{}) (*users.User, error) { + user, err := cu.Store.Get(baseScope, followExternalSymlinks, id) + if err != nil { + return nil, err + } + // Inject a filesystem rooted at the test's temp scope, standing in for the + // one users.User.Clean would build in production. + if cu.followExternal { + user.Fs = cu.fs + } else { + user.Fs = files.NewScopedFs(cu.fs, "/") + } + + return user, nil +} diff --git a/http/raw.go b/http/raw.go index c3796bef..6824c2e7 100644 --- a/http/raw.go +++ b/http/raw.go @@ -1,17 +1,20 @@ -package http +package fbhttp import ( "errors" + "fmt" + "io/fs" + "log" "net/http" "net/url" + gopath "path" "path/filepath" "strings" - "github.com/hacdias/fileutils" - "github.com/mholt/archiver" - "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/fileutils" "github.com/filebrowser/filebrowser/v2/users" + "github.com/mholt/archives" ) func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]string, error) { @@ -22,12 +25,12 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin fileSlice = append(fileSlice, f.Path) } else { for _, name := range names { - name, err := url.QueryUnescape(strings.Replace(name, "+", "%2B", -1)) //nolint:shadow + name, err := url.QueryUnescape(strings.ReplaceAll(name, "+", "%2B")) if err != nil { return nil, err } - name = fileutils.SlashClean(name) + name = slashClean(name) fileSlice = append(fileSlice, filepath.Join(f.Path, name)) } } @@ -35,24 +38,26 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin return fileSlice, nil } -//nolint: goconst -func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) { - // TODO: use enum +func parseQueryAlgorithm(r *http.Request) (string, archives.Archival, error) { switch r.URL.Query().Get("algo") { case "zip", "true", "": - return ".zip", archiver.NewZip(), nil + return ".zip", archives.Zip{}, nil case "tar": - return ".tar", archiver.NewTar(), nil + return ".tar", archives.Tar{}, nil case "targz": - return ".tar.gz", archiver.NewTarGz(), nil + return ".tar.gz", archives.CompressedArchive{Compression: archives.Gz{}, Archival: archives.Tar{}}, nil case "tarbz2": - return ".tar.bz2", archiver.NewTarBz2(), nil + return ".tar.bz2", archives.CompressedArchive{Compression: archives.Bz2{}, Archival: archives.Tar{}}, nil case "tarxz": - return ".tar.xz", archiver.NewTarXz(), nil + return ".tar.xz", archives.CompressedArchive{Compression: archives.Xz{}, Archival: archives.Tar{}}, nil case "tarlz4": - return ".tar.lz4", archiver.NewTarLz4(), nil + return ".tar.lz4", archives.CompressedArchive{Compression: archives.Lz4{}, Archival: archives.Tar{}}, nil case "tarsz": - return ".tar.sz", archiver.NewTarSz(), nil + return ".tar.sz", archives.CompressedArchive{Compression: archives.Sz{}, Archival: archives.Tar{}}, nil + case "tarbr": + return ".tar.br", archives.CompressedArchive{Compression: archives.Brotli{}, Archival: archives.Tar{}}, nil + case "tarzst": + return ".tar.zst", archives.CompressedArchive{Compression: archives.Zstd{}, Archival: archives.Tar{}}, nil default: return "", nil, errors.New("format not implemented") } @@ -60,10 +65,12 @@ func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) { func setContentDisposition(w http.ResponseWriter, r *http.Request, file *files.FileInfo) { if r.URL.Query().Get("inline") == "true" { - w.Header().Set("Content-Disposition", "inline") + // As per RFC6266 section 4.3 + w.Header().Set("Content-Disposition", "inline; filename*=utf-8''"+url.PathEscape(file.Name)) } else { // As per RFC6266 section 4.3 w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(file.Name)) + w.Header().Set("Content-Type", "application/octet-stream") } } @@ -72,17 +79,23 @@ var rawHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) return http.StatusAccepted, nil } - file, err := files.NewFileInfo(files.FileOptions{ - Fs: d.user.Fs, - Path: r.URL.Path, - Modify: d.user.Perm.Modify, - Expand: false, - Checker: d, + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, }) if err != nil { return errToStatus(err), err } + if files.IsNamedPipe(file.Mode) { + setContentDisposition(w, r, file) + return 0, nil + } + if !file.IsDir { return rawFileHandler(w, r, file) } @@ -90,50 +103,69 @@ var rawHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) return rawDirHandler(w, r, d, file) }) -func addFile(ar archiver.Writer, d *data, path string) error { - // Checks are always done with paths with "/" as path separator. - path = strings.Replace(path, "\\", "/", -1) +func getFiles(d *data, path, commonPath string) ([]archives.FileInfo, error) { if !d.Check(path) { - return nil + return nil, nil } info, err := d.user.Fs.Stat(path) if err != nil { - return err + return nil, err } - file, err := d.user.Fs.Open(path) - if err != nil { - return err - } - defer file.Close() + var archiveFiles []archives.FileInfo - err = ar.Write(archiver.File{ - FileInfo: archiver.FileInfo{ - FileInfo: info, - CustomName: strings.TrimPrefix(path, "/"), - }, - ReadCloser: file, - }) - if err != nil { - return err + if path != commonPath { + nameInArchive := strings.TrimPrefix(path, commonPath) + nameInArchive = strings.TrimPrefix(nameInArchive, string(filepath.Separator)) + nameInArchive = filepath.ToSlash(nameInArchive) + // A backslash is a legal filename character on POSIX hosts, so it can + // reach here verbatim. Rewriting it to the path separator "/" would + // manufacture a traversal sequence (e.g. "..\..\x" -> "../../x") that + // escapes the extraction directory on the victim's machine, while + // leaving it as "\" lets Windows extractors treat it as a separator. + // Neutralize it to an inert character instead of turning it into one. + nameInArchive = strings.ReplaceAll(nameInArchive, "\\", "_") + + // Defense in depth: never emit an archive entry whose path escapes the + // archive root, regardless of how the name was produced. + if cleaned := gopath.Clean("/" + nameInArchive); cleaned != "/"+nameInArchive { + return nil, fmt.Errorf("refusing unsafe archive entry name: %q", nameInArchive) + } + + archiveFiles = append(archiveFiles, archives.FileInfo{ + FileInfo: info, + NameInArchive: nameInArchive, + Open: func() (fs.File, error) { + return d.user.Fs.Open(path) + }, + }) } if info.IsDir() { - names, err := file.Readdirnames(0) + f, err := d.user.Fs.Open(path) if err != nil { - return err + return nil, err + } + defer f.Close() + + names, err := f.Readdirnames(0) + if err != nil { + return nil, err } for _, name := range names { - err = addFile(ar, d, filepath.Join(path, name)) + fPath := filepath.Join(path, name) + subFiles, err := getFiles(d, fPath, commonPath) if err != nil { - return err + log.Printf("Failed to get files from %s: %v", fPath, err) + continue } + archiveFiles = append(archiveFiles, subFiles...) } } - return nil + return archiveFiles, nil } func rawDirHandler(w http.ResponseWriter, r *http.Request, d *data, file *files.FileInfo) (int, error) { @@ -142,30 +174,44 @@ func rawDirHandler(w http.ResponseWriter, r *http.Request, d *data, file *files. return http.StatusInternalServerError, err } - extension, ar, err := parseQueryAlgorithm(r) + extension, archiver, err := parseQueryAlgorithm(r) if err != nil { return http.StatusInternalServerError, err } - name := file.Name - if name == "." || name == "" { - name = "archive" + commonDir := fileutils.CommonPrefix(filepath.Separator, filenames...) + + var allFiles []archives.FileInfo + for _, fname := range filenames { + archiveFiles, err := getFiles(d, fname, commonDir) + if err != nil { + log.Printf("Failed to get files from %s: %v", fname, err) + continue + } + allFiles = append(allFiles, archiveFiles...) + } + + name := filepath.Base(commonDir) + if name == "." || name == "" || name == string(filepath.Separator) { + if file.Name != "" { + name = file.Name + } else { + actual, statErr := file.Fs.Stat(".") + if statErr != nil { + return http.StatusInternalServerError, statErr + } + name = actual.Name() + } + } + if len(filenames) > 1 { + name = "_" + name } name += extension w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(name)) - err = ar.Create(w) - if err != nil { + if err := archiver.Archive(r.Context(), w, allFiles); err != nil { return http.StatusInternalServerError, err } - defer ar.Close() - - for _, fname := range filenames { - err = addFile(ar, d, fname) - if err != nil { - return http.StatusInternalServerError, err - } - } return 0, nil } @@ -178,7 +224,9 @@ func rawFileHandler(w http.ResponseWriter, r *http.Request, file *files.FileInfo defer fd.Close() setContentDisposition(w, r, file) - + w.Header().Add("Content-Security-Policy", `script-src 'none';`) + w.Header().Set("X-Content-Type-Options", "nosniff") + w.Header().Set("Cache-Control", "private") http.ServeContent(w, r, file.Name, file.ModTime, fd) return 0, nil } diff --git a/http/raw_test.go b/http/raw_test.go new file mode 100644 index 00000000..7fe3e916 --- /dev/null +++ b/http/raw_test.go @@ -0,0 +1,144 @@ +package fbhttp + +import ( + "archive/zip" + "bytes" + "net/http" + "net/http/httptest" + "net/url" + "os" + "path" + "path/filepath" + "strings" + "testing" + + "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +// Regression for the archive backslash-to-slash zip-slip (GHSA-83xp-526h-j3ww): +// a single in-scope file whose name contains backslashes is a legal POSIX +// filename, not a traversal. The archive builder must never rewrite "\" into the +// path separator "/", which would manufacture an entry like "../../evil.sh" that +// escapes the extraction directory on the downloader's machine. +func TestRawArchiveDoesNotManufactureTraversal(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(filepath.Join(userScope, "ziptest"), 0o755); err != nil { + t.Fatal(err) + } + + // One legal Linux/macOS filename whose bytes include backslashes. It does not + // traverse on the server; it only becomes "../../evil.sh" if the builder + // turns "\" into "/". + planted := filepath.Join(userScope, "ziptest", "..\\..\\evil.sh") + if err := os.WriteFile(planted, []byte("#!/bin/sh\necho PWNED"), 0o644); err != nil { + t.Skipf("cannot create backslash-named file: %v", err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Download: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + req, _ := http.NewRequest(http.MethodGet, "/ziptest?algo=zip", http.NoBody) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(rawHandler, "", st, &settings.Server{}).ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d body=%q", rec.Code, rec.Body.String()) + } + + zr, err := zip.NewReader(bytes.NewReader(rec.Body.Bytes()), int64(rec.Body.Len())) + if err != nil { + t.Fatalf("failed to read zip: %v", err) + } + if len(zr.File) == 0 { + t.Fatal("archive has no entries") + } + + for _, f := range zr.File { + // The entry must be a normalized, root-relative path: no ".." segments + // and no leading "/". Note a name may legitimately contain ".." as part of + // a single filename (e.g. ".._.._evil.sh"), which Clean leaves untouched — + // so compare against the normalized form rather than searching for "..". + if strings.HasPrefix(f.Name, "/") || path.Clean("/"+f.Name) != "/"+f.Name { + t.Errorf("VULNERABLE: archive entry escapes root: %q", f.Name) + } + } +} + +func TestSetContentDisposition(t *testing.T) { + t.Parallel() + + testCases := map[string]struct { + filename string + inline bool + expected string + }{ + "inline simple filename": { + filename: "document.pdf", + inline: true, + expected: "inline; filename*=utf-8''" + url.PathEscape("document.pdf"), + }, + "attachment simple filename": { + filename: "document.pdf", + inline: false, + expected: "attachment; filename*=utf-8''" + url.PathEscape("document.pdf"), + }, + "inline non-ASCII filename": { + filename: "日本語.txt", + inline: true, + expected: "inline; filename*=utf-8''" + url.PathEscape("日本語.txt"), + }, + "attachment non-ASCII filename": { + filename: "日本語.txt", + inline: false, + expected: "attachment; filename*=utf-8''" + url.PathEscape("日本語.txt"), + }, + "inline filename with spaces": { + filename: "my file.txt", + inline: true, + expected: "inline; filename*=utf-8''" + url.PathEscape("my file.txt"), + }, + "attachment filename with spaces": { + filename: "my file.txt", + inline: false, + expected: "attachment; filename*=utf-8''" + url.PathEscape("my file.txt"), + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + t.Parallel() + + recorder := httptest.NewRecorder() + req, err := http.NewRequest(http.MethodGet, "/test", http.NoBody) + if err != nil { + t.Fatalf("failed to create request: %v", err) + } + if tc.inline { + req.URL.RawQuery = "inline=true" + } + + file := &files.FileInfo{Name: tc.filename} + + setContentDisposition(recorder, req, file) + + got := recorder.Header().Get("Content-Disposition") + if got != tc.expected { + t.Errorf("Content-Disposition = %q, want %q", got, tc.expected) + } + + contentType := recorder.Header().Get("Content-Type") + if tc.inline && contentType != "" { + t.Errorf("Content-Type = %q, want empty", contentType) + } + if !tc.inline && contentType != "application/octet-stream" { + t.Errorf("Content-Type = %q, want application/octet-stream", contentType) + } + }) + } +} diff --git a/http/resource.go b/http/resource.go index 95224083..d1f7defe 100644 --- a/http/resource.go +++ b/http/resource.go @@ -1,41 +1,78 @@ -package http +package fbhttp import ( + "context" + "errors" "fmt" "io" - "io/ioutil" + "io/fs" + "log" "net/http" "net/url" "os" + "path" "path/filepath" "strings" + "time" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/fileutils" + "github.com/shirou/gopsutil/v4/disk" + "github.com/spf13/afero" ) var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - file, err := files.NewFileInfo(files.FileOptions{ - Fs: d.user.Fs, - Path: r.URL.Path, - Modify: d.user.Perm.Modify, - Expand: true, - Checker: d, + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: true, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + Content: d.user.Perm.Download, }) if err != nil { return errToStatus(err), err } + encoding := r.Header.Get("X-Encoding") if file.IsDir { - file.Listing.Sorting = d.user.Sorting - file.Listing.ApplySort() + file.Sorting = d.user.Sorting + file.ApplySort() return renderJSON(w, r, file) + } else if encoding == "true" { + if !d.user.Perm.Download { + return http.StatusAccepted, nil + } + if file.Type != "text" { + return renderJSON(w, r, file) + } + + f, err := d.user.Fs.Open(r.URL.Path) + if err != nil { + return errToStatus(err), err + } + defer f.Close() + + data, err := io.ReadAll(f) + if err != nil { + return http.StatusInternalServerError, err + } + + w.Header().Set("Content-Type", "application/octet-stream") + w.WriteHeader(http.StatusOK) + _, err = w.Write(data) + return 0, err } if checksum := r.URL.Query().Get("checksum"); checksum != "" { + if !d.user.Perm.Download { + return http.StatusAccepted, nil + } + err := file.Checksum(checksum) - if err == errors.ErrInvalidOption { + if errors.Is(err, fberrors.ErrInvalidOption) { return http.StatusBadRequest, nil } else if err != nil { return http.StatusInternalServerError, err @@ -48,119 +85,458 @@ var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d return renderJSON(w, r, file) }) -var resourceDeleteHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - if r.URL.Path == "/" || !d.user.Perm.Delete { - return http.StatusForbidden, nil - } +func resourceDeleteHandler(fileCache FileCache) handleFunc { + return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { + if r.URL.Path == "/" || !d.user.Perm.Delete { + return http.StatusForbidden, nil + } - err := d.RunHook(func() error { - return d.user.Fs.RemoveAll(r.URL.Path) - }, "delete", r.URL.Path, "", d.user) + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + if err = checkDescendants(d, r.URL.Path, ""); err != nil { + return errToStatus(err), err + } + + err = d.store.Share.DeleteWithPathPrefix(file.Path, d.user.ID) + if err != nil { + log.Printf("WARNING: Error(s) occurred while deleting associated shares with file: %s", err) + } + + // delete thumbnails + err = delThumbs(r.Context(), fileCache, file) + if err != nil { + return errToStatus(err), err + } + + err = d.RunHook(func() error { + return d.user.Fs.RemoveAll(r.URL.Path) + }, "delete", r.URL.Path, "", d.user) + + if err != nil { + return errToStatus(err), err + } + + return http.StatusNoContent, nil + }) +} + +func resourcePostHandler(fileCache FileCache) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if !d.user.Perm.Create || !d.Check(r.URL.Path) { + return http.StatusForbidden, nil + } + + // Directories creation on POST. + if strings.HasSuffix(r.URL.Path, "/") { + err := d.RunHook(func() error { + return d.user.Fs.MkdirAll(r.URL.Path, d.settings.DirMode) + }, "upload", r.URL.Path, "", d.user) + return errToStatus(err), err + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err == nil { + if r.URL.Query().Get("override") != "true" { + return http.StatusConflict, nil + } + + // Permission for overwriting the file + if !d.user.Perm.Modify { + return http.StatusForbidden, nil + } + + err = delThumbs(r.Context(), fileCache, file) + if err != nil { + return errToStatus(err), err + } + } + + err = d.RunHook(func() error { + info, writeErr := writeFile(d.user.Fs, r.URL.Path, r.Body, d.settings.FileMode, d.settings.DirMode) + if writeErr != nil { + return writeErr + } + + etag := fmt.Sprintf(`"%x%x"`, info.ModTime().UnixNano(), info.Size()) + w.Header().Set("ETag", etag) + return nil + }, "upload", r.URL.Path, "", d.user) + + if err != nil { + _ = d.user.Fs.RemoveAll(r.URL.Path) + } - if err != nil { return errToStatus(err), err - } + }) +} - return http.StatusOK, nil -}) - -var resourcePostPutHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - if !d.user.Perm.Create && r.Method == http.MethodPost { +var resourcePutHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if !d.user.Perm.Modify || !d.Check(r.URL.Path) { return http.StatusForbidden, nil } - if !d.user.Perm.Modify && r.Method == http.MethodPut { - return http.StatusForbidden, nil - } - - defer func() { - _, _ = io.Copy(ioutil.Discard, r.Body) - }() - - // For directories, only allow POST for creation. + // Only allow PUT for files. if strings.HasSuffix(r.URL.Path, "/") { - if r.Method == http.MethodPut { - return http.StatusMethodNotAllowed, nil - } - - err := d.user.Fs.MkdirAll(r.URL.Path, 0775) - return errToStatus(err), err + return http.StatusMethodNotAllowed, nil } - if r.Method == http.MethodPost && r.URL.Query().Get("override") != "true" { - if _, err := d.user.Fs.Stat(r.URL.Path); err == nil { - return http.StatusConflict, nil - } + exists, err := afero.Exists(d.user.Fs, r.URL.Path) + if err != nil { + return http.StatusInternalServerError, err + } + if !exists { + return http.StatusNotFound, nil } - action := "upload" - if r.Method == http.MethodPut { - action = "save" - } - - err := d.RunHook(func() error { - dir, _ := filepath.Split(r.URL.Path) - err := d.user.Fs.MkdirAll(dir, 0775) - if err != nil { - return err - } - - file, err := d.user.Fs.OpenFile(r.URL.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) - if err != nil { - return err - } - defer file.Close() - - _, err = io.Copy(file, r.Body) - if err != nil { - return err - } - - // Gets the info about the file. - info, err := file.Stat() - if err != nil { - return err + err = d.RunHook(func() error { + info, writeErr := writeFile(d.user.Fs, r.URL.Path, r.Body, d.settings.FileMode, d.settings.DirMode) + if writeErr != nil { + return writeErr } etag := fmt.Sprintf(`"%x%x"`, info.ModTime().UnixNano(), info.Size()) w.Header().Set("ETag", etag) return nil - }, action, r.URL.Path, "", d.user) + }, "save", r.URL.Path, "", d.user) return errToStatus(err), err }) -var resourcePatchHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - src := r.URL.Path - dst := r.URL.Query().Get("destination") - action := r.URL.Query().Get("action") - dst, err := url.QueryUnescape(dst) +func resourcePatchHandler(fileCache FileCache) handleFunc { + return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { + src := r.URL.Path + dst := r.URL.Query().Get("destination") + action := r.URL.Query().Get("action") + dst, err := url.QueryUnescape(dst) + dst = slashClean(dst) + src = slashClean(src) + if !d.Check(src) || !d.Check(dst) { + return http.StatusForbidden, nil + } + if err != nil { + return errToStatus(err), err + } + if dst == "/" || src == "/" { + return http.StatusForbidden, nil + } + err = checkParent(src, dst) + if err != nil { + return http.StatusBadRequest, err + } + + srcInfo, _ := d.user.Fs.Stat(src) + dstInfo, _ := d.user.Fs.Stat(dst) + same := os.SameFile(srcInfo, dstInfo) + + if action != "rename" || !same { + override := r.URL.Query().Get("override") == "true" + rename := r.URL.Query().Get("rename") == "true" + if !override && !rename { + if _, err = d.user.Fs.Stat(dst); err == nil { + return http.StatusConflict, nil + } + } + if rename { + dst = addVersionSuffix(dst, d.user.Fs) + } + + if override && !d.user.Perm.Modify { + return http.StatusForbidden, nil + } + } + + if err = checkDescendants(d, src, dst); err != nil { + return errToStatus(err), err + } + + err = d.RunHook(func() error { + return patchAction(r.Context(), action, src, dst, d, fileCache) + }, action, src, dst, d.user) + + return errToStatus(err), err + }) +} + +// checkDescendants reports an error if the rules deny any path inside the src +// tree or, when dst is not empty, the location that tree would land on. The +// handlers only authorize the root of the operation, but copy, rename and +// delete then recurse through the whole subtree, so a rule denying a descendant +// of an allowed directory would be bypassed by operating on the parent instead. +func checkDescendants(d *data, src, dst string) error { + if len(d.settings.Rules) == 0 && len(d.user.Rules) == 0 { + return nil + } + + return afero.Walk(d.user.Fs, src, func(fPath string, _ os.FileInfo, err error) error { + if err != nil { + return err + } + + if !d.CheckRules(fPath) { + return fberrors.ErrPermissionDenied + } + + if dst == "" { + return nil + } + + rel, err := filepath.Rel(src, fPath) + if err != nil { + return err + } + + if !d.CheckRules(filepath.Join(dst, rel)) { + return fberrors.ErrPermissionDenied + } + + return nil + }) +} + +func checkParent(src, dst string) error { + rel, err := filepath.Rel(src, dst) + if err != nil { + return err + } + + rel = filepath.ToSlash(rel) + if !strings.HasPrefix(rel, "../") && rel != ".." && rel != "." { + return fberrors.ErrSourceIsParent + } + + return nil +} + +func addVersionSuffix(source string, afs afero.Fs) string { + counter := 1 + dir, name := path.Split(source) + ext := filepath.Ext(name) + base := strings.TrimSuffix(name, ext) + + for { + if _, err := afs.Stat(source); err != nil { + break + } + renamed := fmt.Sprintf("%s(%d)%s", base, counter, ext) + source = path.Join(dir, renamed) + counter++ + } + + return source +} + +func writeFile(afs afero.Fs, dst string, in io.Reader, fileMode, dirMode fs.FileMode) (os.FileInfo, error) { + dir, _ := path.Split(dst) + err := afs.MkdirAll(dir, dirMode) + if err != nil { + return nil, err + } + + file, err := afs.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileMode) + if err != nil { + return nil, err + } + defer file.Close() + + _, err = io.Copy(file, in) + if err != nil { + return nil, err + } + + // Sync the file to ensure all data is written to storage. + // to prevent file corruption. + if err := file.Sync(); err != nil { + return nil, err + } + + // Gets the info about the file. + info, err := file.Stat() + if err != nil { + return nil, err + } + + return info, nil +} + +func delThumbs(ctx context.Context, fileCache FileCache, file *files.FileInfo) error { + for _, previewSizeName := range PreviewSizeNames() { + size, _ := ParsePreviewSize(previewSizeName) + if err := fileCache.Delete(ctx, previewCacheKey(file, size)); err != nil { + return err + } + } + + return nil +} + +func patchAction(ctx context.Context, action, src, dst string, d *data, fileCache FileCache) error { + switch action { + case "copy": + if !d.user.Perm.Create { + return fberrors.ErrPermissionDenied + } + + return fileutils.Copy(d.user.Fs, src, dst, d.settings.FileMode, d.settings.DirMode) + case "rename": + if !d.user.Perm.Rename { + return fberrors.ErrPermissionDenied + } + src = path.Clean("/" + src) + dst = path.Clean("/" + dst) + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: src, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: false, + Checker: d, + }) + if err != nil { + return err + } + + // delete thumbnails + err = delThumbs(ctx, fileCache, file) + if err != nil { + return err + } + + return fileutils.MoveFile(d.user.Fs, src, dst, d.settings.FileMode, d.settings.DirMode) + default: + return fmt.Errorf("unsupported action %s: %w", action, fberrors.ErrInvalidRequestParams) + } +} + +// RecursiveEntry is a single file/directory entry returned by the recursive listing endpoint. +type RecursiveEntry struct { + Path string `json:"path"` + Name string `json:"name"` + Size int64 `json:"size"` + ModTime time.Time `json:"modified"` + IsDir bool `json:"isDir"` +} + +// resourceGetRecursiveHandler returns a flat list of every file and directory +// under the requested path, walking the tree recursively on the server side +// so the client only needs a single HTTP call. +var resourceGetRecursiveHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + rootPath := r.URL.Path + if rootPath == "" { + rootPath = "/" + } + + // Make sure the root itself exists and is a directory. + info, err := d.user.Fs.Stat(rootPath) if err != nil { return errToStatus(err), err } - - if dst == "/" || src == "/" { - return http.StatusForbidden, nil + if !info.IsDir() { + return http.StatusBadRequest, fmt.Errorf("path is not a directory") } - err = d.RunHook(func() error { - switch action { - // TODO: use enum - case "copy": - if !d.user.Perm.Create { - return errors.ErrPermissionDenied - } - return fileutils.Copy(d.user.Fs, src, dst) - case "rename": - if !d.user.Perm.Rename { - return errors.ErrPermissionDenied - } - return d.user.Fs.Rename(src, dst) - default: - return fmt.Errorf("unsupported action %s: %w", action, errors.ErrInvalidRequestParams) - } - }, action, src, dst, d.user) + entries := make([]RecursiveEntry, 0) - return errToStatus(err), err + err = afero.Walk(d.user.Fs, rootPath, func(fPath string, info os.FileInfo, err error) error { + // Walking a large tree is expensive, and every entry is stat'ed through + // the scoped filesystem. Stop as soon as nobody is waiting for the + // answer instead of finishing the walk for a client that has gone. + if ctxErr := r.Context().Err(); ctxErr != nil { + return ctxErr + } + + if err != nil { + return nil // skip entries we cannot read + } + + // Skip the root directory itself. + if fPath == rootPath { + return nil + } + + // Respect user rules. + if !d.Check(fPath) { + if info.IsDir() { + return filepath.SkipDir + } + return nil + } + + entries = append(entries, RecursiveEntry{ + // afero.Walk joins paths with the OS separator, so on Windows fPath + // uses backslashes. The web API contract is forward slashes, so + // normalize it here (mirrors search/search.go). + Path: filepath.ToSlash(fPath), + Name: info.Name(), + Size: info.Size(), + ModTime: info.ModTime(), + IsDir: info.IsDir(), + }) + return nil + }) + if err != nil { + // Once the request is done there is nobody left to answer, whatever the + // walk reported. Asking for a status here only produces a second header + // write on a connection that is already gone. + if r.Context().Err() != nil { + return 0, err + } + return http.StatusInternalServerError, err + } + + return renderJSON(w, r, entries) +}) + +type DiskUsageResponse struct { + Total uint64 `json:"total"` + Used uint64 `json:"used"` +} + +var diskUsage = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: false, + Checker: d, + Content: false, + }) + if err != nil { + return errToStatus(err), err + } + fPath := file.RealPath() + if !file.IsDir { + return renderJSON(w, r, &DiskUsageResponse{ + Total: 0, + Used: 0, + }) + } + + usage, err := disk.UsageWithContext(r.Context(), fPath) + if err != nil { + return errToStatus(err), err + } + return renderJSON(w, r, &DiskUsageResponse{ + Total: usage.Total, + Used: usage.Used, + }) }) diff --git a/http/resource_checksum_test.go b/http/resource_checksum_test.go new file mode 100644 index 00000000..67f5fab5 --- /dev/null +++ b/http/resource_checksum_test.go @@ -0,0 +1,57 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +// The ?checksum= branch reads the whole file to compute a digest, so it must be +// gated behind Perm.Download like the other read paths. A user without download +// permission must not obtain a digest of a file they cannot download. +func TestResourceChecksumRequiresDownloadPermission(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(userScope, 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(userScope, "secret.txt"), []byte("classified"), 0o644); err != nil { + t.Fatal(err) + } + key := []byte("test-signing-key") + + get := func(t *testing.T, perm users.Permissions) *httptest.ResponseRecorder { + st := scopedUserStorage(t, userScope, perm, key) + req, _ := http.NewRequest(http.MethodGet, "/secret.txt?checksum=sha256", http.NoBody) + req.Header.Set("X-Auth", signToken(t, perm, key)) + rec := httptest.NewRecorder() + handle(resourceGetHandler, "", st, &settings.Server{}).ServeHTTP(rec, req) + return rec + } + + t.Run("denied without download permission", func(t *testing.T) { + rec := get(t, users.Permissions{}) + if rec.Code != http.StatusAccepted { + t.Fatalf("expected 202, got %d body=%q", rec.Code, rec.Body.String()) + } + if strings.Contains(strings.ToLower(rec.Body.String()), "checksum") { + t.Fatalf("digest leaked without download permission: %q", rec.Body.String()) + } + }) + + t.Run("allowed with download permission", func(t *testing.T) { + rec := get(t, users.Permissions{Download: true}) + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d body=%q", rec.Code, rec.Body.String()) + } + if !strings.Contains(rec.Body.String(), "checksums") { + t.Fatalf("expected a checksum in the response, got %q", rec.Body.String()) + } + }) +} diff --git a/http/resource_recursive_test.go b/http/resource_recursive_test.go new file mode 100644 index 00000000..4de6dbe6 --- /dev/null +++ b/http/resource_recursive_test.go @@ -0,0 +1,81 @@ +package fbhttp + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +func recursiveTestHandler(t *testing.T, userScope string) (http.Handler, string) { + t.Helper() + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true, Download: true} + st := scopedUserStorage(t, userScope, perm, key) + + return handle(resourceGetRecursiveHandler, "/api/resources/recursive", st, &settings.Server{}), signToken(t, perm, key) +} + +func TestResourceRecursiveListsTree(t *testing.T) { + userScope := t.TempDir() + if err := os.MkdirAll(filepath.Join(userScope, "target", "nested"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(userScope, "target", "nested", "file.txt"), []byte("hi"), 0o600); err != nil { + t.Fatal(err) + } + + handler, token := recursiveTestHandler(t, userScope) + + req, _ := http.NewRequest(http.MethodGet, "/api/resources/recursive/target", http.NoBody) + req.Header.Set("X-Auth", token) + rec := httptest.NewRecorder() + handler.ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("status = %d body = %q", rec.Code, rec.Body.String()) + } + + var entries []RecursiveEntry + if err := json.Unmarshal(rec.Body.Bytes(), &entries); err != nil { + t.Fatalf("decode response: %v", err) + } + if len(entries) != 2 { + t.Fatalf("got %d entries, want 2: %+v", len(entries), entries) + } +} + +// Walking the tree stats every entry through the scoped filesystem, which is +// expensive on a large destination. When the client has already hung up there +// is nothing to answer, so the walk must stop instead of running to completion +// and then reporting a write failure as a 500. +func TestResourceRecursiveStopsWhenClientDisconnects(t *testing.T) { + userScope := t.TempDir() + if err := os.MkdirAll(filepath.Join(userScope, "target"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(userScope, "target", "file.txt"), []byte("hi"), 0o600); err != nil { + t.Fatal(err) + } + + handler, token := recursiveTestHandler(t, userScope) + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + req, _ := http.NewRequestWithContext(ctx, http.MethodGet, "/api/resources/recursive/target", http.NoBody) + req.Header.Set("X-Auth", token) + rec := httptest.NewRecorder() + handler.ServeHTTP(rec, req) + + if body := rec.Body.String(); body != "" { + t.Fatalf("wrote a response for a disconnected client: %q", body) + } +} diff --git a/http/resource_test.go b/http/resource_test.go new file mode 100644 index 00000000..5a29518d --- /dev/null +++ b/http/resource_test.go @@ -0,0 +1,259 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/asdine/storm/v3" + "github.com/golang-jwt/jwt/v5" + "github.com/spf13/afero" + + "github.com/filebrowser/filebrowser/v2/diskcache" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" +) + +func TestResourceCopyDoesNotDereferenceEscapingSymlink(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(filepath.Join(userScope, "srcdir"), 0o755); err != nil { + t.Fatal(err) + } + + // An ordinary in-scope file, to prove a normal copy still works. + if err := os.WriteFile(filepath.Join(userScope, "srcdir", "normal.txt"), []byte("in-scope"), 0o644); err != nil { + t.Fatal(err) + } + + // The secret living outside the user's scope. + secret := filepath.Join(root, "secret.txt") + if err := os.WriteFile(secret, []byte("OUT-OF-SCOPE-SECRET"), 0o644); err != nil { + t.Fatal(err) + } + + // An escaping symlink planted inside the user's scope (out-of-band, as the + // advisory's preconditions describe). + if err := os.Symlink(secret, filepath.Join(userScope, "srcdir", "link.txt")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + key := []byte("test-signing-key") + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + perm := users.Permissions{Create: true, Modify: true, Download: true, Rename: true} + if err := st.Users.Save(&users.User{Username: "u", Password: "pw", Perm: perm}); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := st.Settings.Save(&settings.Settings{Key: key}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + // The user's scope is the real on-disk userScope. customFSUser.Get wraps it + // in a ScopedFs, mirroring production (users.User init). + st.Users = &customFSUser{ + Store: st.Users, + fs: afero.NewBasePathFs(afero.NewOsFs(), userScope), + } + + signed := signToken(t, perm, key) + + t.Run("direct raw read is forbidden", func(t *testing.T) { + req, _ := http.NewRequest(http.MethodGet, "/srcdir/link.txt", http.NoBody) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(rawHandler, "", st, &settings.Server{}).ServeHTTP(rec, req) + if rec.Code == http.StatusOK { + t.Fatalf("VULNERABLE: direct raw read of escaping symlink returned 200, body=%q", rec.Body.String()) + } + }) + + t.Run("recursive copy does not exfiltrate", func(t *testing.T) { + req, _ := http.NewRequest(http.MethodPatch, "/srcdir/", http.NoBody) + q := req.URL.Query() + q.Set("action", "copy") + q.Set("destination", "/dstdir") + req.URL.RawQuery = q.Encode() + req.Header.Set("X-Auth", signed) + + rec := httptest.NewRecorder() + handle(resourcePatchHandler(diskcache.NewNoOp()), "", st, &settings.Server{}).ServeHTTP(rec, req) + t.Logf("copy status=%d body=%q", rec.Code, rec.Body.String()) + + // The escaping symlink's target content must never appear in scope. + leaked := filepath.Join(userScope, "dstdir", "link.txt") + if data, readErr := os.ReadFile(leaked); readErr == nil { + t.Fatalf("VULNERABLE: out-of-scope content landed in scope at %s: %q", leaked, string(data)) + } + }) +} + +func signToken(t *testing.T, perm users.Permissions, key []byte) string { + t.Helper() + claims := &authToken{ + User: userInfo{ID: 1, Username: "u", Perm: perm}, + RegisteredClaims: jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(time.Now().Add(-time.Minute)), + ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)), + }, + } + signed, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(key) + if err != nil { + t.Fatalf("failed to sign token: %v", err) + } + return signed +} + +// scopedUserStorage returns a storage whose single user (ID 1) is scoped to +// userScope through a symlink-confining ScopedFs (via customFSUser), mirroring +// production. Used by the symlink scope-escape regression tests below. +func scopedUserStorage(t *testing.T, userScope string, perm users.Permissions, key []byte) *storage.Storage { + t.Helper() + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := st.Users.Save(&users.User{Username: "u", Password: "pw", Perm: perm}); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := st.Settings.Save(&settings.Settings{Key: key}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + st.Users = &customFSUser{ + Store: st.Users, + fs: afero.NewBasePathFs(afero.NewOsFs(), userScope), + } + return st +} + +// Regression for the dangling-symlink write escape (GHSA-8wc8-hf36-mjh9 / +// GHSA-fh54-6rfh-r8f3): POSTing to an in-scope dangling symlink whose target is +// outside the scope must not dereference the link to create the out-of-scope +// file. +func TestResourcePostRejectsDanglingSymlinkWriteEscape(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + outside := filepath.Join(root, "outside") + for _, d := range []string{userScope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + // A dangling symlink inside the scope pointing at a not-yet-existing file + // outside it (planted out-of-band, per the advisory preconditions). + outsideTarget := filepath.Join(outside, "created.txt") + if err := os.Symlink(outsideTarget, filepath.Join(userScope, "evil")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + req, _ := http.NewRequest(http.MethodPost, "/evil?override=true", strings.NewReader("http-outside")) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(resourcePostHandler(diskcache.NewNoOp()), "", st, &settings.Server{}).ServeHTTP(rec, req) + + if _, statErr := os.Stat(outsideTarget); statErr == nil { + data, _ := os.ReadFile(outsideTarget) + t.Fatalf("VULNERABLE: out-of-scope file created via dangling symlink (status=%d, content=%q)", rec.Code, string(data)) + } + if rec.Code != http.StatusForbidden { + t.Errorf("expected 403, got %d body=%q", rec.Code, rec.Body.String()) + } +} + +// Regression for the symlink-following delete escape (GHSA-hq4g-mpch-f9vp / +// GHSA-fmm7-x4gx-8jhr): a Create-only user POSTing to a child of an escaping +// symlinked directory must not delete the out-of-scope target through the +// failed-upload cleanup RemoveAll. +func TestResourcePostCleanupDoesNotDeleteThroughSymlink(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + outside := filepath.Join(root, "outside") + for _, d := range []string{userScope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + victim := filepath.Join(outside, "victim.txt") + if err := os.WriteFile(victim, []byte("keep"), 0o644); err != nil { + t.Fatal(err) + } + // An escaping directory symlink inside the scope (planted out-of-band). + if err := os.Symlink(outside, filepath.Join(userScope, "link")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + key := []byte("test-signing-key") + // Create-only: Perm.Delete is deliberately false — the bug must not need it. + perm := users.Permissions{Create: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + req, _ := http.NewRequest(http.MethodPost, "/link/victim.txt", strings.NewReader("x")) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(resourcePostHandler(diskcache.NewNoOp()), "", st, &settings.Server{}).ServeHTTP(rec, req) + + if _, statErr := os.Stat(victim); statErr != nil { + t.Fatalf("VULNERABLE: out-of-scope victim.txt deleted by cleanup RemoveAll (status=%d): %v", rec.Code, statErr) + } +} + +func TestResourcePostRunsUploadHooksForDirectories(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(userScope, 0o755); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true} + st := scopedUserStorage(t, userScope, perm, key) + if err := st.Settings.Save(&settings.Settings{ + Key: key, + Commands: map[string][]string{ + "after_upload": {"filebrowser-hook-command-that-does-not-exist"}, + }, + }); err != nil { + t.Fatal(err) + } + + req, _ := http.NewRequest(http.MethodPost, "/created/", http.NoBody) + req.Header.Set("X-Auth", signToken(t, perm, key)) + rec := httptest.NewRecorder() + handle(resourcePostHandler(diskcache.NewNoOp()), "", st, &settings.Server{EnableExec: true}).ServeHTTP(rec, req) + + // A missing after_upload command makes the request fail only if the hook ran. + // It avoids a platform-specific helper executable while still exercising the + // same path the web UI uses for directory uploads. + if rec.Code != http.StatusInternalServerError { + t.Fatalf("expected directory upload hook failure to return 500, got %d body=%q", rec.Code, rec.Body.String()) + } + if _, err := os.Stat(filepath.Join(userScope, "created")); err != nil { + t.Fatalf("expected directory to be created before its after hook, got %v", err) + } +} diff --git a/http/rules_path_test.go b/http/rules_path_test.go new file mode 100644 index 00000000..d1b2905a --- /dev/null +++ b/http/rules_path_test.go @@ -0,0 +1,139 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/filebrowser/filebrowser/v2/diskcache" + "github.com/filebrowser/filebrowser/v2/rules" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage" + "github.com/filebrowser/filebrowser/v2/users" +) + +// denyRuleStorage builds a scoped storage whose global settings deny denyPath. +func denyRuleStorage(t *testing.T, userScope, denyPath string, perm users.Permissions, key []byte) *storage.Storage { + t.Helper() + st := scopedUserStorage(t, userScope, perm, key) + if err := st.Settings.Save(&settings.Settings{ + Key: key, + Rules: []rules.Rule{{Path: denyPath, Allow: false}}, + }); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + return st +} + +// Regression for GHSA-fgm5-pw99-w2p7: on a case-insensitive filesystem +// /Secret.txt and /secret.TXT name the same file, so a deny rule for one must +// cover the other. The rule check runs before any filesystem access, so the 403 +// is asserted on every platform; the flag is what does the work, which the +// case-sensitive half of the test pins down. +func TestRuleDeniesCaseVariantWhenFsIsCaseInsensitive(t *testing.T) { + userScope := t.TempDir() + if err := os.WriteFile(filepath.Join(userScope, "Secret.txt"), []byte("SECRET"), 0o644); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Download: true} + st := denyRuleStorage(t, userScope, "/Secret.txt", perm, key) + signed := signToken(t, perm, key) + + get := func(path string, caseInsensitive bool) *httptest.ResponseRecorder { + req, _ := http.NewRequest(http.MethodGet, path, http.NoBody) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(rawHandler, "", st, &settings.Server{CaseInsensitiveFs: caseInsensitive}).ServeHTTP(rec, req) + return rec + } + + t.Run("canonical path is denied either way", func(t *testing.T) { + for _, caseInsensitive := range []bool{false, true} { + if rec := get("/Secret.txt", caseInsensitive); rec.Code != http.StatusForbidden { + t.Errorf("GET /Secret.txt (caseInsensitive=%v) = %d; want 403", caseInsensitive, rec.Code) + } + } + }) + + t.Run("case variant is denied on a case-insensitive filesystem", func(t *testing.T) { + if rec := get("/secret.TXT", true); rec.Code != http.StatusForbidden { + t.Errorf("VULNERABLE: GET /secret.TXT = %d, body=%q; want 403", rec.Code, rec.Body.String()) + } + }) + + t.Run("case variant is a distinct path on a case-sensitive filesystem", func(t *testing.T) { + if rec := get("/secret.TXT", false); rec.Code == http.StatusForbidden { + t.Error("GET /secret.TXT = 403 with folding off; the rule must not widen on a case-sensitive filesystem") + } + }) +} + +// Regression for GHSA-fgm5-pw99-w2p7: a path is canonicalized before it is +// matched against the rules, so a traversal sequence cannot reach a denied file +// by spelling its way there. gorilla/mux cleans forward-slash traversal before +// routing, so this is defense in depth on POSIX; on Windows the equivalent +// backslash form reaches the handler intact, which cleanSeparators covers. +func TestRuleDeniesTraversalToDeniedPath(t *testing.T) { + userScope := t.TempDir() + if err := os.MkdirAll(filepath.Join(userScope, "allow"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(userScope, "Secret.txt"), []byte("SECRET"), 0o644); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Download: true} + st := denyRuleStorage(t, userScope, "/Secret.txt", perm, key) + + req, _ := http.NewRequest(http.MethodGet, "/allow/../Secret.txt", http.NoBody) + req.Header.Set("X-Auth", signToken(t, perm, key)) + rec := httptest.NewRecorder() + handle(rawHandler, "", st, &settings.Server{}).ServeHTTP(rec, req) + + if rec.Code != http.StatusForbidden { + t.Fatalf("VULNERABLE: GET /allow/../Secret.txt = %d, body=%q; want 403", rec.Code, rec.Body.String()) + } +} + +// Canonicalizing the request path must not drop a trailing separator: POST +// distinguishes "/dir/" (create a directory) from "/dir" (write a file), and +// PUT rejects the directory form outright. +func TestCanonicalizeRequestPathKeepsTrailingSlash(t *testing.T) { + userScope := t.TempDir() + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + t.Run("post creates a directory", func(t *testing.T) { + req, _ := http.NewRequest(http.MethodPost, "/newdir/", http.NoBody) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(resourcePostHandler(diskcache.NewNoOp()), "", st, &settings.Server{}).ServeHTTP(rec, req) + + info, err := os.Stat(filepath.Join(userScope, "newdir")) + if err != nil { + t.Fatalf("POST /newdir/ = %d, body=%q; directory not created: %v", rec.Code, rec.Body.String(), err) + } + if !info.IsDir() { + t.Error("POST /newdir/ created a file, not a directory") + } + }) + + t.Run("put rejects a directory path", func(t *testing.T) { + req, _ := http.NewRequest(http.MethodPut, "/newdir/", http.NoBody) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(resourcePutHandler, "", st, &settings.Server{}).ServeHTTP(rec, req) + + if rec.Code != http.StatusMethodNotAllowed { + t.Errorf("PUT /newdir/ = %d; want 405", rec.Code) + } + }) +} diff --git a/http/rules_recursive_test.go b/http/rules_recursive_test.go new file mode 100644 index 00000000..1484a351 --- /dev/null +++ b/http/rules_recursive_test.go @@ -0,0 +1,119 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/filebrowser/filebrowser/v2/diskcache" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage" + "github.com/filebrowser/filebrowser/v2/users" +) + +// Regression for GHSA-77x8-73f4-5485: copy, rename and delete authorize only +// the root of the operation and then recurse through the whole subtree, so a +// rule denying /src/secret used to be bypassed by copying, moving or deleting +// the allowed parent /src. +func TestRecursiveOperationsEnforceDescendantRules(t *testing.T) { + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true, Rename: true, Delete: true, Download: true} + + // scope builds a user scope holding an allowed parent with a denied child, + // plus an entirely allowed tree to prove legitimate operations still run. + scope := func(t *testing.T) (userScope string, st *storage.Storage) { + t.Helper() + userScope = t.TempDir() + for _, dir := range []string{filepath.Join("src", "secret"), "clean"} { + if err := os.MkdirAll(filepath.Join(userScope, dir), 0o755); err != nil { + t.Fatal(err) + } + } + files := map[string]string{ + filepath.Join("src", "public.txt"): "public", + filepath.Join("src", "secret", "marker.txt"): "SECRET", + filepath.Join("clean", "file.txt"): "clean", + } + for name, content := range files { + if err := os.WriteFile(filepath.Join(userScope, name), []byte(content), 0o644); err != nil { + t.Fatal(err) + } + } + return userScope, denyRuleStorage(t, userScope, "/src/secret", perm, key) + } + + do := func(t *testing.T, st *storage.Storage, handler handleFunc, method, target string) *httptest.ResponseRecorder { + t.Helper() + req, _ := http.NewRequest(method, target, http.NoBody) + req.Header.Set("X-Auth", signToken(t, perm, key)) + rec := httptest.NewRecorder() + handle(handler, "", st, &settings.Server{}).ServeHTTP(rec, req) + return rec + } + + exists := func(t *testing.T, path string) bool { + t.Helper() + _, err := os.Stat(path) + return err == nil + } + + t.Run("denied descendant is not directly readable", func(t *testing.T) { + _, st := scope(t) + if rec := do(t, st, rawHandler, http.MethodGet, "/src/secret/marker.txt"); rec.Code != http.StatusForbidden { + t.Fatalf("GET /src/secret/marker.txt = %d; want 403", rec.Code) + } + }) + + t.Run("copying the parent does not expose it", func(t *testing.T) { + userScope, st := scope(t) + rec := do(t, st, resourcePatchHandler(diskcache.NewNoOp()), http.MethodPatch, "/src?action=copy&destination=/dst") + + if leaked := filepath.Join(userScope, "dst", "secret", "marker.txt"); exists(t, leaked) { + t.Fatalf("VULNERABLE: denied descendant copied to %s (status %d)", leaked, rec.Code) + } + if rec.Code != http.StatusForbidden { + t.Errorf("PATCH /src?action=copy = %d; want 403", rec.Code) + } + }) + + t.Run("renaming the parent does not expose it", func(t *testing.T) { + userScope, st := scope(t) + rec := do(t, st, resourcePatchHandler(diskcache.NewNoOp()), http.MethodPatch, "/src?action=rename&destination=/moved") + + if leaked := filepath.Join(userScope, "moved", "secret", "marker.txt"); exists(t, leaked) { + t.Fatalf("VULNERABLE: denied descendant moved to %s (status %d)", leaked, rec.Code) + } + if !exists(t, filepath.Join(userScope, "src", "secret", "marker.txt")) { + t.Error("denied descendant no longer at its original path") + } + if rec.Code != http.StatusForbidden { + t.Errorf("PATCH /src?action=rename = %d; want 403", rec.Code) + } + }) + + t.Run("deleting the parent does not delete it", func(t *testing.T) { + userScope, st := scope(t) + rec := do(t, st, resourceDeleteHandler(diskcache.NewNoOp()), http.MethodDelete, "/src") + + if !exists(t, filepath.Join(userScope, "src", "secret", "marker.txt")) { + t.Fatalf("VULNERABLE: denied descendant deleted through its parent (status %d)", rec.Code) + } + if rec.Code != http.StatusForbidden { + t.Errorf("DELETE /src = %d; want 403", rec.Code) + } + }) + + t.Run("an entirely allowed tree still copies", func(t *testing.T) { + userScope, st := scope(t) + rec := do(t, st, resourcePatchHandler(diskcache.NewNoOp()), http.MethodPatch, "/clean?action=copy&destination=/clean-copy") + + if rec.Code != http.StatusOK { + t.Fatalf("PATCH /clean?action=copy = %d, body=%q; want 200", rec.Code, rec.Body.String()) + } + if !exists(t, filepath.Join(userScope, "clean-copy", "file.txt")) { + t.Error("allowed tree was not copied") + } + }) +} diff --git a/http/search.go b/http/search.go index 1c78b781..48a44c9b 100644 --- a/http/search.go +++ b/http/search.go @@ -1,28 +1,82 @@ -package http +package fbhttp import ( + "context" + "encoding/json" + "errors" "net/http" "os" + "sync" + "time" "github.com/filebrowser/filebrowser/v2/search" ) +const searchPingInterval = 5 + var searchHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - response := []map[string]interface{}{} + response := make(chan map[string]interface{}) + ctx, cancel := context.WithCancelCause(r.Context()) + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + // Avoid connection timeout + timeout := time.NewTimer(searchPingInterval * time.Second) + defer timeout.Stop() + for { + var err error + var infoBytes []byte + select { + case info := <-response: + if info == nil { + return + } + infoBytes, err = json.Marshal(info) + case <-timeout.C: + // Send a heartbeat packet + infoBytes = nil + case <-ctx.Done(): + return + } + if err != nil { + cancel(err) + return + } + _, err = w.Write(infoBytes) + if err == nil { + _, err = w.Write([]byte("\n")) + } + if err != nil { + cancel(err) + return + } + if flusher, ok := w.(http.Flusher); ok { + flusher.Flush() + } + } + }() query := r.URL.Query().Get("query") - err := search.Search(d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error { - response = append(response, map[string]interface{}{ + err := search.Search(ctx, d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error { + select { + case <-ctx.Done(): + case response <- map[string]interface{}{ "dir": f.IsDir(), "path": path, - }) - - return nil + }: + } + return context.Cause(ctx) }) - - if err != nil { + close(response) + wg.Wait() + if err == nil { + err = context.Cause(ctx) + } + // ignore cancellation errors from user aborts + if err != nil && !errors.Is(err, context.Canceled) { return http.StatusInternalServerError, err } - return renderJSON(w, r, response) + return 0, nil }) diff --git a/http/settings.go b/http/settings.go index 0148b383..a07d322e 100644 --- a/http/settings.go +++ b/http/settings.go @@ -1,4 +1,4 @@ -package http +package fbhttp import ( "encoding/json" @@ -9,30 +9,40 @@ import ( ) type settingsData struct { - Signup bool `json:"signup"` - CreateUserDir bool `json:"createUserDir"` - Defaults settings.UserDefaults `json:"defaults"` - Rules []rules.Rule `json:"rules"` - Branding settings.Branding `json:"branding"` - Shell []string `json:"shell"` - Commands map[string][]string `json:"commands"` + Signup bool `json:"signup"` + HideLoginButton bool `json:"hideLoginButton"` + CreateUserDir bool `json:"createUserDir"` + MinimumPasswordLength uint `json:"minimumPasswordLength"` + UserHomeBasePath string `json:"userHomeBasePath"` + Defaults settings.UserDefaults `json:"defaults"` + AuthMethod settings.AuthMethod `json:"authMethod"` + Rules []rules.Rule `json:"rules"` + Branding settings.Branding `json:"branding"` + Tus settings.Tus `json:"tus"` + Shell []string `json:"shell"` + Commands map[string][]string `json:"commands"` } var settingsGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { data := &settingsData{ - Signup: d.settings.Signup, - CreateUserDir: d.settings.CreateUserDir, - Defaults: d.settings.Defaults, - Rules: d.settings.Rules, - Branding: d.settings.Branding, - Shell: d.settings.Shell, - Commands: d.settings.Commands, + Signup: d.settings.Signup, + HideLoginButton: d.settings.HideLoginButton, + CreateUserDir: d.settings.CreateUserDir, + MinimumPasswordLength: d.settings.MinimumPasswordLength, + UserHomeBasePath: d.settings.UserHomeBasePath, + Defaults: d.settings.Defaults, + AuthMethod: d.settings.AuthMethod, + Rules: d.settings.Rules, + Branding: d.settings.Branding, + Tus: d.settings.Tus, + Shell: d.settings.Shell, + Commands: d.settings.Commands, } return renderJSON(w, r, data) }) -var settingsPutHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { +var settingsPutHandler = withAdmin(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { req := &settingsData{} err := json.NewDecoder(r.Body).Decode(req) if err != nil { @@ -41,11 +51,15 @@ var settingsPutHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d.settings.Signup = req.Signup d.settings.CreateUserDir = req.CreateUserDir + d.settings.MinimumPasswordLength = req.MinimumPasswordLength + d.settings.UserHomeBasePath = req.UserHomeBasePath d.settings.Defaults = req.Defaults d.settings.Rules = req.Rules d.settings.Branding = req.Branding + d.settings.Tus = req.Tus d.settings.Shell = req.Shell d.settings.Commands = req.Commands + d.settings.HideLoginButton = req.HideLoginButton err = d.store.Settings.Save(d.settings) return errToStatus(err), err diff --git a/http/share.go b/http/share.go index 2c01ca26..8ed4feb4 100644 --- a/http/share.go +++ b/http/share.go @@ -1,21 +1,57 @@ -package http +package fbhttp import ( "crypto/rand" "encoding/base64" + "encoding/json" + "errors" + "fmt" "net/http" - "path" + "path/filepath" + "sort" "strconv" "strings" "time" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/share" + "github.com/filebrowser/filebrowser/v2/users" + "golang.org/x/crypto/bcrypt" ) +// shareResponse is the client-facing representation of a share. It deliberately +// omits the server-side secrets of share.Link — the bcrypt PasswordHash (which +// would be crackable offline) and the bypass Token — exposing only whether the +// share is password-protected via HasPassword. +type shareResponse struct { + Hash string `json:"hash"` + Path string `json:"path"` + UserID uint `json:"userID"` + Expire int64 `json:"expire"` + HasPassword bool `json:"hasPassword"` +} + +func toShareResponse(l *share.Link) *shareResponse { + return &shareResponse{ + Hash: l.Hash, + Path: l.Path, + UserID: l.UserID, + Expire: l.Expire, + HasPassword: l.PasswordHash != "", + } +} + +func toShareResponses(links []*share.Link) []*shareResponse { + res := make([]*shareResponse, 0, len(links)) + for _, l := range links { + res = append(res, toShareResponse(l)) + } + return res +} + func withPermShare(fn handleFunc) handleFunc { return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - if !d.user.Perm.Share { + if !d.user.Perm.Share || !d.user.Perm.Download { return http.StatusForbidden, nil } @@ -23,20 +59,82 @@ func withPermShare(fn handleFunc) handleFunc { }) } -var shareGetsHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - s, err := d.store.Share.Gets(r.URL.Path, d.user.ID) - if err == errors.ErrNotExist { - return renderJSON(w, r, []*share.Link{}) +var shareListHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + var ( + s []*share.Link + err error + ) + if d.user.Perm.Admin { + s, err = d.store.Share.All() + } else { + s, err = d.store.Share.FindByUserID(d.user.ID) + } + if errors.Is(err, fberrors.ErrNotExist) { + return renderJSON(w, r, []*shareResponse{}) } if err != nil { return http.StatusInternalServerError, err } - return renderJSON(w, r, s) + sort.Slice(s, func(i, j int) bool { + if s[i].UserID != s[j].UserID { + return s[i].UserID < s[j].UserID + } + return s[i].Expire < s[j].Expire + }) + + return renderJSON(w, r, toShareResponses(s)) }) -var shareDeleteHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { +var shareGetsHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + var ( + s []*share.Link + err error + ) + if d.user.Perm.Admin { + s, err = getSharesForAdminPath(d, r.URL.Path) + } else { + s, err = d.store.Share.Gets(r.URL.Path, d.user.ID) + } + if errors.Is(err, fberrors.ErrNotExist) { + return renderJSON(w, r, []*shareResponse{}) + } + + if err != nil { + return http.StatusInternalServerError, err + } + + return renderJSON(w, r, toShareResponses(s)) +}) + +func getSharesForAdminPath(d *data, path string) ([]*share.Link, error) { + links, err := d.store.Share.All() + if err != nil { + return nil, err + } + + adminPath := filepath.Clean(d.user.FullPath(path)) + owners := make(map[uint]*users.User) + filtered := make([]*share.Link, 0, len(links)) + for _, link := range links { + owner, ok := owners[link.UserID] + if !ok { + owner, err = d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, link.UserID) + if err != nil && !errors.Is(err, fberrors.ErrNotExist) { + return nil, err + } + owners[link.UserID] = owner // owner is nil on ErrNotExist + } + if owner != nil && filepath.Clean(owner.FullPath(link.Path)) == adminPath { + filtered = append(filtered, link) + } + } + + return filtered, nil +} + +var shareDeleteHandler = withPermShare(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { hash := strings.TrimSuffix(r.URL.Path, "/") hash = strings.TrimPrefix(hash, "/") @@ -44,24 +142,38 @@ var shareDeleteHandler = withPermShare(func(w http.ResponseWriter, r *http.Reque return http.StatusBadRequest, nil } - err := d.store.Share.Delete(hash) + link, err := d.store.Share.GetByHash(hash) + if err != nil { + return errToStatus(err), err + } + + if link.UserID != d.user.ID && !d.user.Perm.Admin { + return http.StatusForbidden, nil + } + + err = d.store.Share.Delete(hash) return errToStatus(err), err }) var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - var s *share.Link - rawExpire := r.URL.Query().Get("expires") - unit := r.URL.Query().Get("unit") + // Only allow sharing paths that currently exist. Otherwise a share could be + // created for a non-existent path and would silently start exposing + // whatever file later appears there. + // + // d.user.Fs is scoped, so Stat also refuses to follow a symlink whose target + // escapes the user's scope: that returns a permission error here and so + // blocks creating a share that points out of scope. + if _, err := d.user.Fs.Stat(r.URL.Path); err != nil { + return errToStatus(err), err + } - if rawExpire == "" { - var err error - s, err = d.store.Share.GetPermanent(r.URL.Path, d.user.ID) - if err == nil { - if _, err := w.Write([]byte(path.Join(d.server.BaseURL, "/share/", s.Hash))); err != nil { - return http.StatusInternalServerError, err - } - return 0, nil + var s *share.Link + var body share.CreateBody + if r.Body != nil { + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return http.StatusBadRequest, fmt.Errorf("failed to decode body: %w", err) } + defer r.Body.Close() } bytes := make([]byte, 6) @@ -74,14 +186,14 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request var expire int64 = 0 - if rawExpire != "" { - num, err := strconv.Atoi(rawExpire) + if body.Expires != "" { + num, err := strconv.Atoi(body.Expires) if err != nil { return http.StatusInternalServerError, err } var add time.Duration - switch unit { + switch body.Unit { case "seconds": add = time.Second * time.Duration(num) case "minutes": @@ -95,16 +207,45 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request expire = time.Now().Add(add).Unix() } + hash, status, err := getSharePasswordHash(body) + if err != nil { + return status, err + } + + var token string + if len(hash) > 0 { + tokenBuffer := make([]byte, 96) + if _, err := rand.Read(tokenBuffer); err != nil { + return http.StatusInternalServerError, err + } + token = base64.URLEncoding.EncodeToString(tokenBuffer) + } + s = &share.Link{ - Path: r.URL.Path, - Hash: str, - Expire: expire, - UserID: d.user.ID, + Path: r.URL.Path, + Hash: str, + Expire: expire, + UserID: d.user.ID, + PasswordHash: string(hash), + Token: token, } if err := d.store.Share.Save(s); err != nil { return http.StatusInternalServerError, err } - return renderJSON(w, r, s) + return renderJSON(w, r, toShareResponse(s)) }) + +func getSharePasswordHash(body share.CreateBody) (data []byte, statuscode int, err error) { + if body.Password == "" { + return nil, 0, nil + } + + hash, err := bcrypt.GenerateFromPassword([]byte(body.Password), bcrypt.DefaultCost) + if err != nil { + return nil, http.StatusInternalServerError, fmt.Errorf("failed to hash password: %w", err) + } + + return hash, 0, nil +} diff --git a/http/share_test.go b/http/share_test.go new file mode 100644 index 00000000..c03a9393 --- /dev/null +++ b/http/share_test.go @@ -0,0 +1,164 @@ +package fbhttp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/asdine/storm/v3" + "github.com/golang-jwt/jwt/v5" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/share" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" +) + +func TestAdminShareGetsHandlerMatchesOwnerScope(t *testing.T) { + t.Parallel() + + root := t.TempDir() + ownerScope := filepath.Join(root, "owner") + if err := os.MkdirAll(ownerScope, 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(ownerScope, "file.txt"), []byte("shared"), 0o600); err != nil { + t.Fatal(err) + } + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + + owner := &users.User{ + Username: "owner", + Password: "pw", + Scope: "/owner", + Perm: users.Permissions{Share: true, Download: true}, + } + if err := st.Users.Save(owner); err != nil { + t.Fatalf("failed to save owner: %v", err) + } + + adminPerm := users.Permissions{Admin: true, Share: true, Download: true} + admin := &users.User{ + Username: "admin", + Password: "pw", + Scope: "/", + Perm: adminPerm, + } + if err := st.Users.Save(admin); err != nil { + t.Fatalf("failed to save admin: %v", err) + } + + if err := st.Share.Save(&share.Link{Hash: "h", UserID: owner.ID, Path: "/file.txt"}); err != nil { + t.Fatalf("failed to save share: %v", err) + } + key := []byte("test-signing-key") + if err := st.Settings.Save(&settings.Settings{Key: key}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + + req, err := http.NewRequest(http.MethodGet, "/owner/file.txt", http.NoBody) + if err != nil { + t.Fatalf("failed to construct request: %v", err) + } + req.Header.Set("X-Auth", signShareTestToken(t, admin.ID, admin.Username, adminPerm, key)) + + rec := httptest.NewRecorder() + handle(shareGetsHandler, "", st, &settings.Server{Root: root}).ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d: %s", rec.Code, rec.Body.String()) + } + + var links []*share.Link + if err := json.Unmarshal(rec.Body.Bytes(), &links); err != nil { + t.Fatalf("failed to decode response: %v", err) + } + if len(links) != 1 || links[0].Hash != "h" { + t.Fatalf("expected admin to see owner share h, got %#v", links) + } +} + +// Regression for the share secret exposure (GHSA-833g-cqhp-h72j): the share API +// must not serialize the bcrypt password hash or the bypass token, while still +// persisting them server-side so password-protected shares keep working. +func TestSharePostHandlerDoesNotLeakSecrets(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(userScope, 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(userScope, "file.txt"), []byte("x"), 0o600); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Share: true, Download: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + body := `{"password":"ShareSecret123!","expires":"24","unit":"hours"}` + req, _ := http.NewRequest(http.MethodPost, "/file.txt", strings.NewReader(body)) + req.Header.Set("X-Auth", signed) + rec := httptest.NewRecorder() + handle(sharePostHandler, "", st, &settings.Server{Root: root}).ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d body=%q", rec.Code, rec.Body.String()) + } + + var resp map[string]any + if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { + t.Fatalf("decode: %v", err) + } + if _, ok := resp["password_hash"]; ok { + t.Errorf("VULNERABLE: response leaks password_hash: %s", rec.Body.String()) + } + if _, ok := resp["token"]; ok { + t.Errorf("VULNERABLE: response leaks token: %s", rec.Body.String()) + } + if resp["hasPassword"] != true { + t.Errorf("expected hasPassword=true, got %v", resp["hasPassword"]) + } + + // The secrets must still be persisted server-side (storm uses the JSON codec, + // so the storage struct's tags must keep emitting them). + stored, err := st.Share.GetByHash(resp["hash"].(string)) + if err != nil { + t.Fatalf("share not stored: %v", err) + } + if stored.PasswordHash == "" || stored.Token == "" { + t.Fatalf("server-side secrets not persisted: hash=%q token=%q", stored.PasswordHash, stored.Token) + } +} + +func signShareTestToken(t *testing.T, id uint, username string, perm users.Permissions, key []byte) string { + t.Helper() + + claims := &authToken{ + User: userInfo{ID: id, Username: username, Perm: perm}, + RegisteredClaims: jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(time.Now().Add(-time.Minute)), + ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)), + }, + } + signed, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(key) + if err != nil { + t.Fatalf("failed to sign token: %v", err) + } + return signed +} diff --git a/http/static.go b/http/static.go index d97559b6..3ef23a2a 100644 --- a/http/static.go +++ b/http/static.go @@ -1,16 +1,19 @@ -package http +package fbhttp import ( + "compress/gzip" "encoding/json" + "errors" + "fmt" + "html/template" + "io" + "io/fs" "log" "net/http" "os" "path" "path/filepath" "strings" - "text/template" - - rice "github.com/GeertJohan/go.rice" "github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/settings" @@ -18,7 +21,7 @@ import ( "github.com/filebrowser/filebrowser/v2/version" ) -func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box *rice.Box, file, contentType string) (int, error) { +func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, fSys fs.FS, file, contentType string) (int, error) { w.Header().Set("Content-Type", contentType) auther, err := d.store.Auth.Get(d.settings.AuthMethod) @@ -27,23 +30,31 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * } data := map[string]interface{}{ - "Name": d.settings.Branding.Name, - "DisableExternal": d.settings.Branding.DisableExternal, - "BaseURL": d.server.BaseURL, - "Version": version.Version, - "StaticURL": path.Join(d.server.BaseURL, "/static"), - "Signup": d.settings.Signup, - "NoAuth": d.settings.AuthMethod == auth.MethodNoAuth, - "AuthMethod": d.settings.AuthMethod, - "LoginPage": auther.LoginPage(), - "CSS": false, - "ReCaptcha": false, - "Theme": d.settings.Branding.Theme, + "Name": d.settings.Branding.Name, + "DisableExternal": d.settings.Branding.DisableExternal, + "DisableUsedPercentage": d.settings.Branding.DisableUsedPercentage, + "Color": d.settings.Branding.Color, + "BaseURL": d.server.BaseURL, + "Version": version.Version, + "StaticURL": path.Join(d.server.BaseURL, "/static"), + "Signup": d.settings.Signup, + "NoAuth": d.settings.AuthMethod == auth.MethodNoAuth, + "AuthMethod": d.settings.AuthMethod, + "LogoutPage": d.settings.LogoutPage, + "LoginPage": auther.LoginPage(), + "CSS": false, + "ReCaptcha": false, + "Theme": d.settings.Branding.Theme, + "EnableThumbs": d.server.EnableThumbnails, + "ResizePreview": d.server.ResizePreview, + "EnableExec": d.server.EnableExec, + "TusSettings": d.settings.Tus, + "HideLoginButton": d.settings.HideLoginButton, } if d.settings.Branding.Files != "" { fPath := filepath.Join(d.settings.Branding.Files, "custom.css") - _, err := os.Stat(fPath) //nolint:shadow + _, err := os.Stat(fPath) if err != nil && !os.IsNotExist(err) { log.Printf("couldn't load custom styles: %v", err) @@ -55,7 +66,7 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * } if d.settings.AuthMethod == auth.MethodJSONAuth { - raw, err := d.store.Auth.Get(d.settings.AuthMethod) //nolint:shadow + raw, err := d.store.Auth.Get(d.settings.AuthMethod) if err != nil { return http.StatusInternalServerError, err } @@ -69,14 +80,21 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * } } - b, err := json.MarshalIndent(data, "", " ") + b, err := json.Marshal(data) if err != nil { return http.StatusInternalServerError, err } - data["Json"] = string(b) + data["Json"] = template.JS(strings.ReplaceAll(string(b), `'`, `\'`)) - index := template.Must(template.New("index").Delims("[{[", "]}]").Parse(box.MustString(file))) + fileContents, err := fs.ReadFile(fSys, file) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return http.StatusNotFound, err + } + return http.StatusInternalServerError, err + } + index := template.Must(template.New("index").Delims("[{[", "]}]").Parse(string(fileContents))) err = index.Execute(w, data) if err != nil { return http.StatusInternalServerError, err @@ -85,17 +103,15 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * return 0, nil } -func getStaticHandlers(store *storage.Storage, server *settings.Server) (index, static http.Handler) { - box := rice.MustFindBox("../frontend/dist") - handler := http.FileServer(box.HTTPBox()) - +func getStaticHandlers(store *storage.Storage, server *settings.Server, assetsFs fs.FS) (index, static http.Handler) { index = handle(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { if r.Method != http.MethodGet { return http.StatusNotFound, nil } w.Header().Set("x-xss-protection", "1; mode=block") - return handleWithStaticData(w, r, d, box, "index.html", "text/html; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") + return handleWithStaticData(w, r, d, assetsFs, "public/index.html", "text/html; charset=utf-8") }, "", store, server) static = handle(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { @@ -103,10 +119,21 @@ func getStaticHandlers(store *storage.Storage, server *settings.Server) (index, return http.StatusNotFound, nil } + if strings.HasSuffix(r.URL.Path, "/") { + return http.StatusNotFound, nil + } + + const maxAge = 86400 // 1 day + w.Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%v", maxAge)) + w.Header().Set("X-Content-Type-Options", "nosniff") + if d.settings.Branding.Files != "" { if strings.HasPrefix(r.URL.Path, "img/") { fPath := filepath.Join(d.settings.Branding.Files, r.URL.Path) - if _, err := os.Stat(fPath); err == nil { + _, err := os.Stat(fPath) + if err != nil && !os.IsNotExist(err) { + log.Printf("could not load branding file override: %v", err) + } else if err == nil { http.ServeFile(w, r, fPath) return 0, nil } @@ -117,11 +144,39 @@ func getStaticHandlers(store *storage.Storage, server *settings.Server) (index, } if !strings.HasSuffix(r.URL.Path, ".js") { - handler.ServeHTTP(w, r) + http.FileServer(http.FS(assetsFs)).ServeHTTP(w, r) return 0, nil } - return handleWithStaticData(w, r, d, box, r.URL.Path, "application/javascript; charset=utf-8") + f, err := assetsFs.Open(r.URL.Path + ".gz") + if err != nil { + return http.StatusNotFound, err + } + defer f.Close() + + acceptEncoding := r.Header.Get("Accept-Encoding") + if strings.Contains(acceptEncoding, "gzip") { + w.Header().Set("Content-Encoding", "gzip") + w.Header().Set("Content-Type", "application/javascript; charset=utf-8") + + if _, err := io.Copy(w, f); err != nil { + return http.StatusInternalServerError, err + } + } else { + gzReader, err := gzip.NewReader(f) + if err != nil { + return http.StatusInternalServerError, err + } + defer gzReader.Close() + + w.Header().Set("Content-Type", "application/javascript; charset=utf-8") + + if _, err := io.Copy(w, gzReader); err != nil { + return http.StatusInternalServerError, err + } + } + + return 0, nil }, "/static/", store, server) return index, static diff --git a/http/subtitle.go b/http/subtitle.go new file mode 100644 index 00000000..24b49256 --- /dev/null +++ b/http/subtitle.go @@ -0,0 +1,92 @@ +package fbhttp + +import ( + "bytes" + "io" + "net/http" + "regexp" + "strings" + + "github.com/asticode/go-astisub" + + "github.com/filebrowser/filebrowser/v2/files" +) + +var srtLineBreakTag = regexp.MustCompile(`(?i)]*)?\s*/?>`) + +var subtitleHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if !d.user.Perm.Download { + return http.StatusAccepted, nil + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + if file.IsDir { + return http.StatusBadRequest, nil + } + + return subtitleFileHandler(w, r, file) +}) + +func subtitleFileHandler(w http.ResponseWriter, r *http.Request, file *files.FileInfo) (int, error) { + // if its not a subtitle file, reject + if !files.IsSupportedSubtitle(file.Name) { + return http.StatusBadRequest, nil + } + + fd, err := file.Fs.Open(file.Path) + if err != nil { + return http.StatusInternalServerError, err + } + defer fd.Close() + + // load subtitle for conversion to vtt + var sub *astisub.Subtitles + if strings.HasSuffix(file.Name, ".srt") { + content, readErr := io.ReadAll(fd) + if readErr != nil { + return http.StatusInternalServerError, readErr + } + sub, err = astisub.ReadFromSRT(bytes.NewReader(normalizeSRTLineBreaks(content))) + } else if strings.HasSuffix(file.Name, ".ass") || strings.HasSuffix(file.Name, ".ssa") { + sub, err = astisub.ReadFromSSA(fd) + } + if err != nil { + return http.StatusInternalServerError, err + } + + setContentDisposition(w, r, file) + w.Header().Add("Content-Security-Policy", `script-src 'none';`) + w.Header().Set("Cache-Control", "private") + // force type to text/vtt + w.Header().Set("Content-Type", "text/vtt") + + // serve vtt file directly + if sub == nil { + http.ServeContent(w, r, file.Name, file.ModTime, fd) + return 0, nil + } + + // convert others to vtt and serve from buffer + var buf = &bytes.Buffer{} + err = sub.WriteToWebVTT(buf) + if err != nil { + return http.StatusInternalServerError, err + } + http.ServeContent(w, r, file.Name, file.ModTime, bytes.NewReader(buf.Bytes())) + return 0, nil +} + +func normalizeSRTLineBreaks(content []byte) []byte { + return srtLineBreakTag.ReplaceAll(content, []byte("\n")) +} diff --git a/http/subtitle_test.go b/http/subtitle_test.go new file mode 100644 index 00000000..2520d453 --- /dev/null +++ b/http/subtitle_test.go @@ -0,0 +1,62 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/spf13/afero" + + "github.com/filebrowser/filebrowser/v2/files" +) + +func TestNormalizeSRTLineBreaks(t *testing.T) { + input := []byte("first
second
third
fourth
fifth") + got := string(normalizeSRTLineBreaks(input)) + want := "first\nsecond\nthird\nfourth\nfifth" + if got != want { + t.Fatalf("normalizeSRTLineBreaks() = %q, want %q", got, want) + } +} + +func TestSubtitleFileHandlerConvertsSRTBreakTags(t *testing.T) { + fs := afero.NewMemMapFs() + const path = "/sample.srt" + const content = "1\n" + + "00:00:01,000 --> 00:00:02,000\n" + + "First
Second
Third
Fourth\n\n" + + if err := afero.WriteFile(fs, path, []byte(content), 0o644); err != nil { + t.Fatalf("failed to write subtitle: %v", err) + } + info, err := fs.Stat(path) + if err != nil { + t.Fatalf("failed to stat subtitle: %v", err) + } + + file := &files.FileInfo{ + Fs: fs, + Path: path, + Name: "sample.srt", + ModTime: info.ModTime(), + } + req := httptest.NewRequest(http.MethodGet, "/api/subtitle/sample.srt?inline=true", http.NoBody) + rec := httptest.NewRecorder() + + status, err := subtitleFileHandler(rec, req, file) + if err != nil { + t.Fatalf("subtitleFileHandler returned error: %v", err) + } + if status != 0 { + t.Fatalf("subtitleFileHandler status = %d, want 0", status) + } + + body := rec.Body.String() + if strings.Contains(body, "FirstSecond") { + t.Fatalf("WebVTT output collapsed SRT
tags: %q", body) + } + if !strings.Contains(body, "First\nSecond\nThird\nFourth") { + t.Fatalf("WebVTT output = %q, want converted SRT
tags as line breaks", body) + } +} diff --git a/http/tus_handlers.go b/http/tus_handlers.go new file mode 100644 index 00000000..f31853db --- /dev/null +++ b/http/tus_handlers.go @@ -0,0 +1,344 @@ +package fbhttp + +import ( + "errors" + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/filebrowser/filebrowser/v2/files" + "github.com/spf13/afero" +) + +// maxPatchDrainBytes bounds how much of a rejected PATCH body is discarded to +// keep the connection reusable. It comfortably covers a default-sized chunk; +// beyond that the body is not worth reading just to throw away. +const maxPatchDrainBytes = 32 << 20 // 32MB + +// drainRequestBody discards what the client already put on the wire for a +// request the handler answered without reading. net/http only drains 256KiB on +// its own before giving up and closing the connection, and a connection closed +// while the client is still streaming a chunk reaches the browser as a transport +// error instead of the status we replied with. The client then cannot tell a +// conflict from a network fault, retries blindly, and the upload stalls. +func drainRequestBody(r *http.Request) { + if r.Body == nil { + return + } + _, _ = io.Copy(io.Discard, io.LimitReader(r.Body, maxPatchDrainBytes)) +} + +// keepUploadActive periodically touches the cache entry to prevent eviction during transfer +func keepUploadActive(cache UploadCache, filePath string) func() { + stop := make(chan bool) + + go func() { + ticker := time.NewTicker(2 * time.Second) + defer ticker.Stop() + + for { + select { + case <-stop: + return + case <-ticker.C: + cache.Touch(filePath) + } + } + }() + + return func() { + close(stop) + } +} + +func tusPostHandler(cache UploadCache) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + if !d.user.Perm.Create || !d.Check(r.URL.Path) { + return http.StatusForbidden, nil + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + switch { + case errors.Is(err, afero.ErrFileNotFound): + dirPath := filepath.Dir(r.URL.Path) + if _, statErr := d.user.Fs.Stat(dirPath); os.IsNotExist(statErr) { + if mkdirErr := d.user.Fs.MkdirAll(dirPath, d.settings.DirMode); mkdirErr != nil { + return http.StatusInternalServerError, err + } + } + case err != nil: + return errToStatus(err), err + } + + fileFlags := os.O_CREATE | os.O_WRONLY + + // if file exists + if file != nil { + if file.IsDir { + return http.StatusBadRequest, fmt.Errorf("cannot upload to a directory %s", file.RealPath()) + } + + // Existing files will remain untouched unless explicitly instructed to override + if r.URL.Query().Get("override") != "true" { + return http.StatusConflict, nil + } + + // Permission for overwriting the file + if !d.user.Perm.Modify { + return http.StatusForbidden, nil + } + + fileFlags |= os.O_TRUNC + } + + openFile, err := d.user.Fs.OpenFile(r.URL.Path, fileFlags, d.settings.FileMode) + if err != nil { + return errToStatus(err), err + } + defer openFile.Close() + + file, err = files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: false, + Checker: d, + Content: false, + }) + if err != nil { + return errToStatus(err), err + } + + uploadLength, err := getUploadLength(r) + if err != nil || uploadLength < 0 { + return http.StatusBadRequest, fmt.Errorf("invalid upload length: %w", err) + } + + // Enables the user to utilize the PATCH endpoint for uploading file data. + // The removal callback deletes an abandoned upload through the user's + // scoped filesystem, so eviction cannot follow a symlink out of scope. + uploadPath := r.URL.Path + cache.Register(file.RealPath(), uploadLength, func() error { + return d.user.Fs.Remove(uploadPath) + }) + + basePath := "/" + strings.Trim(strings.TrimSpace(d.server.BaseURL), "/") + if basePath == "/" { + basePath = "" + } + + w.Header().Set("Location", basePath+"/api/tus"+r.URL.EscapedPath()) + return http.StatusCreated, nil + }) +} + +func tusHeadHandler(cache UploadCache) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + w.Header().Set("Cache-Control", "no-store") + if !d.user.Perm.Create || !d.Check(r.URL.Path) { + return http.StatusForbidden, nil + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + uploadLength, err := cache.GetLength(file.RealPath()) + if err != nil { + return http.StatusNotFound, err + } + + w.Header().Set("Upload-Offset", strconv.FormatInt(file.Size, 10)) + w.Header().Set("Upload-Length", strconv.FormatInt(uploadLength, 10)) + + return http.StatusOK, nil + }) +} + +func tusPatchHandler(cache UploadCache) handleFunc { + return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { + status, err := tusPatchUpload(w, r, d, cache) + // A rejected chunk is still a chunk the client is streaming: read what is + // left of it so the answer reaches the client on a connection that stays + // usable, instead of being lost to a reset. + if status >= 400 { + drainRequestBody(r) + } + return status, err + }) +} + +func tusPatchUpload(w http.ResponseWriter, r *http.Request, d *data, cache UploadCache) (int, error) { + if !d.user.Perm.Create || !d.Check(r.URL.Path) { + return http.StatusForbidden, nil + } + if r.Header.Get("Content-Type") != "application/offset+octet-stream" { + return http.StatusUnsupportedMediaType, nil + } + + uploadOffset, err := getUploadOffset(r) + if err != nil { + return http.StatusBadRequest, fmt.Errorf("invalid upload offset") + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + + switch { + case errors.Is(err, afero.ErrFileNotFound): + return http.StatusNotFound, nil + case err != nil: + return errToStatus(err), err + } + + uploadLength, err := cache.GetLength(file.RealPath()) + if err != nil { + return http.StatusNotFound, err + } + + if uploadOffset > uploadLength { + return http.StatusBadRequest, fmt.Errorf("upload offset %d exceeds declared length %d", uploadOffset, uploadLength) + } + + // Prevent the upload from being evicted during the transfer + stop := keepUploadActive(cache, file.RealPath()) + defer stop() + + switch { + case file.IsDir: + return http.StatusBadRequest, fmt.Errorf("cannot upload to a directory %s", file.RealPath()) + case file.Size != uploadOffset: + return http.StatusConflict, fmt.Errorf( + "%s file size doesn't match the provided offset: %d", + file.RealPath(), + uploadOffset, + ) + } + + openFile, err := d.user.Fs.OpenFile(r.URL.Path, os.O_WRONLY|os.O_APPEND, d.settings.FileMode) + if err != nil { + return http.StatusInternalServerError, fmt.Errorf("could not open file: %w", err) + } + defer openFile.Close() + + _, err = openFile.Seek(uploadOffset, 0) + if err != nil { + return http.StatusInternalServerError, fmt.Errorf("could not seek file: %w", err) + } + + // The server closes the request body once the handler returns; closing it + // here would run before the caller gets to drain a rejected chunk, so every + // status raised below this point would still cost the connection. + // + // Enforce the declared Upload-Length: never write more than the bytes + // still expected for this upload. Reading one byte past the remainder + // lets an over-length body be detected and rejected. Without this bound a + // PATCH could stream arbitrary data to disk regardless of the length the + // client declared when the upload was created. + remaining := uploadLength - uploadOffset + bytesWritten, err := io.Copy(openFile, io.LimitReader(r.Body, remaining+1)) + if err != nil { + return http.StatusInternalServerError, fmt.Errorf("could not write to file: %w", err) + } + if bytesWritten > remaining { + // The client sent more than it declared; roll this chunk back so the + // file stays consistent with the tracked offset, and reject it. + if truncErr := openFile.Truncate(uploadOffset); truncErr != nil { + return http.StatusInternalServerError, fmt.Errorf("could not truncate file: %w", truncErr) + } + return http.StatusRequestEntityTooLarge, fmt.Errorf("upload exceeds declared length of %d bytes", uploadLength) + } + + // Sync the file to ensure all data is written to storage + // to prevent file corruption. + if err := openFile.Sync(); err != nil { + return http.StatusInternalServerError, fmt.Errorf("could not sync file: %w", err) + } + + newOffset := uploadOffset + bytesWritten + w.Header().Set("Upload-Offset", strconv.FormatInt(newOffset, 10)) + + if newOffset >= uploadLength { + cache.Complete(file.RealPath()) + _ = d.RunHook(func() error { return nil }, "upload", r.URL.Path, "", d.user) + } + + return http.StatusNoContent, nil +} + +func tusDeleteHandler(cache UploadCache) handleFunc { + return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { + if r.URL.Path == "/" || !d.user.Perm.Delete { + return http.StatusForbidden, nil + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + _, err = cache.GetLength(file.RealPath()) + if err != nil { + return http.StatusNotFound, err + } + + err = d.user.Fs.RemoveAll(r.URL.Path) + if err != nil { + return errToStatus(err), err + } + + cache.Complete(file.RealPath()) + + return http.StatusNoContent, nil + }) +} + +func getUploadLength(r *http.Request) (int64, error) { + uploadOffset, err := strconv.ParseInt(r.Header.Get("Upload-Length"), 10, 64) + if err != nil { + return 0, fmt.Errorf("invalid upload length: %w", err) + } + return uploadOffset, nil +} + +func getUploadOffset(r *http.Request) (int64, error) { + uploadOffset, err := strconv.ParseInt(r.Header.Get("Upload-Offset"), 10, 64) + if err != nil { + return 0, fmt.Errorf("invalid upload offset: %w", err) + } + return uploadOffset, nil +} diff --git a/http/tus_multichunk_test.go b/http/tus_multichunk_test.go new file mode 100644 index 00000000..17bba14a --- /dev/null +++ b/http/tus_multichunk_test.go @@ -0,0 +1,297 @@ +package fbhttp + +import ( + "bytes" + "io" + "net/http" + "net/http/httptest" + "net/http/httptrace" + "os" + "path/filepath" + "strconv" + "testing" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage" + "github.com/filebrowser/filebrowser/v2/users" +) + +// newTusTestServer mounts the TUS handlers behind a real HTTP server, under the +// same "/api/tus" prefix used in production, so tests exercise connection +// handling and header round-tripping instead of a bare ResponseRecorder. +func newTusTestServer(t *testing.T, st *storage.Storage, cache UploadCache) *httptest.Server { + t.Helper() + + server := &settings.Server{} + post := handle(tusPostHandler(cache), "/api/tus", st, server) + head := handle(tusHeadHandler(cache), "/api/tus", st, server) + patch := handle(tusPatchHandler(cache), "/api/tus", st, server) + + mux := http.NewServeMux() + mux.HandleFunc("/api/tus/", func(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodPost: + post.ServeHTTP(w, r) + case http.MethodHead: + head.ServeHTTP(w, r) + case http.MethodPatch: + patch.ServeHTTP(w, r) + default: + w.WriteHeader(http.StatusMethodNotAllowed) + } + }) + + srv := httptest.NewServer(mux) + t.Cleanup(srv.Close) + return srv +} + +// tusTestFixture wires a scoped user, an upload cache and a live server. +type tusTestFixture struct { + srv *httptest.Server + client *http.Client + token string + scope string +} + +func newTusTestFixture(t *testing.T) *tusTestFixture { + t.Helper() + + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(userScope, 0o755); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true} + st := scopedUserStorage(t, userScope, perm, key) + + cache := newMemoryUploadCache() + t.Cleanup(cache.Close) + + srv := newTusTestServer(t, st, cache) + return &tusTestFixture{ + srv: srv, + client: srv.Client(), + token: signToken(t, perm, key), + scope: userScope, + } +} + +// create sends the TUS creation request and returns the absolute upload URL. +func (f *tusTestFixture) create(t *testing.T, name string, length int) string { + t.Helper() + + req, err := http.NewRequest(http.MethodPost, f.srv.URL+"/api/tus/"+name+"?override=false", http.NoBody) + if err != nil { + t.Fatal(err) + } + req.Header.Set("X-Auth", f.token) + req.Header.Set("Upload-Length", strconv.Itoa(length)) + + res, err := f.client.Do(req) + if err != nil { + t.Fatalf("POST create: %v", err) + } + defer res.Body.Close() + body, _ := io.ReadAll(res.Body) + + if res.StatusCode != http.StatusCreated { + t.Fatalf("POST create: status %d body %q", res.StatusCode, body) + } + location := res.Header.Get("Location") + if location == "" { + t.Fatal("POST create: missing Location header") + } + return f.srv.URL + location +} + +// patch sends one chunk and reports the response plus whether the underlying +// connection was reused from the pool. +func (f *tusTestFixture) patch(t *testing.T, url string, offset int, chunk []byte) (*http.Response, bool) { + t.Helper() + + req, err := http.NewRequest(http.MethodPatch, url, bytes.NewReader(chunk)) + if err != nil { + t.Fatal(err) + } + req.Header.Set("X-Auth", f.token) + req.Header.Set("Content-Type", "application/offset+octet-stream") + req.Header.Set("Upload-Offset", strconv.Itoa(offset)) + + var reused bool + trace := &httptrace.ClientTrace{ + GotConn: func(info httptrace.GotConnInfo) { reused = info.Reused }, + } + req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace)) + + res, err := f.client.Do(req) + if err != nil { + t.Fatalf("PATCH at offset %d: %v", offset, err) + } + return res, reused +} + +func testPayload(size int) []byte { + payload := make([]byte, size) + for i := range payload { + payload[i] = byte(i % 251) + } + return payload +} + +// A file larger than the chunk size must upload across several PATCH requests +// over a single reused connection, exactly as the web UI drives it. Each chunk +// has to be acknowledged with 204 and the new Upload-Offset, and the resulting +// file must be byte-identical to the source. +func TestTusMultiChunkUpload(t *testing.T) { + const chunkSize = 64 * 1024 + const fileSize = chunkSize*3 + 1234 + + f := newTusTestFixture(t) + payload := testPayload(fileSize) + uploadURL := f.create(t, "movie.bin", fileSize) + + for offset := 0; offset < fileSize; { + end := min(offset+chunkSize, fileSize) + + res, _ := f.patch(t, uploadURL, offset, payload[offset:end]) + body, _ := io.ReadAll(res.Body) + res.Body.Close() + + if res.StatusCode != http.StatusNoContent { + t.Fatalf("PATCH at offset %d: status %d body %q", offset, res.StatusCode, body) + } + if got, want := res.Header.Get("Upload-Offset"), strconv.Itoa(end); got != want { + t.Fatalf("PATCH at offset %d: Upload-Offset = %q, want %q", offset, got, want) + } + + offset = end + } + + got, err := os.ReadFile(filepath.Join(f.scope, "movie.bin")) + if err != nil { + t.Fatalf("read uploaded file: %v", err) + } + if !bytes.Equal(got, payload) { + t.Fatalf("uploaded file differs from source (got %d bytes, want %d)", len(got), len(payload)) + } +} + +// Between chunks a client may re-synchronise with a HEAD request. It must +// report the bytes already on disk plus the declared total, so the client can +// resume from the right offset. +func TestTusHeadReportsOffsetBetweenChunks(t *testing.T) { + const chunkSize = 32 * 1024 + const fileSize = chunkSize * 2 + + f := newTusTestFixture(t) + payload := testPayload(fileSize) + uploadURL := f.create(t, "resume.bin", fileSize) + + res, _ := f.patch(t, uploadURL, 0, payload[:chunkSize]) + res.Body.Close() + if res.StatusCode != http.StatusNoContent { + t.Fatalf("first PATCH: status %d", res.StatusCode) + } + + req, err := http.NewRequest(http.MethodHead, uploadURL, http.NoBody) + if err != nil { + t.Fatal(err) + } + req.Header.Set("X-Auth", f.token) + + headRes, err := f.client.Do(req) + if err != nil { + t.Fatalf("HEAD: %v", err) + } + defer headRes.Body.Close() + + if headRes.StatusCode != http.StatusOK { + t.Fatalf("HEAD: status %d", headRes.StatusCode) + } + if got, want := headRes.Header.Get("Upload-Offset"), strconv.Itoa(chunkSize); got != want { + t.Fatalf("HEAD Upload-Offset = %q, want %q", got, want) + } + if got, want := headRes.Header.Get("Upload-Length"), strconv.Itoa(fileSize); got != want { + t.Fatalf("HEAD Upload-Length = %q, want %q", got, want) + } +} + +// A PATCH that the handler rejects before reading the body must still leave the +// connection usable. Go abandons draining an unread request body after 256 KiB +// and then closes the socket, which turns a plain 409 into an opaque transport +// error for the client and stalls the upload. Rejecting a chunk-sized body must +// not cost the connection. +func TestTusPatchRejectionKeepsConnectionUsable(t *testing.T) { + const chunkSize = 1024 * 1024 + const fileSize = chunkSize * 2 + + f := newTusTestFixture(t) + payload := testPayload(fileSize) + uploadURL := f.create(t, "conflict.bin", fileSize) + + // Land the first chunk so the file size no longer matches offset 0. + res, _ := f.patch(t, uploadURL, 0, payload[:chunkSize]) + res.Body.Close() + if res.StatusCode != http.StatusNoContent { + t.Fatalf("first PATCH: status %d", res.StatusCode) + } + + // Replaying offset 0 with a full chunk must be answered with a real 409. + res, _ = f.patch(t, uploadURL, 0, payload[:chunkSize]) + body, _ := io.ReadAll(res.Body) + res.Body.Close() + if res.StatusCode != http.StatusConflict { + t.Fatalf("stale-offset PATCH: status %d body %q, want 409", res.StatusCode, body) + } + + // And the connection must survive it, so the client's next attempt is not + // reported as a network failure. + res, reused := f.patch(t, uploadURL, chunkSize, payload[chunkSize:]) + body, _ = io.ReadAll(res.Body) + res.Body.Close() + if res.StatusCode != http.StatusNoContent { + t.Fatalf("PATCH after rejection: status %d body %q", res.StatusCode, body) + } + if !reused { + t.Fatal("connection was dropped by the rejected PATCH instead of being reused") + } + + got, err := os.ReadFile(filepath.Join(f.scope, "conflict.bin")) + if err != nil { + t.Fatalf("read uploaded file: %v", err) + } + if !bytes.Equal(got, payload) { + t.Fatalf("uploaded file differs from source (got %d bytes, want %d)", len(got), len(payload)) + } +} + +// Same requirement for a rejection raised once the write is already underway: +// an over-length body is refused after part of it has been read, and the rest +// still has to be drained for the answer to survive. +func TestTusOverLengthPatchKeepsConnectionUsable(t *testing.T) { + const declared = 1024 + + f := newTusTestFixture(t) + payload := testPayload(4 << 20) + uploadURL := f.create(t, "toolong.bin", declared) + + res, _ := f.patch(t, uploadURL, 0, payload) + body, _ := io.ReadAll(res.Body) + res.Body.Close() + if res.StatusCode != http.StatusRequestEntityTooLarge { + t.Fatalf("over-length PATCH: status %d body %q, want 413", res.StatusCode, body) + } + + res, reused := f.patch(t, uploadURL, 0, payload[:declared]) + body, _ = io.ReadAll(res.Body) + res.Body.Close() + if res.StatusCode != http.StatusNoContent { + t.Fatalf("PATCH after rejection: status %d body %q", res.StatusCode, body) + } + if !reused { + t.Fatal("connection was dropped by the over-length PATCH instead of being reused") + } +} diff --git a/http/tus_symlink_test.go b/http/tus_symlink_test.go new file mode 100644 index 00000000..678347e9 --- /dev/null +++ b/http/tus_symlink_test.go @@ -0,0 +1,119 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + "time" + + "github.com/asdine/storm/v3" + "github.com/golang-jwt/jwt/v5" + "github.com/spf13/afero" + + "github.com/filebrowser/filebrowser/v2/files" + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/storage/bolt" + "github.com/filebrowser/filebrowser/v2/users" +) + +// Reproduces the TUS write vector of GHSA-v9g6-9pp4-3w22: a scoped user must +// not be able to create or write files through a symlinked directory that +// escapes their scope. +func TestTusHandlersRejectSymlinkScopeEscape(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + outside := filepath.Join(root, "otheruser") + for _, d := range []string{userScope, outside} { + if err := os.MkdirAll(d, 0o755); err != nil { + t.Fatal(err) + } + } + // A directory symlink inside the user's scope pointing outside it. + if err := os.Symlink(outside, filepath.Join(userScope, "escape_link")); err != nil { + t.Skipf("cannot create symlink: %v", err) + } + + key := []byte("test-signing-key") + + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := bolt.NewStorage(db) + if err != nil { + t.Fatalf("failed to get storage: %v", err) + } + if err := st.Users.Save(&users.User{ + Username: "u", + Password: "pw", + Perm: users.Permissions{Create: true, Modify: true}, + }); err != nil { + t.Fatalf("failed to save user: %v", err) + } + if err := st.Settings.Save(&settings.Settings{Key: key}); err != nil { + t.Fatalf("failed to save settings: %v", err) + } + st.Users = &customFSUser{ + Store: st.Users, + fs: files.NewScopedFs(afero.NewOsFs(), userScope), + } + + // Forge a valid auth token for user ID 1. + claims := &authToken{ + User: userInfo{ID: 1, Username: "u", Perm: users.Permissions{Create: true, Modify: true}}, + RegisteredClaims: jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(time.Now().Add(-time.Minute)), + ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)), + }, + } + signed, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(key) + if err != nil { + t.Fatalf("failed to sign token: %v", err) + } + + cases := map[string]struct { + method string + handler handleFunc + headers map[string]string + }{ + "POST create through symlinked dir": { + method: http.MethodPost, + handler: tusPostHandler(newMemoryUploadCache()), + headers: map[string]string{"Upload-Length": "20"}, + }, + "PATCH write through symlinked dir": { + method: http.MethodPatch, + handler: tusPatchHandler(newMemoryUploadCache()), + headers: map[string]string{"Content-Type": "application/offset+octet-stream", "Upload-Offset": "0"}, + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + req, err := http.NewRequest(tc.method, "escape_link/injected.txt", http.NoBody) + if err != nil { + t.Fatal(err) + } + req.Header.Set("X-Auth", signed) + for k, v := range tc.headers { + req.Header.Set(k, v) + } + + recorder := httptest.NewRecorder() + handler := handle(tc.handler, "", st, &settings.Server{}) + handler.ServeHTTP(recorder, req) + + if recorder.Code != http.StatusForbidden { + t.Errorf("expected 403, got %d", recorder.Code) + } + if _, statErr := os.Stat(filepath.Join(outside, "injected.txt")); statErr == nil { + t.Errorf("VULNERABLE: file was created outside the user's scope") + } + }) + } +} diff --git a/http/tus_upload_length_test.go b/http/tus_upload_length_test.go new file mode 100644 index 00000000..b55ed78f --- /dev/null +++ b/http/tus_upload_length_test.go @@ -0,0 +1,73 @@ +package fbhttp + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/filebrowser/filebrowser/v2/settings" + "github.com/filebrowser/filebrowser/v2/users" +) + +// A TUS PATCH must not write more than the declared Upload-Length. A client that +// declares a small length and then streams a large body must be rejected without +// the excess being written to disk, while a correctly-sized upload still works. +func TestTusPatchEnforcesUploadLength(t *testing.T) { + root := t.TempDir() + userScope := filepath.Join(root, "user") + if err := os.MkdirAll(userScope, 0o755); err != nil { + t.Fatal(err) + } + + key := []byte("test-signing-key") + perm := users.Permissions{Create: true, Modify: true} + st := scopedUserStorage(t, userScope, perm, key) + signed := signToken(t, perm, key) + + cache := newMemoryUploadCache() + t.Cleanup(cache.Close) + post := handle(tusPostHandler(cache), "", st, &settings.Server{}) + patch := handle(tusPatchHandler(cache), "", st, &settings.Server{}) + + patchReq := func(body string) *httptest.ResponseRecorder { + req, _ := http.NewRequest(http.MethodPatch, "/file.txt", strings.NewReader(body)) + req.Header.Set("X-Auth", signed) + req.Header.Set("Content-Type", "application/offset+octet-stream") + req.Header.Set("Upload-Offset", "0") + rec := httptest.NewRecorder() + patch.ServeHTTP(rec, req) + return rec + } + + // Create an upload that declares only 5 bytes. + reqPost, _ := http.NewRequest(http.MethodPost, "/file.txt", http.NoBody) + reqPost.Header.Set("X-Auth", signed) + reqPost.Header.Set("Upload-Length", "5") + recPost := httptest.NewRecorder() + post.ServeHTTP(recPost, reqPost) + if recPost.Code != http.StatusCreated { + t.Fatalf("POST expected 201, got %d body=%q", recPost.Code, recPost.Body.String()) + } + + // A body far larger than the declared length must be rejected, and nothing + // beyond the declared length may reach disk. + if rec := patchReq(strings.Repeat("A", 5000)); rec.Code != http.StatusRequestEntityTooLarge { + t.Fatalf("over-length PATCH expected 413, got %d body=%q", rec.Code, rec.Body.String()) + } + if fi, err := os.Stat(filepath.Join(userScope, "file.txt")); err != nil { + t.Fatalf("stat file.txt: %v", err) + } else if fi.Size() > 5 { + t.Fatalf("wrote %d bytes despite Upload-Length 5", fi.Size()) + } + + // A correctly-sized upload still completes. + if rec := patchReq("hello"); rec.Code != http.StatusNoContent { + t.Fatalf("valid PATCH expected 204, got %d body=%q", rec.Code, rec.Body.String()) + } + if data, _ := os.ReadFile(filepath.Join(userScope, "file.txt")); string(data) != "hello" { + t.Fatalf("expected file content \"hello\", got %q", string(data)) + } +} diff --git a/http/upload_cache_memory.go b/http/upload_cache_memory.go new file mode 100644 index 00000000..8bb8cc89 --- /dev/null +++ b/http/upload_cache_memory.go @@ -0,0 +1,101 @@ +package fbhttp + +import ( + "context" + "fmt" + "time" + + "github.com/jellydator/ttlcache/v3" +) + +const uploadCacheTTL = 3 * time.Minute + +// UploadCache is an interface for tracking active uploads. +// Allows for different backends (e.g. in-memory or redis) +// to support both single instance and multi replica deployments. +type UploadCache interface { + // Register stores an upload with its expected file size. remove is called if + // the upload expires before completion, to delete the partial file; it must + // route through the uploading user's scoped filesystem so that eviction + // cannot follow a symlink out of the user's scope. + Register(filePath string, fileSize int64, remove func() error) + + // Complete removes an upload from the cache + Complete(filePath string) + + // GetLength returns the expected file size for an active upload + GetLength(filePath string) (int64, error) + + // Touch refreshes the TTL for an active upload + Touch(filePath string) + + // Close cleans up any resources + Close() +} + +// memoryUploadEntry is the value stored for each active upload. +type memoryUploadEntry struct { + size int64 + remove func() error +} + +// memoryUploadCache is an upload cache for single replica deployments +type memoryUploadCache struct { + cache *ttlcache.Cache[string, memoryUploadEntry] +} + +func newMemoryUploadCache() *memoryUploadCache { + cache := ttlcache.New[string, memoryUploadEntry]() + cache.OnEviction(func(_ context.Context, reason ttlcache.EvictionReason, item *ttlcache.Item[string, memoryUploadEntry]) { + if reason == ttlcache.EvictionReasonExpired { + fmt.Printf("deleting incomplete upload file: \"%s\"\n", item.Key()) + // Delete through the scoped removal callback rather than a raw + // os.Remove on the cached path, so an ancestor directory swapped for + // a symlink during the TTL window cannot redirect the delete outside + // the user's scope. + if remove := item.Value().remove; remove != nil { + if err := remove(); err != nil { + fmt.Printf("failed to delete incomplete upload file %q: %v\n", item.Key(), err) + } + } + } + }) + go cache.Start() + + return &memoryUploadCache{cache: cache} +} + +func (c *memoryUploadCache) Register(filePath string, fileSize int64, remove func() error) { + c.cache.Set(filePath, memoryUploadEntry{size: fileSize, remove: remove}, uploadCacheTTL) +} + +func (c *memoryUploadCache) Complete(filePath string) { + c.cache.Delete(filePath) +} + +func (c *memoryUploadCache) GetLength(filePath string) (int64, error) { + item := c.cache.Get(filePath) + if item == nil { + return 0, fmt.Errorf("no active upload found for the given path") + } + return item.Value().size, nil +} + +func (c *memoryUploadCache) Touch(filePath string) { + c.cache.Touch(filePath) +} + +func (c *memoryUploadCache) Close() { + c.cache.Stop() +} + +// NewUploadCache creates a new upload cache. +// If redisURL is empty, an in-memory cache will be used (suitable for single instance deployments). +// Otherwise, Redis will be used for the cache (suitable for multi-instance deployments). +// The redisURL can include credentials, e.g. redis://user:pass@host:port +func NewUploadCache(redisURL string) (UploadCache, error) { + if redisURL != "" { + return newRedisUploadCache(redisURL) + } + return newMemoryUploadCache(), nil +} diff --git a/http/upload_cache_memory_test.go b/http/upload_cache_memory_test.go new file mode 100644 index 00000000..399d6078 --- /dev/null +++ b/http/upload_cache_memory_test.go @@ -0,0 +1,42 @@ +package fbhttp + +import ( + "os" + "path/filepath" + "sync" + "testing" + "time" +) + +// On expiry the memory upload cache must delete an abandoned upload through the +// registered scoped removal callback, not with a raw os.Remove on the cached +// path. This test registers an entry keyed by a real file's path whose callback +// does not delete the file; if the old raw os.Remove behaviour were still in +// place the file (whose path is the key) would be removed. +func TestMemoryUploadCacheEvictionUsesRemovalCallback(t *testing.T) { + c := newMemoryUploadCache() + t.Cleanup(c.Close) + + f := filepath.Join(t.TempDir(), "partial.upload") + if err := os.WriteFile(f, []byte("x"), 0o644); err != nil { + t.Fatal(err) + } + + done := make(chan struct{}) + var once sync.Once + // Deliberately do NOT delete the file here. + c.cache.Set(f, memoryUploadEntry{size: 1, remove: func() error { + once.Do(func() { close(done) }) + return nil + }}, time.Millisecond) + + select { + case <-done: + case <-time.After(2 * time.Second): + t.Fatal("eviction did not invoke the removal callback") + } + + if _, err := os.Stat(f); err != nil { + t.Fatalf("file at the cache key was deleted, so eviction bypassed the callback (raw os.Remove?): %v", err) + } +} diff --git a/http/upload_cache_redis.go b/http/upload_cache_redis.go new file mode 100644 index 00000000..ff3d5123 --- /dev/null +++ b/http/upload_cache_redis.go @@ -0,0 +1,86 @@ +package fbhttp + +import ( + "context" + "errors" + "fmt" + "log" + "strconv" + + "github.com/redis/go-redis/v9" +) + +// redisUploadCache is an upload cache for multi replica deployments +type redisUploadCache struct { + client *redis.Client +} + +func newRedisUploadCache(redisURL string) (*redisUploadCache, error) { + if redisURL == "" { + return nil, fmt.Errorf("redis URL is required") + } + + opts, err := redis.ParseURL(redisURL) + if err != nil { + return nil, fmt.Errorf("invalid redis URL: %w", err) + } + + client := redis.NewClient(opts) + + // Test connection + if err := client.Ping(context.Background()).Err(); err != nil { + return nil, fmt.Errorf("failed to connect to redis: %w", err) + } + + return &redisUploadCache{client: client}, nil +} + +func (c *redisUploadCache) filePathKey(filePath string) string { + return "filebrowser:upload:" + filePath +} + +// Register stores the upload length. The scoped removal callback is unused by +// the redis backend, which does not delete partial files on eviction. +func (c *redisUploadCache) Register(filePath string, fileSize int64, _ func() error) { + err := c.client.Set(context.Background(), c.filePathKey(filePath), fileSize, uploadCacheTTL).Err() + if err != nil { + log.Printf("failed to register upload in redis cache: %v", err) + } +} + +func (c *redisUploadCache) Complete(filePath string) { + err := c.client.Del(context.Background(), c.filePathKey(filePath)).Err() + if err != nil { + log.Printf("failed to complete upload in redis cache: %v", err) + } +} + +func (c *redisUploadCache) GetLength(filePath string) (int64, error) { + result, err := c.client.Get(context.Background(), c.filePathKey(filePath)).Result() + if err != nil { + if errors.Is(err, redis.Nil) { + return 0, fmt.Errorf("no active upload found for the given path") + } + return 0, fmt.Errorf("redis error: %w", err) + } + + size, err := strconv.ParseInt(result, 10, 64) + if err != nil { + return 0, fmt.Errorf("invalid upload length in cache: %w", err) + } + + c.Touch(filePath) + + return size, nil +} + +func (c *redisUploadCache) Touch(filePath string) { + err := c.client.Expire(context.Background(), c.filePathKey(filePath), uploadCacheTTL).Err() + if err != nil { + log.Printf("failed to touch upload in redis cache: %v", err) + } +} + +func (c *redisUploadCache) Close() { + c.client.Close() +} diff --git a/http/users.go b/http/users.go index ee05ef1c..13092e3e 100644 --- a/http/users.go +++ b/http/users.go @@ -1,7 +1,8 @@ -package http +package fbhttp import ( "encoding/json" + "errors" "log" "net/http" "sort" @@ -9,11 +10,18 @@ import ( "strings" "github.com/gorilla/mux" + "golang.org/x/text/cases" + "golang.org/x/text/language" - "github.com/filebrowser/filebrowser/v2/errors" + "github.com/filebrowser/filebrowser/v2/auth" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/users" ) +var ( + NonModifiableFieldsForNonAdmin = []string{"Username", "Scope", "LockPassword", "Perm", "Commands", "Rules"} +) + type modifyUserRequest struct { modifyRequest Data *users.User `json:"data"` @@ -30,7 +38,7 @@ func getUserID(r *http.Request) (uint, error) { func getUser(_ http.ResponseWriter, r *http.Request) (*modifyUserRequest, error) { if r.Body == nil { - return nil, errors.ErrEmptyRequest + return nil, fberrors.ErrEmptyRequest } req := &modifyUserRequest{} @@ -40,7 +48,7 @@ func getUser(_ http.ResponseWriter, r *http.Request) (*modifyUserRequest, error) } if req.What != "user" { - return nil, errors.ErrInvalidDataType + return nil, fberrors.ErrInvalidDataType } return req, nil @@ -63,7 +71,7 @@ func withSelfOrAdmin(fn handleFunc) handleFunc { } var usersGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - users, err := d.store.Users.Gets(d.server.Root) + users, err := d.store.Users.Gets(d.server.Root, d.server.FollowExternalSymlinks) if err != nil { return http.StatusInternalServerError, err } @@ -80,8 +88,8 @@ var usersGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d * }) var userGetHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { - u, err := d.store.Users.Get(d.server.Root, d.raw.(uint)) - if err == errors.ErrNotExist { + u, err := d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, d.raw.(uint)) + if errors.Is(err, fberrors.ErrNotExist) { return http.StatusNotFound, err } @@ -90,13 +98,34 @@ var userGetHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request } u.Password = "" + if !d.user.Perm.Admin { + u.Scope = "" + } return renderJSON(w, r, u) }) -var userDeleteHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { +var userDeleteHandler = withSelfOrAdmin(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { + if r.Body == nil { + return http.StatusBadRequest, fberrors.ErrEmptyRequest + } + + var body struct { + CurrentPassword string `json:"current_password"` + } + + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return http.StatusBadRequest, err + } + + if d.settings.AuthMethod == auth.MethodJSONAuth { + if !users.CheckPwd(body.CurrentPassword, d.user.Password) { + return http.StatusBadRequest, fberrors.ErrCurrentPasswordIncorrect + } + } + err := d.store.Users.Delete(d.raw.(uint)) - if err == errors.ErrNotExist { - return http.StatusNotFound, err + if err != nil { + return errToStatus(err), err } return http.StatusOK, nil @@ -108,17 +137,27 @@ var userPostHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d * return http.StatusBadRequest, err } + if d.settings.AuthMethod == auth.MethodJSONAuth { + if !users.CheckPwd(req.CurrentPassword, d.user.Password) { + return http.StatusBadRequest, fberrors.ErrCurrentPasswordIncorrect + } + } + if len(req.Which) != 0 { return http.StatusBadRequest, nil } if req.Data.Password == "" { - return http.StatusBadRequest, errors.ErrEmptyPassword + return http.StatusBadRequest, fberrors.ErrEmptyPassword } - req.Data.Password, err = users.HashPwd(req.Data.Password) + req.Data.Password, err = users.ValidateAndHashPwd(req.Data.Password, d.settings.MinimumPasswordLength) if err != nil { - return http.StatusInternalServerError, err + return http.StatusBadRequest, err + } + + if req.Data.Perm.Share && !req.Data.Perm.Download { + return http.StatusBadRequest, fberrors.ErrShareRequiresDownload } userHome, err := d.settings.MakeUserDir(req.Data.Username, req.Data.Scope, d.server.Root) @@ -144,47 +183,81 @@ var userPutHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request return http.StatusBadRequest, err } + if d.settings.AuthMethod == auth.MethodJSONAuth { + var sensibleFields = map[string]struct{}{ + "all": {}, + "username": {}, + "password": {}, + "scope": {}, + "lockPassword": {}, + "commands": {}, + "perm": {}, + } + + for _, field := range req.Which { + if _, ok := sensibleFields[strings.ToLower(field)]; ok { + if !users.CheckPwd(req.CurrentPassword, d.user.Password) { + return http.StatusBadRequest, fberrors.ErrCurrentPasswordIncorrect + } + break + } + } + } + if req.Data.ID != d.raw.(uint) { return http.StatusBadRequest, nil } - if len(req.Which) == 1 && req.Which[0] == "all" { + for _, field := range req.Which { + if strings.ToLower(field) == "perm" || strings.ToLower(field) == "all" { + if req.Data.Perm.Share && !req.Data.Perm.Download { + return http.StatusBadRequest, fberrors.ErrShareRequiresDownload + } + } + } + + if len(req.Which) == 0 || (len(req.Which) == 1 && req.Which[0] == "all") { if !d.user.Perm.Admin { - return http.StatusForbidden, err + return http.StatusForbidden, nil } if req.Data.Password != "" { - req.Data.Password, err = users.HashPwd(req.Data.Password) + req.Data.Password, err = users.ValidateAndHashPwd(req.Data.Password, d.settings.MinimumPasswordLength) + if err != nil { + return http.StatusBadRequest, err + } } else { var suser *users.User - suser, err = d.store.Users.Get(d.server.Root, d.raw.(uint)) + suser, err = d.store.Users.Get(d.server.Root, d.server.FollowExternalSymlinks, d.raw.(uint)) + if err != nil { + return http.StatusInternalServerError, err + } req.Data.Password = suser.Password } - if err != nil { - return http.StatusInternalServerError, err - } - req.Which = []string{} } for k, v := range req.Which { - if v == "password" { + v = cases.Title(language.English, cases.NoLower).String(v) + req.Which[k] = v + + if v == "Password" { if !d.user.Perm.Admin && d.user.LockPassword { return http.StatusForbidden, nil } - req.Data.Password, err = users.HashPwd(req.Data.Password) + req.Data.Password, err = users.ValidateAndHashPwd(req.Data.Password, d.settings.MinimumPasswordLength) if err != nil { - return http.StatusInternalServerError, err + return http.StatusBadRequest, err } } - if !d.user.Perm.Admin && (v == "scope" || v == "perm" || v == "username") { - return http.StatusForbidden, nil + for _, f := range NonModifiableFieldsForNonAdmin { + if !d.user.Perm.Admin && v == f { + return http.StatusForbidden, nil + } } - - req.Which[k] = strings.Title(v) } err = d.store.Users.Update(req.Data, req.Which...) diff --git a/http/utils.go b/http/utils.go index a8eac8ae..4163941b 100644 --- a/http/utils.go +++ b/http/utils.go @@ -1,4 +1,4 @@ -package http +package fbhttp import ( "encoding/json" @@ -6,11 +6,56 @@ import ( "net/http" "net/url" "os" + gopath "path" + "path/filepath" "strings" libErrors "github.com/filebrowser/filebrowser/v2/errors" + imgErrors "github.com/filebrowser/filebrowser/v2/img" ) +// slashClean canonicalizes a virtual path to the absolute, "/"-separated, +// lexically cleaned form that both the rule checker and the scoped filesystem +// expect. +// +// Paths reach us either verbatim from a request or built by the OS — afero.Walk +// and filepath.Join use "\" on Windows. There the filesystem resolves "\" as a +// separator while the rule checker treated it as an ordinary character, so +// "/allow\..\Secret.txt" evaded a rule for "/Secret.txt" and still opened it. +// Normalizing with the host's own separator makes both layers agree on which +// file a path names, and is a no-op on POSIX, where "\" is a legal character in +// a filename and must stay one. +func slashClean(name string) string { + return cleanSeparators(name, string(filepath.Separator)) +} + +// canonicalizeRequestPath rewrites the request path to its canonical virtual +// form, so that the filesystem operation, the hook, the stored share record and +// the thumbnail cache key all use the same string the rule check approved. +// +// A trailing separator is preserved: handlers distinguish "/dir/" from "/dir" +// to decide whether to create a directory, and gopath.Clean would drop it. +func canonicalizeRequestPath(r *http.Request) { + p := slashClean(r.URL.Path) + trailing := strings.HasSuffix(r.URL.Path, "/") || strings.HasSuffix(r.URL.Path, string(filepath.Separator)) + if p != "/" && trailing { + p += "/" + } + r.URL.Path = p +} + +// cleanSeparators is slashClean with the host separator passed in explicitly, +// so the Windows behaviour can be exercised on any platform. +func cleanSeparators(name, sep string) string { + if sep != "/" { + name = strings.ReplaceAll(name, sep, "/") + } + if name == "" || name[0] != '/' { + name = "/" + name + } + return gopath.Clean(name) +} + func renderJSON(w http.ResponseWriter, _ *http.Request, data interface{}) (int, error) { marsh, err := json.Marshal(data) @@ -20,7 +65,10 @@ func renderJSON(w http.ResponseWriter, _ *http.Request, data interface{}) (int, w.Header().Set("Content-Type", "application/json; charset=utf-8") if _, err := w.Write(marsh); err != nil { - return http.StatusInternalServerError, err + // The status line is already on the wire, so there is no error status + // left to send: a failed write here means the client hung up. Report it + // for the log without asking the caller to write a second header. + return 0, err } return 0, nil @@ -32,20 +80,24 @@ func errToStatus(err error) int { return http.StatusOK case os.IsPermission(err): return http.StatusForbidden - case os.IsNotExist(err), err == libErrors.ErrNotExist: + case os.IsNotExist(err), errors.Is(err, libErrors.ErrNotExist): return http.StatusNotFound - case os.IsExist(err), err == libErrors.ErrExist: + case os.IsExist(err), errors.Is(err, libErrors.ErrExist): return http.StatusConflict case errors.Is(err, libErrors.ErrPermissionDenied): return http.StatusForbidden case errors.Is(err, libErrors.ErrInvalidRequestParams): return http.StatusBadRequest + case errors.Is(err, libErrors.ErrRootUserDeletion): + return http.StatusForbidden + case errors.Is(err, imgErrors.ErrImageTooLarge): + return http.StatusRequestEntityTooLarge default: return http.StatusInternalServerError } } -// This is an addaptation if http.StripPrefix in which we don't +// This is an adaptation if http.StripPrefix in which we don't // return 404 if the page doesn't have the needed prefix. func stripPrefix(prefix string, h http.Handler) http.Handler { if prefix == "" || prefix == "/" { @@ -54,11 +106,22 @@ func stripPrefix(prefix string, h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { p := strings.TrimPrefix(r.URL.Path, prefix) + rp := strings.TrimPrefix(r.URL.RawPath, prefix) + + // If the path is exactly the prefix (no trailing slash), redirect to + // the prefix with a trailing slash so the router receives "/" instead + // of "", which would otherwise cause a redirect to the site root. + if p == "" { + http.Redirect(w, r, prefix+"/", http.StatusMovedPermanently) + return + } + r2 := new(http.Request) *r2 = *r r2.URL = new(url.URL) *r2.URL = *r.URL r2.URL.Path = p + r2.URL.RawPath = rp h.ServeHTTP(w, r2) }) } diff --git a/http/utils_test.go b/http/utils_test.go new file mode 100644 index 00000000..4f118f83 --- /dev/null +++ b/http/utils_test.go @@ -0,0 +1,45 @@ +package fbhttp + +import "testing" + +// cleanSeparators takes the host separator explicitly so the Windows behaviour +// can be asserted from any platform. See GHSA-fgm5-pw99-w2p7: on Windows a +// backslash is a path separator the filesystem resolves but the rule checker +// used to treat as an ordinary character, so "/allow\..\Secret.txt" evaded a +// rule for "/Secret.txt" and still opened it. +func TestCleanSeparators(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + in string + sep string + want string + }{ + // Windows: a backslash is a separator and must be resolved before the + // path is matched against a rule. + {"windows traversal", `/allow\..\Secret.txt`, `\`, "/Secret.txt"}, + {"windows leading backslash", `\Secret.txt`, `\`, "/Secret.txt"}, + {"windows mixed separators", `/a/b\..\..\c`, `\`, "/c"}, + {"windows already canonical", "/Secret.txt", `\`, "/Secret.txt"}, + {"windows relative", `allow\..\Secret.txt`, `\`, "/Secret.txt"}, + {"windows empty", "", `\`, "/"}, + + // POSIX: a backslash is a legal filename character and must survive, or + // files named with one become unreachable. + {"posix backslash is a filename character", `/a\b.txt`, "/", `/a\b.txt`}, + {"posix traversal", "/allow/../Secret.txt", "/", "/Secret.txt"}, + {"posix relative", "Secret.txt", "/", "/Secret.txt"}, + {"posix multiple slashes", "//a///b", "/", "/a/b"}, + {"posix empty", "", "/", "/"}, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + if got := cleanSeparators(tc.in, tc.sep); got != tc.want { + t.Errorf("cleanSeparators(%q, %q) = %q; want %q", tc.in, tc.sep, got, tc.want) + } + }) + } +} diff --git a/img/service.go b/img/service.go new file mode 100644 index 00000000..47aaddca --- /dev/null +++ b/img/service.go @@ -0,0 +1,259 @@ +//go:generate go-enum --sql --marshal --file $GOFILE +package img + +import ( + "bytes" + "context" + "errors" + "fmt" + "image" + "io" + + "github.com/disintegration/imaging" + "github.com/dsoprea/go-exif/v3" + "github.com/marusama/semaphore/v2" + + exifcommon "github.com/dsoprea/go-exif/v3/common" +) + +// ErrUnsupportedFormat means the given image format is not supported. +var ErrUnsupportedFormat = errors.New("unsupported image format") + +// ErrImageTooLarge means the image is too large to create a thumbnail. +var ErrImageTooLarge = errors.New("image too large for thumbnail generation") + +// Maximum dimensions for thumbnail generation to prevent server crashes +const ( + MaxImageWidth = 10000 + MaxImageHeight = 10000 +) + +// Service +type Service struct { + sem semaphore.Semaphore +} + +func New(workers int) *Service { + return &Service{ + sem: semaphore.New(workers), + } +} + +// Format is an image file format. +/* +ENUM( +jpeg +png +gif +tiff +bmp +) +*/ +type Format int + +func (x Format) toImaging() imaging.Format { + switch x { + case FormatJpeg: + return imaging.JPEG + case FormatPng: + return imaging.PNG + case FormatGif: + return imaging.GIF + case FormatTiff: + return imaging.TIFF + case FormatBmp: + return imaging.BMP + default: + return imaging.JPEG + } +} + +/* +ENUM( +high +medium +low +) +*/ +type Quality int + +func (x Quality) resampleFilter() imaging.ResampleFilter { + switch x { + case QualityHigh: + return imaging.Lanczos + case QualityMedium: + return imaging.Box + case QualityLow: + return imaging.NearestNeighbor + default: + return imaging.Box + } +} + +/* +ENUM( +fit +fill +) +*/ +type ResizeMode int + +func (s *Service) FormatFromExtension(ext string) (Format, error) { + format, err := imaging.FormatFromExtension(ext) + if err != nil { + return -1, ErrUnsupportedFormat + } + switch format { + case imaging.JPEG: + return FormatJpeg, nil + case imaging.PNG: + return FormatPng, nil + case imaging.GIF: + return FormatGif, nil + case imaging.TIFF: + return FormatTiff, nil + case imaging.BMP: + return FormatBmp, nil + } + return -1, ErrUnsupportedFormat +} + +type resizeConfig struct { + format Format + resizeMode ResizeMode + quality Quality +} + +type Option func(*resizeConfig) + +func WithFormat(format Format) Option { + return func(config *resizeConfig) { + config.format = format + } +} + +func WithMode(mode ResizeMode) Option { + return func(config *resizeConfig) { + config.resizeMode = mode + } +} + +func WithQuality(quality Quality) Option { + return func(config *resizeConfig) { + config.quality = quality + } +} + +func (s *Service) Resize(ctx context.Context, in io.Reader, width, height int, out io.Writer, options ...Option) error { + if err := s.sem.Acquire(ctx, 1); err != nil { + return err + } + defer s.sem.Release(1) + + format, wrappedReader, err := s.detectFormat(in) + if err != nil { + return err + } + + config := resizeConfig{ + format: format, + resizeMode: ResizeModeFit, + quality: QualityMedium, + } + for _, option := range options { + option(&config) + } + + if config.quality == QualityLow && format == FormatJpeg { + thm, newWrappedReader, errThm := getEmbeddedThumbnail(wrappedReader) + wrappedReader = newWrappedReader + if errThm == nil { + _, err = out.Write(thm) + if err == nil { + return nil + } + } + } + + img, err := imaging.Decode(wrappedReader, imaging.AutoOrientation(true)) + if err != nil { + return err + } + + switch config.resizeMode { + case ResizeModeFill: + img = imaging.Fill(img, width, height, imaging.Center, config.quality.resampleFilter()) + case ResizeModeFit: + fallthrough + default: + img = imaging.Fit(img, width, height, config.quality.resampleFilter()) + } + + return imaging.Encode(out, img, config.format.toImaging()) +} + +func (s *Service) detectFormat(in io.Reader) (Format, io.Reader, error) { + buf := &bytes.Buffer{} + r := io.TeeReader(in, buf) + + imgConfig, imgFormat, err := image.DecodeConfig(r) + if err != nil { + return 0, nil, fmt.Errorf("%s: %w", err.Error(), ErrUnsupportedFormat) + } + + // Check if image dimensions exceed maximum allowed size + if imgConfig.Width > MaxImageWidth || imgConfig.Height > MaxImageHeight { + return 0, nil, fmt.Errorf("image dimensions %dx%d exceed maximum %dx%d: %w", + imgConfig.Width, imgConfig.Height, MaxImageWidth, MaxImageHeight, ErrImageTooLarge) + } + + format, err := ParseFormat(imgFormat) + if err != nil { + return 0, nil, ErrUnsupportedFormat + } + + return format, io.MultiReader(buf, in), nil +} + +func getEmbeddedThumbnail(in io.Reader) ([]byte, io.Reader, error) { + buf := &bytes.Buffer{} + r := io.TeeReader(in, buf) + wrappedReader := io.MultiReader(buf, in) + + offset := 0 + offsets := []int{12, 30} + head := make([]byte, 0xffff) + + _, err := r.Read(head) + if err != nil { + return nil, wrappedReader, err + } + + for _, offset = range offsets { + if _, err = exif.ParseExifHeader(head[offset:]); err == nil { + break + } + } + + if err != nil { + return nil, wrappedReader, err + } + + im, err := exifcommon.NewIfdMappingWithStandard() + if err != nil { + return nil, wrappedReader, err + } + + _, index, err := exif.Collect(im, exif.NewTagIndex(), head[offset:]) + if err != nil { + return nil, wrappedReader, err + } + + ifd := index.RootIfd.NextIfd() + if ifd == nil { + return nil, wrappedReader, exif.ErrNoThumbnail + } + + thm, err := ifd.Thumbnail() + return thm, wrappedReader, err +} diff --git a/img/service_enum.go b/img/service_enum.go new file mode 100644 index 00000000..33826438 --- /dev/null +++ b/img/service_enum.go @@ -0,0 +1,259 @@ +// Code generated by go-enum +// DO NOT EDIT! + +package img + +import ( + "database/sql/driver" + "fmt" +) + +const ( + // FormatJpeg is a Format of type Jpeg + FormatJpeg Format = iota + // FormatPng is a Format of type Png + FormatPng + // FormatGif is a Format of type Gif + FormatGif + // FormatTiff is a Format of type Tiff + FormatTiff + // FormatBmp is a Format of type Bmp + FormatBmp +) + +const _FormatName = "jpegpnggiftiffbmp" + +var _FormatMap = map[Format]string{ + 0: _FormatName[0:4], + 1: _FormatName[4:7], + 2: _FormatName[7:10], + 3: _FormatName[10:14], + 4: _FormatName[14:17], +} + +// String implements the Stringer interface. +func (x Format) String() string { + if str, ok := _FormatMap[x]; ok { + return str + } + return fmt.Sprintf("Format(%d)", x) +} + +var _FormatValue = map[string]Format{ + _FormatName[0:4]: 0, + _FormatName[4:7]: 1, + _FormatName[7:10]: 2, + _FormatName[10:14]: 3, + _FormatName[14:17]: 4, +} + +// ParseFormat attempts to convert a string to a Format +func ParseFormat(name string) (Format, error) { + if x, ok := _FormatValue[name]; ok { + return x, nil + } + return Format(0), fmt.Errorf("%s is not a valid Format", name) +} + +// MarshalText implements the text marshaller method +func (x Format) MarshalText() ([]byte, error) { + return []byte(x.String()), nil +} + +// UnmarshalText implements the text unmarshaller method +func (x *Format) UnmarshalText(text []byte) error { + name := string(text) + tmp, err := ParseFormat(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Scan implements the Scanner interface. +func (x *Format) Scan(value interface{}) error { + var name string + + switch v := value.(type) { + case string: + name = v + case []byte: + name = string(v) + case nil: + *x = Format(0) + return nil + } + + tmp, err := ParseFormat(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Value implements the driver Valuer interface. +func (x Format) Value() (driver.Value, error) { + return x.String(), nil +} + +const ( + // QualityHigh is a Quality of type High + QualityHigh Quality = iota + // QualityMedium is a Quality of type Medium + QualityMedium + // QualityLow is a Quality of type Low + QualityLow +) + +const _QualityName = "highmediumlow" + +var _QualityMap = map[Quality]string{ + 0: _QualityName[0:4], + 1: _QualityName[4:10], + 2: _QualityName[10:13], +} + +// String implements the Stringer interface. +func (x Quality) String() string { + if str, ok := _QualityMap[x]; ok { + return str + } + return fmt.Sprintf("Quality(%d)", x) +} + +var _QualityValue = map[string]Quality{ + _QualityName[0:4]: 0, + _QualityName[4:10]: 1, + _QualityName[10:13]: 2, +} + +// ParseQuality attempts to convert a string to a Quality +func ParseQuality(name string) (Quality, error) { + if x, ok := _QualityValue[name]; ok { + return x, nil + } + return Quality(0), fmt.Errorf("%s is not a valid Quality", name) +} + +// MarshalText implements the text marshaller method +func (x Quality) MarshalText() ([]byte, error) { + return []byte(x.String()), nil +} + +// UnmarshalText implements the text unmarshaller method +func (x *Quality) UnmarshalText(text []byte) error { + name := string(text) + tmp, err := ParseQuality(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Scan implements the Scanner interface. +func (x *Quality) Scan(value interface{}) error { + var name string + + switch v := value.(type) { + case string: + name = v + case []byte: + name = string(v) + case nil: + *x = Quality(0) + return nil + } + + tmp, err := ParseQuality(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Value implements the driver Valuer interface. +func (x Quality) Value() (driver.Value, error) { + return x.String(), nil +} + +const ( + // ResizeModeFit is a ResizeMode of type Fit + ResizeModeFit ResizeMode = iota + // ResizeModeFill is a ResizeMode of type Fill + ResizeModeFill +) + +const _ResizeModeName = "fitfill" + +var _ResizeModeMap = map[ResizeMode]string{ + 0: _ResizeModeName[0:3], + 1: _ResizeModeName[3:7], +} + +// String implements the Stringer interface. +func (x ResizeMode) String() string { + if str, ok := _ResizeModeMap[x]; ok { + return str + } + return fmt.Sprintf("ResizeMode(%d)", x) +} + +var _ResizeModeValue = map[string]ResizeMode{ + _ResizeModeName[0:3]: 0, + _ResizeModeName[3:7]: 1, +} + +// ParseResizeMode attempts to convert a string to a ResizeMode +func ParseResizeMode(name string) (ResizeMode, error) { + if x, ok := _ResizeModeValue[name]; ok { + return x, nil + } + return ResizeMode(0), fmt.Errorf("%s is not a valid ResizeMode", name) +} + +// MarshalText implements the text marshaller method +func (x ResizeMode) MarshalText() ([]byte, error) { + return []byte(x.String()), nil +} + +// UnmarshalText implements the text unmarshaller method +func (x *ResizeMode) UnmarshalText(text []byte) error { + name := string(text) + tmp, err := ParseResizeMode(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Scan implements the Scanner interface. +func (x *ResizeMode) Scan(value interface{}) error { + var name string + + switch v := value.(type) { + case string: + name = v + case []byte: + name = string(v) + case nil: + *x = ResizeMode(0) + return nil + } + + tmp, err := ParseResizeMode(name) + if err != nil { + return err + } + *x = tmp + return nil +} + +// Value implements the driver Valuer interface. +func (x ResizeMode) Value() (driver.Value, error) { + return x.String(), nil +} diff --git a/img/service_test.go b/img/service_test.go new file mode 100644 index 00000000..f37ab4c2 --- /dev/null +++ b/img/service_test.go @@ -0,0 +1,446 @@ +package img + +import ( + "bytes" + "context" + "image" + "image/gif" + "image/jpeg" + "image/png" + "io" + "testing" + + "github.com/spf13/afero" + "github.com/stretchr/testify/require" + "golang.org/x/image/bmp" + "golang.org/x/image/tiff" +) + +func TestService_Resize(t *testing.T) { + testCases := map[string]struct { + options []Option + width int + height int + source func(t *testing.T) afero.File + matcher func(t *testing.T, reader io.Reader) + wantErr bool + }{ + "fill upscale": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 50, 20) + }, + matcher: sizeMatcher(100, 100), + }, + "fill downscale": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "fit upscale": { + options: []Option{WithMode(ResizeModeFit)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 50, 20) + }, + matcher: sizeMatcher(50, 20), + }, + "fit downscale": { + options: []Option{WithMode(ResizeModeFit)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 75), + }, + "keep original format": { + options: []Option{}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayPng(t, 200, 150) + }, + matcher: formatMatcher(FormatPng), + }, + "convert to jpeg": { + options: []Option{WithFormat(FormatJpeg)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatJpeg), + }, + "convert to png": { + options: []Option{WithFormat(FormatPng)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatPng), + }, + "convert to gif": { + options: []Option{WithFormat(FormatGif)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatGif), + }, + "convert to tiff": { + options: []Option{WithFormat(FormatTiff)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatTiff), + }, + "convert to bmp": { + options: []Option{WithFormat(FormatBmp)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatBmp), + }, + "convert to unknown": { + options: []Option{WithFormat(Format(-1))}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: formatMatcher(FormatJpeg), + }, + "resize png": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayPng(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize gif": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayGif(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize tiff": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayTiff(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize bmp": { + options: []Option{WithMode(ResizeModeFill)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayBmp(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize with high quality": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityHigh)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize with medium quality": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityMedium)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize with low quality": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityLow)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "resize with unknown quality": { + options: []Option{WithMode(ResizeModeFill), WithQuality(Quality(-1))}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return newGrayJpeg(t, 200, 150) + }, + matcher: sizeMatcher(100, 100), + }, + "get thumbnail from file with APP0 JFIF": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityLow)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return openFile(t, "testdata/gray-sample.jpg") + }, + matcher: sizeMatcher(125, 128), + }, + "get thumbnail from file without APP0 JFIF": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityLow)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return openFile(t, "testdata/20130612_142406.jpg") + }, + matcher: sizeMatcher(320, 240), + }, + "resize from file without IFD1 thumbnail": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityLow)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return openFile(t, "testdata/IMG_2578.JPG") + }, + matcher: sizeMatcher(100, 100), + }, + "resize for higher quality levels": { + options: []Option{WithMode(ResizeModeFill), WithQuality(QualityMedium)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + return openFile(t, "testdata/gray-sample.jpg") + }, + matcher: sizeMatcher(100, 100), + }, + "broken file": { + options: []Option{WithMode(ResizeModeFit)}, + width: 100, + height: 100, + source: func(t *testing.T) afero.File { + t.Helper() + fs := afero.NewMemMapFs() + file, err := fs.Create("image.jpg") + require.NoError(t, err) + + _, err = file.WriteString("this is not an image") + require.NoError(t, err) + + return file + }, + wantErr: true, + }, + } + + for name, test := range testCases { + t.Run(name, func(t *testing.T) { + svc := New(1) + source := test.source(t) + defer source.Close() + + buf := &bytes.Buffer{} + err := svc.Resize(context.Background(), source, test.width, test.height, buf, test.options...) + if (err != nil) != test.wantErr { + t.Fatalf("GetMarketSpecs() error = %v, wantErr %v", err, test.wantErr) + } + if err != nil { + return + } + test.matcher(t, buf) + }) + } +} + +func sizeMatcher(width, height int) func(t *testing.T, reader io.Reader) { + return func(t *testing.T, reader io.Reader) { + resizedImg, _, err := image.Decode(reader) + require.NoError(t, err) + + require.Equal(t, width, resizedImg.Bounds().Dx()) + require.Equal(t, height, resizedImg.Bounds().Dy()) + } +} + +func formatMatcher(format Format) func(t *testing.T, reader io.Reader) { + return func(t *testing.T, reader io.Reader) { + _, decodedFormat, err := image.DecodeConfig(reader) + require.NoError(t, err) + + require.Equal(t, format.String(), decodedFormat) + } +} + +func newGrayJpeg(t *testing.T, width, height int) afero.File { + fs := afero.NewMemMapFs() + file, err := fs.Create("image.jpg") + require.NoError(t, err) + + img := image.NewGray(image.Rect(0, 0, width, height)) + err = jpeg.Encode(file, img, &jpeg.Options{Quality: 90}) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + return file +} + +func newGrayPng(t *testing.T, width, height int) afero.File { + fs := afero.NewMemMapFs() + file, err := fs.Create("image.png") + require.NoError(t, err) + + img := image.NewGray(image.Rect(0, 0, width, height)) + err = png.Encode(file, img) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + return file +} + +func newGrayGif(t *testing.T, width, height int) afero.File { + fs := afero.NewMemMapFs() + file, err := fs.Create("image.gif") + require.NoError(t, err) + + img := image.NewGray(image.Rect(0, 0, width, height)) + err = gif.Encode(file, img, nil) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + return file +} + +func newGrayTiff(t *testing.T, width, height int) afero.File { + fs := afero.NewMemMapFs() + file, err := fs.Create("image.tiff") + require.NoError(t, err) + + img := image.NewGray(image.Rect(0, 0, width, height)) + err = tiff.Encode(file, img, nil) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + return file +} + +func newGrayBmp(t *testing.T, width, height int) afero.File { + fs := afero.NewMemMapFs() + file, err := fs.Create("image.bmp") + require.NoError(t, err) + + img := image.NewGray(image.Rect(0, 0, width, height)) + err = bmp.Encode(file, img) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + return file +} + +func openFile(t *testing.T, name string) afero.File { + appfs := afero.NewOsFs() + file, err := appfs.Open(name) + + require.NoError(t, err) + + return file +} + +func TestService_FormatFromExtension(t *testing.T) { + testCases := map[string]struct { + ext string + want Format + wantErr error + }{ + "jpg": { + ext: ".jpg", + want: FormatJpeg, + }, + "jpeg": { + ext: ".jpeg", + want: FormatJpeg, + }, + "png": { + ext: ".png", + want: FormatPng, + }, + "gif": { + ext: ".gif", + want: FormatGif, + }, + "tiff": { + ext: ".tiff", + want: FormatTiff, + }, + "bmp": { + ext: ".bmp", + want: FormatBmp, + }, + "unknown": { + ext: ".mov", + wantErr: ErrUnsupportedFormat, + }, + } + + for name, test := range testCases { + t.Run(name, func(t *testing.T) { + svc := New(1) + got, err := svc.FormatFromExtension(test.ext) + require.ErrorIsf(t, err, test.wantErr, "error = %v, wantErr %v", err, test.wantErr) + if err != nil { + return + } + require.Equal(t, test.want, got) + }) + } +} diff --git a/img/testdata/20130612_142406.jpg b/img/testdata/20130612_142406.jpg new file mode 100644 index 00000000..055c14b5 Binary files /dev/null and b/img/testdata/20130612_142406.jpg differ diff --git a/img/testdata/IMG_2578.JPG b/img/testdata/IMG_2578.JPG new file mode 100644 index 00000000..84f6fb50 Binary files /dev/null and b/img/testdata/IMG_2578.JPG differ diff --git a/img/testdata/gray-sample.jpg b/img/testdata/gray-sample.jpg new file mode 100644 index 00000000..a20a5899 Binary files /dev/null and b/img/testdata/gray-sample.jpg differ diff --git a/main.go b/main.go index fa8b9136..bde39461 100644 --- a/main.go +++ b/main.go @@ -1,12 +1,13 @@ package main import ( - "runtime" + "os" "github.com/filebrowser/filebrowser/v2/cmd" ) func main() { - runtime.GOMAXPROCS(runtime.NumCPU()) - cmd.Execute() + if err := cmd.Execute(); err != nil { + os.Exit(1) + } } diff --git a/rules/rules.go b/rules/rules.go index 548332a4..e10b2e37 100644 --- a/rules/rules.go +++ b/rules/rules.go @@ -1,6 +1,7 @@ package rules import ( + "path/filepath" "regexp" "strings" ) @@ -18,13 +19,40 @@ type Rule struct { Regexp *Regexp `json:"regexp"` } -// Matches matches a path against a rule. -func (r *Rule) Matches(path string) bool { +// MatchHidden matches paths with a basename +// that begins with a dot. +func MatchHidden(path string) bool { + return path != "" && strings.HasPrefix(filepath.Base(path), ".") +} + +// Matches matches a path against a rule. When fold is true the comparison is +// case-insensitive: on a case-insensitive filesystem two paths differing only +// in case name the same file, so a rule written for one spelling has to cover +// the others or it can be trivially evaded. +// +// Regex rules are never folded. An admin-authored pattern means what it says, +// and lowering its input would silently change it; use (?i) for those. +func (r *Rule) Matches(path string, fold bool) bool { if r.Regex { return r.Regexp.MatchString(path) } - return strings.HasPrefix(path, r.Path) + rulePath := r.Path + if fold { + path = strings.ToLower(path) + rulePath = strings.ToLower(rulePath) + } + + if path == rulePath { + return true + } + + prefix := rulePath + if prefix != "/" && !strings.HasSuffix(prefix, "/") { + prefix += "/" + } + + return strings.HasPrefix(path, prefix) } // Regexp is a wrapper to the native regexp type where we diff --git a/rules/rules_test.go b/rules/rules_test.go new file mode 100644 index 00000000..8a3df634 --- /dev/null +++ b/rules/rules_test.go @@ -0,0 +1,93 @@ +package rules + +import "testing" + +func TestRuleMatches(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + rulePath string + testPath string + fold bool + want bool + }{ + {"exact match", "/uploads", "/uploads", false, true}, + {"child path", "/uploads", "/uploads/file.txt", false, true}, + {"sibling prefix", "/uploads", "/uploads_backup/secret.txt", false, false}, + {"root rule", "/", "/anything", false, true}, + {"trailing slash rule", "/uploads/", "/uploads/file.txt", false, true}, + {"trailing slash no sibling", "/uploads/", "/uploads_backup/file.txt", false, false}, + {"nested child", "/data/shared", "/data/shared/docs/file.txt", false, true}, + {"nested sibling", "/data/shared", "/data/shared_private/file.txt", false, false}, + + // On a case-insensitive filesystem /Secret.txt and /secret.TXT name the + // same file, so a rule for one must cover the other. See + // GHSA-fgm5-pw99-w2p7. + {"case variant not folded", "/Secret.txt", "/secret.TXT", false, false}, + {"case variant folded", "/Secret.txt", "/secret.TXT", true, true}, + {"case variant child folded", "/Private", "/private/notes.txt", true, true}, + {"exact match folded", "/uploads", "/uploads", true, true}, + // Folding must not widen a rule past its own path segment. + {"sibling prefix folded", "/uploads", "/UPLOADS_backup/secret.txt", true, false}, + {"nested sibling folded", "/data/shared", "/data/SHARED_private/x", true, false}, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + r := &Rule{Path: tc.rulePath} + got := r.Matches(tc.testPath, tc.fold) + if got != tc.want { + t.Errorf("Rule{Path: %q}.Matches(%q, fold=%v) = %v; want %v", + tc.rulePath, tc.testPath, tc.fold, got, tc.want) + } + }) + } +} + +// A regex rule is authored by an administrator and means exactly what it says, +// so folding must not reach it: the admin opts in with (?i) instead. +func TestRuleMatchesRegexIgnoresFold(t *testing.T) { + t.Parallel() + + cases := []struct { + raw string + path string + want bool + }{ + {`^/Secret\.txt$`, "/Secret.txt", true}, + {`^/Secret\.txt$`, "/secret.TXT", false}, + {`(?i)^/Secret\.txt$`, "/secret.TXT", true}, + } + + for _, tc := range cases { + for _, fold := range []bool{false, true} { + r := &Rule{Regex: true, Regexp: &Regexp{Raw: tc.raw}} + if got := r.Matches(tc.path, fold); got != tc.want { + t.Errorf("Rule{Regexp: %q}.Matches(%q, fold=%v) = %v; want %v", + tc.raw, tc.path, fold, got, tc.want) + } + } + } +} + +func TestMatchHidden(t *testing.T) { + cases := map[string]bool{ + "/": false, + "/src": false, + "/src/": false, + "/.circleci": true, + "/a/b/c/.docker.json": true, + ".docker.json": true, + "Dockerfile": false, + "/Dockerfile": false, + } + + for path, want := range cases { + got := MatchHidden(path) + if got != want { + t.Errorf("MatchHidden(%s)=%v; want %v", path, got, want) + } + } +} diff --git a/runner/commands.go b/runner/commands.go new file mode 100644 index 00000000..d5d0e19b --- /dev/null +++ b/runner/commands.go @@ -0,0 +1,136 @@ +// Copyright 2015 Light Code Labs, LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package runner + +import ( + "errors" + "runtime" + "unicode" + + "github.com/flynn/go-shlex" +) + +const ( + osWindows = "windows" + osLinux = "linux" +) + +var runtimeGoos = runtime.GOOS + +// SplitCommandAndArgs takes a command string and parses it shell-style into the +// command and its separate arguments. +func SplitCommandAndArgs(command string) (cmd string, args []string, err error) { + var parts []string + + if runtimeGoos == osWindows { + parts = parseWindowsCommand(command) // parse it Windows-style + } else { + parts, err = parseUnixCommand(command) // parse it Unix-style + if err != nil { + err = errors.New("error parsing command: " + err.Error()) + return + } + } + + if len(parts) == 0 { + err = errors.New("no command contained in '" + command + "'") + return + } + + cmd = parts[0] + if len(parts) > 1 { + args = parts[1:] + } + + return +} + +// parseUnixCommand parses a unix style command line and returns the +// command and its arguments or an error +func parseUnixCommand(cmd string) ([]string, error) { + return shlex.Split(cmd) +} + +// parseWindowsCommand parses windows command lines and +// returns the command and the arguments as an array. It +// should be able to parse commonly used command lines. +// Only basic syntax is supported: +// - spaces in double quotes are not token delimiters +// - double quotes are escaped by either backspace or another double quote +// - except for the above case backspaces are path separators (not special) +// +// Many sources point out that escaping quotes using backslash can be unsafe. +// Use two double quotes when possible. (Source: http://stackoverflow.com/a/31413730/2616179 ) +// +// This function has to be used on Windows instead +// of the shlex package because this function treats backslash +// characters properly. +func parseWindowsCommand(cmd string) []string { + const backslash = '\\' + const quote = '"' + + var parts []string + var part string + var inQuotes bool + var lastRune rune + + for i, ch := range cmd { + if i != 0 { + lastRune = rune(cmd[i-1]) + } + + if ch == backslash { + // put it in the part - for now we don't know if it's an + // escaping char or path separator + part += string(ch) + continue + } + + if ch == quote { + if lastRune == backslash { + // remove the backslash from the part and add the escaped quote instead + part = part[:len(part)-1] + part += string(ch) + continue + } + + if lastRune == quote { + // revert the last change of the inQuotes state + // it was an escaping quote + inQuotes = !inQuotes + part += string(ch) + continue + } + + // normal escaping quotes + inQuotes = !inQuotes + continue + } + + if unicode.IsSpace(ch) && !inQuotes && part != "" { + parts = append(parts, part) + part = "" + continue + } + + part += string(ch) + } + + if part != "" { + parts = append(parts, part) + } + + return parts +} diff --git a/runner/commands_test.go b/runner/commands_test.go new file mode 100644 index 00000000..fa7d4115 --- /dev/null +++ b/runner/commands_test.go @@ -0,0 +1,303 @@ +// Copyright 2015 Light Code Labs, LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package runner + +import ( + "fmt" + "runtime" + "strings" + "testing" +) + +func TestParseUnixCommand(t *testing.T) { + tests := []struct { + input string + expected []string + }{ + // 0 - empty command + { + input: ``, + expected: []string{}, + }, + // 1 - command without arguments + { + input: `command`, + expected: []string{`command`}, + }, + // 2 - command with single argument + { + input: `command arg1`, + expected: []string{`command`, `arg1`}, + }, + // 3 - command with multiple arguments + { + input: `command arg1 arg2`, + expected: []string{`command`, `arg1`, `arg2`}, + }, + // 4 - command with single argument with space character - in quotes + { + input: `command "arg1 arg1"`, + expected: []string{`command`, `arg1 arg1`}, + }, + // 5 - command with multiple spaces and tab character + { + input: "command arg1 arg2\targ3", + expected: []string{`command`, `arg1`, `arg2`, `arg3`}, + }, + // 6 - command with single argument with space character - escaped with backspace + { + input: `command arg1\ arg2`, + expected: []string{`command`, `arg1 arg2`}, + }, + // 7 - single quotes should escape special chars + { + input: `command 'arg1\ arg2'`, + expected: []string{`command`, `arg1\ arg2`}, + }, + } + + for i, test := range tests { + errorPrefix := fmt.Sprintf("Test [%d]: ", i) + errorSuffix := fmt.Sprintf(" Command to parse: [%s]", test.input) + actual, _ := parseUnixCommand(test.input) + if len(actual) != len(test.expected) { + t.Errorf(errorPrefix+"Expected %d parts, got %d: %#v."+errorSuffix, len(test.expected), len(actual), actual) + continue + } + for j := 0; j < len(actual); j++ { + if expectedPart, actualPart := test.expected[j], actual[j]; expectedPart != actualPart { + t.Errorf(errorPrefix+"Expected: %v Actual: %v (index %d)."+errorSuffix, expectedPart, actualPart, j) + } + } + } +} + +func TestParseWindowsCommand(t *testing.T) { + tests := []struct { + input string + expected []string + }{ + { // 0 - empty command - do not fail + input: ``, + expected: []string{}, + }, + { // 1 - cmd without args + input: `cmd`, + expected: []string{`cmd`}, + }, + { // 2 - multiple args + input: `cmd arg1 arg2`, + expected: []string{`cmd`, `arg1`, `arg2`}, + }, + { // 3 - multiple args with space + input: `cmd "combined arg" arg2`, + expected: []string{`cmd`, `combined arg`, `arg2`}, + }, + { // 4 - path without spaces + input: `mkdir C:\Windows\foo\bar`, + expected: []string{`mkdir`, `C:\Windows\foo\bar`}, + }, + { // 5 - command with space in quotes + input: `"command here"`, + expected: []string{`command here`}, + }, + { // 6 - argument with escaped quotes (two quotes) + input: `cmd ""arg""`, + expected: []string{`cmd`, `"arg"`}, + }, + { // 7 - argument with escaped quotes (backslash) + input: `cmd \"arg\"`, + expected: []string{`cmd`, `"arg"`}, + }, + { // 8 - two quotes (escaped) inside an inQuote element + input: `cmd "a ""quoted value"`, + expected: []string{`cmd`, `a "quoted value`}, + }, + { // 9 - two quotes outside an inQuote element + input: `cmd a ""quoted value`, + expected: []string{`cmd`, `a`, `"quoted`, `value`}, + }, + { // 10 - path with space in quotes + input: `mkdir "C:\directory name\foobar"`, + expected: []string{`mkdir`, `C:\directory name\foobar`}, + }, + { // 11 - space without quotes + input: `mkdir C:\ space`, + expected: []string{`mkdir`, `C:\`, `space`}, + }, + { // 12 - space in quotes + input: `mkdir "C:\ space"`, + expected: []string{`mkdir`, `C:\ space`}, + }, + { // 13 - UNC + input: `mkdir \\?\C:\Users`, + expected: []string{`mkdir`, `\\?\C:\Users`}, + }, + { // 14 - UNC with space + input: `mkdir "\\?\C:\Program Files"`, + expected: []string{`mkdir`, `\\?\C:\Program Files`}, + }, + + { // 15 - unclosed quotes - treat as if the path ends with quote + input: `mkdir "c:\Program files`, + expected: []string{`mkdir`, `c:\Program files`}, + }, + { // 16 - quotes used inside the argument + input: `mkdir "c:\P"rogra"m f"iles`, + expected: []string{`mkdir`, `c:\Program files`}, + }, + } + + for i, test := range tests { + errorPrefix := fmt.Sprintf("Test [%d]: ", i) + errorSuffix := fmt.Sprintf(" Command to parse: [%s]", test.input) + + actual := parseWindowsCommand(test.input) + if len(actual) != len(test.expected) { + t.Errorf(errorPrefix+"Expected %d parts, got %d: %#v."+errorSuffix, len(test.expected), len(actual), actual) + continue + } + for j := 0; j < len(actual); j++ { + if expectedPart, actualPart := test.expected[j], actual[j]; expectedPart != actualPart { + t.Errorf(errorPrefix+"Expected: %v Actual: %v (index %d)."+errorSuffix, expectedPart, actualPart, j) + } + } + } +} + +func TestSplitCommandAndArgs(t *testing.T) { + // force linux parsing. It's more robust and covers error cases + runtimeGoos = osLinux + defer func() { + runtimeGoos = runtime.GOOS + }() + + var parseErrorContent = "error parsing command:" + var noCommandErrContent = "no command contained in" + + tests := []struct { + input string + expectedCommand string + expectedArgs []string + expectedErrContent string + }{ + // 0 - empty command + { + input: ``, + expectedCommand: ``, + expectedArgs: nil, + expectedErrContent: noCommandErrContent, + }, + // 1 - command without arguments + { + input: `command`, + expectedCommand: `command`, + expectedArgs: nil, + expectedErrContent: ``, + }, + // 2 - command with single argument + { + input: `command arg1`, + expectedCommand: `command`, + expectedArgs: []string{`arg1`}, + expectedErrContent: ``, + }, + // 3 - command with multiple arguments + { + input: `command arg1 arg2`, + expectedCommand: `command`, + expectedArgs: []string{`arg1`, `arg2`}, + expectedErrContent: ``, + }, + // 4 - command with unclosed quotes + { + input: `command "arg1 arg2`, + expectedCommand: "", + expectedArgs: nil, + expectedErrContent: parseErrorContent, + }, + // 5 - command with unclosed quotes + { + input: `command 'arg1 arg2"`, + expectedCommand: "", + expectedArgs: nil, + expectedErrContent: parseErrorContent, + }, + } + + for i, test := range tests { + errorPrefix := fmt.Sprintf("Test [%d]: ", i) + errorSuffix := fmt.Sprintf(" Command to parse: [%s]", test.input) + actualCommand, actualArgs, actualErr := SplitCommandAndArgs(test.input) + + // test if error matches expectation + if test.expectedErrContent != "" { + if actualErr == nil { + t.Errorf(errorPrefix+"Expected error with content [%s], found no error."+errorSuffix, test.expectedErrContent) + } else if !strings.Contains(actualErr.Error(), test.expectedErrContent) { + t.Errorf(errorPrefix+"Expected error with content [%s], found [%v]."+errorSuffix, test.expectedErrContent, actualErr) + } + } else if actualErr != nil { + t.Errorf(errorPrefix+"Expected no error, found [%v]."+errorSuffix, actualErr) + } + + // test if command matches + if test.expectedCommand != actualCommand { + t.Errorf(errorPrefix+"Expected command: [%s], actual: [%s]."+errorSuffix, test.expectedCommand, actualCommand) + } + + // test if arguments match + if len(test.expectedArgs) != len(actualArgs) { + t.Errorf(errorPrefix+"Wrong number of arguments! Expected [%v], actual [%v]."+errorSuffix, test.expectedArgs, actualArgs) + } else { + // test args only if the count matches. + for j, actualArg := range actualArgs { + expectedArg := test.expectedArgs[j] + if actualArg != expectedArg { + t.Errorf(errorPrefix+"Argument at position [%d] differ! Expected [%s], actual [%s]"+errorSuffix, j, expectedArg, actualArg) + } + } + } + } +} + +func ExampleSplitCommandAndArgs() { + var commandLine string + var command string + var args []string + + // just for the test - change GOOS and reset it at the end of the test + runtimeGoos = osWindows + defer func() { + runtimeGoos = runtime.GOOS + }() + + commandLine = `mkdir /P "C:\Program Files"` + command, args, _ = SplitCommandAndArgs(commandLine) + + fmt.Printf("Windows: %s: %s [%s]\n", commandLine, command, strings.Join(args, ",")) + + // set GOOS to linux + runtimeGoos = osLinux + + commandLine = `mkdir -p /path/with\ space` + command, args, _ = SplitCommandAndArgs(commandLine) + + fmt.Printf("Linux: %s: %s [%s]\n", commandLine, command, strings.Join(args, ",")) + + // Output: + // Windows: mkdir /P "C:\Program Files": mkdir [/P,C:\Program Files] + // Linux: mkdir -p /path/with\ space: mkdir [-p,/path/with space] +} diff --git a/runner/parser.go b/runner/parser.go index 249c6d09..e1035720 100644 --- a/runner/parser.go +++ b/runner/parser.go @@ -1,35 +1,25 @@ package runner import ( - "os/exec" - - "github.com/caddyserver/caddy" - "github.com/filebrowser/filebrowser/v2/settings" ) // ParseCommand parses the command taking in account if the current // instance uses a shell to run the commands or just calls the binary -// directyly. -func ParseCommand(s *settings.Settings, raw string) ([]string, error) { - var command []string - - if len(s.Shell) == 0 { - cmd, args, err := caddy.SplitCommandAndArgs(raw) - if err != nil { - return nil, err - } - - _, err = exec.LookPath(cmd) - if err != nil { - return nil, err - } - - command = append(command, cmd) - command = append(command, args...) - } else { - command = append(s.Shell, raw) //nolint:gocritic +// directly. +func ParseCommand(s *settings.Settings, raw string) (command []string, name string, err error) { + name, args, err := SplitCommandAndArgs(raw) + if err != nil { + return } - return command, nil + if len(s.Shell) == 0 || s.Shell[0] == "" { + command = append(command, name) + command = append(command, args...) + } else { + command = append(command, s.Shell...) + command = append(command, raw) + } + + return command, name, nil } diff --git a/runner/runner.go b/runner/runner.go index b281ec28..3408a1ee 100644 --- a/runner/runner.go +++ b/runner/runner.go @@ -13,6 +13,7 @@ import ( // Runner is a commands runner. type Runner struct { + Enabled bool *settings.Settings } @@ -21,11 +22,13 @@ func (r *Runner) RunHook(fn func() error, evt, path, dst string, user *users.Use path = user.FullPath(path) dst = user.FullPath(dst) - if val, ok := r.Commands["before_"+evt]; ok { - for _, command := range val { - err := r.exec(command, "before_"+evt, path, dst, user) - if err != nil { - return err + if r.Enabled { + if val, ok := r.Commands["before_"+evt]; ok { + for _, command := range val { + err := r.exec(command, "before_"+evt, path, dst, user) + if err != nil { + return err + } } } } @@ -35,11 +38,13 @@ func (r *Runner) RunHook(fn func() error, evt, path, dst string, user *users.Use return err } - if val, ok := r.Commands["after_"+evt]; ok { - for _, command := range val { - err := r.exec(command, "after_"+evt, path, dst, user) - if err != nil { - return err + if r.Enabled { + if val, ok := r.Commands["after_"+evt]; ok { + for _, command := range val { + err := r.exec(command, "after_"+evt, path, dst, user) + if err != nil { + return err + } } } } @@ -55,14 +60,38 @@ func (r *Runner) exec(raw, evt, path, dst string, user *users.User) error { raw = strings.TrimSpace(strings.TrimSuffix(raw, "&")) } - command, err := ParseCommand(r.Settings, raw) + command, _, err := ParseCommand(r.Settings, raw) if err != nil { return err } - cmd := exec.Command(command[0], command[1:]...) //nolint:gosec + envMapping := func(key string) string { + switch key { + case "FILE": + return path + case "SCOPE": + return user.Scope + case "TRIGGER": + return evt + case "USERNAME": + return user.Username + case "DESTINATION": + return dst + default: + return os.Getenv(key) + } + } + for i, arg := range command { + if i == 0 { + continue + } + + command[i] = os.Expand(arg, envMapping) + } + + cmd := exec.Command(command[0], command[1:]...) cmd.Env = append(os.Environ(), fmt.Sprintf("FILE=%s", path)) - cmd.Env = append(cmd.Env, fmt.Sprintf("SCOPE=%s", user.Scope)) //nolint:gocritic + cmd.Env = append(cmd.Env, fmt.Sprintf("SCOPE=%s", user.Scope)) cmd.Env = append(cmd.Env, fmt.Sprintf("TRIGGER=%s", evt)) cmd.Env = append(cmd.Env, fmt.Sprintf("USERNAME=%s", user.Username)) cmd.Env = append(cmd.Env, fmt.Sprintf("DESTINATION=%s", dst)) @@ -73,6 +102,14 @@ func (r *Runner) exec(raw, evt, path, dst string, user *users.User) error { if !blocking { log.Printf("[INFO] Nonblocking Command: \"%s\"", strings.Join(command, " ")) + defer func() { + go func() { + err := cmd.Wait() + if err != nil { + log.Printf("[INFO] Nonblocking Command \"%s\" failed: %s", strings.Join(command, " "), err) + } + }() + }() return cmd.Start() } diff --git a/search/conditions.go b/search/conditions.go index d4d98fed..c7bcd3b9 100644 --- a/search/conditions.go +++ b/search/conditions.go @@ -48,8 +48,8 @@ func parseSearch(value string) *searchOptions { } // removes the options from the value - value = strings.Replace(value, "case:insensitive", "", -1) - value = strings.Replace(value, "case:sensitive", "", -1) + value = strings.ReplaceAll(value, "case:insensitive", "") + value = strings.ReplaceAll(value, "case:sensitive", "") value = strings.TrimSpace(value) types := typeRegexp.FindAllStringSubmatch(value, -1) @@ -75,7 +75,7 @@ func parseSearch(value string) *searchOptions { value = typeRegexp.ReplaceAllString(value, "") } - // If it's canse insensitive, put everything in lowercase. + // If it's case insensitive, put everything in lowercase. if !opts.CaseSensitive { value = strings.ToLower(value) } diff --git a/search/search.go b/search/search.go index 4d91a00b..c58cc22f 100644 --- a/search/search.go +++ b/search/search.go @@ -1,7 +1,10 @@ package search import ( + "context" "os" + "path" + "path/filepath" "strings" "github.com/spf13/afero" @@ -16,37 +19,35 @@ type searchOptions struct { } // Search searches for a query in a fs. -func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func(path string, f os.FileInfo) error) error { +func Search(ctx context.Context, + fs afero.Fs, scope, query string, checker rules.Checker, found func(path string, f os.FileInfo) error) error { search := parseSearch(query) - scope = strings.Replace(scope, "\\", "/", -1) - scope = strings.TrimPrefix(scope, "/") - scope = strings.TrimSuffix(scope, "/") - scope = "/" + scope + "/" + scope = filepath.ToSlash(filepath.Clean(scope)) + scope = path.Join("/", scope) - return afero.Walk(fs, scope, func(originalPath string, f os.FileInfo, err error) error { - originalPath = strings.Replace(originalPath, "\\", "/", -1) - originalPath = strings.TrimPrefix(originalPath, "/") - originalPath = "/" + originalPath - path := originalPath + return afero.Walk(fs, scope, func(fPath string, f os.FileInfo, _ error) error { + if ctx.Err() != nil { + return context.Cause(ctx) + } + fPath = filepath.ToSlash(filepath.Clean(fPath)) + fPath = path.Join("/", fPath) + relativePath := strings.TrimPrefix(fPath, scope) + relativePath = strings.TrimPrefix(relativePath, "/") - if path == scope { + if fPath == scope { return nil } - if !checker.Check(path) { + if !checker.Check(fPath) { return nil } - if !search.CaseSensitive { - path = strings.ToLower(path) - } - if len(search.Conditions) > 0 { match := false for _, t := range search.Conditions { - if t(path) { + if t(fPath) { match = true break } @@ -59,12 +60,18 @@ func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func( if len(search.Terms) > 0 { for _, term := range search.Terms { - if strings.Contains(path, term) { - return found(strings.TrimPrefix(originalPath, scope), f) + _, fileName := path.Split(fPath) + if !search.CaseSensitive { + fileName = strings.ToLower(fileName) + term = strings.ToLower(term) + } + if strings.Contains(fileName, term) { + return found(relativePath, f) } } + return nil } - return nil + return found(relativePath, f) }) } diff --git a/settings/branding.go b/settings/branding.go index 68404bbb..cd196236 100644 --- a/settings/branding.go +++ b/settings/branding.go @@ -2,8 +2,10 @@ package settings // Branding contains the branding settings of the app. type Branding struct { - Name string `json:"name"` - DisableExternal bool `json:"disableExternal"` - Files string `json:"files"` - Theme string `json:"theme"` + Name string `json:"name"` + DisableExternal bool `json:"disableExternal"` + DisableUsedPercentage bool `json:"disableUsedPercentage"` + Files string `json:"files"` + Theme string `json:"theme"` + Color string `json:"color"` } diff --git a/settings/defaults.go b/settings/defaults.go index b0829655..46024179 100644 --- a/settings/defaults.go +++ b/settings/defaults.go @@ -8,12 +8,17 @@ import ( // UserDefaults is a type that holds the default values // for some fields on User. type UserDefaults struct { - Scope string `json:"scope"` - Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` - Sorting files.Sorting `json:"sorting"` - Perm users.Permissions `json:"perm"` - Commands []string `json:"commands"` + Scope string `json:"scope"` + Locale string `json:"locale"` + ViewMode users.ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"` + Sorting files.Sorting `json:"sorting"` + Perm users.Permissions `json:"perm"` + Commands []string `json:"commands"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + AceEditorTheme string `json:"aceEditorTheme"` } // Apply applies the default options to a user. @@ -21,7 +26,12 @@ func (d *UserDefaults) Apply(u *users.User) { u.Scope = d.Scope u.Locale = d.Locale u.ViewMode = d.ViewMode + u.SingleClick = d.SingleClick + u.RedirectAfterCopyMove = d.RedirectAfterCopyMove u.Perm = d.Perm u.Sorting = d.Sorting u.Commands = d.Commands + u.HideDotfiles = d.HideDotfiles + u.DateFormat = d.DateFormat + u.AceEditorTheme = d.AceEditorTheme } diff --git a/settings/dir.go b/settings/dir.go index 5781e6d7..1abce67c 100644 --- a/settings/dir.go +++ b/settings/dir.go @@ -2,12 +2,16 @@ package settings import ( "errors" + "fmt" "log" "os" + "path" "regexp" "strings" "github.com/spf13/afero" + + "github.com/filebrowser/filebrowser/v2/users" ) var ( @@ -18,53 +22,56 @@ var ( // MakeUserDir makes the user directory according to settings. func (s *Settings) MakeUserDir(username, userScope, serverRoot string) (string, error) { - var err error userScope = strings.TrimSpace(userScope) - if userScope == "" || userScope == "./" { - userScope = "." + if userScope == "" && s.CreateUserDir { + username = cleanUsername(username) + if username == "" || username == "-" || username == "." { + log.Printf("create user: invalid user for home dir creation: [%s]", username) + return "", errors.New("invalid user for home dir creation") + } + userScope = path.Join(s.UserHomeBasePath, username) } - if !s.CreateUserDir { - return userScope, nil - } + userScope = path.Join("/", userScope) fs := afero.NewBasePathFs(afero.NewOsFs(), serverRoot) + if err := fs.MkdirAll(userScope, os.ModePerm); err != nil { + return "", fmt.Errorf("failed to create user home dir: [%s]: %w", userScope, err) + } + return userScope, nil +} - // Use the default auto create logic only if specific scope is not the default scope - if userScope != s.Defaults.Scope { - // Try create the dir, for example: settings.Defaults.Scope == "." and userScope == "./foo" - if userScope != "." { - err = fs.MkdirAll(userScope, os.ModePerm) - if err != nil { - log.Printf("create user: failed to mkdir user home dir: [%s]", userScope) - } - } - return userScope, err +// CreateUserHome derives and creates the home directory for a user that is +// being provisioned (via signup, proxy auth or hook auth) and sets user.Scope +// to the resulting path. When CreateUserDir is enabled and the caller did not +// supply an explicit scope, the scope is cleared so that MakeUserDir derives a +// per-user home from the username instead of falling back to the default scope +// (which normalizes to the server root, leaving every provisioned user sharing +// it). +// +// It reports whether the scope was derived from the username. A derived scope +// must be persisted with users.Storage.SaveProvisioned, which rejects a scope +// already owned by another user so that distinct usernames cannot silently +// share one home directory. +func (s *Settings) CreateUserHome(user *users.User, serverRoot string, explicitScope bool) (derived bool, err error) { + derived = s.CreateUserDir && !explicitScope + if derived { + user.Scope = "" } - // Clean username first - username = cleanUsername(username) - if username == "" || username == "-" || username == "." { - log.Printf("create user: invalid user for home dir creation: [%s]", username) - return "", errors.New("invalid user for home dir creation") - } - - // Create default user dir - userHomeBase := s.Defaults.Scope + string(os.PathSeparator) + "users" - userHome := userHomeBase + string(os.PathSeparator) + username - err = fs.MkdirAll(userHome, os.ModePerm) + userHome, err := s.MakeUserDir(user.Username, user.Scope, serverRoot) if err != nil { - log.Printf("create user: failed to mkdir user home dir: [%s]", userHome) - } else { - log.Printf("create user: mkdir user home dir: [%s] successfully.", userHome) + return false, err } - return userHome, err + user.Scope = userHome + + return derived, nil } func cleanUsername(s string) string { // Remove any trailing space to avoid ending on - s = strings.Trim(s, " ") - s = strings.Replace(s, "..", "", -1) + s = strings.ReplaceAll(s, "..", "") // Replace all characters which not in the list `0-9A-Za-z@_\-.` with a dash s = invalidFilenameChars.ReplaceAllString(s, "-") diff --git a/settings/dir_test.go b/settings/dir_test.go new file mode 100644 index 00000000..900f6512 --- /dev/null +++ b/settings/dir_test.go @@ -0,0 +1,45 @@ +package settings + +import ( + "testing" + + "github.com/filebrowser/filebrowser/v2/users" +) + +// A user provisioned with CreateUserDir must receive a per-user home directory +// derived from its username, not the default scope which normalizes to the +// server root. +func TestCreateUserHomeDerivesPerUserScope(t *testing.T) { + s := &Settings{CreateUserDir: true, UserHomeBasePath: "/users"} + + user := &users.User{Username: "alice", Scope: "."} + derived, err := s.CreateUserHome(user, t.TempDir(), false) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !derived { + t.Error("expected the scope to be reported as derived") + } + if user.Scope != "/users/alice" { + t.Errorf("expected derived scope /users/alice, got %q", user.Scope) + } +} + +// A scope explicitly supplied by the caller (e.g. returned by an auth hook) must +// be preserved instead of being replaced by a derived home directory, and must +// not be reported as derived: it is legitimate for several users to share it. +func TestCreateUserHomePreservesExplicitScope(t *testing.T) { + s := &Settings{CreateUserDir: true, UserHomeBasePath: "/users"} + + user := &users.User{Username: "alice", Scope: "/custom"} + derived, err := s.CreateUserHome(user, t.TempDir(), true) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if derived { + t.Error("an explicit scope must not be reported as derived") + } + if user.Scope != "/custom" { + t.Errorf("explicit scope should be preserved, got %q", user.Scope) + } +} diff --git a/settings/settings.go b/settings/settings.go index 104d9f30..89670bbb 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -2,25 +2,42 @@ package settings import ( "crypto/rand" + "io/fs" + "log" "strings" + "time" "github.com/filebrowser/filebrowser/v2/rules" ) +const DefaultUsersHomeBasePath = "/users" +const DefaultLogoutPage = "/login" +const DefaultMinimumPasswordLength = 12 +const DefaultFileMode = 0640 +const DefaultDirMode = 0750 + // AuthMethod describes an authentication method. type AuthMethod string // Settings contain the main settings of the application. type Settings struct { - Key []byte `json:"key"` - Signup bool `json:"signup"` - CreateUserDir bool `json:"createUserDir"` - Defaults UserDefaults `json:"defaults"` - AuthMethod AuthMethod `json:"authMethod"` - Branding Branding `json:"branding"` - Commands map[string][]string `json:"commands"` - Shell []string `json:"shell"` - Rules []rules.Rule `json:"rules"` + Key []byte `json:"key"` + Signup bool `json:"signup"` + HideLoginButton bool `json:"hideLoginButton"` + CreateUserDir bool `json:"createUserDir"` + UserHomeBasePath string `json:"userHomeBasePath"` + Defaults UserDefaults `json:"defaults"` + AuthMethod AuthMethod `json:"authMethod"` + LogoutPage string `json:"logoutPage"` + Branding Branding `json:"branding"` + Tus Tus `json:"tus"` + Commands map[string][]string `json:"commands"` + Shell []string `json:"shell"` + Rules []rules.Rule `json:"rules"` + MinimumPasswordLength uint `json:"minimumPasswordLength"` + FileMode fs.FileMode `json:"fileMode"` + DirMode fs.FileMode `json:"dirMode"` + HideDotfiles bool `json:"hideDotfiles"` } // GetRules implements rules.Provider. @@ -30,14 +47,27 @@ func (s *Settings) GetRules() []rules.Rule { // Server specific settings. type Server struct { - Root string `json:"root"` - BaseURL string `json:"baseURL"` - Socket string `json:"socket"` - TLSKey string `json:"tlsKey"` - TLSCert string `json:"tlsCert"` - Port string `json:"port"` - Address string `json:"address"` - Log string `json:"log"` + Root string `json:"root"` + BaseURL string `json:"baseURL"` + Socket string `json:"socket"` + TLSKey string `json:"tlsKey"` + TLSCert string `json:"tlsCert"` + Port string `json:"port"` + Address string `json:"address"` + Log string `json:"log"` + EnableThumbnails bool `json:"enableThumbnails"` + ResizePreview bool `json:"resizePreview"` + EnableExec bool `json:"enableExec"` + TypeDetectionByHeader bool `json:"typeDetectionByHeader"` + ImageResolutionCal bool `json:"imageResolutionCalculation"` + AuthHook string `json:"authHook"` + TokenExpirationTime string `json:"tokenExpirationTime"` + FollowExternalSymlinks bool `json:"followExternalSymlinks"` + + // CaseInsensitiveFs is detected from Root at startup rather than + // configured, and tells the rule checker to match paths case-insensitively. + // It is never persisted. + CaseInsensitiveFs bool `json:"-"` } // Clean cleans any variables that might need cleaning. @@ -45,7 +75,20 @@ func (s *Server) Clean() { s.BaseURL = strings.TrimSuffix(s.BaseURL, "/") } -// GenerateKey generates a key of 256 bits. +func (s *Server) GetTokenExpirationTime(fallback time.Duration) time.Duration { + if s.TokenExpirationTime == "" { + return fallback + } + + duration, err := time.ParseDuration(s.TokenExpirationTime) + if err != nil { + log.Printf("[WARN] Failed to parse tokenExpirationTime: %v", err) + return fallback + } + return duration +} + +// GenerateKey generates a key of 512 bits. func GenerateKey() ([]byte, error) { b := make([]byte, 64) _, err := rand.Read(b) diff --git a/settings/storage.go b/settings/storage.go index d88f5c28..573024f7 100644 --- a/settings/storage.go +++ b/settings/storage.go @@ -1,7 +1,7 @@ package settings import ( - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/rules" "github.com/filebrowser/filebrowser/v2/users" ) @@ -26,7 +26,39 @@ func NewStorage(back StorageBackend) *Storage { // Get returns the settings for the current instance. func (s *Storage) Get() (*Settings, error) { - return s.back.Get() + set, err := s.back.Get() + if err != nil { + return nil, err + } + + if set.UserHomeBasePath == "" { + set.UserHomeBasePath = DefaultUsersHomeBasePath + } + + if set.LogoutPage == "" { + set.LogoutPage = DefaultLogoutPage + } + + if set.MinimumPasswordLength == 0 { + set.MinimumPasswordLength = DefaultMinimumPasswordLength + } + + if set.Tus == (Tus{}) { + set.Tus = Tus{ + ChunkSize: DefaultTusChunkSize, + RetryCount: DefaultTusRetryCount, + } + } + + if set.FileMode == 0 { + set.FileMode = DefaultFileMode + } + + if set.DirMode == 0 { + set.DirMode = DefaultDirMode + } + + return set, nil } var defaultEvents = []string{ @@ -40,7 +72,7 @@ var defaultEvents = []string{ // Save saves the settings for the current instance. func (s *Storage) Save(set *Settings) error { if len(set.Key) == 0 { - return errors.ErrEmptyKey + return fberrors.ErrEmptyKey } if set.Defaults.Locale == "" { diff --git a/settings/tus.go b/settings/tus.go new file mode 100644 index 00000000..b869c2e1 --- /dev/null +++ b/settings/tus.go @@ -0,0 +1,10 @@ +package settings + +const DefaultTusChunkSize = 10 * 1024 * 1024 // 10MB +const DefaultTusRetryCount = 5 + +// Tus contains the tus.io settings of the app. +type Tus struct { + ChunkSize uint64 `json:"chunkSize"` + RetryCount uint16 `json:"retryCount"` +} diff --git a/share/share.go b/share/share.go index fb4329f1..f14c543d 100644 --- a/share/share.go +++ b/share/share.go @@ -1,9 +1,20 @@ package share +type CreateBody struct { + Password string `json:"password"` + Expires string `json:"expires"` + Unit string `json:"unit"` +} + // Link is the information needed to build a shareable link. type Link struct { - Hash string `json:"hash" storm:"id,index"` - Path string `json:"path" storm:"index"` - UserID uint `json:"userID"` - Expire int64 `json:"expire"` + Hash string `json:"hash" storm:"id,index"` + Path string `json:"path" storm:"index"` + UserID uint `json:"userID"` + Expire int64 `json:"expire"` + PasswordHash string `json:"password_hash,omitempty"` + // Token is a random value that will only be set when PasswordHash is set. It is + // URL-Safe and is used to download links in password-protected shares via a + // query arg. + Token string `json:"token,omitempty"` } diff --git a/share/storage.go b/share/storage.go index 6073cbcc..3b73ef35 100644 --- a/share/storage.go +++ b/share/storage.go @@ -3,16 +3,19 @@ package share import ( "time" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" ) // StorageBackend is the interface to implement for a share storage. type StorageBackend interface { + All() ([]*Link, error) + FindByUserID(id uint) ([]*Link, error) GetByHash(hash string) (*Link, error) GetPermanent(path string, id uint) (*Link, error) Gets(path string, id uint) ([]*Link, error) Save(s *Link) error Delete(hash string) error + DeleteWithPathPrefix(path string, userID uint) error } // Storage is a storage. @@ -25,6 +28,46 @@ func NewStorage(back StorageBackend) *Storage { return &Storage{back: back} } +// All wraps a StorageBackend.All. +func (s *Storage) All() ([]*Link, error) { + links, err := s.back.All() + + if err != nil { + return nil, err + } + + for i, link := range links { + if link.Expire != 0 && link.Expire <= time.Now().Unix() { + if err := s.Delete(link.Hash); err != nil { + return nil, err + } + links = append(links[:i], links[i+1:]...) + } + } + + return links, nil +} + +// FindByUserID wraps a StorageBackend.FindByUserID. +func (s *Storage) FindByUserID(id uint) ([]*Link, error) { + links, err := s.back.FindByUserID(id) + + if err != nil { + return nil, err + } + + for i, link := range links { + if link.Expire != 0 && link.Expire <= time.Now().Unix() { + if err := s.Delete(link.Hash); err != nil { + return nil, err + } + links = append(links[:i], links[i+1:]...) + } + } + + return links, nil +} + // GetByHash wraps a StorageBackend.GetByHash. func (s *Storage) GetByHash(hash string) (*Link, error) { link, err := s.back.GetByHash(hash) @@ -36,7 +79,7 @@ func (s *Storage) GetByHash(hash string) (*Link, error) { if err := s.Delete(link.Hash); err != nil { return nil, err } - return nil, errors.ErrNotExist + return nil, fberrors.ErrNotExist } return link, nil @@ -76,3 +119,7 @@ func (s *Storage) Save(l *Link) error { func (s *Storage) Delete(hash string) error { return s.back.Delete(hash) } + +func (s *Storage) DeleteWithPathPrefix(path string, userID uint) error { + return s.back.DeleteWithPathPrefix(path, userID) +} diff --git a/storage/bolt/auth.go b/storage/bolt/auth.go index 6078f63c..1de95192 100644 --- a/storage/bolt/auth.go +++ b/storage/bolt/auth.go @@ -1,10 +1,10 @@ package bolt import ( - "github.com/asdine/storm" + "github.com/asdine/storm/v3" "github.com/filebrowser/filebrowser/v2/auth" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/settings" ) @@ -20,10 +20,12 @@ func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) { auther = &auth.JSONAuth{} case auth.MethodProxyAuth: auther = &auth.ProxyAuth{} + case auth.MethodHookAuth: + auther = &auth.HookAuth{} case auth.MethodNoAuth: auther = &auth.NoAuth{} default: - return nil, errors.ErrInvalidAuthMethod + return nil, fberrors.ErrInvalidAuthMethod } return auther, get(s.db, "auther", auther) diff --git a/storage/bolt/bolt.go b/storage/bolt/bolt.go index ce67adc0..803ebc36 100644 --- a/storage/bolt/bolt.go +++ b/storage/bolt/bolt.go @@ -1,7 +1,7 @@ package bolt import ( - "github.com/asdine/storm" + "github.com/asdine/storm/v3" "github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/settings" diff --git a/storage/bolt/config.go b/storage/bolt/config.go index b7142782..a4d40064 100644 --- a/storage/bolt/config.go +++ b/storage/bolt/config.go @@ -1,7 +1,7 @@ package bolt import ( - "github.com/asdine/storm" + "github.com/asdine/storm/v3" "github.com/filebrowser/filebrowser/v2/settings" ) diff --git a/storage/bolt/importer/conf.go b/storage/bolt/importer/conf.go deleted file mode 100644 index 8100d8c4..00000000 --- a/storage/bolt/importer/conf.go +++ /dev/null @@ -1,183 +0,0 @@ -package importer - -import ( - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - - "github.com/asdine/storm" - toml "github.com/pelletier/go-toml" - yaml "gopkg.in/yaml.v2" - - "github.com/filebrowser/filebrowser/v2/auth" - "github.com/filebrowser/filebrowser/v2/settings" - "github.com/filebrowser/filebrowser/v2/storage" - "github.com/filebrowser/filebrowser/v2/users" -) - -type oldDefs struct { - Commands []string `json:"commands" yaml:"commands" toml:"commands"` - Scope string `json:"scope" yaml:"scope" toml:"scope"` - ViewMode string `json:"viewMode" yaml:"viewMode" toml:"viewMode"` - Locale string `json:"locale" yaml:"locale" toml:"locale"` - AllowCommands bool `json:"allowCommands" yaml:"allowCommands" toml:"allowCommands"` - AllowEdit bool `json:"allowEdit" yaml:"allowEdit" toml:"allowEdit"` - AllowNew bool `json:"allowNew" yaml:"allowNew" toml:"allowNew"` -} - -type oldAuth struct { - Method string `json:"method" yaml:"method" toml:"method"` // default none proxy - Header string `json:"header" yaml:"header" toml:"header"` -} - -type oldConf struct { - Port string `json:"port" yaml:"port" toml:"port"` - BaseURL string `json:"baseURL" yaml:"baseURL" toml:"baseURL"` - Log string `json:"log" yaml:"log" toml:"log"` - Address string `json:"address" yaml:"address" toml:"address"` - Defaults oldDefs `json:"defaults" yaml:"defaults" toml:"defaults"` - ReCaptcha struct { - Key string `json:"key" yaml:"key" toml:"key"` - Secret string `json:"secret" yaml:"secret" toml:"secret"` - Host string `json:"host" yaml:"host" toml:"host"` - } `json:"recaptcha" yaml:"recaptcha" toml:"recaptcha"` - Auth oldAuth `json:"auth" yaml:"auth" toml:"auth"` -} - -var defaults = &oldConf{ - Port: "0", - Log: "stdout", - Defaults: oldDefs{ - Commands: []string{"git", "svn", "hg"}, - ViewMode: string(users.MosaicViewMode), - AllowCommands: true, - AllowEdit: true, - AllowNew: true, - Locale: "en", - }, - Auth: oldAuth{ - Method: "default", - }, -} - -func readConf(path string) (*oldConf, error) { - cfg := &oldConf{} - if path != "" { - ext := filepath.Ext(path) - - fd, err := os.Open(path) - if err != nil { - return nil, err - } - defer fd.Close() - - switch ext { - case ".json": - err = json.NewDecoder(fd).Decode(cfg) - case ".toml": - err = toml.NewDecoder(fd).Decode(cfg) - case ".yaml", ".yml": - err = yaml.NewDecoder(fd).Decode(cfg) - default: - return nil, errors.New("unsupported config extension " + ext) - } - - if err != nil { - return nil, err - } - } else { - cfg = defaults - path, err := filepath.Abs(".") - if err != nil { - return nil, err - } - cfg.Defaults.Scope = path - } - return cfg, nil -} - -func importConf(db *storm.DB, path string, sto *storage.Storage) error { - cfg, err := readConf(path) - if err != nil { - return err - } - - commands := map[string][]string{} - err = db.Get("config", "commands", &commands) - if err != nil { - return err - } - - key := []byte{} - err = db.Get("config", "key", &key) - if err != nil { - return err - } - - s := &settings.Settings{ - Key: key, - Signup: false, - Defaults: settings.UserDefaults{ - Scope: cfg.Defaults.Scope, - Commands: cfg.Defaults.Commands, - ViewMode: users.ViewMode(cfg.Defaults.ViewMode), - Locale: cfg.Defaults.Locale, - Perm: users.Permissions{ - Admin: false, - Execute: cfg.Defaults.AllowCommands, - Create: cfg.Defaults.AllowNew, - Rename: cfg.Defaults.AllowEdit, - Modify: cfg.Defaults.AllowEdit, - Delete: cfg.Defaults.AllowEdit, - Share: true, - Download: true, - }, - }, - } - - server := &settings.Server{ - BaseURL: cfg.BaseURL, - Port: cfg.Port, - Address: cfg.Address, - Log: cfg.Log, - } - - var auther auth.Auther - switch cfg.Auth.Method { - case "proxy": - auther = &auth.ProxyAuth{Header: cfg.Auth.Header} - s.AuthMethod = auth.MethodProxyAuth - case "none": - auther = &auth.NoAuth{} - s.AuthMethod = auth.MethodNoAuth - default: - auther = &auth.JSONAuth{ - ReCaptcha: &auth.ReCaptcha{ - Host: cfg.ReCaptcha.Host, - Key: cfg.ReCaptcha.Key, - Secret: cfg.ReCaptcha.Secret, - }, - } - s.AuthMethod = auth.MethodJSONAuth - } - - err = sto.Auth.Save(auther) - if err != nil { - return err - } - - err = sto.Settings.Save(s) - if err != nil { - return err - } - - err = sto.Settings.SaveServer(server) - if err != nil { - return err - } - - fmt.Println("Configuration successfully imported.") - return nil -} diff --git a/storage/bolt/importer/importer.go b/storage/bolt/importer/importer.go deleted file mode 100644 index 0356152a..00000000 --- a/storage/bolt/importer/importer.go +++ /dev/null @@ -1,39 +0,0 @@ -package importer - -import ( - "github.com/asdine/storm" - - "github.com/filebrowser/filebrowser/v2/storage/bolt" -) - -// Import imports an old configuration to a newer database. -func Import(oldDBPath, oldConf, newDBPath string) error { - oldDB, err := storm.Open(oldDBPath) - if err != nil { - return err - } - defer oldDB.Close() - - newDB, err := storm.Open(newDBPath) - if err != nil { - return err - } - defer newDB.Close() - - sto, err := bolt.NewStorage(newDB) - if err != nil { - return err - } - - err = importUsers(oldDB, sto) - if err != nil { - return err - } - - err = importConf(oldDB, oldConf, sto) - if err != nil { - return err - } - - return err -} diff --git a/storage/bolt/importer/users.go b/storage/bolt/importer/users.go deleted file mode 100644 index f5c1c4cd..00000000 --- a/storage/bolt/importer/users.go +++ /dev/null @@ -1,114 +0,0 @@ -package importer - -import ( - "encoding/json" - "fmt" - - "github.com/asdine/storm" - bolt "go.etcd.io/bbolt" - - "github.com/filebrowser/filebrowser/v2/rules" - "github.com/filebrowser/filebrowser/v2/storage" - "github.com/filebrowser/filebrowser/v2/users" -) - -type oldUser struct { - ID int `storm:"id,increment"` - Admin bool `json:"admin"` - AllowCommands bool `json:"allowCommands"` // Execute commands - AllowEdit bool `json:"allowEdit"` // Edit/rename files - AllowNew bool `json:"allowNew"` // Create files and folders - AllowPublish bool `json:"allowPublish"` // Publish content (to use with static gen) - LockPassword bool `json:"lockPassword"` - Commands []string `json:"commands"` - Locale string `json:"locale"` - Password string `json:"password"` - Rules []*rules.Rule `json:"rules"` - Scope string `json:"filesystem"` - Username string `json:"username" storm:"index,unique"` - ViewMode string `json:"viewMode"` -} - -func readOldUsers(db *storm.DB) ([]*oldUser, error) { - var oldUsers []*oldUser - err := db.Bolt.View(func(tx *bolt.Tx) error { - return tx.Bucket([]byte("User")).ForEach(func(k []byte, v []byte) error { - if len(v) > 0 && string(v)[0] == '{' { - user := &oldUser{} - err := json.Unmarshal(v, user) - - if err != nil { - return err - } - - oldUsers = append(oldUsers, user) - } - - return nil - }) - }) - - return oldUsers, err -} - -func convertUsersToNew(old []*oldUser) ([]*users.User, error) { - list := []*users.User{} - - for _, oldUser := range old { - user := &users.User{ - Username: oldUser.Username, - Password: oldUser.Password, - Scope: oldUser.Scope, - Locale: oldUser.Locale, - LockPassword: oldUser.LockPassword, - ViewMode: users.ViewMode(oldUser.ViewMode), - Commands: oldUser.Commands, - Rules: []rules.Rule{}, - Perm: users.Permissions{ - Admin: oldUser.Admin, - Execute: oldUser.AllowCommands, - Create: oldUser.AllowNew, - Rename: oldUser.AllowEdit, - Modify: oldUser.AllowEdit, - Delete: oldUser.AllowEdit, - Share: true, - Download: true, - }, - } - - for _, rule := range oldUser.Rules { - user.Rules = append(user.Rules, *rule) - } - - err := user.Clean("") - if err != nil { - return nil, err - } - - list = append(list, user) - } - - return list, nil -} - -func importUsers(old *storm.DB, sto *storage.Storage) error { - oldUsers, err := readOldUsers(old) - if err != nil { - return err - } - - newUsers, err := convertUsersToNew(oldUsers) - if err != nil { - return err - } - - for _, user := range newUsers { - err = sto.Users.Save(user) - if err != nil { - return err - } - } - - fmt.Printf("%d users successfully imported into the new DB.\n", len(newUsers)) - return nil -} diff --git a/storage/bolt/share.go b/storage/bolt/share.go index f74247ec..49b3f0c4 100644 --- a/storage/bolt/share.go +++ b/storage/bolt/share.go @@ -1,10 +1,13 @@ package bolt import ( - "github.com/asdine/storm" - "github.com/asdine/storm/q" + "errors" + "strings" - "github.com/filebrowser/filebrowser/v2/errors" + "github.com/asdine/storm/v3" + "github.com/asdine/storm/v3/q" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/share" ) @@ -12,11 +15,31 @@ type shareBackend struct { db *storm.DB } +func (s shareBackend) All() ([]*share.Link, error) { + var v []*share.Link + err := s.db.All(&v) + if errors.Is(err, storm.ErrNotFound) { + return v, fberrors.ErrNotExist + } + + return v, err +} + +func (s shareBackend) FindByUserID(id uint) ([]*share.Link, error) { + var v []*share.Link + err := s.db.Select(q.Eq("UserID", id)).Find(&v) + if errors.Is(err, storm.ErrNotFound) { + return v, fberrors.ErrNotExist + } + + return v, err +} + func (s shareBackend) GetByHash(hash string) (*share.Link, error) { var v share.Link err := s.db.One("Hash", hash, &v) - if err == storm.ErrNotFound { - return nil, errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return nil, fberrors.ErrNotExist } return &v, err @@ -25,8 +48,8 @@ func (s shareBackend) GetByHash(hash string) (*share.Link, error) { func (s shareBackend) GetPermanent(path string, id uint) (*share.Link, error) { var v share.Link err := s.db.Select(q.Eq("Path", path), q.Eq("Expire", 0), q.Eq("UserID", id)).First(&v) - if err == storm.ErrNotFound { - return nil, errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return nil, fberrors.ErrNotExist } return &v, err @@ -35,8 +58,8 @@ func (s shareBackend) GetPermanent(path string, id uint) (*share.Link, error) { func (s shareBackend) Gets(path string, id uint) ([]*share.Link, error) { var v []*share.Link err := s.db.Select(q.Eq("Path", path), q.Eq("UserID", id)).Find(&v) - if err == storm.ErrNotFound { - return v, errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return v, fberrors.ErrNotExist } return v, err @@ -48,8 +71,35 @@ func (s shareBackend) Save(l *share.Link) error { func (s shareBackend) Delete(hash string) error { err := s.db.DeleteStruct(&share.Link{Hash: hash}) - if err == storm.ErrNotFound { + if errors.Is(err, storm.ErrNotFound) { return nil } return err } + +func (s shareBackend) DeleteWithPathPrefix(pathPrefix string, userID uint) error { + // Share paths are stored without a trailing slash + prefix := strings.TrimRight(pathPrefix, "/") + + var links []share.Link + if err := s.db.Prefix("Path", prefix, &links); err != nil { + if errors.Is(err, storm.ErrNotFound) { + return nil + } + return err + } + + var err error + for _, link := range links { + if link.UserID != userID { + continue + } + + if link.Path != prefix && !strings.HasPrefix(link.Path, prefix+"/") { + continue + } + + err = errors.Join(err, s.db.DeleteStruct(&share.Link{Hash: link.Hash})) + } + return err +} diff --git a/storage/bolt/share_test.go b/storage/bolt/share_test.go new file mode 100644 index 00000000..9f96a847 --- /dev/null +++ b/storage/bolt/share_test.go @@ -0,0 +1,135 @@ +package bolt + +import ( + "os" + "sort" + "testing" + + "github.com/asdine/storm/v3" + + "github.com/filebrowser/filebrowser/v2/share" +) + +func newTestShareBackend(t *testing.T) shareBackend { + t.Helper() + + f, err := os.CreateTemp(t.TempDir(), "shares-*.db") + if err != nil { + t.Fatalf("failed to create temp db: %v", err) + } + _ = f.Close() + + db, err := storm.Open(f.Name()) + if err != nil { + t.Fatalf("failed to open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + return shareBackend{db: db} +} + +func remainingHashes(t *testing.T, s shareBackend) []string { + t.Helper() + + links, err := s.All() + if err != nil { + t.Fatalf("All returned error: %v", err) + } + + hashes := make([]string, 0, len(links)) + for _, link := range links { + hashes = append(hashes, link.Hash) + } + sort.Strings(hashes) + return hashes +} + +func TestDeleteWithPathPrefix(t *testing.T) { + t.Parallel() + + s := newTestShareBackend(t) + + links := []*share.Link{ + // user 1's links + {Hash: "u1-a", Path: "/a", UserID: 1}, + {Hash: "u1-a-child", Path: "/a/child.txt", UserID: 1}, + {Hash: "u1-abc", Path: "/abc", UserID: 1}, // not a descendant of /a + {Hash: "u1-other", Path: "/other", UserID: 1}, + // user 2's links — must never be touched when user 1 deletes + {Hash: "u2-a", Path: "/a", UserID: 2}, + {Hash: "u2-a-child", Path: "/a/child.txt", UserID: 2}, + } + for _, l := range links { + if err := s.Save(l); err != nil { + t.Fatalf("failed to save link %s: %v", l.Hash, err) + } + } + + // User 1 deletes their directory /a. Only user 1's /a and its descendants + // should be removed; /abc (sibling sharing a byte prefix) and all of user + // 2's links must remain. + if err := s.DeleteWithPathPrefix("/a", 1); err != nil { + t.Fatalf("DeleteWithPathPrefix returned error: %v", err) + } + + got := remainingHashes(t, s) + want := []string{"u1-abc", "u1-other", "u2-a", "u2-a-child"} + if len(got) != len(want) { + t.Fatalf("remaining hashes = %v, want %v", got, want) + } + for i := range want { + if got[i] != want[i] { + t.Fatalf("remaining hashes = %v, want %v", got, want) + } + } +} + +// Regression for the trailing-slash delete leaving a stale share +// (GHSA-pp88-jhwj-5qh5): deleting "/a/" must remove the exact "/a" share and its +// descendants, not just the descendants. Siblings and other users are untouched. +func TestDeleteWithPathPrefixTrailingSlash(t *testing.T) { + t.Parallel() + + s := newTestShareBackend(t) + + links := []*share.Link{ + {Hash: "u1-a", Path: "/a", UserID: 1}, + {Hash: "u1-a-child", Path: "/a/child.txt", UserID: 1}, + {Hash: "u1-abc", Path: "/abc", UserID: 1}, // sibling sharing a byte prefix + {Hash: "u2-a", Path: "/a", UserID: 2}, // other user, must remain + } + for _, l := range links { + if err := s.Save(l); err != nil { + t.Fatalf("failed to save link %s: %v", l.Hash, err) + } + } + + // Delete with a trailing slash, as the resource delete handler does for a + // directory request like DELETE /api/resources/a/. + if err := s.DeleteWithPathPrefix("/a/", 1); err != nil { + t.Fatalf("DeleteWithPathPrefix returned error: %v", err) + } + + got := remainingHashes(t, s) + want := []string{"u1-abc", "u2-a"} + if len(got) != len(want) { + t.Fatalf("remaining hashes = %v, want %v", got, want) + } + for i := range want { + if got[i] != want[i] { + t.Fatalf("remaining hashes = %v, want %v", got, want) + } + } +} + +func TestDeleteWithPathPrefixNoMatch(t *testing.T) { + t.Parallel() + + s := newTestShareBackend(t) + + // No links exist at all: the storm Prefix query returns ErrNotFound, which + // must be treated as a no-op rather than surfaced as an error. + if err := s.DeleteWithPathPrefix("/a", 1); err != nil { + t.Fatalf("DeleteWithPathPrefix on empty store returned error: %v", err) + } +} diff --git a/storage/bolt/users.go b/storage/bolt/users.go index 0db1c0d4..f37b707b 100644 --- a/storage/bolt/users.go +++ b/storage/bolt/users.go @@ -1,11 +1,16 @@ package bolt import ( + "errors" + "fmt" "reflect" + "regexp" - "github.com/asdine/storm" + "github.com/asdine/storm/v3" + "github.com/asdine/storm/v3/q" + bolt "go.etcd.io/bbolt" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/users" ) @@ -23,14 +28,14 @@ func (st usersBackend) GetBy(i interface{}) (user *users.User, err error) { case string: arg = "Username" default: - return nil, errors.ErrInvalidDataType + return nil, fberrors.ErrInvalidDataType } err = st.db.One(arg, i, user) if err != nil { - if err == storm.ErrNotFound { - return nil, errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return nil, fberrors.ErrNotExist } return nil, err } @@ -38,11 +43,28 @@ func (st usersBackend) GetBy(i interface{}) (user *users.User, err error) { return } +func (st usersBackend) GetByScope(scope string) (*users.User, error) { + user := &users.User{} + // Match case-insensitively: on a case-insensitive filesystem two scopes + // that differ only in case (e.g. /users/Alice and /users/alice) resolve to + // the same home directory, so they must be treated as a collision. + pattern := "(?i)^" + regexp.QuoteMeta(scope) + "$" + err := st.db.Select(q.Re("Scope", pattern)).First(user) + if err != nil { + if errors.Is(err, storm.ErrNotFound) { + return nil, fberrors.ErrNotExist + } + return nil, err + } + + return user, nil +} + func (st usersBackend) Gets() ([]*users.User, error) { var allUsers []*users.User err := st.db.All(&allUsers) - if err == storm.ErrNotFound { - return nil, errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return nil, fberrors.ErrNotExist } if err != nil { @@ -58,7 +80,11 @@ func (st usersBackend) Update(user *users.User, fields ...string) error { } for _, field := range fields { - val := reflect.ValueOf(user).Elem().FieldByName(field).Interface() + userField := reflect.ValueOf(user).Elem().FieldByName(field) + if !userField.IsValid() { + return fmt.Errorf("invalid field: %s", field) + } + val := userField.Interface() if err := st.db.UpdateField(user, field, val); err != nil { return err } @@ -69,8 +95,8 @@ func (st usersBackend) Update(user *users.User, fields ...string) error { func (st usersBackend) Save(user *users.User) error { err := st.db.Save(user) - if err == storm.ErrAlreadyExists { - return errors.ErrExist + if errors.Is(err, storm.ErrAlreadyExists) { + return fberrors.ErrExist } return err } @@ -87,3 +113,29 @@ func (st usersBackend) DeleteByUsername(username string) error { return st.db.DeleteStruct(user) } + +func (st usersBackend) CountAdmins() (int, error) { + count := 0 + + err := st.db.Bolt.View(func(tx *bolt.Tx) error { + bucket := tx.Bucket([]byte(reflect.TypeOf(users.User{}).Name())) + if bucket == nil { + return nil + } + + c := bucket.Cursor() + for _, v := c.First(); v != nil; _, v = c.Next() { + var u users.User + if err := st.db.Codec().Unmarshal(v, &u); err != nil { + return err + } + if u.Perm.Admin { + count++ + } + } + + return nil + }) + + return count, err +} diff --git a/storage/bolt/users_test.go b/storage/bolt/users_test.go new file mode 100644 index 00000000..54cc72c6 --- /dev/null +++ b/storage/bolt/users_test.go @@ -0,0 +1,50 @@ +package bolt + +import ( + "errors" + "path/filepath" + "testing" + + "github.com/asdine/storm/v3" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" + "github.com/filebrowser/filebrowser/v2/users" +) + +// GetByScope must match case-insensitively: on a case-insensitive filesystem +// two scopes that differ only in case resolve to the same home directory, so +// the provisioning collision check has to treat them as the same scope. +func TestGetByScopeCaseInsensitive(t *testing.T) { + db, err := storm.Open(filepath.Join(t.TempDir(), "db")) + if err != nil { + t.Fatalf("open db: %v", err) + } + t.Cleanup(func() { _ = db.Close() }) + + st, err := NewStorage(db) + if err != nil { + t.Fatalf("new storage: %v", err) + } + if err := st.Users.Save(&users.User{Username: "CaseVictim", Password: "pw", Scope: "/users/CaseVictim"}); err != nil { + t.Fatalf("save: %v", err) + } + + for _, scope := range []string{"/users/CaseVictim", "/users/casevictim", "/USERS/CASEVICTIM"} { + u, err := st.Users.GetByScope(scope) + if err != nil { + t.Errorf("GetByScope(%q) unexpected error: %v", scope, err) + continue + } + if u.Username != "CaseVictim" { + t.Errorf("GetByScope(%q) returned %q, want CaseVictim", scope, u.Username) + } + } + + // A genuinely different scope must still miss (and the regex-escaped query + // must not match a superstring). + for _, scope := range []string{"/users/other", "/users/CaseVictimX"} { + if _, err := st.Users.GetByScope(scope); !errors.Is(err, fberrors.ErrNotExist) { + t.Errorf("GetByScope(%q) expected ErrNotExist, got %v", scope, err) + } + } +} diff --git a/storage/bolt/utils.go b/storage/bolt/utils.go index f45b4851..b16bccff 100644 --- a/storage/bolt/utils.go +++ b/storage/bolt/utils.go @@ -1,15 +1,17 @@ package bolt import ( - "github.com/asdine/storm" + "errors" - "github.com/filebrowser/filebrowser/v2/errors" + "github.com/asdine/storm/v3" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" ) func get(db *storm.DB, name string, to interface{}) error { err := db.Get("config", name, to) - if err == storm.ErrNotFound { - return errors.ErrNotExist + if errors.Is(err, storm.ErrNotFound) { + return fberrors.ErrNotExist } return err diff --git a/storage/storage.go b/storage/storage.go index 79f7bcdd..d4f1a652 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -10,7 +10,7 @@ import ( // Storage is a storage powered by a Backend which makes the necessary // verifications when fetching and saving data to ensure consistency. type Storage struct { - Users *users.Storage + Users users.Store Share *share.Storage Auth *auth.Storage Settings *settings.Storage diff --git a/transifex.yml b/transifex.yml new file mode 100644 index 00000000..3ab4a61a --- /dev/null +++ b/transifex.yml @@ -0,0 +1,17 @@ +filters: +- filter_type: file + file_format: KEYVALUEJSON + source_language: en + source_file: frontend/src/i18n/en.json + translation_files_expression: 'frontend/src/i18n/.json' + +settings: + language_mapping: + sv_SE: sv-se + pt_BR: pt-br + pt_PT: pt-pt + zh_CN: zh-cn + zh_HK: zh-hk + zh_TW: zh-tw + nl_BE: nl-be + lv_LV: lv-lv diff --git a/users/assets.go b/users/assets.go new file mode 100644 index 00000000..7b09580d --- /dev/null +++ b/users/assets.go @@ -0,0 +1,25 @@ +package users + +import ( + "embed" + "strings" +) + +//go:embed assets +var assets embed.FS +var commonPasswords map[string]struct{} + +func init() { + // Password list sourced from: + // https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/100k-most-used-passwords-NCSC.txt + data, err := assets.ReadFile("assets/common-passwords.txt") + if err != nil { + panic(err) + } + + passwords := strings.Split(strings.TrimSpace(string(data)), "\n") + commonPasswords = make(map[string]struct{}, len(passwords)) + for _, password := range passwords { + commonPasswords[strings.TrimSpace(password)] = struct{}{} + } +} diff --git a/users/assets/common-passwords.txt b/users/assets/common-passwords.txt new file mode 100644 index 00000000..9ac1387d --- /dev/null +++ b/users/assets/common-passwords.txt @@ -0,0 +1,100000 @@ +123456 +123456789 +qwerty +password +111111 +12345678 +abc123 +1234567 +password1 +12345 +1234567890 +123123 +000000 +iloveyou +1234 +1q2w3e4r5t +qwertyuiop +123 +monkey +dragon +123456a +654321 +123321 +666666 +1qaz2wsx +myspace1 +121212 +homelesspa +123qwe +a123456 +123abc +1q2w3e4r +qwe123 +7777777 +qwerty123 +target123 +tinkle +987654321 +qwerty1 +222222 +zxcvbnm +1g2w3e4r +gwerty +zag12wsx +gwerty123 +555555 +fuckyou +112233 +asdfghjkl +1q2w3e +123123123 +qazwsx +computer +princess +12345a +ashley +159753 +michael +football +sunshine +1234qwer +iloveyou1 +aaaaaa +fuckyou1 +789456123 +daniel +777777 +princess1 +123654 +11111 +asdfgh +999999 +11111111 +passer2009 +888888 +love +abcd1234 +shadow +football1 +love123 +superman +jordan23 +jessica +monkey1 +12qwaszx +a12345 +baseball +123456789a +killer +asdf +samsung +master +azerty +charlie +asd123 +soccer +FQRG7CS493 +88888888 +jordan +michael1 +jesus1 +linkedin +babygirl1 +789456 +blink182 +thomas +qwer1234 +333333 +liverpool +michelle +nicole +qwert +j38ifUbn +131313 +asdasd +0 +987654 +lovely +q1w2e3r4 +0123456789 +gfhjkm +andrew +hello1 +joshua +Status +justin +anthony +angel1 +iloveyou2 +1111111 +zxcvbn +hello +1111 +jennifer +hunter +naruto +bitch1 +welcome +159357 +101010 +tigger +147258369 +babygirl +jessica1 +parola +5201314 +robert +fuckyou2 +696969 +102030 +0987654321 +loveme +123456q +apple +pokemon +mother +money1 +secret +anthony1 +purple +q1w2e3r4t5y6 +baseball1 +qazwsxedc +1111111111 +abc +buster +matthew +andrea +soccer1 +basketball +hannah +freedom +golfer +chelsea +passw0rd +george +trustno1 +friends +william +iloveu +amanda +number1 +chocolate +qwerty12 +summer +flower +charlie1 +maggie +pakistan +samantha +asdf1234 +letmein +asshole1 +superman1 +marina +147258 +batman +fuk19600 +butterfly +010203 +qweqwe +29rsavoy +forever +1 +mustang +sunshine1 +ashley1 +internet +london +666 +harley +alexander +xbox360 +00000000 +12341234 +q1w2e3 +pepper +family +loveyou +50cent +joseph +whatever +! +jasmine +orange +user +junior +cookie +martin +qweasdzxc +212121 +1qazxsw2 +password12 +google +password2 +111222 +lol123 +hello123 +jordan1 +shadow1 +patrick +3rJs1la7qE +ginger +nicole1 +mylove +arsenal +12344321 +abcdef +love12 +232323 +VQsaBLPzLa +taylor +myspace +brandon +angel +12345q +brandon1 +chris1 +diamond +snoopy +asshole +qweasd +starwars +matrix +mickey +school +jonathan +melissa +eminem +1234561 +cjmasterinf +lovers +1234567891 +nikita +richard +1342 +yellow +12345qwert +oliver +q1w2e3r4t5 +cheese +a123456789 +christian +290966 +wall.e +12345678910 +12413 +sophie +tudelft +DIOSESFIEL +dpbk1234 +PE#5GZ29PTZMSE +bailey +U38fa39 +mercedes +victoria +147852 +asdasd5 +matthew1 +abcdefg +peanut +456789 +red123 +happy1 +sandra +benjamin +dragon1 +444444 +123654789 +$HEX +elizabeth +prince +amanda1 +angels +angela +qqqqqq +samuel +banana +barcelona +ghbdtn +computer1 +michelle1 +william1 +hockey +monster +carlos +justin1 +antonio +qwertyu +nathan +55555 +123789 +0000 +killer1 +11223344 +chicken +lucky1 +gabriel +welcome1 +zaq12wsx +jasmine1 +silver +hunter1 +bubbles +hottie1 +purple1 +andrew1 +daniel1 +liverpool1 +1qaz2wsx3edc +rainbow +morgan +natasha +fuckoff +jackson +austin +vanessa +mommy1 +madison +adidas +xxxxxx +252525 +america +james1 +metallica +slipknot +chicken1 +87654321 +jesus +NULL +0000000000 +alexis +!ab#cd$ +spiderman +steven +ferrari +lauren +456123 +robert1 +147852369 +qwaszx +buddy1 +butterfly1 +!~!1 +tinkerbell +bandit +danielle +0123456 +nicholas +hannah1 +qwerty12345 +1234554321 +asdfasdf +pokemon1 +nirvana +destiny +scooter +cookie1 +123qweasd +loveme1 +chelsea1 +chocolate1 +1234567a +juventus +rachel +111222tianya +qazxsw +zzzzzz +monica +stella +america1 +999999999 +jennifer1 +freedom1 +taylor1 +741852963 +yamaha +victor +00000 +qwertyui +a1b2c3 +ronaldo +1password +smokey +david1 +money +daddy1 +cocacola +a838hfiD +1234abcd +joshua1 +123asd +buster1 +myspace123 +booboo +madison1 +samantha1 +heather +7654321 +elizabeth1 +poop +tigger1 +family1 +mustang1 +142536 +november +jasper +lovely1 +diamond1 +success +edward +music1 +valentina +harley1 +sweety +tennis +zxc123 +friend +qaz123 +whatever1 +thomas1 +nothing +N0=Acc3ss +super123 +casper +Password +chester +Exigent +password123 +cheese1 +spongebob1 +mynoob +hahaha +hellokitty +098765 +alexandra +canada +david +1q2w3e4r5t6y +dennis +december +olivia +a1b2c3d4 +playboy +sabrina +patricia +summer1 +friends1 +mexico1 +dakota +barbie +loulou +johnny +music +123456m +Password1 +lover1 +maggie1 +pretty +123hfjdk147 +nicolas +qwert1 +charles +phoenix +rebecca +thunder +sexy123 +iloveu2 +123456789q +batman1 +beautiful +carolina +4815162342 +vincent +jeremy +spider +master1 +heather1 +weed420 +Sojdlg123aljg +pepper1 +sebastian +yankees +dallas +pussy1 +cameron +caroline +peanut1 +guitar +startfinding +midnight +i +iw14Fi9j +yankees1 +elephant +124578 +scorpion +sexy +tweety +bubbles1 +fuckoff1 +cowboys1 +fuckme +fucker +louise +dolphin +852456 +patrick1 +loser1 +mother1 +lalala +naruto1 +veronica +melissa1 +sparky +newyork +adrian +123456s +september +heaven +alexander1 +jessie +crystal +tigers +k.: +p +iloveyou! +chris +gemini +raiders1 +135790 +zxcvbnm1 +peaches +merlin +12121212 +spongebob +scooby +stephanie +shannon +james +246810 +1a2b3c +555666 +sergey +lovelove +202020 +159951 +precious +123456j +lakers +manchester +ginger1 +134679 +cristina +apples +a1234567 +qqww1122 +pussy +daniela +jackson1 +123456b +jackie +rocky1 +asdfghjkl1 +sakura +qazwsx123 +yellow1 +flower1 +apple1 +010101 +newyork1 +sammy1 +alex +muffin +cherry +poohbear +richard1 +nigger1 +test123 +destiny1 +flowers +slipknot1 +cooper +753951 +monster1 +paSSword +baby123 +mexico +blessed1 +toyota +spiderman1 +beauty +fuck +emmanuel +genius +winston +tiffany +charlotte +741852 +iloveu1 +diablo +onelove +tiger1 +badboy +maverick +joseph1 +winner +mickey1 +creative +beautiful1 +softball +hotmail +421uiopy258 +brittany +1314520 +aa123456 +asdf123 +lastfm +manuel +sayang +kristina +austin1 +stupid1 +hottie +booboo1 +murphy +stalker +carmen +doudou +qazqaz +scorpio +m123456 +pimpin1 +pass +badoo +garfield +0000000 +fuckme1 +scooter1 +151515 +aaaaa +brandy +kitty1 +myspace2 +steelers +compaq +claudia +123456d +rabbit +bailey1 +crazy1 +august +isabella +orange1 +october +q123456 +green1 +black1 +samson +aaaa +angelo +1a2b3c4d +9876543210 +boomer +junior1 +12345678a +shorty1 +tyler1 +456456 +kimberly +guitar1 +cowboys +shorty +passion +soleil +christ +1v7Upjw3nT +111 +albert +andrey +ranger +dexter +lucky7 +popcorn +babyboy1 +bitch +alyssa +brittany1 +123456abc +forever1 +fucker1 +barney +1122334455 +blessed +metallica1 +1029384756 +karina +krishna +cameron1 +california +christian1 +melanie +j123456 +password! +happy +963852741 +woaini +danielle1 +samsung1 +gangsta1 +icecream +letmein1 +qwerty123456 +eagles +love13 +qwert123 +uQA9Ebw445 +fucku2 +smokey1 +leonardo +asdfgh1 +police +christine +windows +bismillah +miguel +iloveyou12 +: +snickers +arsenal1 +7758521 +bubba1 +cowboy +denise +pretty1 +george1 +q12345 +winter +dancer +coffee +player1 +fernando +maxwell +swordfish +rangers +horses +francis +951753 +martina +fylhtq +chivas1 +secret1 +s123456 +marlboro +qwerty1234 +kitten +lauren1 +twilight +florida +141414 +pass123 +YAgjecc826 +jason1 +54321 +nathan1 +sydney +pumpkin +molly1 +dolphin1 +vfhbyf +natalie +hiphop +skater1 +fishing +bond007 +kobe24 +barbara +loveyou1 +tiffany1 +john316 +cassie +iloveme +hardcore +stupid +fatima +alexis1 +rockstar +abc1234 +123456z +playboy1 +321321 +123123a +greenday +baby +maria +angelina +starwars1 +google1 +b123456 +school1 +bonnie +123qwe123 +SZ9kQcCTwY +lucky +father +courtney +sexy12 +007007 +crystal1 +abc123456 +fluffy +kissme +marseille +trinity +sweet1 +candy1 +qwerty7 +password3 +alejandro +a +pookie +roberto +sarah1 +player +justinbieb +turtle +poohbear1 +simone +corvette +jackass1 +lolita +jonathan1 +steven1 +alicia +lollipop +jackass +123456c +786786 +biteme +honey +motorola +nicholas1 +friendster +angel123 +portugal +iloveme1 +simple +012345 +vfrcbv +brooklyn +morgan1 +darkness +rainbow1 +shelby +slayer +natalia +snowball +chicago +454545 +aaaaaa1 +1234512345 +people +lovers1 +sharon +golden +snoopy1 +shannon1 +raiders +123qweasdzxc +sweetie +789789 +teresa +blue123 +242424 +awesome +boston +victoria1 +pamela +wilson +ssssss +mike +kevin +test +klaster +123456k +kenneth +bonjour +tucker +catherine +hockey1 +pa55word +9379992 +password. +eminem1 +love11 +mnbvcxz +logitech +redsox +remember +popcorn1 +kevin1 +isabelle +P3Rat54797 +seven7 +steelers1 +qwe +marcus +bulldog +yfnfif +cricket +lakers24 +edward1 +tweety1 +qazwsx1 +123456t +single +lizottes +nastya +amber1 +sarah +blessing +marley +rockstar1 +fender +aaa111 +willow +camille +aaaaaaaa +florida1 +peaches1 +bella1 +carlos1 +connor +d123456 +love4ever +cutie1 +indian +goodluck +marie1 +loveme2 +marine +hammer +chance +stephen +121314 +123456l +z123456 +santiago +strawberry +abcdefg1 +bigdaddy +daisy1 +thunder1 +asdfghjk +marvin +mmmmmm +vanessa1 +happy123 +abcd123 +fuckyou! +iverson3 +hotdog +svetlana +arthur +1212 +never +tintin +234567 +iceman +orlando +satan666 +superstar +babygurl1 +090909 +johnson +fyfcnfcbz +freddy +rachel1 +magic +qwert12345 +chester1 +loverboy +miller +cookies +parker +azertyuiop +porsche +teacher +5555555555 +angelica +yourmom1 +bullshit +sunday +christopher +love1234 +travis +5555555 +evildick +666999 +monika +nissan +qwer +asdfg +midnight1 +williams +please +55555555 +spencer +aaaaa1 +gateway +tiger +dallas1 +111111a +charles1 +321654 +gracie +raymond +ladybug +sweetpea +rush2112 +greenday1 +sunflower +1123581321 +baby12 +jason +precious1 +lakers1 +brooklyn1 +stephanie1 +undertaker +m +12345t +sweetheart +ihateyou +zachary +emily1 +fktrcfylh +123698745 +tamara +asdfjkl +21212121 +456852 +lebron23 +andrei +paradise +doctor +kawasaki +PolniyPizdec0211 +a12345678 +money123 +171717 +sophia +winnie +bianca +bigboy +22222222 +qqq111 +jacob1 +andrea1 +john +julian +pantera +lucky13 +poopoo +lollol +3d8Cubaj2E +lorenzo +sasuke +babyboy +nascar +hahaha1 +vladimir +abc12345 +sierra +shopping +career121 +12345qwerty +genesis +christina +bandit1 +mylove1 +cool +nelson +abcd +january +sweet +qq123456 +scarface +159159 +montana +ricardo +dolphins +giovanni +frankie +soccer12 +johnny1 +facebook +changeme +zxcvbnm123 +jerome +sassy1 +password11 +123454321 +qw123321 +dakota1 +australia +southside1 +soccer10 +zoosk +maryjane +пїЅпїЅпїЅпїЅпїЅпїЅ +brenda +rebecca1 +baller1 +honey1 +jeffrey +xavier +eagles1 +ryan +getmoney1 +brianna1 +realmadrid +8675309 +k. +scooby1 +westside +minnie +bobby1 +vampire +linkinpark +asdasdasd +francesco +inuyasha +1478963 +asdfg1 +falcon +123456r +green +laura +1q1q1q +aaa +rosebud +katie1 +alex123 +111222333 +asdfghj +iG4abOX4 +sergio +nigger +sterling +sophie1 +claire +100200 +italia +ronaldo7 +timothy +jaguar +mariana +maksim +abigail +isabel +sairam +520520 +jackie1 +savannah +bigdaddy1 +courtney1 +disney +bigboy1 +nigga1 +blue +zaqwsx +love22 +c123456 +dancer1 +1qwerty +musica +single1 +123456aa +valentin +brooke +oliver1 +chicago1 +cherry1 +london1 +cjkysirj +alberto +jesus123 +565656 +blabla +maria1 +warcraft +patches +cat123 +mahalkita +banana1 +P +monkey123 +hollister1 +alyssa1 +lover +butter +walter +black +alessandro +778899 +W5tXn36alfW +tigers1 +password7 +danny1 +awesome1 +bestfriend +dominic +gabriel1 +michele +gateway1 +oscar1 +sex +cancer +helpme +volleyball +yuantuo2012 +marie +123456g +princess12 +love69 +justine +chouchou +bitch123 +champion +france +kitty +element1 +963852 +jasmin +fishing1 +4444 +darling +united +manutd +teddybear +regina +natalie1 +passwort +francesca +181818 +abcdef1 +maximus +rafael +buddy +victory +qwerasdf +animal +student +hawaii +apple123 +spirit +jamaica +carter +kayla1 +gabriela +mariposa +abcdefgh +love23 +super +yahoo1 +rental +eddie1 +dreams +sexy69 +cheyenne +babygirl12 +poop123 +1234321 +england +eduardo +valeria +zachary1 +1986 +bob123 +antonio1 +sniper +napoli +panther +willie +redsox1 +hallo +zaq123 +calvin +veronika +111111111 +lol +nintendo +copper +millie +georgia +ybccfy +dog123 +brianna +123zxc +happiness +diesel +monkey12 +mohamed +123321a +camaro +bigdog +7895123 +100000 +engineer +bitches1 +estrella +grandma1 +princesa +oksana +gloria +penguin +virginia +skater +scarface1 +suzuki +martin1 +blue22 +donald +123456e +PASSWORD +1234560 +newlife +chris123 +�+�����+�����+�����+�����+�����+���� +123qaz +leslie +jimmy1 +sweet16 +anderson +abcdefg123 +77777777 +blahblah +wwwwww +aleksandr +shelby1 +adriana +kisses +giuseppe +softball1 +skyline +audrey +fucku1 +trouble +badboy1 +rey619 +tristan +celtic +vkontakte +love101 +pimpin +simpsons +liberty +7777 +jeremy1 +godisgood +angels1 +262626 +cupcake +twilight1 +skate1 +potter +bradley +warrior +qw123 +miranda +pumpkin1 +barbie1 +sexsex +100 +147896325 +smile +hesoyam +debbie +ruslan +online +maddie +jessie1 +pink123 +speedy +taurus +loveyou2 +olivia1 +ladybug1 +wizard +allison +pierre +domino +benjamin1 +apples1 +silvia +kingkong +bobby +monday +polina +fuckyou123 +honda1 +mercury +nokia +rascal +pepsi1 +6969 +silver1 +angela1 +florence +adgjmptw +cookies1 +margarita +hallo123 +monique +258456 +fuck123 +9111961 +love14 +pass1234 +children +zzzzzzzz +tyler +123451 +cristian +star +justice +password5 +booger +knight +mamapapa +dreamer +siemens +esther +soccer11 +hollywood +qawsed +password01 +monkey2 +cassie1 +anna +inuyasha1 +amoremio +sister +gregory +191919 +serenity +natali +sabrina1 +N8ZGT5P0sHw= +prince1 +rangers1 +camila +123456qwerty +ncc1701 +1bitch +nirvana1 +ronald +business +texas1 +element +avatar +panasonic +gangster +serega +brandy1 +asasas +25802580 +missy1 +colorado +jenny1 +microsoft +cowboy1 +909090 +1989 +sammy +jupiter +stanley +madonna +123456p +serena +valerie +superstar1 +legolas +Groupd2013 +31415926 +dbrnjhbz +rocket +megan1 +airforce1 +apollo +3Odi15ngxB +internet1 +westside1 +qwer123 +brooke1 +kelsey +pebbles +system +catdog +christina1 +flowers1 +Passw0rd +sultan +icecream1 +bulldog1 +redneck1 +123457 +123987 +gizmo1 +johncena1 +danger +chichi +donkey +nfnmzyf +asdzxc +india +titanic +compaq1 +thebest +kirill +javier +hamster +myspace! +223344 +gangsta +packers +asdasd123 +pookie1 +hitman +kathleen +qwqwqw +cupcake1 +skittles +sports +coucou +frankie1 +P@ssw0rd +aaron1 +christmas +molly +casper1 +qti7Zxh18U +blondie +football12 +smiley +snickers1 +lasvegas +sam123 +445566 +september1 +2222 +jayjay +basket +elena +ireland +110110 +123456789m +k123456 +tommy1 +jesus7 +madrid +marshall +vegeta +people1 +minecraft +terminator +security +drowssap +sparky1 +123456789z +19871987 +poiuytrewq +j12345 +pauline +jackson5 +jetaime +p@ssw0rd +ronnie +skippy +kimberly1 +rammstein +alexandre +scotland +nikki1 +rocky +asdfjkl: +motdepasse +stefan +celine +harrypotter +aaaaaaa +babydoll +manman +violet +dddddd +192837465 +pizza1 +legend +321654987 +iloveyou. +bella +truelove +harvey +tanner +runescape1 +fantasy +peter +casanova +friday +robbie +katrina +philips +spencer1 +francisco +cool123 +viktor +exigent +fluffy1 +qwertz +chocolat +christophe +phoenix1 +poiuyt +z +bambam +jesus777 +99999999 +1qaz1qaz +323232 +pussy69 +killer123 +rhbcnbyf +alejandra +muffin1 +kelly1 +stonecold +aurora +chivas +loser +gordon +love21 +gandalf +lalala1 +jasper1 +a1s2d3f4 +spanky +love10 +mitchell +g9l2d1fzPY +jack +babygirl2 +19851985 +welcome123 +franklin +russia +carpediem +aaaaaaaaaa +linked +zaq1xsw2 +megaparol12345 +travis1 +admin123 +daisy +lorena +froggy +smiles +douglas +handsome +shithead +1blood +tatiana +santos +little1 +anastasia +unicorn +5555 +12369874 +savannah1 +tinker1 +sweetie1 +jenny +dIWtgm8492 +1234567q +super1 +margaret +viking +muhammad +maxwell1 +pppppp +sexyboy +phantom +fatboy +m12345 +tomtom +080808 +monica1 +ballin1 +eclipse +andres +elijah +maurice +piglet +baxter +123456654321 +pikachu +india123 +platinum +gangster1 +garcia +passport +jesuschrist +kelly +sandra1 +hotmail1 +mahalko +charmed +loving +272727 +corazon +katherine +michel +myspace12 +access +bunny1 +123321123 +wisdom +mozart +snowball1 +147147 +asdfghjkl: +patches1 +abcde +chloe1 +horses1 +D1lakiss +98765 +church +everton +12345m +nicola +peace1 +marcus1 +trouble1 +13579 +dylan1 +tinker +161616 +candy +69696969 +valentine +grace +sandy1 +hercules +123456f +beatrice +puppy1 +cooper1 +wolverine +12345s +mama +jamesbond +jamie1 +theman +anton +19841984 +toshiba +cthutq +maradona +emily +gibson +787878 +bingo1 +green123 +marcel +lolipop +maganda +penis1 +turtle1 +amsterdam +joanna +fashion +mercedes1 +yahoo.com +123000 +19861986 +britney +boston1 +goldfish +power +james123 +kitkat +network +lawrence +pass1 +112358 +beatles +winston1 +saibaba +princess2 +trevor +promise +norman +14789632 +hotdog1 +idontknow +hollywood1 +damian +star123 +123456y +diamonds +trinity1 +ihateyou1 +kkkkkk +cutiepie +soccer13 +bulldogs +felipe +yoyoyo +heaven1 +enigma +marion +angel12 +brian1 +jayden +germany +mario +onelove1 +369369 +soccer7 +casey1 +sasha +brother +matteo +max123 +melody +jimmy +success1 +simona +julien +hjvfirf +loveu2 +digital +english +reggie +shalom +power1 +einstein +forever21 +karate +135792468 +hello12 +bubble +nathalie +benfica +billy +spartak +hahahaha +harrison +timothy1 +mom123 +123456123 +danny +kingdom +poopoo1 +admin +gunner +ranger1 +1234asdf +anhyeuem +helena +sasha1 +buttercup +argentina +water1 +cocacola1 +polska +soccer123 +omsairam +saturn +hg0209 +manager +georgia1 +stephen1 +baller +282828 +forest +12345r +johncena +sweets +elaine +maryjane1 +dragonball +milano +stargate +colombia +brian +19891989 +captain +infinity +pandora +amelia +trfnthbyf +dianne +eagle1 +redskins +digital1 +sexybitch1 +general +pogiako +dinosaur +zidane +7894561230 +colt45 +spring +sureno13 +arnold +catdog1 +jesse1 +eugene +teddy1 +penelope +19921992 +runescape +paintball1 +little +blood1 +test1234 +summer08 +billy1 +nadine +myname +therock +rusty1 +fatboy1 +ciaociao +football2 +swimming +wesley +travel +Telechargement +zxczxc +orlando1 +nonmember +grandma +password4 +654123 +tennis1 +shithead1 +denise1 +thuglife +bbbbbb +vRbGQnS997 +nothing1 +nigga +asd +subaru +chacha +tequiero +moomoo +charly +penis +chopper +comeon11 +lacrosse +12345j +scoobydoo +butter1 +gracie1 +sadie1 +zxcv1234 +iverson +bowwow1 +123789456 +bullshit1 +020202 +faith1 +kitten1 +monique1 +pink +victor1 +wordpass +bullet +r123456 +duncan +a11111 +1qa2ws3ed +adrian1 +laura1 +thx1138 +russell +love15 +cutiepie1 +flatron +sebastian1 +gordon24 +sexygirl1 +123321q +ilovegod +asdf12 +pickle +mememe +mar +kristen +143143 +kittycat +420420 +bamboo +mylife +e123456 +walker +oscar +boobies +cleopatra +pascal +alaska +testing +dragons +?????? +19821982 +qwerty321 +pippo +porsche1 +perfect +password13 +hummer +justme +303030 +Megaparol12345 +sammie +smile1 +19801980 +david123 +teddybear1 +baseball12 +blue12 +joker1 +dustin +katerina +cynthia +11112222 +mario1 +harry1 +qazwsx12 +fabian +samuel1 +fuckyou69 +cecilia +roland +2 +golfcourse +070707 +daddy +magic1 +313131 +alfred +martinez +elephant1 +2004 +fktrctq +katie +ass123 +yahoo +ilovejesus +l123456 +123456123456 +houston1 +allison1 +smoke420 +godzilla +bernard +ganesh +peterpan +mybaby +brutus +pitbull +buddy123 +iloveme2 +skittles1 +spurs1 +logan1 +x4ivygA51F +9-11-1961 +ciccio +pineapple +panthers +napoleon +chopper1 +honda +drummer1 +louise1 +holiday +11235813 +federico +music123 +houston +startrek +vincent1 +qazxswedc +alabama +mohammed +qwe12345 +cambiami +iloveyou3 +christine1 +gggggg +friendship +911911 +pa55w0rd +pokemon123 +mountain +boomer1 +steve +galina +12301230 +vfvjxrf +college +biteme1 +raymond1 +bitches +looking +bhf +bradley1 +packers1 +berlin +lindsay +linkin +isabella1 +hassan +hacker +booger1 +987456 +my3kids +scotty +storm1 +19831983 +martha +5211314 +123456789s +bigdog1 +catch22 +mariah +marco +catalina +wildcats +solomon +caramel +michigan +oicu812 +44444 +butthead +myspace. +13131313 +vampires +philip +amber +cheer1 +753159 +sunny1 +peewee +bob +charmed1 +change +hiphop1 +yourmom +mybaby1 +theman1 +strength +panther1 +tommy +badass1 +jjjjjj +cdtnkfyf +charlotte1 +barcelona1 +hardcore1 +bubba +1loveyou +pussycat +spitfire +myself +Tnk0Mk16VX +babygurl +qweasd123 +chanel +fender1 +howard +andreas +megan +bluebird +a123123 +123456987 +carolina1 +asdqwe123 +sexygirl +sandy +popeye +matt +ybrbnf +pickles +2012comeer +medicine +autumn +something +evelyn +misty1 +cutie +naruto123 +peter1 +soccer2 +maxime +miriam +10101010 +grace1 +fordf150 +asd123456 +ilovehim1 +moonlight +caprice +lonely +123098 +t123456 +skipper +damien +llllll +angel2 +10203040 +YfDbUfNjH10305070 +spider1 +johnson1 +deejay +giulia +africa +joel +saints +bananas +bonita +password10 +tucker1 +rodrigo +runner +joanne +000 +567890 +archie +birthday +77777 +baseball2 +trixie +mark +789123 +dearbook +spike1 +19951995 +null +password0 +q1q1q1 +pimp123 +blackberry +lilwayne1 +king +maddog +sugar1 +linda +elvis1 +66666666 +the +ffffff +firebird +kermit +jake +phoebe +aaliyah +7758258 +123456n +alison +s12345 +22222 +s +123465 +salvador +barney1 +sexy101 +drpepper +melanie1 +miracle +aaa123 +c +mypassword +caitlin +wxcvbn +fred +harry +ironman +thebest1 +natasha1 +ferrari1 +fuku00198 +d +usa123 +lololo +102938 +pebbles1 +898989 +abigail1 +a111111 +thumper +familia +rfrfirf +spartan117 +chance1 +goober +2222222 +qwerty11 +brenda1 +monkeys +cassandra +aaron +2cute4u +darren +135246 +tiger123 +always +smokie +steve1 +freddie +nick +poopy1 +genesis1 +panget +guinness +chiara +athena +personal +alabama1 +jaimatadi +gators +israel +darkangel +ellie +evony192 +19881988 +smoke1 +knopka +hershey +budlight1 +peace +lovebug +alicia1 +pencil +mikey1 +a1a1a1 +predator +ka_dJKHJsy6 +alejandro1 +torres +hayden +newport1 +montana1 +111111q +marcos +lvbnhbq +QWERTY +bigdick +20102010 +chevy1 +fuckme69 +sporting +indonesia +fernanda +aezakmi +olivier +devil666 +147369 +pizza +aquarius +dragon123 +bonnie1 +kelsey1 +mexican1 +12qw23we +1234567890q +future +franco +vikings +rahasia +222333 +jayden1 +44444444 +diana +sunset +lovelife +love01 +theone +Sample123 +b +penguin1 +lizzie +bearshare +denver +my3sons +remember1 +drummer +lorraine +12345d +aaliyah1 +lindsey +davide +scott +nemesis +blondie1 +mike123 +hector +holly1 +tarzan +jeremiah +brasil +badass +pimp +magnum +temp +boogie +death1 +connie +capricorn +12131415 +wrestling1 +private +potato +special +пїЅпїЅпїЅпїЅпїЅпїЅпїЅ +good +manuela +cherokee +florian +asdfasdf1 +kenneth1 +blablabla +sexy13 +lincoln +friend1 +sheila +christ1 +yvonne +minnie1 +turkey +dipset1 +yamaha1 +veronica1 +punk +summer09 +a1s2d3 +love09 +passer2011 +sex123 +kennedy +2hot4u +marine1 +maddie1 +cricket1 +nikki +selena +goldie +cooldude +giants +broncos +123qwerty +juliana +myspace3 +buddha +skateboard +sk84life +chloe +buttons +westlife +norte14 +lizard +kissme1 +111qqq +defender +dumbass1 +favour +shaggy +vampire1 +456654 +darkness1 +tequila +daniel123 +azerty123 +1984 +bball1 +assassin +testtest +youbye123 +samurai +dragons1 +sk8ter +505050 +hello2 +14531453 +penny1 +11111a +federica +marian +killa1 +dance1 +explorer +simple1 +ibrahim +death +matilda +dickhead +qwer12 +pioneer +ducati +babylove +formula1 +crazy +angel13 +janice +789654 +micheal +password9 +jayjay1 +hailey +wangyut2 +363636 +1987 +l +dfvgbh +marissa +gilbert +cheyenne1 +canada1 +f +faith +12345z +monkeys1 +dominique +tokiohotel +xxx +j +delete +miller1 +deedee +alexandra1 +cantik +1985 +kenny1 +12345k +mama123 +connor1 +antoine +papillon +111555 +123455 +dolphins1 +haha123 +123456h +babyblue +pitbull1 +emerald +1313 +love16 +miranda1 +343434 +beauty1 +fondoom +sebastien +hhhhhh +simon +teacher1 +monalisa +ekaterina +19941994 +larisa +hearts +jeffrey1 +sapphire +disney1 +england1 +alex12 +wolves +jamie +warren +surfer +subzero +gustavo +arizona +bear +puppies +freeman +19931993 +april +julia +1234567899 +vision +k +telefon +1myspace +jacob +pink12 +sydney1 +dragon12 +killer12 +theresa +agent007 +123456789j +getmoney +33333333 +picasso +idontknow1 +linda1 +morris +spooky +julius +336699 +design +camilla +wrestling +jamaica1 +racing +lucky123 +9999 +salvatore +loverboy1 +shanna +19901990 +fuck69 +pinky1 +panthers1 +snowman +brownie +lollipop1 +murphy1 +kkkkkkkk +random +hughes +1princess +death666 +shirley +321456 +cjkywt +roberta +digger +miguel1 +stefano +zoey101 +19811981 +dude +benson +money2 +sierra1 +jayson +sputnik +9999999999 +watermelon +iloveyou7 +654321a +alpha1 +special1 +valera +bambam1 +8888 +bluefish +525252 +american +voodoo +malibu +123456w +rabbit1 +dodgers1 +slayer1 +amore +carmen1 +april1 +money12 +frank +blahblah1 +poopie1 +123123q +050505 +dustin1 +elijah1 +cuddles +fucking +winter1 +ily123 +liliana +fuckit +scott1 +frank1 +abcde1 +karolina +shelly +bonbon +90210 +6666 +tigger2 +justice1 +1234566 +adidas1 +shadow12 +harmony +fuckit1 +deborah +qazwsxedcrfv +1lover +babydoll1 +sam +king123 +paloma +golden1 +bethany +pimp12 +julie +celeste +sachin +906090 +123456qwe +marines +bulldogs1 +hotrod +forget +369258147 +bollocks +daniele +gerald +dalejr88 +abcde12345 +132435 +mustafa +password00 +6hBf28W791 +kisses1 +broncos1 +sweetpea1 +ficken +kitty123 +buttercup1 +987456321 +alessia +dominik +zk.: +lilmama1 +kissmyass +mommy +stellina +123456asd +d12345 +dragonfly +karen +bitch12 +matrix1 +980099 +loser123 +dominic1 +password8 +lindsey1 +stinky +sublime +ronaldinho +volcom1 +asdasd1 +shit +summer07 +jacobs +garrett +hotstuff +smiley1 +qweqweqwe +gundam +24680 +19911991 +beckham +maison +blood5 +candy123 +0.00000000 +thegame +nightmare +water +235689 +best +bunny +ghjcnj +doggy1 +password69 +thailand +password22 +simpson +sexymama1 +raven1 +february +lala123 +stella1 +lovebug1 +viktoria +oooooo +newlife1 +josh +doggie +soccer3 +201301 +redwings +aspirine +tobias +pirate +badger +energy +charlene +adam +emilie +5678 +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +dickhead1 +letter +123456789k +master123 +dennis1 +n +geronimo +gregor +redneck +riley1 +beaver +atlanta +atlanta1 +dadada +mariam +funny1 +garden +545454 +country +mommy123 +james23 +mookie +electra +buffalo +curtis +xavier1 +scorpio1 +yousuck1 +god +barbara1 +justdoit +massimo +marley1 +pakistan1 +olga +122333 +ytrewq +19781978 +tatyana +josephine +1980 +qawsedrf +ladygaga +f123456 +singer +carrie +soccer9 +lover123 +yankees2 +popopo +godislove +cuteako +valencia +insanity +sk8ordie +molly123 +twins2 +creative1 +fountain +harold +driver +redskins1 +suckit +rose +3333 +mollie +poop12 +queen1 +kristen1 +dexter1 +bella123 +bitch2 +�+�����+�����+�����+�����+�����+�����+���� +liberty1 +rolltide +madmax +german +dylan +jazzy1 +valentino +christmas1 +vanilla +connect +clowns +burrito +october1 +sunny +schalke04 +preston +prettygirl +tornado +panda1 +stacey +cloud9 +willie1 +sammy123 +pavilion +vacation +love08 +tottenham +5hsU75kpoT +callie +broken +love143 +hey123 +coffee1 +2222222222 +fish +hihihi +UsdopaA +fireball +yankee +privet +bobbob +shakira +soccer14 +noway +akopa123 +illinois +pantera1 +rockon +newcastle +samsam +daniels +kkkkkkk +shadow123 +drpepper1 +sexy11 +scarlett +season +gabby1 +cedric +teddy +melvin +avalon +a1b2c3d4e5 +321123 +usdopaa +lucas +12345679 +ashton +froggy1 +shamrock +tomcat +shawn1 +marius +simba1 +mariah1 +frances +eternity +12345b +vagina +volcom +wallace +goodboy +rosemary +marlon +lollypop +paris1 +bubble1 +rooster +topgun +sasasa +g123456 +psycho +patricia1 +332211 +warcraft1 +123456789d +gerard +qwerqwer +donkey1 +dick +young1 +dodgers +milena +canyon +magnet +kristin +blackie +sanane +1jesus +989898 +1945 +manuel1 +redrose +bacchus +Linkedin +19791979 +zombie +01020304 +flores +poopie +phillip +area51 +taco +fatass1 +12 +gabrielle +holland +magnolia +784512 +naruto12 +314159 +666777 +budlight +1951 +fresh1 +tanner1 +chandler +1982 +hello! +11111q +maxmax +jellybean +soccer5 +paramore +romeo1 +stratfor +istanbul +john123 +4200 +ragnarok +goddess +sunflower1 +andromeda +dollar +redbull +sweety1 +cinderella +michael2 +mamama +mason1 +bigred +laguna +9999999 +warrior1 +november1 +rocker +dinamo +258258 +passion1 +lala +delfin +1022 +sasuke1 +blacky +marines1 +030303 +1234567890a +sanchez +annie1 +fuckme2 +tattoo +cool12 +hamilton +batista +2000 +galaxy +000111 +dillon +police1 +education +whitney +rosario +henry1 +porsche911 +bogdan +antonella +gregory1 +michigan1 +alessandra +cookie123 +cxfcnmt +99999 +yoyoyo1 +sunrise +copper1 +casablanca +vikings1 +20092009 +wilson1 +1988 +starcraft +vivian +enterprise +famous1 +OcPOOok325 +lionking +marissa1 +samira +temppass +100100 +19751975 +lucifer +my2girls +a1a2a3 +rooney +patriots +zxasqw12 +qazwsxedc1 +ghbdtnbr +123456789l +sabina +fuckyou12 +isaiah +judith +respect +cme2012 +yahoo123 +reddog +chargers1 +yasmin +sparkle +passat +wayne1 +iluvu2 +aaron431 +brother1 +stanley1 +samara +simon1 +country1 +bettyboop +blazer +swordfish1 +1010 +nigeria +3333333 +info +theone1 +marketing +december1 +newport +dog +dorothy +karen1 +p123456 +amores +boobies1 +alice +hola +chris12 +leonard +spam +catherine1 +98765432 +sobaka +julian1 +kent +ricky1 +kittycat1 +patriots1 +manson +hershey1 +outlaw +sidney +1qa2ws +dance +johanna +monkey7 +family5 +998877 +holly +stratus +moomoo1 +sara +holden +monkey11 +anything +bluesky +blueeyes +kurt +samson1 +perfect1 +carter1 +1979 +willow1 +andreea +000001 +twinkle +123456789p +carlitos +coconut +haha +scoobydoo1 +lester +skyline1 +roxanne +madeline +rosie1 +fucky0u +south13 +douglas1 +butterfly2 +pisces +bentley +blackjack +122001 +mamamia +newton +bigdick1 +19961996 +redhead +hotties +mahal +boubou +corona +baby13 +peewee1 +micheal1 +baseball7 +desiree +wow12345 +gogogo +caroline1 +dupont +shane1 +hongkong +b12345 +pickles1 +ticket +marilyn +space1 +bobmarley +classic +wonderful +qwe123qwe +ethan1 +1q2w3e4 +widget +zvezda +laptop +kevin123 +thuglife1 +youngmoney +underground +indiana +w123456 +acmilan +hailey1 +smile123 +224466 +1983 +7777777777 +4321 +tripper +yomama1 +red +fireman +renata +billabong +777888 +annette +bernie +�+�����+�����+�����+�����+�����+�����+�����+���� +blossom +chase1 +williams1 +football10 +lakshmi +joe123 +makaveli +456321 +almond +ninja1 +sugar +panda +sigma +love24 +burton +google123 +clifford +pepito +daddysgirl +morena +stormy +1357924680 +cartman +kristine +nikola +washington +freckles +bishop +trigger +1q2w3e4r5 +hendrix +password23 +tristan1 +cracker +detroit +beatriz +lilwayne +oblivion +giovanna +spike +gizmo +germany1 +fortuna +paul +kayla +callum +maverick1 +parker1 +soccer4 +bscirc +alfredo +lisa +bettyboop1 +divine +sister1 +coupons +megaman +353535 +poison +broken1 +myspace.co +juggalo1 +star12 +blah +blue13 +blowme +060606 +markus +jeter2 +coming +starfish +Welcome1 +toronto +sandrine +amigos +ronnie1 +telephone +jordan12 +thankyou +renee1 +stardust +chubby +billybob +258369 +armando +skywalker +rebel1 +freddy1 +snowman1 +babies +lindsay1 +montreal +herman +jesse +777 +hotboy1 +jester +ncc1701d +football7 +alladin79 +mierda +k12345 +heyhey1 +random1 +1977 +peugeot +monkey3 +333666 +cassidy +mandy1 +therock1 +myspace7 +albert1 +arianna +casey +max +savage +just4fun +mate1 +20082008 +hernandez +spiderman3 +horse1 +marianne +apollo13 +paintball +katherine1 +789987 +azerty1 +fucklove1 +godbless +mobile +baseball3 +robinson +munchkin +hayley +000000a +eeyore +1asshole +ronaldo9 +punkrock +icehouse +skeeter +sharp +serenity1 +brownie1 +everton1 +chemistry +joejoe +292929 +gothic +paris +warcraft3 +ireland1 +sergei +missy +bubblegum1 +hotstuff1 +mykids +claudia1 +gators1 +1981 +hookem +jrcfyf +12345qwe +griffin +kaktus +dietcoke +asdfg123 +bitch69 +cashmoney +cashmoney1 +steaua +brazil +1236987 +jack123 +ilove1 +snuggles +snowflake +martini +entropy +bubblegum +1q2w3e4r5t6y7u8i9o0p +piazza +deftones +longhorns1 +123456789o +aobo2010 +redrum +kaylee +nicole12 +damilola +christy +aol123 +marlboro1 +loveme123 +callofduty +michaela +pegasus +bluemoon +tony +flipper +sheena +omg123 +spanky1 +marshall1 +Michael +eric +192837 +catfish +bruno +superman12 +please1 +jerry1 +juliette +521521 +garfield1 +ILOVEYOU +artist +something1 +birdie +mouse1 +carson +blueberry +warriors +tyson1 +1122 +PolniyPizdec110211 +12345abc +september2 +millie1 +speedy1 +cheater1 +sexxxy +wicked +claudio +cracker1 +mackenzie +19761976 +unknown +sanjay +michal +trevor1 +janine +lancer +great1 +brandi +5xfgs3Ii9D +stefania +sommer +arizona1 +paddle +love18 +superman2 +1978 +y6p67FtrqJ +timmy1 +hanuman +universal +monkey13 +hammer1 +jojo +lighthouse +password6 +rock +coco +marcelo +656565 +pop123 +rosebud1 +angelito +dalton +testpass +rocky123 +winner1 +kingston +bozo +esperanza +roscoe +cat +andre +singapore +scrappy1 +skyhawk +rjntyjr +rayray1 +doodle +rocknroll +magdalena +jordan123 +boxcar +rajesh +cougar +thumper1 +slayer666 +braves +yolanda +1234qwe +fake123 +enrique +n123456 +service +rrrrrr +cubs +allah1 +helpme1 +love07 +black123 +flamingo +tester1 +pinky +linkedin1 +rastaman +extreme +dkflbvbh +blizzard +baseball11 +1qwert +antonia +soulmate +112211 +sharon1 +qwertyqwerty +skate4life +1babygirl +incubus +office +point +marisa +gjkbyf +ramona +***** +alexia +butthead1 +kolobok +fellow +bastard +raquel +buffy1 +derrick +jeanne +nuttertools +blackcat +cynthia1 +iforgot +369258 +19731973 +momdad +yomama +mememe1 +my2kids +godfather +zxzxzx +elvis +mamita +1990 +sexy14 +banane +maximus1 +123456789123 +ironmaiden +1991 +geheim +lkjhgfdsa +mister +fatcat +semperfi +qwerty2 +coolio +mommy2 +angel7 +sassy +elodie +richie +mendoza +3 +pastor +tasha1 +lane +revolution +fisher +santana +whitney1 +as123456 +indigo +purple12 +ilovehim +account +angie1 +rascal1 +leslie1 +225588 +colombia1 +poppy1 +soccer15 +raptor +maria123 +wicked1 +jay123 +cccccc +hilary +fiesta +baseball10 +maxine +t +1a2s3d4f +felicia +toyota1 +ilove +111aaa +amour +motherlode +12qwas +1monkey +clover +debbie1 +shopping1 +nks230kjs82 +galatasaray +123456as +milan +just4me +dreamer1 +sexybitch +golf +kaitlyn +camero1 +priyanka +tyler123 +fashion1 +tootsie +powers +rfnthbyf +praise +target +ricardo1 +rayray +c12345 +babygirl13 +112233445566 +ashley12 +biscuit +princess10 +evolution +pwd1234 +romain +trooper +webhompass +blonde +23232323 +preston1 +lightning +bianca1 +rbhbkk +felix +SKIFFY +alejandra1 +ivanov +westham +sports1 +wildcats1 +princesse +lollol1 +olamide +585858 +alexandru +tttttt +champion1 +yugioh +research +12345c +88888 +cutie123 +pokemon12 +number2 +nichole1 +lilly1 +animal1 +ashley123 +animals +johnjohn +labrador +g-unit +nathaniel +paulina +dingdong +12345g +smallville +lavender +annie +boricua1 +jakarta +12345l +imissyou +19771977 +hitler +sonic1 +vagina1 +love12345 +susana +gladiator +january1 +rodney +russell1 +qqqqqqqq +sweetness +moose1 +handball +quentin +scruffy +jojo123 +1976 +playstation +mauricio +gemini1 +marijuana +justinbieber +lovelove1 +twister +anamaria +daniel12 +moloko +19971997 +zk. +classof09 +ibanez +techno +my2boys +redred +simpsons1 +ariana +chipper +sammie1 +ingrid +azsxdc +eastside1 +family4 +monkey22 +sherry +12345678q +windows1 +suckit1 +alessio +hobbit +bananas1 +dave +papamama +suzanne +987654321a +danilo +aragorn +warhammer +casino +hottie101 +kaitlyn1 +naughty +nick123 +derrick1 +trinidad +123love +joker +25252525 +baseball5 +daddy123 +unreal +henry +xxxxxx1 +oceane +laurent +carebear +anthony2 +dusty1 +12345671 +pinkfloyd +raphael +nicole123 +jason123 +reggie1 +pizza123 +zxcasdqwe +bigred1 +esmeralda +street +stewart +1975 +monday1 +pickle1 +immortal +000000000 +iceman1 +andy +truelove1 +allen1 +panzer +gabriella +hehehe +atlantis +beatles1 +gibson1 +larry1 +spartan +katana +123456v +shane +girls +power123 +zeppelin +vincenzo +julia1 +vaffanculo +metal666 +surfing +happy2 +369852 +mission +qwe123456 +hornet +jerry +football11 +darwin +virgin +asddsa +cadillac +corvette1 +mary +diana1 +garrett1 +123456789987654321 +loveless +scrappy +applepie +aurelie +radiohead +heyhey +zxcvbn1 +snowboard +123456qw +counter +brown1 +frederic +private1 +babycakes1 +insane +rodriguez +stinky1 +believe +19741974 +larissa +1234abc +godisgreat +inlove +youtube +1Fr2rfq7xL +julie1 +puppies1 +sexy01 +hayden1 +diablo2 +111213 +scarlet +logan +aaaa1111 +soccer22 +6666666 +MaprCheM56458 +baller23 +424242 +wedding +cheryl +kittykat +michael123 +sophia1 +randy1 +teresa1 +nintendo1 +valerie1 +wonder +sublime1 +arturo +coolman +weed +bowling +gabriele +eleven11 +harris +monitor +watson +asshole2 +esteban +qqqqqq1 +robbie1 +lolo +logitech1 +flying +hallo1 +pepsi +sherlock +iloveyou13 +pineapple1 +1992 +fuck12 +skate +iloveyou22 +smith +roman +qweasdzxc123 +vfhecz +clement +pamela1 +marianna +fireman1 +autumn1 +jajaja +baby11 +money6 +man +hannah123 +caitlin1 +granny +zxcvbnm,./ +kenshin +qwertyuio +cindy +rough +w1985a +peter123 +australia1 +gorgeous +what +pasaway +dthjybrf +clayton +angelica1 +mathew +justin123 +fuckyou3 +787898 +nascar1 +pancho +anderson1 +denis +r +sandman +888999 +Unknown +sampson +emma +poopy +blake1 +chrissy +verbatim +phantom1 +wildcat +tdutybq +nugget +w1980a +trisha +jakjak +breanna1 +myspace11 +frosty +asterix +2468 +cindy1 +alibaba +monkey5 +skorpion +maureen +motherfucker +jumpman23 +apache +chico1 +kickass +graham +wwe123 +vfrcbvrf +sprite +babyko +riccardo +asdf3423 +123456789123456789 +paige1 +homer1 +andre1 +gagged +rockon1 +drowssap1 +coyote +ernesto +colleen +jose123 +sunshine2 +808080 +pornstar +qwerty6 +purple123 +lasvegas1 +habibi +nana +fuckyou. +brendan +empire +marlene +enter +5532361cnjqrf +123456789b +fernando1 +sarah123 +w1979a +sooners1 +love17 +rusty +voyager +madman +iloveyou14 +258963 +romance +heart +smudge +college1 +cotton +1974 +password21 +horse +wolfgang +armani +detroit1 +irish1 +nevermind +secret666 +football9 +23456789 +collins +a801016 +miamor +ghetto1 +angelina1 +vfksirf +dixie1 +inferno +juliet +highheel +chrisbrown +z1x2c3 +w1990a +123567 +theking +bethany1 +a23456 +kelvin +bowwow +fire +abhishek +1a1a1a +norton +ultimate +jersey +retard1 +bryan1 +tester +fighter +backspace +osiris +987987 +zaqxsw +disturbed1 +francis1 +kaiser +f00tball +control +1a2b3c4d5e +carebear1 +gbpltw +spiderman2 +free +robin +mitchell1 +polaris +katrina1 +iloveyou4 +ericsson +gonzalez +bigman +134679852 +sexyboy1 +airforce +awful +campbell +chevrolet +babyface +jojojo +aleksandra +haley1 +1598753 +w1989a +jungle +cookie12 +soccer17 +car +deepak +hawaii50 +xyz123 +romashka +jillian +mermaid +cassidy1 +qwertyuiop[] +ninja +donald1 +whore1 +irina +jellybean1 +ghost1 +boobs +carole +24682468 +devils +200000 +francois +football3 +hakr +123456ab +halloween +axio +morrison +blaze1 +cactus +global +motocross +111000 +abraham +chevelle +sarita +fucklove +h123456 +skolko +iloveyou11 +princess13 +1020304050 +unicorn1 +vladik +hunting1 +kenny +blue1234 +buttons1 +lucas1 +415263 +162534 +princess11 +soccer8 +pyon +soldier +sandiego +halo123 +southpark +sentnece +1973 +erika +america10 +schatz +london12 +anjali +aditya +emilia +laurence +daisy123 +1million +moreno +ash123 +kissmyass1 +phone +austin316 +prayer +elvira +q123456789 +nature +bryan +universe +aztnm +hola123 +1969 +master12 +diego +doggie1 +h +pk3x7w9W +romeo +starlight +toulouse +richmond +86 +desire +cinnamon +holiday1 +allstar +mexico13 +punkin +puppy +hunting +isaiah1 +airborne +w1982a +charlie2 +w1984a +viper1 +steph1 +raven +patience +university +147741 +nokia1 +1993 +keyboard +mastermind +jonas1 +kucing +kramer +delpiero +lestat +unique +farmer +phillip1 +action +adriana1 +qwe321 +noodles +britney1 +abcdefghij +carina +xxxxx +crazy123 +boogie1 +window +2cool4u +renault +hawaii1 +passwort1 +hamster1 +rocker1 +merlin1 +jesusislord +33333 +sayangku +castle +football5 +d71lWz9zjS +virginia1 +rocket1 +ganteng +emanuel +thegame1 +flower123 +angel01 +lennon +house1 +purple2 +baxter1 +timber +cuddles1 +xxxxxxxx +letmein2 +ktyjxrf +yankee1 +joey +25251325 +w1986a +justin12 +14344 +sabine +my +jesus12 +cheese123 +whynot +1angel +jefferson +nnnnnn +iloveyou5 +meghan +aliali +stars +sexylady +12345678900 +eleonora +iloveyou123 +fucku +jeremiah1 +nichole +r2d2c3po +qazwsxedc123 +mamamama +malcolm +kiki +franklin1 +w1988a +xxxx +raider +sucker +kathryn +malina +backend +lover12 +angel11 +sexy15 +bobcat +UvGX8f8232 +1994 +a1a2a3a4 +emilio +7 +iamthebest +jessica123 +1314521 +makayla1 +slimshady +ghetto +nellie +reaper +stephane +tomato +bruno1 +faggot1 +794613 +amorcito +aspire +cheche +treasure +family6 +cannabis +house +babygirl10 +calvin1 +sirius +wordpass1 +titans +я +rockyou +assass +sandeep +maestro +metal1 +salman +walter1 +123ewq +vodafone +pirates +alisha +mushroom +love33 +jesucristo +rebelde +�� +stuart +deedee1 +w1983a +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +deniska +babyblue1 +mouse +taekwondo +amelie +kotenok +cheval +messi10 +naughty1 +billabong1 +peanuts +9 +hottie12 +kennedy1 +webster +lonely1 +giants1 +hannah12 +philippe +345678 +malika +goldfish1 +chantal +natalya +president +firefly +baseball13 +charity +1000000 +amazing +168168 +netlog +w1975a +southside +james007 +A123456 +scruffy1 +deathnote +skate123 +princess3 +catcat +maurice1 +chrissy1 +nokia6300 +princess7 +lucy +hottie123 +faithful +556677 +kingkong1 +theking1 +suckme +nicolas1 +helene +lawyer +agnieszka +history +12345678901 +lillian +w1987a +qqqqq1 +mississippi +1995 +love123456 +united1 +vietnam +marvin1 +dudley +kristin1 +opensesame +mexican +1andonly +rebelde1 +jake123 +19721972 +guadalupe +blackie1 +captain1 +1230 +rambler +father1 +pearljam +soledad +angel3 +mimi +newcastle1 +hermione +qweewq +babyboo1 +rochelle +hudson +simba +melinda +national +falcons1 +franky +spunky +summer06 +dating +pimp101 +taytay1 +landon +sailor +kamikaze +543210 +pingpong +corey1 +chevy +dracula +pussy123 +hunter12 +indiana1 +soccer21 +calimero +myspace13 +granny1 +brittney +saints1 +southpark1 +boomboom +rfhbyf +jessica2 +nelson1 +seattle +gandako +misty +oxford +adriano +1a2s3d +1234568 +dan +games +viewsonic +mike12 +download +marcela +big +ABC123 +skippy1 +w1981a +angeles +qqq123 +yamahar1 +herbert +colorado1 +w1978a +diablo1 +forgot +jocelyn +1234569 +diesel1 +121212a +jackass2 +fenerbahce +pentium +svetik +castillo +1qaz +sylvia +159632 +littleman1 +renato +g +renegade +noodle +whiskey +international +juggalo +ironman1 +felix1 +amadeus +american1 +freaky1 +microlab +sally1 +676767 +bonjovi +erica1 +ivan +trumpet1 +dumbass +devin1 +teamo1 +victory1 +3rJs1la2qE +redman +sexy23 +mnbvcxz1 +shadow2 +daniela1 +summer12 +killbill +annabelle +penny +palermo +charlie123 +ihateyou2 +beverly +megane +hellfire +nursing +claude +yousuck +eclipse1 +ryan123 +hearts1 +jordan2 +friday13 +shelly1 +sharks +information +lover2 +12345678s +skipper1 +ashleigh +8 +love4u +teamo +horny +vfvekz +interests +qwertyu1 +justme1 +6543210 +betty1 +cosmos +bridget +beyonce +gunner1 +home +luckydog +man123 +freaky +w1976a +rosita +marie123 +ab123456 +tyrone +mohammad +onepiece +r12345 +friends2 +billie +bronco +princess01 +password1234 +789654123 +1972 +kasper +153624 +panama +manolo +natalia1 +moose +romania +foster +123456789c +babylon5 +kyle +sexylady1 +redhead1 +2323 +guest +caesar +wombat +d9Zufqd92N +nicole2 +alpha +dallas214 +ilovemymom +jobsearch +discovery +abdullah +route66 +blowjob +nissan1 +jenna1 +darius +myspace5 +savage1 +chiquita +bitch! +135791 +qweqwe123 +blue11 +qwertyuio1 +qwert12 +ali123 +chipie +666888 +vitalik +batista1 +15426378 +kiss +vanille +wesley1 +tarheels +wolfpack +andrew12 +shadow13 +dolores +19981998 +dirtbike1 +august1 +goodman +felicidade +rhfcjnrf +classof08 +123456789r +football21 +anita +123456789t +t12345 +deadman +asdqwe +1zn6FpN01x +3girls +123456qq +arschloch +guillaume +leticia +hobbes +2005 +elisabeth +woody1 +belinda +payton +seven +golfer1 +shiloh +w1977a +jeff +doraemon +aleksey +western +squirrel +blood +sparta +mirage +werewolf +lampard +skeeter1 +madonna1 +mittens +soccer23 +momdad1 +lucas123 +123mudar +ricky +inside +dude123 +mikey +sampson1 +devil +lincoln1 +pass1word +dominique1 +emo123 +white1 +1family +sadie +eddie +junjun +terry1 +killer2 +thanks +batman123 +lacoste +pimp69 +babygirl3 +asd456 +pompier +memory +rommel +nascar24 +alenka +allstar1 +hot123 +alex1234 +andrew123 +cassandra1 +honeybee +lilman1 +inlove1 +enter1 +murray +darkside +winnie1 +kittens +ciao +million +trucker1 +texas +rooster1 +AKAX89Wn +qwert6 +kinder +kaylee1 +oscar123 +gerrard8 +ashton1 +brandi1 +hotgirl1 +javier1 +luciano +2121 +karina1 +marathon +hello1234 +matias +hottie2 +libertad +shutup +louloute +zxcvbnm: +asdfgh123 +freak1 +Password123 +3rJs5la8qE +g13916055158 +sweetness1 +manutd1 +zxcvb +vladislav +bleach +strong +cellphone1 +ssyu1314 +lovehurts1 +hi +blue42 +science +miami305 +coco123 +lovingyou +babycakes +princess! +rachael +lilian +etoile +leanne +dfkthbz +3children +monkey69 +soccer16 +audia4 +damian1 +karachi +elliott +memphis +120120 +football22 +falcon1 +v123456 +sherman +swimming1 +again1 +123QWE123 +alberto1 +krystal +chicken2 +258852 +eunice +chandra +chichi1 +mathilde +heart1 +sandro +jacqueline +tonton +vfvfgfgf +nutella +jehovah +2girls +josh123 +james12 +violeta +a000000 +fallen +goober1 +q1q2q3 +domenico +leelee +azsxdcfv +ji394su3 +kristina1 +fernandez +p4ssw0rd +michael12 +jobs +farfalla +odessa +chris2 +kamila +soccer6 +chocolate2 +132456 +michele1 +alfonso +maxima +manman1 +gloria1 +island +johndeere +my3girls +fussball +qarglr123 +963258 +4 +joyjoy +money5 +12qw34er +ronaldo1 +gerrard +green12 +boo123 +scotland1 +001122 +angie +loveme12 +newjob +sexy21 +lacrosse1 +turkey1 +peace123 +bigfoot +sunshine12 +catfish1 +foxpass +пїЅпїЅпїЅпїЅпїЅ +1230123 +5 +iloveu123 +474747 +jean +roberto1 +123qwer +6V21wbgad +2sexy4u +layouts1 +fuckyou7 +airplane +volume +thompson +verizon1 +nightmare1 +dalejr8 +pothead1 +attila +china1 +robin1 +danny123 +TempPassWord +sasha123 +cute +krystal1 +corona1 +porkchop +change1 +king12 +timmy +eileen +ganda +sayang1 +mathieu +angel5 +misiek +kokoko +melina +nopassword +regina1 +mama12 +milton +dawson +qwertyuiop1 +dancing +shooter +singer1 +Qwerty +badgirl +mymother +designer +macmac +camaro1 +anubis +000007 +nikolas +nancy +papa +alexandr +cheater +elizabeth2 +hamlet +janjan +12345abcde +toshiba1 +potter1 +hooters +maiden +drjynfrnt +alex13 +adgjmp +motorola1 +peyton +01234567 +jonjon +monkey! +makayla +tacobell1 +ilovemyself +patata +marjorie +amandine +bullet1 +fktrcfylhf +harvey1 +elliot +sk8board +carlos123 +fallen1 +ashlee +behappy +emily123 +bobby123 +newpass +hunter123 +desiree1 +malaysia +tigger12 +erica +Omni +ass +12345e +fuckthis1 +nancy1 +flames +goodgirl +�+�����+�����+�����+�����+�����+�����+�����+�����+���� +manunited +qqqq +123450 +eduardo1 +salome +12345p +chosen1 +1234567890- +112112 +kakashi +blonde1 +curtis1 +waheguru +q +123456x +xiang123456 +myspace01 +theresa1 +platinum1 +eagle +priscilla +poppop +pedro +kendall +love45 +chargers +babylove1 +loving1 +baby01 +rolltide1 +PolniyPizdec1102 +attitude +newman +flamengo +diamonds1 +project1 +nascar88 +nina +ramirez +losangeles +chronic +gladys +5150 +poisson +marina1 +jasmin1 +kendra +socrates +dwade3 +salvation +wachtwoord +cristiano +doggy +iubire +inter +spongebob2 +killme +464646 +hellohello +ilikepie +figaro +thomas123 +paula +admin1 +player69 +kayleigh +moimoi +brittney1 +qqqqqqq +rose123 +danila +syncmaster +viper +mnbvcx +leo123 +fuckfuck +lourdes +champ1 +mario123 +sweet123 +loveya +presario +freddie1 +breanna +facebook1 +amerika +john12 +steph +express +cartman1 +1qaz!QAZ +dodge1 +password14 +qwedsa +linkedin123 +kingdom1 +loser12 +heckfy +pangit +amber123 +happy12 +polska1 +skyler +school123 +fatty1 +yasmine +honey123 +alina +nounours +brucelee +357159 +Qwerty123 +cookie2 +larry +digimon +insane1 +tazmania +jacob123 +hell666 +fu7u4a#$$$ +professional +wanker +321321321 +fitness +963963 +8888888888 +wow123 +mookie1 +69camaro +opeyemi +Eh1K9oh335 +cheetah +eeeeee +surfing1 +freestyle +nokia123 +m123456789 +pontiac +oracle +member +pacman +tuning +converse +jerome1 +qdujvyG5sxa +caleb1 +xxx123 +sally +poland +nguyen +11221122 +shotgun +hernandez1 +booty1 +girls1 +doberman +poppy +fuckoff! +keith1 +geraldine +placebo +http +dodger +beavis +futbol +sexy10 +lupita +search +castro +lovelife1 +eastside +�+�����+�����+�����+�����+���� +caramelo +kristi +z1x2c3v4 +24681012 +central +lilly +abcdef123 +whocares +l12345 +johannes +636363 +lexmark +microsoft1 +emerson +marika +sissy1 +757575 +tony123 +dante1 +playa1 +vvvvvv +walker1 +040404 +ziggy1 +bitch101 +voiture +candice +201314 +virginie +martine +chicco +hector1 +honesty +snake1 +cardinal +mylife1 +2112 +homer +bangladesh +pasword +church1 +sailing +milagros +122002 +babygirl11 +sexymama +anaconda +sniper1 +mexico123 +planet +topolino +110092 +12345f +rock123 +hariom +dragon2 +samsung123 +musique +lollypop1 +lionel +coupon +mamma +shasta +ashley2 +sexy16 +Aa123456 +maryam +lobster +laurie +dragon13 +musicman +bintang +sesame +bomber +a654321 +jessica12 +baseball9 +abracadabra +555777 +general1 +scotty1 +xander +1357911 +20002000 +Daniel +gotohell +benny1 +bill +porter +boots1 +nofear +gianni +stars1 +delphine +18atcskD2W +1996 +racecar +tacobell +love19 +yfdbufnjh63 +angel10 +summer123 +333 +1q2w3e4r5t6y7u +bigboss +omg199 +gonzales +oklahoma +student1 +taylor12 +anthony123 +smooth +bigtits +whiskers +testing123 +1970 +vfczyz +nounou +safety +walmart1 +ilovesex +123aaa +darkstar +sylvester +myfamily +alfaromeo +betty +wolf +excalibur +969696 +juanita +badgirl1 +myspace4 +0102030405 +laetitia +zxcasd +blue32 +velvet +trunks +19071907 +tabitha +555 +queen +harrison1 +trumpet +buster123 +morgane +celtic1 +tammy1 +coolio1 +password99 +bright +buckeyes +car123 +littleman +7uGd5HIp2J +whatthezor +marta +donna1 +kitkat1 +summertime +star69 +abcabc +library +debora +ganesha +741258 +dream +messenger +snowflake1 +simone1 +katelyn +amanda123 +solnce +quincy +love4life +jesus2 +yoyo +wrangler +katie123 +carolyn +martinez1 +wanted +paradise1 +111112 +lovers2 +cintaku +c43qpul5RZ +rctybz +love25 +leopard +qwe1122334 +selena1 +sexy22 +suresh +111333 +buffalo1 +kim123 +openup +armagedon +radio +london123 +lovehurts +party1 +manish +wendy1 +zxcvb1 +kirsten +baby14 +mersedes +megadeth +okokok +gerard1 +familyguy1 +lizzie1 +monamour +allen +trombone +prodigy +frogger +water123 +vanilla1 +cartoon +carrot +101112 +123456781 +gsxr1000 +1971 +beyonce1 +surfer1 +CM6E7Aumn9 +martha1 +roadrunner +satellite +landon1 +123456A +piglet1 +hellboy +smile4me +gunners +angel101 +lee123 +stoner420 +happiness1 +harmony1 +brandon2 +abcd12 +eleanor +baseball8 +pupsik +love88 +komputer +joseluis +layout1 +1truelove +electric +rambo1 +carla +sundance +shaman +bigman1 +aussie +godisgood1 +marino +love20 +demon1 +freebird +beast1 +fuckoff2 +jazmin +pakistan123 +moocow +smackdown +monaco +ihateu +matt123 +shaggy1 +nickjonas1 +cutie12 +19691969 +12345654321 +blah123 +briana +marisol +firefox +business1 +ismail +dangerous +kisskiss +ben +mandy +snakes +marcin +register +p0o9i8u7 +nokian73 +rachelle +bhbirf +8ix6S1fceH +shadow11 +groovy +margot +isabel1 +wolverine1 +easy123 +anakin +tangkai +squirt +thankgod +insert +thomas12 +teiubesc +friday1 +jennie +fredfred +trabajo +conner +4runner +garcia1 +miley1 +james2 +ballet +��������� +brigitte +baker3 +ethan +oakland1 +maroon5 +rootbeer +asshole123 +ashish +jeanette +2525 +tottenham1 +lakers8 +dfktynbyf +carmela +ford +packers4 +iw14Fi9jxL +weezer +20012001 +jose +mackenzie1 +summer11 +ramses +glitter +angelika +goblue +heslo +theboss +mystery +career +voyager1 +sonia +bobbie +love77 +sahara +kathleen1 +deanna +stevie +sascha +hotrod1 +ilovegod1 +hummer1 +sofia +lowrider +mammamia +melisa +welcome2 +moscow +66666 +raider1 +lola +iloveher1 +momof3 +I +Parola12 +pikachu1 +imagine +gianluca +369852147 +2002 +snake +akatsuki +ronald1 +stranger +a123456a +mattie +whatsup +white +bryant +ramesh +dogdog +giggles +aaa123123 +chucky +dima +omega1 +852963 +billybob1 +qazzaq +filippo +computer12 +sparkle1 +anastasiya +chandler1 +rebound1 +babybaby +qwerasdfzxcv +zxcv123 +senha123 +sunday1 +alex11 +wassup +qwertyuiop123 +bentley1 +robert123 +yellow12 +kicker +falcons +lorenzo1 +tina +alvaro +asd12345 +married +blasted1 +darren1 +daredevil +bingo +spanish +ernest +kIkeunyw +vectra +madness +1234qw +happyday +beagle +rainbow6 +claire1 +jericho +butterfly7 +supernova +maman +ilovemom +morpheus +dandan +LinkedIn +miami1 +rfrnec +emmanuel1 +kangaroo +football23 +ntktajy +neptune +accord +carol +sexsexsex +tigger123 +sailormoon +metal +cooldude1 +philly1 +patrik +bangalore +hotboy +strike +brooks +nobody +famous +alice1 +878787 +guardian +soldier1 +mine +cecile +becky1 +freak +smart1 +M +desmond +simran +me1234 +gameboy +clarence +sonic +q1234567 +running +alexandria +amanda12 +2580 +buster12 +369963 +derek1 +joshua12 +blueberry1 +standard +arlene +marijuana1 +omarion1 +zzzzzzz +evangelion +fantasy1 +amazing1 +iloveyou8 +crazy8 +poop11 +hamburg +kathy1 +scania +dragonballz +trigger1 +capslock +yvette +ultima +adam12 +hitman1 +ViPHV5J736 +me +kakashka +giorgio +escape +456 +sean +chargers21 +cats +lalalala +dublin +qweasdzxc1 +Thomas +purple7 +ghost +hannibal +gameover +fuck11 +clayton1 +pas +suckmydick +999666 +penguins +trixie1 +moneymaker +shelley +sharma +oleg +last.fm +stacey1 +jenny123 +Million2 +camera +oranges +qwerty13 +ramones +courage +mateusz +junebug +9876543 +cristal +****** +pink11 +mongoose +pyramid +carrie1 +johndeere1 +myangel +1999 +000webhost +smith1 +shirley1 +mumbai +cooler +cfitymrf +wasser +mylove123 +172839 +estrella1 +wolves1 +clinton +8888888 +redhot +loveu1 +welcome12 +caterina +randy +philly +enrico +asdfg12345 +654654 +ace123 +juicy1 +mother123 +3333333333 +bubba123 +q2w3e4r5 +dannyboy +sergio1 +19701970 +salope +pa +zipper +1966 +michelle12 +anarchy +koshka +roger1 +1231234 +benny +nelly1 +westham1 +biggie +lesbian +pooper +charger +angel14 +security1 +movies +sameer +13243546 +kentucky +delta1 +queenie +matematica +sexy1234 +.adgjm +125125 +juanito +danger1 +coldplay +lokomotiv +michael7 +schalke +collin +alonso +namaste +ilovemom1 +iforgot1 +mommy3 +babyphat1 +159263 +monopoly +mazda626 +741963 +cherry123 +flash1 +funny +z12345 +stingray +200 +katarina +bonita1 +fuckyou13 +�+�����+�� +1968 +univers2l +patriot +014789 +trinity3 +nintendo64 +tom +goblin +Patrick +jeffhardy1 +1qazwsx +bernardo +valentine1 +qweasd1 +santosh +batman12 +medina +1z2x3c +retard +snowboard1 +blackdog +backspace1 +dorian +algerie +hendrix1 +bushido +asdfgh12 +bitchy1 +v +joe +leavemealone +marino13 +lonewolf +flyers +aubrey +swimmer +sakura1 +moneyman1 +mickeymouse +cristo +sooners +jesusis1 +myspace08 +momma1 +2fast4u +donnie +jimbob +baby1234 +01230123 +cucciolo +umbrella +louis +6666666666 +denver1 +diego1 +123456o +20202020 +tracey +goodbye +686868 +abc123abc +god123 +12qw12qw +killer7 +katelyn1 +110 +rodney1 +megaman1 +anthony12 +knight1 +575757 +fletcher +bitch13 +hellothere +soccer18 +yellow123 +lol12345 +love06 +angelo1 +kickass1 +trance +iloveu! +king23 +hello5 +margaret1 +christy1 +guigui +nonono +fuckyou666 +hello11 +122112 +summer69 +vfhufhbnf +741741 +joker123 +goldberg +kristian +angel22 +bball23 +love99 +ana123 +donovan +morales +magic123 +858585 +zxcvbnm, +22446688 +paladin +brutus1 +brown +vitoria +kendra1 +belle +515151 +buffy +2001 +rupert +barsik +wutang +jordan11 +software +madina +woodstock +dalton1 +my3boys +bigmac +dondon +mattia +punisher +rosie +sisters +000123 +11 +hayley1 +cheese12 +playboy69 +none +waters +987321 +trucker +football13 +poodle +dan123 +jimmy123 +gilbert1 +godzilla1 +baby08 +bubbles2 +angelique +antony +baseball4 +callie1 +147963 +machine +lilmama +adam123 +shawn +manisha +girl +mountain1 +1997 +tractor +fortune +houston713 +windows7 +primavera +madden +piggy1 +snuggles1 +reebok +kieran +eugene1 +sonny1 +godfather1 +babatunde +gorilla +lahore +together +buddy2 +gratis +goldie1 +myname1 +bastard1 +briana1 +holahola +jeffhardy +integra +mechanical +qwert1234 +postal +basket1 +hot +server +benito +redalert +bugsbunny +gretchen +dragonfly1 +...... +button +jesuschris +december12 +princess5 +polopolo +maldita +june12 +12345w +money$ +ferret +1a2a3a +wildcat1 +hanna +honeyko +daphne +money23 +bayern +wendy +hollister +smitty +romano +dookie +duke +hussain +tiger2 +michelle2 +busted +kendall1 +qwaszx12 +michael3 +maryann +baby23 +family123 +everest +roger +alucard +candy12 +bears1 +letmein123 +iloveyou10 +pudding +bearbear +sandiego1 +123456789n +babygirl01 +papito +benoit +blaster +sparrow +10203 +19711971 +mathias +dont4get +prakash +kamasutra +vegeta1 +estelle +nana123 +535353 +catarina +booboo2 +616161 +monty1 +tootsie1 +Megaparol +beach1 +katrin +holden1 +trucks +help +2010 +legend1 +jared1 +852852 +bitchass1 +anna123 +404040 +anime1 +hondacivic +sponge +better +wizard1 +cardinals1 +sexybeast1 +guillermo +pokemon2 +cheesecake +television +love00 +spirit1 +blue23 +poker1 +summer10 +noodles1 +414141 +as790433 +devon1 +english1 +elaine1 +spartan1 +ben123 +123456789g +prelude +fabulous +andres1 +reading +nikolay +beckham7 +hurricane +peekaboo +tyrone1 +#1bitch +pussycat1 +studio +spooky1 +positive +20022002 +britt1 +memphis1 +manager1 +mon +estrela +alaska1 +skylar +baseball22 +contact +beethoven +maximilian +kristy +arthur1 +grizzly +lancelot +chanel1 +loved1 +loveya1 +popo +francisco1 +sunny123 +scorpion1 +taytay +coolcat +shadow01 +hihihi1 +cody +audrey1 +santiago1 +devil1 +dimitri +1football +turner +hunter01 +taylor123 +cheer +babyface1 +always1 +coolguy +alpine +lena +innocent +joyce +tkfkdgo +kosmos +muslim +goddess1 +infiniti +soccer09 +fatass +fytxrf +jewels +norman1 +lawrence1 +1q1q1q1q +allah786 +silence +74108520 +original +monkey01 +joaquin +ravens +aqwzsx +chickens +blades +pedro1 +mamour +pink13 +packard +nathaniel1 +balls +supergirl +meowmeow +Alexander +jesussaves +hayabusa +chicken123 +connie1 +sandy123 +112233a +medion +gerardo +domino1 +yellow2 +woaini1314 +colton +ybrjkfq +babygirl14 +hotmama1 +anjing +carlo +chelsea123 +cleveland +love55 +eleven +pallmall +hawkeye +767676 +frances1 +werder +edison +cha +center +7753191 +q11111 +hotshot +flower12 +2008 +tattoo1 +tanya +dragon11 +marco1 +comfort +higgins +yfnfkmz +passpass +trooper1 +666666a +longhorn +beach +chloe123 +softball12 +dragoon +poonam +my4kids +giorgia +incorrect +leandro +kontol +trebor +morning21 +warlock +joanna1 +email +gunit1 +chipper1 +oakland +kosama +tarheels1 +matthew2 +team +demon666 +grapes +temp123 +128500 +mariano +dillon1 +dragon69 +shutup1 +arianna1 +myspace10 +goofy1 +lemons +orange123 +qqqqq +j123456789 +fabiola +striker +krista +terry +2007 +noname +dmitriy +director +unique1 +sanchez1 +puppy123 +faithful1 +destroy +youyou +money3 +crimson +eatshit +annette1 +jacques +mariposa1 +gamecube +jersey1 +ilove69 +moneyman +lesbian1 +mexico12 +gegcbr +cocoa1 +dirtbike +gatito +juancarlos +santana1 +marcia +network1 +braves1 +chuck1 +Jundian2011xr +eureka +fucking1 +milana +dell123 +sylvie +stormy1 +chemical +minime +pencil1 +kawasaki1 +demon +fatcat1 +puertorico +jones +123456i +92k2cizCdP +daniil +dharma +mihail +2006 +paradox +mazdarx7 +weasel +1234zxcv +thirteen13 +mishka +french +fuckyou22 +fallout +howard1 +dad123 +meredith +Abcd1234 +nyq28Giz1Z +grandpa1 +printer +cancer1 +redbull1 +angelbaby1 +ab1234 +anything1 +cavalier +hentai +paramore1 +123456789e +145236 +triumph +lulu +noelle +william2 +iloveme123 +starbucks +pimp13 +rdfhnbhf +monkey10 +sunshine7 +jesus01 +luciana +david12 +elefante +class09 +fatman +purple11 +taylor2 +lovergirl1 +love2010 +matthias +1967 +mama1234 +summer01 +smiles1 +brendan1 +159753456 +qqqq1111 +iamnumber1 +sassy123 +haters1 +222 +apple2 +jasmine2 +pepper12 +e12345 +mckenzie +lala12 +qaz +portland +mahesh +khalid +0987654 +kentucky1 +longhorns +vb +knights +boss +justin2 +321 +loveyou123 +susan +prasad +1998 +revenge +whiskey1 +soccer101 +showtime +holla1 +gatita +joshua123 +e +mankind +123456789abc +1fuckyou +456987 +stoner1 +hope +kimkim +sevilla +yfcntymrf +kjkszpj +cristina1 +babyboo +yamahar6 +boobs1 +pepsi123 +456456456 +lebron +impala +dream1 +doodle1 +hejsan +zouzou +onlyme +maymay +felicidad +333444 +jones1 +lol1234 +lovegod +auburn +riley +kipper +kittykat1 +srinivas +azamat +angel21 +zaqxswcde +marvel +purple13 +tom123 +cardinals +1hottie +manny1 +hunter2 +soccer! +741258963 +coconut1 +griffin1 +whatsup1 +asdfzxcv +rooney10 +notthat +abrakadabra +administrator +895623 +oluwaseun +irock1 +a123654 +monkey6 +baseball21 +dimples +janelle +zxcvbnm12 +chase +balaji +shasha +silly1 +robert12 +sheba1 +terror +batman2 +pippin +ivanova +pirates1 +vinnie +home0401 +baby22 +lady +stalker1 +ismael +finalfantasy +ilovemusic +camilo +stoner +jordan01 +evelyn1 +jenjen +broadway +addison +brayden1 +souljaboy1 +cutegirl +kaka22 +runner1 +rodriguez1 +violin +green2 +telefono +emanuele +rfn.if +shotgun1 +beer +hithere +dkflbckfd +hanson +333777 +cepetsugih +vancouver +ellie1 +spectrum +258000 +123459 +baby15 +daughter +ilaria +roxanne1 +nikita1 +outlaw1 +mason +dfcbkbq +jenifer +fuckface +salmon +nasty1 +sexyme +pavilion1 +braveheart +120 +mmmmmmmm +Blink123 +cathy +fra +camille1 +balance +selina +monroe +starcraft1 +giggles1 +frogger1 +qazxsw123 +dfkthf +chris13 +children3 +babygirl7 +rachael1 +agustin +football4 +halloween1 +warriors1 +football8 +asdfghj1 +boy123 +cosmo1 +amarillo +113113 +797979 +stinger +12312312 +evgeniy +bruce1 +flash +747474 +bratz1 +chronic1 +coolgirl +bobo +diosesamor +boxing +adventure +bordeaux +roxana +pooppoop +007 +biscuit1 +kissme2 +angel23 +joker13 +QWERTYUIOP +meandyou +beetle +mykids3 +werner +purple3 +apple12 +kaykay1 +999888 +imcool1 +agosto +tracy1 +dimple +domingo +irish +chivas10 +andrew2 +393041123 +cantona +s123456789 +cinema +temp1234 +luna +penis123 +vfibyf +jonas123 +ashlee1 +artemka +12345n +coolcool +oakley +kansas +torres9 +bacardi +erika1 +beanie +maggie12 +thug4life +italia1 +1212121212 +reagan +fallout3 +missy123 +kitty2 +tyson +lionheart +budweiser +temitope +kenzie +tiesto +rocknroll1 +columbia +gillian +19681968 +junior123 +harry123 +dogs +topsecret +king1234 +number3 +brandon12 +loredana +skater123 +titans1 +burger +bumblebee +number +start123 +scream +simpleplan +waterloo +libero +1mother +angel15 +assass1 +bender +fossil +loves1 +amours +legion +373737 +iloveyou69 +irene +woody +leonie +bernadette +hannah01 +home1234 +vishal +996633 +Jessica +iloveme! +jumper +kitty12 +ludmila +romina +secret123 +kayla123 +changeme1 +jenna +rivera +pelusa +1z2x3c4v +citroen +4444444 +blessings +kaykay +teddy123 +thirteen +beloved +buckeyes1 +jjcG16dj5K +dietcoke1 +hermes +hubert +Charlie +keith +eduard +tupac1 +daniel2 +smackdown1 +myspace9 +khushi +1964 +passwords +jorge1 +carmelo +heroes +123qwe123qwe +qwerty77 +krasotka +gizmo123 +lovergirl +fuckface1 +archana +kleopatra +password15 +amelia1 +prissy +2020 +cobra1 +hollister2 +anime +pirate1 +online1 +busted1 +hoover +yomomma1 +monkey4 +wonderland +jorge +susan1 +orange12 +celtic1888 +bigmoney +legolas1 +gambit +chivas11 +dorothy1 +donna +monster123 +lukas +ballin +114477 +loser2 +alex01 +su123456 +stones +giraffe +yahooo +money7 +jesuss +svoboda +overlord +baby101 +blackjack1 +mommy12 +almighty +cute123 +commando +amalia +megan123 +lovesucks1 +salvador1 +johnny5 +jazmine +rustam +escort +nick12 +honest +goodness +wertyu +flower2 +friends123 +thierry +damien1 +loves +zigzag +mustangs +archer +xfiles +alinka +lamborghini +parrot +iloveyou23 +bloods +school12 +141516 +14141414 +12345h +1965 +star11 +kelly123 +maggie123 +hotty1 +nicole13 +princess21 +sssss +19051905 +belle1 +1qazzaq1 +pass12 +theodore +patrice +newpassword +ihateu1 +cutie101 +diamante +stefanie +cgfhnfr +health +dominican1 +qwerty777 +mallory +buckeye +brandon123 +fuck0ff +shibby +asd123asd +eragon +andy123 +jupiter1 +princess14 +d2Xyw89sxJ +fyutkbyf +ayesha +brothers +mittens1 +lifesucks +olayinka +honduras +qqwwee +qaz123456 +12345qw +leonardo1 +lillian1 +anne +hellsing +battle +killers +sucesso +vicente +justine1 +1234rewq +168ASD168 +blanca +toto +birthday1 +maddog1 +nicky1 +ihateu2 +cherokee1 +jazmine1 +monkey23 +vicky +stargate1 +charley +hockey12 +123abc123 +23456 +willy +lizard1 +life +mustang2 +plastic +12345600 +georgie +rebeca +chelseafc +Michael1 +richie1 +Dragon +thesims2 +pot420 +ericka +melody1 +westwood +pothead420 +lucky2 +retired +rambo +starbucks1 +bitch3 +2sweet +sexy09 +renee +mother2 +1111qqqq +cinta +demons +lewis +dauphin +system1 +01010101 +shitface1 +123admin321 +harley01 +multiplelog +plymouth +josh12 +1money +mark123 +red1234 +lolipop1 +bowling1 +allah +henry14 +gsxr750 +konstantin +963258741 +luke +kate +hermosa +corinne +password09 +bernard1 +keeper +biology +sephiroth +derek +gabrielle1 +albina +don +951357 +kontakt +hannah2 +lowrider1 +mexico10 +duchess +cricri +silent +789789789 +romero +camaroz28 +myspace23 +poncho +pooper1 +market +maurizio +nicole11 +baby10 +www123 +123456789w +mondeo +piccolo +lineage2 +pandora1 +tiger12 +qqqwww +weed123 +myspace101 +welkom +nevaeh1 +helloo +momo +celtics +taishan2011 +manila +gandalf1 +venus +Jennifer +animals1 +evergreen +iloveyou21 +eatshit1 +786786786 +artemis +tricia +estrellita +bloody +1234567z +hottie! +nikki123 +danica +love44 +matador +leelee1 +ferari +toffee +wallace1 +alexander2 +alexalex +123698741 +girlfriend +loveu +projectsadminx +marilyn1 +married1 +sponge1 +brayden +jack12 +money11 +someone +blowme1 +cowgirl1 +bobbob1 +toledo +highlander +jktymrf +1221 +torino +surside13 +titanic1 +volkswagen +2good4u +bartek +00112233 +pdtplf +bkl29m2bk +pavel +fabrizio +babyboy2 +mayday +sleepy +twins +444555 +assman +sullivan +isaac1 +484848 +annamaria +g12345 +herbie +ufkbyf +darlene +april12 +blabla1 +happydays +fgtkmcby +seattle1 +a1s2d3f4g5 +cheese2 +preciosa +temple +uhfybn8888 +rainbows +senegal +pollito +jordan3 +11111111111 +wenoob +pimpdaddy1 +masters +imperial +gay123 +yandex +kiki123 +coolman1 +iamcool +number9 +frederick +pacific +rossi46 +passport1 +hooters1 +prettyboy1 +journey +luis123 +quality +georgina +560076 +mylord +becky +chubby1 +lola123 +scooter2 +tamara1 +moneys +rootbeer1 +kenken +ou812 +diane +maribel +warning +cowgirl +buddy12 +love2009 +shanti +rereirf +0123 +minerva +asroma +lights +jordan13 +spring1 +alex10 +nadia +123458 +sweets1 +karine +gavin1 +elmo123 +lewis1 +jasmine123 +aiden1 +jose12 +halflife +jermaine +burton1 +myspace22 +baby09 +capricorn1 +shogun +dortmund +zxcv +ichliebedich +viviana +mariel +spitfire1 +fusion +utopia +free123 +zaqwsxcde +painter +catania +carlotta +baseball23 +stitch +omega +azertyui +jonas +computer2 +000999 +zxcasdqwe123 +sexyme1 +stealth +a123321 +jeffery +mehmet +sexylove1 +mathew1 +??????? +three3 +horny1 +mihaela +corazon1 +carmel +ginger12 +qwer4321 +bagira +turbo1 +swimmer1 +techn9ne +moon +jesusfreak +hercules1 +sandman1 +lemonade +mango1 +arnaud +lovely2 +2345678 +wellington +nurse1 +ilovechris +punkrock1 +millwall +p12345 +daniella +lassie +daniel01 +pazzword123 +mummy1 +massage +unknown1 +youandme +huhbbhzu78 +chico +bennett +635241 +loveislife +patate +87654321q +neveragain +kifj9n7bfu +gator1 +7007 +7777777a +gordon1 +ali +dominika +silverado +123456789qwe +number7 +lizzy1 +987123 +joejonas1 +myself1 +tasha +1sunshine +colleen1 +teamo123 +kodiak +1235789 +kill +tigger01 +adrien +zazaza +jamie123 +redwings1 +kathryn1 +sucker1 +wayne +karate1 +kayode +latino +dancing1 +whatever! +start1 +peterpan1 +bighead1 +mhine +nigga123 +confused +rtyuehe +sonyericsson +lalala123 +butterfly3 +myspace09 +6 +balls1 +bubbles123 +gfhjkm123 +abc321 +rihanna +cannon +123412 +anthony3 +73501505 +delta +magnus +asdfghjkl123 +addison1 +left4dead +brighton +francine +malaga +austin12 +Shadow +jamesbond007 +maddy1 +charger1 +networking +poetry +zacefron1 +stunt101 +carol1 +fatman1 +jesus3 +clarinet +conrad +ohiostate1 +whisper +cavallo +Michelle +hi1234 +celeron +smooth1 +yolanda1 +mission1 +sexy18 +cellphone +ramram +faster +walmart +princess22 +madison2 +babe +beaner1 +technics +resident +aerosmith +india1 +youtube1 +salomon +bitch11 +mike1234 +010 +cafemom +senior09 +choupette +sagitario +november11 +cobra +sunshine3 +shanghai +mazda6 +igor +19671967 +ashley11 +astonvilla +durango1 +snoopy2 +�+������� +angel16 +jeffery1 +latina1 +princesa1 +testing1 +a00000 +mykids2 +pompom +dance123 +7412369 +jG3h4HFn +yanyan +mollie1 +grizzly1 +434343 +benji +blazer1 +buddyboy +koolaid1 +benben +mafalda +1234567m +matheus +support +loulou1 +squall +demon123 +jade +june22 +margarita1 +qwe1234 +dddd +blacky1 +hohoho +trust +1qay2wsx +demo +115599 +dt123456 +soccer19 +roscoe1 +lisa123 +dreams1 +12211221 +Sta +147896 +gertrude +linda123 +polo +madagascar +727272 +astrid +coleman +iphone +gabby +matilde +durango +tabitha1 +volley +bobmarley1 +bitch01 +nicole3 +working +iloveyou9 +splash +kingsley +jackjack +zombie1 +princess4 +carbon +pussy2 +carson1 +joshua01 +daddy2 +badminton +desert +20052005 +europa +warszawa +skater12 +reaper1 +hollie +fuckthis +dusty +toby +maksimka +dirty1 +1963 +felicia1 +linkedin2011 +n12345 +raiderz1 +candyman +cheetah1 +babygirl15 +a112233 +willy1 +faggot +madeleine +vfitymrf +summer2 +babygirl5 +storm +fuckyou5 +kathy +murder1 +1231231 +violetta +jerusalem +warren1 +w66YRyBgRa +viktoriya +sexsex1 +baby07 +yummy1 +loveme3 +blackrose +1234567s +blackbird +laura123 +159753a +alexa1 +fullaccess +ahmed +ms0083jxj +8522003 +peyton1 +respect1 +emiliano +kostya +popo123 +green7 +davids +june23 +sunita +roxy +pearl1 +hfytnrb +chaton +carlos12 +baker +panda123 +adelina +myboys +chevys10 +kathmandu +ariel +becca1 +1596321 +czz000 +miracle1 +notebook +megasecret +michael23 +america123 +nokia5800 +ryan12 +apollo1 +ananas +ihatethisgame +musica1 +shakira1 +werty +Princess +ncc1701a +susanne +playstation3 +19651965 +archie1 +pothead +jokers +ariel1 +bertha +7896321 +meatball +131415 +bigmoney1 +imnumber1 +forzamilan +nacional +browns +caca123 +fre +sandhya +pimp11 +kingking +marcello +blake +hacker1 +yannick +racecar1 +15151515 +moonlight1 +shit123 +smelly +caca +smart +cantona7 +mercury1 +chris11 +diamond2 +benji1 +pulsar +spartans +boricua +555556 +yvonne1 +isabelle1 +lucky12 +josefina +tommy123 +babygirl09 +N�odefinido +201010 +classic1 +bunny123 +babygurl12 +saskia +stewart1 +geoffrey +harrypotte +select +delacruz +1a2a3a4a +solution +10577 +butthole1 +ilove123 +allie1 +powder +gaston +nestor +triskelion +pinkie +condor +liverpool8 +chivas123 +oldman +start +1475369 +nanana +ale +606060 +remington +kakaka +jake12 +qqqqqqqqqq +alegria +lilman +david2 +iloveu12 +123456789h +gabriela1 +maximum +music101 +qwe1asd +skyler1 +girasole +didier +ginger123 +rakesh +money100 +honduras1 +london22 +disturbed +arsenal123 +madeline1 +poochie +poseidon +mulder +celica +davidson +revenge1 +bruce +sparkles +777999 +bossman +fabio +crjhgbjy +silvana +chacha1 +123456789f +monika1 +grumpy +fxzZ75 +seagull +you +colts18 +yxcvbnm +front242 +muppet +login +chicca +momomo +p455w0rd +cody123 +superfly +tyler12 +blade +w12345 +mariya +132465 +57chevy +clifford1 +coco12 +aileen +1loveu +bear123 +leader +2009 +kim +gaurav +iamcool1 +sexy08 +dylan123 +198 +joejoe1 +1qazxsw23edc +portugal1 +paolo +tomtom1 +noodle1 +bigpimpin1 +senior08 +mileycyrus +survivor +Robert +123654a +vanesa +tomate +senior +mike23 +sara123 +freckles1 +makemoney +willis +mississipp +pepper123 +godsmack +finger +celeste1 +bautista +vendetta +seventeen +ncc1701e +camelot +junebug1 +lovestory +pooh +pablo +briciola +helloworld +tresd5 +jermaine1 +fuck666 +skinny +semperfi1 +rabota +jess123 +pierre1 +121 +bubbles12 +mikemike +work +poipoi +pictures +pornstar1 +princess23 +sasha12 +adeline +superman7 +sprite1 +knicks +pillow +ltybcrf +daddy12 +charlie12 +bebe +Pa55word +livelife +juan123 +oklahoma1 +cancel +kashmir +tdutybz +jess +hotmama +hospital +boo +4myspace +sweden +X3LUym2MMJ +2003 +45454545 +skiing +chrisb1 +hamish +tyler2 +cleveland1 +maniac +meghan1 +billy123 +trojan +june13 +handsome1 +blueeyes1 +spyder +roses +beaner +moises +steelers7 +blade1 +rhiannon +slipknot6 +nightwish +yankees13 +four20 +101101 +aaron123 +ilovehim2 +357951 +anthony7 +mystic +san +labtec +hammers +crip4life +lifeisgood +daewoo +dragon7 +indians +october10 +wolfman +stryker +tammy +sexyman1 +tekken +marie12 +yyyyyy +qwerty78 +orchid +coolkid1 +keisha +africa1 +iverson1 +navigator +gotmilk +584520 +ashley13 +myspac3 +334455 +bionicle +humtum +1loveme +simpson1 +waterfall +999 +noisette +mimi123 +jordan5 +huskers +scottie +luther +superman3 +psycho1 +yahoomail +20072007 +motocross1 +jared +armando1 +123456. +1iloveyou +nataly +rasmus +clarissa +shorty12 +fisherman +baby21 +hello9 +zxcvb123 +abcde123 +hardrock +annalisa +safari +159753123 +june21 +darkangel1 +hotgirl +chucky1 +babe123 +789632145 +celina +awsome +rockets1 +elisa +rjycnfynby +patito +1michael +cbr600 +milkshake +lightning1 +monkey21 +greg +simsim +myspace8 +montgom2409 +tesoro +bitch5 +solomon1 +- +s8YLPe9jDPvYM +classof07 +google12 +love2008 +560037 +newstart +bigbang +classof201 +stallion +wonderful1 +firebird1 +olenka +sterling1 +daniel11 +playboy123 +forest1 +evony1 +1435254 +nicole01 +kaka +121121 +frog +hustler1 +razvan +blackman +poo +baseball6 +snoopdog +haha12 +female +franck +company +159159159 +bhebhe +adewale +whisky +mallorca +freeze112 +0192837465 +killer11 +green13 +myspace69 +adelaide +daytona +cimbom +emachines1 +paola +19031903 +baseball24 +reality +bball +april20 +m1234567 +monkey101 +tomorrow +mathis +peanut12 +legenda +shorty13 +shania +mobster1 +bunnies +868686 +ecuador +sunset1 +199 +bookmark +bangbang +rjynfrn +alison1 +sausage +lavoro +peanut2 +thomas2 +northside1 +class08 +naruto2 +198888 +johnpaul +subway +andrew11 +cuteme +justin01 +brian123 +amazon +leoleo +oliveira +pharmacy +fish123 +duncan1 +forget1 +maximo +nopass +kalina +lifesucks1 +vbkfirf +albatros +banshee +lil +foxtrot +new +giacomo +steffi +william3 +freedom2 +littlebit +sheldon +capone +keegan +central1 +glamour +beaver1 +april21 +thursday +Indya123 +mollydog +reggae +gringo +bounty +greece +25011990 +rowena +princesita +adekunle +robinhood +lorraine1 +zaraza +cowboys22 +march17 +heineken +qw123456 +cheer123 +space +sexy17 +palmer +fuckyou11 +light +coolboy +professor +646464 +april22 +1q2w3e4r5t6y7u8i +mazafaka +homework +dbrnjh +koroleva +radio1 +principessa +gothic1 +baseball14 +angelus +z00000 +10 +godis1 +lampard8 +husband +persik +nugget1 +killer13 +corey +landrover +tequila1 +redred1 +a1a2a3a4a5 +heidi +kfhbcf +dwayne +rancid +medicina +candle +negrita +cotton1 +school2 +beckham23 +cooking +veronique +faisal +bookworm +answer +godhelpme +dragon01 +fghtkm +catwoman +smelly1 +friendly +phone1 +matahari +pleasure +ludacris +19991999 +july21 +will +saturday +mygirls +springer +shawty1 +fuzzy1 +zhjckfd +buster01 +babylon +aliens +chillin +peluche +triton +tsunami +maryland +cutie2 +jensen +black12 +1diamond +mickey123 +randall +marihuana +hello3 +love26 +frosty1 +football24 +nokian70 +candice1 +12321 +ilikepie1 +robert2 +coolcat1 +pink22 +adeola +baby16 +pandas +venera +webster1 +ankara +reddog1 +simon123 +cancun +12345qwer +control1 +flyboy1 +queens +venezuela +thomas22 +default +w +blueblue +asd1234 +ssss +roxy123 +incubus1 +angel88 +anuradha +ashleigh1 +pancho1 +reset123 +guatemala +ssssssss +applepie1 +12345v +garbage +manowar +mickey12 +food +project +alexis12 +kikiki +gremlin +ghostrider +m0nkey +1366613 +butler +gorgeous1 +kenwood +jillian1 +qwertyui1 +pok29q6666 +bonehead +22334455 +pimp23 +jaguar1 +rammstein1 +minette +forrest +mitch +leonard1 +amy123 +password08 +123asd123 +eeyore1 +1234567j +godofwar +amoure +create +junior12 +farida +dude12 +beaches +n1frdz +emerald1 +june16 +love777 +mighty +thomas01 +ordinateur +23jordan +ZXCVBNM +george123 +krokodil +nastia +kittie +therese +giovanni1 +password88 +jessica3 +password24 +account1 +racing1 +angel07 +az123456 +383838 +pat +lucia +auburn1 +abcd123456 +sadie123 +qazzaq1 +lovebird +mommy11 +a1a1a1a1 +venice +meme +flipper1 +rogers +novo +bigbird +big123 +qwe789 +bengals1 +jasmine12 +versace +maggie01 +mary123 +heidi1 +satana +123456789v +malachi +greenday12 +family2 +veritas +porkchop1 +tatiana1 +eight8 +terrell1 +verona +puppylove1 +legacy +tootie +dipset +holland1 +mazda323 +homeboy +zander +baker1 +deutschland +manning18 +open +april13 +zxcvb12345 +1475963 +yuliya +margherita +tomas +my1love +janet +mango +family3 +12345677 +iguana +birdman +123456aaa +poptart1 +1234565 +123abcd +tweetybird +louis1 +south1 +lovely123 +ठ: +London +porn +1q2q3q +mom +blossom1 +shorty123 +thelma +chivas12 +chosen +qwerty69 +samantha12 +lucille +speed +aberdeen +martin123 +hockey11 +orange2 +candy2 +fabrice +love27 +ebony1 +l1nk3d1n +barbados +1357913579 +biteme2 +tkbpfdtnf +???????? +weezy1 +go2hell +tuesday +fanfan +guitarra +michela +killian +lucy123 +speaker +456789123 +munchkin1 +godislove1 +latina +220 +sprint +pancakes +grover +melvin1 +escorpion +liberte +626262 +ashley01 +twister1 +basketbal1 +payton1 +mynameis +k.lvbkf +guadalupe1 +babygirl21 +edward123 +ray123 +hottie3 +il0veyou +training +bassman +21122112 +progress +qwaszx1 +123123123123 +zelda1 +melinda1 +june11 +grandpa +myspace0 +angeline +violet1 +sexybaby1 +roberts +love34 +grace123 +motherfuck +ghjcnjnfr +q2w3e4 +scully +guilherme +john!20130605at1753 +333333333 +skyblue +123890 +cherries +buckeye1 +forzaroma +janette +taylor01 +music2 +newmoon +14881488 +wednesday +indira +andrew01 +clemson1 +kittens1 +april23 +whiteboy1 +peanuts1 +mummy +fighter1 +2children +789852 +dinesh +ilovepussy +deftones1 +619619 +tenerife +march +mariana1 +chris01 +dallas22 +alisha1 +jingjing +pankaj +icarus +eternal +707070 +parkour +jaden1 +history1 +c.ronaldo +justin11 +fuckers +luis +pietro +ignacio +babygirl! +bellissima +huskers1 +kungfu +goforit +babygirl16 +rosalie +zeppelin1 +redman1 +mancity +deanna1 +nokian95 +110085 +lovesucks +vertigo +destroyer +cadillac1 +good123 +amor +lesley +babygirl08 +princess15 +evanescence +roma +123321123321 +pepper2 +Byusdg23 +smoking +56789 +ripper +winchester +holmes +йцукен +love4you +dilbert +sexy07 +1232323q +z123456789 +duckie +doctor1 +�+�������� +number5 +rashmi +18n28n24a5 +great +rawr123 +fabregas +sexyman +operator +babygirl23 +possum +09876 +19641964 +kings1 +jordan10 +freeman1 +gotcha +phoebe1 +rjhjktdf +xxxxxxx +technology +angel69 +bessie +210 +panties +jesusc +billyboy +rafael1 +arnold1 +comcast1 +apsk54321 +tara +dixie +music4life +Andrew +gotcha1 +time +suzuki1 +bridget1 +paige +principe +concrete +anita1 +porno +monsters +battlefield +mother12 +ayomide +nike +pirata +turbo +lolo123 +missyou +carolyn1 +fergie +pakistani +z0102030405 +april15 +greenbay +chivas13 +grandkids +789 +home123 +whatever2 +indian1 +roller +mylene +bruno123 +horizon +besiktas +yeah +1232123 +kiss123 +qwerty666 +dutchess +janet1 +ठ +monkey8 +owt243yGbJ +ursula +nikolai +blingbling +angel4 +bigfoot1 +chevrolet1 +nigger123 +qwerty01 +maynard +101 +24242424 +emotional +qwerty789 +marcella +manu +redsox04 +qwegta13091990 +boris +armstrong +717171 +bandung +zainab +iluvu1 +maradona10 +pauline1 +football20 +cock +lord +as1234 +madalina +joey123 +badboy2 +748596 +april14 +2424 +sherman1 +paula1 +colts1 +biggie1 +1414 +budweiser1 +alexa +louie1 +confused1 +snoop1 +star13 +cherie +9293709b13 +theused1 +sweet12 +valeria1 +dalila +kochanie +adonis +214365 +bailey12 +zzzzzzzzzz +village +street1 +zenith +theboss1 +333222 +nursing1 +ppppp +prashant +love5683 +buster2 +travel1 +cazzo +shorty2 +yesyes +hunter11 +chuck +kirsty +ontario +wisdom1 +ariana1 +june24 +qwerty22 +clover1 +Sunshine +slavik +leo +morris1 +emma123 +vicky1 +barkley +0147258369 +rastafari +samtron +!qaz2wsx +donnie1 +777666 +march12 +aaasss +spike123 +softball11 +abby +petunia +sharingan +shady1 +catalin +dick123 +lovely12 +aaaaaaa1 +leonid +.adgjmptw +abiodun +dogdog1 +111111111111 +donovan1 +qwerty5 +223322 +mash4077 +130 +dollar1 +momof2 +111999 +stevie1 +mystery1 +mimosa +paperino +chicken12 +lalaland +hyderabad +liverpoolfc +20112011 +пароль +nelly +soccer08 +nokia3310 +canela +redrum1 +money4 +iloveyou15 +princess8 +marriage +sextrime1 +bertie +explorer1 +aa123123 +100200300 +famille +breeze +losers +jesse123 +yumyum +numba1 +iloveyou09 +italian1 +daniel13 +marlin +p@ssword +sousou +amanda2 +argentina1 +patty1 +mar123 +dottie +charming +blizzard1 +pizzas +123456abcd +mostwanted +110011 +pobeda +antares +patrizia +medved +compton1 +bonheur +fantastic +123stella +110120 +santos1 +iloveher +rhonda +martina1 +sssssss +crazy12 +bradford +butthole +lopez +daisy12 +magali +bugger +234234 +lynn +chinnu +angelbaby +jocelyn1 +mandarin +hamilton1 +love89 +honda123 +football09 +sunderland +tropical +mallory1 +desperado +discover +puppylove +march1 +samiam +pimpin2 +drogba +159 +family12 +edwards +jamila +rebels +321678 +wishbone +qwerty! +losers1 +ludovic +looser +booty +malcolm1 +mafia1 +conner1 +medical +PRINCESS +5poppin +fuckyou6 +transam +supergirl1 +cookiemons +helen +pistons1 +livestrong +sidekick3 +babygirl4 +pokerface +lee +bestfriends +manson1 +test1 +carlton +jessica7 +matthew12 +iloveyou6 +sidney1 +tigrou +deadman1 +hannah11 +hater1 +sammy12 +1962 +kimbum +young +christian2 +pringles +lovehate +juventus1 +85208520 +smoke +bugsbunny1 +commander +gianna +password19 +gwapo +papapa +nipper +1234509876 +bharat +pie123 +loveis +punkin1 +friends4 +bobobo +enrique1 +fred123 +mat +nikitos +142857 +jesus4me +picture +black2 +cabbage +jesus! +asdffdsa +scarlett1 +green11 +shmily +vacation1 +gonzalo +linkin1 +qaz123wsx +glitter1 +rodolfo +pupuce +games1 +mellon +jackpot +harley123 +737373 +123456zxc +2bornot2b +bogart +lamont1 +italiano +valentina1 +lemon8 +peters +zasada +dalejr +lance +goodbye1 +123456789. +charlie3 +yugioh1 +212223 +rhjrjlbk +rolando +goodlife +extreme1 +abcdefgh1 +badboys +tulips +cool11 +sweetgirl +roman1 +management +14121412 +2128506 +delete1 +pluto +hejhej +offspring +never1 +slick1 +eric123 +gabriel123 +schatzi +nissan350z +michael11 +blink +felicity +momanddad +bones1 +amistad +pablito +star1234 +angel18 +dodgeram +sheila1 +softball2 +august12 +isabela +thedoors +monkeybutt +hyundai +trial +one +zacefron +candycane1 +12qw12 +china +jordan7 +113355 +ferdinand +spunky1 +chaos +summer99 +heritage +butt +20062006 +kobebryant +badman +lover69 +jamal1 +bruins +19631963 +cecilia1 +kumar +booboo12 +spanish1 +1anthony +gameboy1 +hidden +4children +babygirl69 +1butterfly +princess9 +splinter +naveen +cruzazul +fantasia +sexyback1 +2blessed +baseball15 +natural +leather +hello. +freeway +morgana +nathan12 +bridge +jaihanuman +aa1234 +april16 +september9 +joseph12 +lickme +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +hjccbz +harriet +lopez1 +sonali +leon +light1 +zorro +51505150 +stanislav +exodus +bailey123 +Argentina +booboo123 +fxzZ75yer +benedict +mmmmm +dodge +katkat +football! +doodoo +aptx4869 +qwertasdfg +malachi1 +peanut123 +cinnamon1 +fuckyou4 +dolly1 +242526 +stepan +gorilla1 +fktyrf +mitsubishi +angel6 +murder +blue10 +caramel1 +electro +gold +wifey1 +theend +soccer20 +Doomsayer.2.7mords.V +soccer24 +myspace07 +pink101 +sneakers +nevaeh +nokia6233 +march23 +highland +bristol +dookie1 +scarlet1 +coolguy1 +imgay1 +natacha +pepette +assasin +121283 +mildred +joshua2 +micaela +kannan +AZERTY +maria12 +150 +omarion +tweety2 +revelation +psalm23 +halo +nathan123 +vjcrdf +monster2 +june14 +weather +summer05 +password07 +19661966 +corolla +il0vey0u +lespaul +martins +adrienne +janice1 +Charlie1 +bologna +klapaucius +ariane +rasengan +arsenal14 +polarbear +austin123 +aprilia +skinhead +sha +cevthrb +bossman1 +jessica13 +777555 +ciara1 +H2vWDuBjX4 +wookie +strong1 +june10 +709394 +snowwhite +228228 +deborah1 +logan123 +bball12 +soccer07 +bluebird1 +alexis123 +april10 +sexybabe +caballo +william123 +kimmie +poochie1 +lexmark1 +fireball1 +hedgehog +keyboard1 +password20 +1004 +lolita1 +michael01 +angel8 +adv24 +pearl +angel08 +gggg +scooby2 +chuckie +april11 +margie +momoney +110001 +barbie123 +maciek +june28 +shinigami +1cookie +ruby +everything +shooter1 +27653 +maddison +bailey01 +love02 +love4me +19411945 +fishes +christie +AAAAAA +00001111 +devildog +chuchu +chivas100 +scout1 +aardvark +blessing1 +poussin +badger1 +kellie +soprano +250 +john1234 +crackers +lenochka +beautiful2 +march11 +delfino +sherry1 +scvMOFAS79 +july23 +01011980 +kirsten1 +ilovejusti +twisted1 +caline +maggie2 +cookie3 +matthew123 +seniseviyorum +shitty1 +june17 +trenton1 +sleepy1 +pacman1 +bloods1 +skylar1 +picard +smarty +chronic420 +qazqazqaz +xboxlive +jelly1 +destiny2 +110688 +jazz +holly123 +hello7 +joseph123 +eagles5 +funky1 +chiefs +nicole7 +piramida +michael13 +colton1 +vanhalen +softball13 +green3 +rebel +246813579 +dr.pepper +number12 +135798642 +amormio +chewy1 +harley12 +lucky777 +victoire +marcopolo +titties +bluebell +110019 +thegreat1 +aries +ladies +vernon +sagitarius +ghblehjr +october31 +monkey9 +secure +885522 +1a2s3d4f5g +nevada +mikayla +123123qwe +writer +casey123 +nikhil +creation +piper1 +forzainter +diablo666 +Letmein1 +angel9 +snapper +kenworth +marcos1 +eldorado +march22 +daniel19 +corrado +annika +blackops +seamus +liverp00l +x123456 +italien +asshole12 +dom +shark +kelley +darius1 +believe1 +jennifer12 +apples123 +magandaako +skinny1 +ravens1 +faith123 +trojans1 +232425 +finance +123456789asd +beast +andrej +bigben +christelle +imcool +softball7 +andre123 +kenzie1 +josiah +dragon88 +baby69 +softball10 +firefly1 +you123 +starlight1 +i23456 +snoopdogg +piggy +carmelo15 +recovery +bitch23 +alvin +maryjane42 +amethyst +bulls23 +mazda3 +vittoria +rainbow123 +janina +andreas1 +juan +laguna1 +paper1 +aikido +sherwood +bambino +123456qwer +abcd12345 +shamrock1 +twinkle1 +children2 +april17 +W5tn36alfW +princess16 +sacred +gilles +warlord +slamdunk +jane +babygirl22 +soccer01 +doreen +qweqwe1 +Benjamin +hogwarts +supersonic +crazy4u +qwerqwer2 +orion +tony12 +010203040506 +killa +110075 +lipgloss1 +123kid +cazzone +angeleyes +denisa +america12 +qwerty99 +greeneyes +kagome +joanne1 +Jordan +dragon5 +banana123 +starfish1 +columbus +holla +porcodio +hotpink1 +goldeneye +isaac +alissa +nevermore +josie1 +eqeS606898 +sunshine! +pallina +champagne +mmmmmmmmmm +winmx1 +456123789 +madden1 +1213141516 +esther1 +bushido1 +morning +paper123 +mariajose +cougar1 +sky123 +badbitch1 +lily +fordf250 +forever2 +harold1 +theonly1 +ninja123 +davinci +gucci1 +bass +houses +rufus1 +qazxsw1 +trololo +monkeyman +bebe123 +cambridge +anfield +vlad +bollox +rovers +cornelia +blue21 +1960 +design1 +restart +cougars +byebye +all4one +090807 +nabila +cookies123 +crosby87 +derp12!@ +mustang69 +onedirection +kacper +gidget +sweet2 +golfing +?????????? +friends! +zarina +cheese! +borussia +killer666 +tracy +pop +mexico2 +123369 +purple22 +hurricane1 +knights1 +football14 +viking1 +europe +362436 +skater2 +chris23 +400053 +yfnfkb +Matthew +lacey1 +wonder1 +palace +allahu +urmom1 +vishnu +babybear +123258 +bonsai +eatme +cristian1 +pussy12 +mike11 +fucku123 +august11 +xxxxxxxxxx +septiembre +starstar +johnlock +dimadima +billie1 +buddha1 +drake1 +littlebit1 +muskan +princess08 +nimrod +twilight12 +window1 +bajingan +digger1 +cherry12 +20032003 +fatima1 +march15 +brady12 +lipgloss +opelastra +riverside +santino +popeye1 +march13 +caravan +birdman1 +wilbur +april24 +iloveyou08 +serena1 +987789 +irinka +ilovehim! +nolimit +131421 +nicole21 +Bailey +bleach1 +hooligan +560078 +bishop1 +theused +12345asd +mygirls2 +illusion +command +makaveli1 +russel +ready2go +achilles +computers +taylor11 +zxc123456 +aaaaaaaaa +pablo1 +acuario +venkat +granada +elliott1 +55555a +sexysexy +kevin12 +june15 +a123098 +123soleil +underworld +password17 +cinder +monkey14 +shadows +julieta +7elephants +inspiron +mamochka +aishiteru +123a123 +vermont +peaceout +oliver123 +lemon1 +heaven7 +google.com +fart +prissy1 +harper +southern +crusader +hillary +chinese +moritz +lamont +caitlyn +tweety12 +rocky2 +1player +jubjub +mclaren +230 +1001 +milkshake1 +samuel01 +florencia +panasonic1 +samanta +pinkfloyd1 +sangeeta +sweety12 +sasuke123 +ducky1 +satan +snooker +jojo12 +sarajevo +pasquale +fullmoon +lillie +dynasty +mermaid1 +Brasil +u77789 +1zxcvbnm +darrell +anarchy1 +slipknot66 +sheeba +dana +13 +passwd +lenovo +june26 +naruto11 +darkstar1 +chaos1 +feder_1941 +classof200 +easter +potpot +drew +cucciola +kirby1 +12345qaz +999000 +brodie +solange +gymnastics +140 +hurley +sterva +music12 +eminem123 +walnut +ziggy +pradeep +sophie123 +sammy2 +bella12 +girl123 +japan +secrets +fearless +fuckme123 +praveen +montecarlo +baba +zanzibar +0147852369 +azazaz +monster12 +firefighter +myheart +caliente +chris10 +peacock +eminem12 +luckydog1 +frank123 +carola +goose1 +shitface +bretagne +roxane +stonecold1 +aurore +banana11 +oregon +elizaveta +rose12 +jesus77 +gsxr600 +cessna +zxccxz +princess09 +wildfire +messiah +rajkumar +buddie +matilda1 +snoopy123 +dagger +pudding1 +twisted +dell +pretty12 +654987 +murcielago +babygirl9 +penis69 +818181 +mypass +pasword1 +guerrero +vijaya +ijrjkfl +kolawole +rosemarie +chihuahua +money4me +crazy2 +bryant24 +butterfly8 +architect +sabbath +junior2 +kakashi1 +nicole22 +june +topcat +lorena1 +mocha1 +hooker +glasgow + +louie +wright +july22 +juanita1 +pancake +yummy +cesar +hilary1 +1superman +camera1 +clara +1qazxc +palmtree +mikejones1 +cristi +203040 +gordo1 +malik1 +070809 +tricolor +rockstar12 +polaris1 +loretta +kasia +theatre +пїЅпїЅпїЅпїЅ +alexis09 +sexygurl1 +monty +1515 +Password01 +bigcock +maricel +july14 +sailboat +ste +kkk123 +millenium +nolove +1nigga +varvara +dollars +guess +darklord +history278 +gfhjkm1 +olawale +1961 +123a456 +floppy +xbox +printer1 +topper +naynay1 +tototo +2011 +Liverpool +chobits +lupita1 +brazil1 +jesus33 +march21 +tango +nickjonas +baili123com +987654321q +koolaid +patriots12 +midget +pioneer1 +march18 +1234ab +angel17 +gunit +hottie13 +peterson +hustler +jimenez +narayana +nicky +alliance +rossella +1000 +denden +phillips +dynasty1 +texas123 +sonic123 +youssef +windsor +uganda +ibanez1 +michael5 +craig1 +softball3 +darling1 +yoyo123 +hilton +password77 +snapple +bitch22 +traktor +pooh12 +420weed +moneymoney +peachy +1chance +dark +feather +july12 +friends12 +jesus11 +emachines +usher1 +mirror +0000001 +fuckyou8 +wedding1 +1hotmama +kavita +laurita +butch1 +malibu1 +fireblade +pinky123 +pedro123 +seven77 +adebayo +familia1 +d123456789 +198000 +partizan +futurama +april18 +mygirl +dayday1 +jktxrf +polly +myspace200 +deerhunter +love1 +moremoney +chennai +lover13 +yellow11 +alondra +dkflbr +pr1ncess +tango1 +kool +mymusic +miamor1 +olesya +password16 +hamburger +jonny1 +matthew3 +1234567b +molson +amsterdam1 +solrac +1212123 +august13 +nssadmin +question +june18 +greens +mylinkedin +itachi +kimberley +666555 +sun +chippy +lottie +qwertzuiop +couponSC10 +buster11 +june25 +moonshine +jazmin1 +ludwig +110017 +666333 +nana12 +09876543 +kalpana +amor123 +boobear1 +mattie1 +mimimi +dontforget +audia3 +friendofemily +darlene1 +zebra1 +lance1 +baller12 +allan +bloody1 +helen1 +shaolin +nutmeg +marie2 +nike123 +jose13 +saturn1 +senior07 +wagner +diego123 +sf49ers +family7 +italian +cruise +philips1 +jack1234 +mikaela +skywalker1 +cupcakes +barselona +piolin +devilmaycry +santa1 +dolly +kronos +y123456 +sony +456258 +qwerty21 +mickey2 +holyshit +doodoo1 +19283746 +alexey +852258 +bumbum +photo1 +jamjam +sriram +tekiero +seven777 +matt12 +8PHroWZ624 +converse1 +savanna +joshua11 +future1 +startrek1 +pimping1 +sonia1 +clemson +francy +photos +guinness1 +dayana +sixteen +irishka +ad123456 +h12345 +1daddy +muhammed +athena1 +mac123 +thegreat123 +iluvme1 +onetwo3 +raiders13 +crossfire +lkjhgf +meagan +147896321 + +basketball1 +impossible +beverly1 +shadow7 +optimus +elefant +budapest +chris3 +zyjxrf +suzanne1 +pontiac1 +ralph +number11 +123qwert +blackhawk +johann +jobshop2002 +babygirl19 +heartbreak +bossy1 +12348765 +promise1 +kosova +amigas +june20 +ballin23 +ezekiel +lonestar +fisher1 +august23 +lov +boobear +patton +password33 +lobster1 +2gether +alfredo1 +�+����+�� +22 +chris14 +radhika +alvarez +loveless1 +green5 +familyguy +cerise +cthtuf +superman23 +robinson1 +sinner +israel1 +ichigo +children1 +pretty123 +tortuga +volvo +kaka123 +grenouille +kawaii +dragon22 +ashley7 +laptop1 +monkeyboy +pokemon11 +patty +tommaso +desmond1 +foobar +darina +loveme! +liverpool9 +kkkk +ralph1 +sam12345 +puppydog +espoir +brandon3 +??? +remote +cachorro +2babies +fabien +qazqaz1 +german1 +fabienne +meme123 +layla1 +4444444444 +lollollol +valley +poppy123 +555888 +hhhh +clouds +macarena +a7777777 +slimshady1 +speed1 +qwedsazxc +12345678m +kaitlin +ladybird +myspace21 +lucifer666 +root +zxc +112233q +cheers +atomic +angel09 +wolfie +420 +trojans +19191919 +2wsx3edc +oktober +shweta +bmx4life +canadian +tigger11 +khadija +dolapo +sdfsdf +3odi15ngxb +godlovesme +latino1 +333555 +trinidad1 +dante +idunno +lauren12 +1q2w3e4r5t6y7u8i9o +terrell +asshole! +love28 +open123 +edwin +class07 +1122334 +240 +francisca +mia123 +anthony5 +lipstick +hotpink +meow +teamomucho +not4you +jefferson1 +anthony13 +natalka +nebraska +110119 +today +lemon +2lovers +maimai +december25 +nomore +6543211 +jasmine3 +люблю +che +blaze +poohbear12 +kyle123 +sparks +1love1 +zxasqw +naruto13 +009988 +nastena +986532 +babes +france1 +tecktonik +hanna1 +Passwort +august21 +159357456 +rainbow2 +filomena +ilovemysel +sasuke12 +tolkien +123123123a +iluvme +evil666 +clinton1 +lucero +river1 +xtreme +mylove2 +petrov +morgan12 +adrianna +redroses +person +simba123 +1mommy +George +25800852 +iamthe1 +magpie +football08 +player2 +zzzzz +1pussy +1231 +cool1234 +20122012 +ghbywtccf +trenton +april26 +transformers +smitty1 +s1234567 +bigsexy1 +master2 +nicole14 +coltrane +taylor13 +october13 +951159 +k123456789 +millions +pentium4 +marija +4everlove +angelita +musical +majestic +raffaele +ruben +surenos13 +looking1 +0000007 +longhorn1 +j1234567 +sexual +sveta +fucker2 +bonjour1 +hinata +dani +1secret +medusa +1melissa +minicooper +love100 +alfred19 +595959 +jansen +123456789i +idontcare +nextel1 +Welcome123 +ukraine +red12345 +techno1 +april25 +supermario +joejonas +westcoast +horney +penelope1 +190 +harley2 +party +fkbyjxrf +kissme123 +megatron +money101 +qazwsxed +393939 +twiggy +steven123 +cheeky +dilligaf +goldstar +conejo +nicole10 +qazxcv +killer5 +bosco1 +nwo4life +hottie11 +78963214 +goliath +april19 +132132 +money22 +klaudia +123698 +baller3 +jackson2 +march24 +love92 +loco13 +170 +candygirl1 +musicman1 +matthieu +luigi +damnit +1111111a +philip1 +dee123 +strider +andrea123 +dwayne1 +powerful +althea +Abc123 +cordoba +fuckoff123 +brandon7 +guatemala1 +richmond1 +mmmm +candycane +56565656 +melo15 +cheryl1 +margaux +james3 +diamant +florence1 +geneva +march10 +�+�����+�����+�����+���� +kingfisher +gfhjkmgfhjkm +tennessee1 +suicide +phillies +ohmygod +pathfinder +august22 +cucumber +jay +carter15 +1959 +1fucker +drakon +stinker +marseille13 +today1 +123456qaz +carrera +cococo +snow +asdfghjk1 +chase123 +ginger2 +capital1 +playgirl +abby123 +valerio +susanna +minouche +sonny +tanya1 +180 +bluesky1 +malena +karthik +daddygirl1 +flavia +football33 +123zaq +159852 +pepita +mushroom1 +jackal +mikayla1 +june19 +tmm +poop1234 +avalanche +princes +carpenter +yourmom2 +bermuda +deutsch +garnet +charlie01 +forgot1 +jethro +samurai1 +mckenzie1 +prince123 +zodiac +kimmy1 +cdtnbr +supernatural +ferguson +197777 +novembre +eliana +deskjet +mazdarx8 +123456798 +weare138 +zero +genius1 +tits +killer69 +blaze420 +pooh123 +money10 +yesterday +chris5 +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +r1cd38d +mamacita +rosemary1 +jordyn +clancy +nicole23 +maxine1 +moimeme +freebird1 +753357 +charlie7 +radiohead1 +obiwan +april28 +topher +rock12 +really +thomas11 +myspace14 +indya123 +intruder +fabulous1 +bear12 +crimson1 +justin13 +ewanko +edgar1 +curious +fuckyou9 +fucklove13 +shilpa +chelle +959595 +enter123 +17171717 +turtles +rahman +running1 +1957 +fiorentina +topdog +reddevil +monkeyman1 +roswell +hahaha123 +gymnast1 +capoeira +condom +paul123 +narnia +20082009 +ferreira +julia123 +belinda1 +knowledge +money09 +powell +vasilisa +halima +tinkerbel1 +killers1 +july15 +bitchy +superman11 +kennwort +lukasz +333999 +e3r4t5y6 +anders +candace +blue99 +trains +daniel10 +bombay +sonnenschein +joelle +goaway +bonjovi1 +asshole69 +computador +sheena1 +user888 +alex22 +ddddd +любовь +chris22 +football6 +hopper +lespaul1 +1chicken +tralala +ihateyou! +260 +geminis +jan +marlene1 +archangel +criminal +131420 +qwerty23 +36mafia +artist1 +balla1 +chris21 +virgo +None +. +cash +bacon1 +7758520 +corleone +828282 +aa +oreo123 +100500 +romance1 +june27 +florin +seven11 +Master +borabora +b123456789 +000777 +qwerty. +princeton +flight +123q123 +frisco +money13 +stephan +cesar1 +america2 +pink1234 +tennessee +madagaskar +cartoon1 +jonjon1 +rainbow7 +121234 +slut +margarida +darrell1 +qwerty0 +afrodita +nfytxrf +wazzup +a1111111 +hey +caleb +f12345 +tommyboy +march25 +Nicole +222111 +crevette +maggie11 +DANIEL +loveable +hotshot1 +elwood +charmaine +saxophone +lover101 +oranges1 +9876543211 +160 +misfits +dynamite +a121212 +asdfjkl; +MICHAEL +password18 +expert12 +emerica1 +pimpin69 +moskva +100484 +boobie +telephone1 +norbert +annaanna +purple! +shankar +iloveyou16 +cathy1 +sinbad +Hannah +milkyway +l6ho3tg7WB +love05 +ne1469 +manhattan +sanders +froggie +sugar123 +1234567d +underoath1 +hazel +karen123 +gmoney +nemesis1 +expert +555555555 +april29 +gamecube1 +angel666 +Joshua +babygirl20 +aurelia +tartaruga +momanddad1 +craig +sample123 +libby1 +werwer +lingling +cutiepie12 +presley +bam123 +hihi +sharpie1 +hejsan123 +gribouille +171204jg +lol101 +multimedia +george12 +srilanka +austin01 +misty123 +computer123 +bitch7 +miami +patrick2 +erin +alex14 +mitch1 +krishna1 +edward12 +krissy +priscilla1 +boobie1 +louisa +malinka +211314 +121212q +pete +ohyeah +5482++ +steven12 +666666666 +zzzxxx +minnesota +emanuela +severine +kassandra +012345678 +serendipity +ashley3 +meatloaf +miguelito +cookie11 +souris +sweetlove +colocolo +havana +annie123 +boxing1 +princess19 +1234567k +physics +mamasita +infinity1 +asasasas +boyfriend +camper +cobain +karma1 +shiva +lolalola +harris1 +panic! +dontknow +1dragon +cunt +happy7 +sexybaby +scream1 +niklas +alexis2 +yellow5 +coolkid +poiuy +eloise +jehova +q111111 +eugenia +berenice +1213 +400101 +shiloh1 +undead +polpol +pepper01 +654321q +trigun +angels2 +sexybabe1 +august14 +love2love +dupa +bigboobs +kasia1 +olumide +147 +boomboom1 +victor123 +loser5 +wz362308 +summer2010 +henrique +aggies +12345678900987654321 +nokia5300 +empire1 +bighead +mahalkita1 +terminal +hello2u +diana123 +divorce +dinara +blanche +alcatel +premier +gideon +258741 +lisalisa +q1q1q1q1 +chino1 +march14 +ranetki +1958 +chelsey +hockey10 +checkers +M1chp00h +hopeful +mylove12 +maggot +sanjose +angus1 +pink10 +lovehate1 +fuckoff69 +qwerty3 +baptiste +67mustang +zebra +password12345 +crackhead1 +gbhfvblf +allmine +ocean +bdfyjd +moocow1 +yjdsqgfhjkm +ashanti +zimmer483 +nico +june30 +ale123 +zzzzzz1 +mexican13 +samsara +amanda11 +bigmac1 +gayathri +lion +diane1 +purple5 +kingpin +sneaky1 +sinaloa1 +rookie +1onelove +myspace6 +goodday +marc +steve123 +imesh +toronto1 +789123456 +pretty2 +champ +loveyou12 +cookies2 +haley +corina +mikael +starwars3 +pepsicola +numero1 +kylie1 +stalin +lunita +berry1 +babygurl2 +o123456 +johanna1 +coralie +Jordan23 +gbcmrf +poppop1 +tajmahal +forward +12369 +godsmack1 +josephine1 +bassman1 +tripleh +woohoo +satish +9562876 +cv1230 +lotus +shitty +1357908642 +fabiana +jason12 +manzana +alpha123 +voodoo1 +hotchick +million1 +salazar +987412365 +benjie +nicole27 +momoney1 +jehovah1 +jeff24 +ulysse +oliver12 +zxcvzxcv +james11 +sander +1qaz!qaz +rockets +milka +whiskers1 +service1 +jesus10 +pharma +science1 +snatch +Hello123 +kool123 +godson +bjk1903 +marty +linkedln +789456a +abcdefghi +gwapako +sexy24 +smoker +annabelle1 +iloveyou01 +elena1 +cute12 +libra +3456789 +devin +juice +death123 +74107410 +nigga12 +football32 +pink14 +tina123 +kayleigh1 +khalil +sofia1 +aubrey1 +dbnfkbr +20042004 +bakugan +malboro +claudine +april27 +seeker +orange11 +neopets12 +firenze +medion1 +summit +november19 +Martin +tangerine +hello13 +lilbit1 +brennan +laurel +savior +truck +190986 +mmmmmm1 +avatar1 +1233210 +soccer99 +imthebest +azertyu +juice1 +blue14 +alex21 +syracuse +loser! +zerocool +wolfpack1 +mariela +regine +fuck1234 +blackcat1 +scorpions +blanco +detroit313 +iloveu3 +1231230 +fucked +denmark +c123456789 +woshiyazi +asdfqwer +henry123 +july10 +Anthony +ghbrjk +giorgi +spikey +green22 +memories +shalini +zsazsa +mrf11277215 +sanandreas +lucky3 +koko +Richard +black13 +silverado1 +journey1 +browns1 +quincy1 +passer2010 +zalupa +coleman1 +newyork2 +samantha2 +operation +one2three +kiara1 +quantum +vegas1 +homerun +0o9i8u7y +popcorn2 +1q2q3q4q +wanker1 +lambert +puddin +rob123 +302010 +sapphire1 +yeshua +military +magnolia1 +jimbo1 +iluvu +zzz123 +sunshine11 +moncoeur +spoiled1 +racoon +july13 +july16 +tree +mama11 +300 +killme1 +avril +iloveindia +luckyme +obama08 +for +honey2 +poupette +ramones1 +teodoro +virus +candace1 +etienne +198500 +nookie +bababa +afrika +rochelle1 +ocean1 +western1 +peaches2 +vince +guitar123 +lili +marek +xanadu +breezy +lamar1 +keystone +jonny +goodgod +t: +dfa72dfj +cbr600rr +birillo +neelam +pissoff +rasta +hellyeah +jordan22 +player12 +poptart +benson1 +a987654321 +goldwing +camel +Justin +boots +mykids1 +the123 +calypso +???? +superman13 +bobcat1 +vampir +whoami +nitram +football55 +darthvader +superman5 +capital +memorex +o +roland1 +torres1 +avery1 +herman1 +samsam1 +trustnoone +poohbear2 +robert01 +270 +bonkers +notredame +fucker! +love666 +july17 +glenda +playboy2 +fuck13 +ffff +julio1 +198600 +karaoke +bombom +joyce1 +ann +chunky +carla1 +master11 +liverpool2 +maximka +020 +felix123 +corsica +12qwerty +dentist +savanna1 +nigga2 +ethan123 +nadejda +challenger +dialog +coolness +andrew13 +madison3 +biatch +villanueva +ademola +flamingo1 +spidey +selene +fuckyou23 +cougars1 +ellen +catcat1 +crack1 +chopin +agatha +carmine +resume +moses1 +plumber +faker1 +ventura +truck1 +222555 +848484 +ilovejosh1 +electric1 +artur +213213 +rasputin +donuts +romario +zoloto +yOp7s55 +00000a +1qaz2w +nicole! +1123 +drama1 +fitness1 +carpet +pppp +purple4 +shivani +falcons7 +bluedog +pallavi +123456789A +romantic +martine1 +personal1 +doktor +waffles +atlantic +fantomas +olimpia +flipflop +marmar +tazman +scott123 +baby18 +livelife1 +driver1 +number10 +birmingham +aladin +oceans11 +limpbizkit +celtics1 +waterpolo +matisse +number8 +assassin1 +sashka +mister1 +brady1 +357357 +number4 +momof4 +lilly123 +moonbeam +october23 +12345y +machine1 +garage +v12345 +paulina1 +critter +159874 +picture1 +hummerh2 +yellow3 +oblivion1 +918273645 +werty123 +sprint1 +smokey12 +123xyz +indians1 +express1 +123123456 +momo123 +tatarin +alex23 +and +october12 +aurelien +leonidas +hip-hop +hotchick1 +funfun +2012 +jjjj +chocolate! +june29 +alphabet +hottie01 +declan +slipknot666 +tink123 +armageddon +chelsea2 +q12345678 +anonymous +diciembre +hotsex +1234567t +03082006 +ashley21 +y +fun +brando +bobafett +hooker1 +android +helena1 +polly1 +hello22 +dominick +winners +iloveyou0 +cosita +sylvain +doodles +loveable1 +cosmo +kenny123 +yfcntyf +qawsedrftg +tania +oxygen +196 +joseph2 +aabbcc +123qqq +march19 +salamander +liliana1 +integra1 +fuckers1 +D +deacon +nigger2 +anthony11 +sheryl +Iloveyou +navarro +alfie1 +1955 +aaaaaaaaa1 +soraya +snoopy12 +football44 +H1xp2z2duK +poopy12 +easy +4wheeler +pompey +loveforever +09090909 +tigger13 +90909090 +myworld +bird +mickeymous +disneyland +gonzalez1 +rugby1 +blueboy +jagger +callum1 +marcel1 +monkey99 +yogibear +rhfcfdbwf +golfclub +ultras +saratoga +bigben1 +brittany12 +C +skate12 +ollie1 +goodtimes +breezy1 +smokeweed1 +sausages +aaabbb +karla1 +1357 +because +aurora1 +chelsey1 +yangyang +newport100 +pizdec +junior13 +rusty123 +A12345 +krolik +sexxy1 +duck +frisky +reddragon +rosie123 +armand +e23456 +july11 +asdasd666 +barracuda +kids +reynolds +godbless1 +alan +amizade +fingers +lauren123 +p0o9i8 +ronron +carlos13 +perrito +x +austin11 +palmeiras +tessa1 +dejavu +crawford +1jessica +roadking +3edc4rfv +excellent +Maggie +blessed2 +chi +molina +wetpussy +loveit +audia6 +smirnoff +ruben1 +football25 +browneyes +280 +princess18 +gmoney1 +634142554 +esmeralda1 +football15 +daffodil +starwars2 +bruiser +carlito +bigboy2 +idk123 +flavio +astonmartin +georgie1 +William +dingdong1 +Change1234 +resetme +i123456 +bla +78945612 +tigger22 +queenie1 +angel24 +gabby123 +aaabbb2 +shadow3 +cfvceyu +stone +gollum +march26 +october21 +gustavo1 +charmed3 +twinkie +preacher +Buster +ilove2 +star22 +piotrek +baseball25 +jennifer2 +tupac +clemence +servus +cortez +hammer123 +tracey1 +fire123 +lilbit +anna12 +kavitha +abbey1 +asdf11 +bubba2 +bigboy12 +S +kamil +thethe +shasta1 +dogs123 +master01 +chelsea12 +prettyboy +asawako +bluestar +prosper +bullseye +001001 +pizza12 +gerald1 +farhan +lovegod1 +biteme69 +typhoon +13572468 +145632 +aleksei +camila1 +timber1 +randall1 +qwertyuiop12 +connect1 +hugoboss +tim +whocares1 +webmaster +march31 +sexyass1 +pimp01 +paranoid +brett1 +223456 +cameron2 +crazygirl1 +leopold +aqwzsxedc +1stunna +john11 +estefania +lucky11 +elvis123 +riverside1 +janelle1 +akira +target1 +blood123 +schule +cleopatra1 +another1 +q1q2q3q4 +chocolate7 +bobbie1 +zephyr +elsalvador +marisol1 +cruzazul1 +9876 +needforspeed +model1 +gypsy1 +brewster +gotmilk1 +thalia +duchess1 +arcangel +mic +chica1 +jFgvCqBuzUG +wewewe +jazzy +desember +blood4life +film@123 +chris18 +maiyeuem +backstreet +jonathan12 +grumpy1 +austin2 +bella2 +santa +droopy +myszka +wilfried +apollo11 +gtnhjdbx +sekret +1hello +gagaga +august18 +fabian1 +morgan123 +smudge1 +dupa123 +lexor123 +197 +august19 +951951 +biologia +march16 +july24 +jesuscristo +maddy +new123 +sharky +sienna +valhalla +matty1 +varsha +mickael +ana +double +collin1 +asshole3 +bastian +ashley! +august16 +sarah12 +intrepid +secreto +rencontre +iloveyouba +westside13 +artem +werty1 +tahiti +carlitos1 +bollocks1 +271282 +march27 +badboy123 +1qaz2wsx3edc4rfv +michaela1 +clueless +dodger1 +bigmama +sexii1 +blues1 +hitler1 +blink123 +cosworth +Hunter +963369 +shevchenko +LOVELY +shreya +ant123 +william12 +4jesus +boeing +zxcvbn123 +stimpy +slovensko +123admin32 +cody12 +lady123 +ctrhtn +4545 +1111aaaa +doobie +wireless +miles1 +carine +rhfcjnf +money08 +capucine +eddie123 +9874123 +TOPBUTTON +bitch21 +stefan1 +494949 +gucci +supreme +reunion +magical +piccola +agustina +nenita +trust1 +kfgjxrf +shadow22 +migrationschool +godwin +dddddddd +letsgo +tricky +78787878 +myriam +noemie +mistral +vinicius +aassdd +mischief +oreo +gary +calculator +kat123 +198400 +abc123! +highschool +mustangs1 +fishy1 +gwapoako +mudvayne +celtic67 +daisydog +niners +radical +philipp +orange3 +mongoose1 +jon123 +rivers +stewie1 +jaime1 +cookie13 +qw1234 +numberone +killer23 +hazel1 +weedman1 +lovely69 +tootie1 +ASDFGHJKL +357753 +miles +purple23 +kazantip +bears +gabriella1 +moussa +potato1 +paper +melissa123 +massage1 +matthew7 +hellboy1 +pepper11 +marron +loveme4 +stasik +blue15 +fyfnjkbq +bitchass +march20 +mikey123 +mars +667788 +olalekan +ksenia +zidane10 +cuteko +1956 +july27 +payton34 +nuvola +hockey7 +august15 +peanutbutter +hillbilly +citizen +gangsta2 +insomnia +surabaya +rocketman +abraham1 +12345687 +090790 +baby17 +genevieve +hunter3 +dominik1 +butterfly6 +Jesus1 +loveu4ever +1moretime +maminka +baggio +formula +120679 +japanese +heka6w2 +boob +march28 +overdrive +919191 +fordfocus +14789 +wiggles +michael4 +crazy13 +harlem1 +wally1 +tipper +123wer +august25 +celtic123 +babygirl8 +money21 +poupee +1234567890-= +a666666 +espana +angelic +keepout +superman! +1234567u +fxzz75yer +boxer1 +1gangsta +my204856 +edwin1 +engine +sunrise1 +michelle3 +vfntvfnbrf +chocolate3 +119119 +d4 +shaun1 +sunsh1ne +amanda01 +deathnote1 +timtim +grapes1 +Doomsayer.2.7mords.VV +profile +qwerty88 +nipples +013579 +ashley14 +ggggggg +love93 +zzzz +jessica11 +gorillaz +bolton +shashi +cuties +mother3 +smarties +peanut01 +dummy1 +bigbird1 +lexus1 +greeneyes1 +lolololo +thiago +play +Elizabeth +lbvjxrf +ou8122 +armyof1 +david13 +august28 +qwaszx123 +emerson1 +aventura +bowser +aze +poodle1 +depeche +redfox +leigh1 +godblessme +kickflip +yahoo12 +southpole1 +caitlyn1 +capone1 +sancho +augusto +qwezxc +cheese3 +hithere1 +december19 +oldschool +blogs123 +nokia6600 +drag0n +contrasena +reglisse +babies1 +getajob +david01 +awsome1 +bigballs +justin10 +charity1 +my.space +casper123 +Trustno1 +delilah +avenger +charlene1 +200200 +danny12 +lenlen +zelda +iiiiii +qaz12345 +misha +chiquita1 +danielle12 +1225 +juliana1 +metalica +noviembre +music! +burger1 +dani123 +jesus13 +qw3rty +quiksilver +bernie1 +july18 +justin3 +tiburon +Christian +777777777 +chris15 +665544 +october22 +qwe123asd +dragon10 +joyful +rasta1 +babygirl18 +marion1 +melbourne +mommy4 +redhot1 +ashley16 +smokeweed +chipmunk +ddd +pokpok +rubber +hockey13 +ludacris1 +pereira +poncho1 +woaiwojia +asdfgh01 +gatorade +sepultura +sheba +123odidol +michael! +molly12 +gaetano +homie1 +redfish +sixers +mark12 +valery +love03 +jeff123 +pancake1 +hilaryduff +01234 +preeti +rosanna +maemae +princess07 +liquid +naruto10 +caracas +divina +riverplate +virgo1 +britt +iriska +nathan01 +july28 +usher +sunnyday +vika +1hunter +jackie123 +tanker +october7 +lester1 +canabis +magician +dada +chinita +heyheyhey +nicole16 +765432 +qwer12345 +makemoney1 +passme +lifetime +mmmmmmm +intermilan +sexygirl12 +ggggg +bigmama1 +ljxtymrf +zzz111 +sooner +keisha1 +tictac +ahmed123 +chick1 +subway1 +18436572 +whatthefuck +babygirl07 +anthony01 +obelix +Samantha +crocodile +game +yourmom! +anastasia1 +luis12 +rebekah +1234567891011 +candyman1 +nice +papa123 +broncos7 +pillow1 +windowsxp +marty1 +chicken! +kristy1 +summer! +19621962 +thompson1 +alexan +love94 +dave123 +yahoo! +freestyle1 +mail.ru +mahalkoh +peace2 +purple01 +fake +shelley1 +200991 +lover3 +lucky5 +universal1 +madinina +jordan21 +manunited1 +karima +webcam +october2 +198700 +aaa123456 +dynamo +molly2 +toby123 +boyboy +social +tribal +bigboi1 +killbill1 +scoobydoo2 +hello12345 +pink23 +asdzxc123 +jjjjjj1 +01011990 +dawn +chinedu +fucker69 +him666 +888 +привет +tornado1 +dinosaur1 +julio +rodina +gatinha +orion1 +mike13 +777333 +050 +dogcat +dddddd1 +killer3 +qaz741 +XBLhInTB9w +hhhhhhhh +jelly +akshay +telecom +patrick123 +babyphat +olamilekan +lancaster +charley1 +rhonda1 +silent1 +R9lw4j8khX +bastardo +chihuahua1 +guitare +camaro69 +revolver +giselle +rocco1 +homero +matheo +qaywsx +ilovealex1 +freedom7 +smokey123 +nike23 +zxczxczxc +groovy1 +123546 +muriel +whitesox +merda123 +vortex +daniel7 +goodgirl1 +rfhnjirf +salut +reese1 +brett +barry1 +vittorio +cupcake123 +bigguy +caonima +swords +135135 +vadim +chantelle +marquis1 +yellow22 +greentea +ledzep +ilovenick1 +Harley +huskies +darnell1 +starfire +hello0 +starcraft2 +nibbles +biohazard +fuckmylife +poison1 +dead +goodluck1 +henderson +sal +icu812 +friends3 +yvette1 +tatata +nadine1 +redwine +forgotten +hottie5 +emperor +meatball1 +1killer +macaco +sonata +natascha +sanjana +norway +jill +bullfrog +murzik +frozen +edgar +bingo123 +melissa2 +sexybeast +elisha +gansta1 +12131213 +dallas12 +rusty2 +constantin +skate2 +bettina +leanne1 +deluxe +holidays +mike22 +mustard +camping +pepe +chaser +penny123 +sport +kickflip1 +popcorn123 +arschloch1 +atticus +sandra123 +kisskiss1 +titi +rick +spotty +bdfyjdf +speaker1 +sherwin +snapple1 +naomi1 +gggggggg +rocco +cats123 +solaris +mV46VkMz10 +kingston1 +zxcasd123 +tantan +common +people123 +july29 +030201 +james01 +tmnet123 +studio1 +michael8 +tequiero1 +albania +square +thankyou1 +333666999 +wwwwwwww +petra +andrea12 +jimbo +napoleon1 +august17 +raquel1 +princess6 +du8484 +holyspirit +need4speed +cherry2 +pumas1 +friends4ev +redrose1 +alena +chunky1 +markiz +apples12 +abc456 +bumblebee1 +bradpitt +zzs000000 +cam +chris17 +xtseo2011TDX +patricio +nadia1 +chris7 +redline +peaceful +kayla12 +poi098 +july19 +luisito +cruiser +goodboy1 +princess69 +my1space +chicken3 +qqq +1223334444 +honeys +samuel123 +sta +ripley +bigbear +jester1 +ambition +mommie1 +kenshin1 +290892 +trucks1 +dayday +clever +bitch6 +bronco1 +freeze +qwert5 +lovelovelove +hola12 +narayan +art +caralho +jessica01 +access1 +mobile1 +gareth +charlton +lfitymrf +jarule +eugenie +grateful +jonathon +1020 +deepika +vova +snakes1 +120279 +newpass1 +superman10 +bball11 +sunlight +vanessa123 +august10 +triplets +malaka +track1 +dammit +sicilia +rhjkbr +colin1 +metalgear +blackman1 +tim123 +hansen +july25 +cherries1 +gutierrez +hellomoto +fucker123 +lovers123 +graffiti +??????@mail.ru +silver123 +magenta +bitch14 +elizabeth3 +konrad +bryant1 +saraswati +martin12 +patryk +asdfjkl1 +maya +baby06 +password55 +1babyboy +chavez +knuckles +bouncer +152535 +lizzy +amber12 +somebody +tabby1 +-deleted- +batman11 +nirmala +jungle1 +biloute +chandu +falloutboy +pancakes1 +rugby +letmein! +lilith +246800 +all4me +kkkkkk1 +bud420 +1qw23er4 +zaragoza +tamtam +3angels +alfred1 +doghouse +6358986 +angel777 +remington1 +ilovemybab +aussie1 +bitch09 +16051980 +aguila +marquis +iloveboys1 +magda +baseball17 +spongebob3 +zero00 +*123456 +Jesus +river +twelve12 +gitara +marsha +222222a +blowjob1 +bisous +asdfg12 +meister +sukses +bball3 +ilovemike +admiral +scout +april2 +111122 +pimpin101 +awesome123 +2345 +google2 +kansas1 +198200 +kamala +costarica +darryl +apple3 +alohomora +destiny123 +199999 +titleist +fuckyoubit +reading1 +hastings +piano1 +18181818 +shearer9 +!QAZ2wsx +fuckyou420 +fuckyou21 +sasa +adadad +georges +torrent +spartacus +number23 +august24 +brad +mad +pooppoop1 +michoacan1 +chivas9 +fantastic4 +truman +956208q +alone +bruiser1 +cristiano7 +iamgod +pixie1 +warning1 +gustav +qwerty00 +redhat +newzealand +hotwheels +6strings +amanda13 +lakeside +colette +welkom01 +brandon5 +french1 +mamma1 +brandon13 +fK3456abc +december10 +warhammer1 +niggas1 +shark1 +007bond +151617 +johnathan1 +12s3t4p55 +fantom +tyuiop +030 +lol123456 +atreyu1 +bennie +hitman47 +timoxa94 +king11 +cyclone +1ashley +greenbay1 +ashley22 +worship +190494 +yousuck2 +davis1 +showme +gregorio +stupid2 +walkman +iloveme12 +anthony4 +daniel22 +charli +penguins1 +miriam1 +colby1 +yfz450 +elisabetta +siemens1 +pppppppp +mommie +cerberus +123147 +kobe08 +fergie1 +nautilus +compton +1friend +lovable +jerry123 +dwight +123abc456 +Marina +thesims +122334 +picasso1 +crazybitch +playtime +098098 +bluemoon1 +julius1 +1shadow +0o9i8u +midnight12 +ssssssssss +ximena +tessie +007007007 +rotterdam +mayhem +nosferatu +yellow7 +westlife1 +ramazan +purple10 +evelina +compaq123 +stupid123 +lulu123 +mandy123 +jesus101 +heather2 +butch +dad +space123 +angel1234 +gfcgjhn +dreaming +rapper1 +america13 +collins1 +dmoney1 +stone1 +wer123 +butters +gthcbr +sunshine01 +rob +tinker2 +lfybbk +040506 +angel06 +august31 +dragon3 +calibra +musiclover +husband1 +gu1tar +allahuakbar +camelia +bar +gunsnroses +feyenoord +99887766 +cheer12 +demon1q2w3e +zaq12345 +python +gatorade1 +howareyou +olanrewaju +james13 +123456789123456 +tresor +sassi123 +gofish +hannes +toutou +jessica! +lpl +president1 +gettherefast +A +killerman +roses1 +football07 +papichulo1 +heavymetal +minime1 +nina123 +garden1 +shivam +digimon1 +65mustang +julianna +april4 +solidsnake +tttt +pwtest +Andrey +dasha +baller2 +112 +rugrats +floflo +png +dreamcast +u23456 +PhoeniX +partner +pepino +countryboy +farmer1 +ginger01 +honda250 +soloyo +sexy19 +cloud +hotmail123 +aishwarya +liverpool5 +southern1 +banana12 +guitar2 +milashka +aidan1 +345345 +bitches2 +football34 +ashanti1 +ashley10 +deusefiel +evolution1 +chestnut +heavenly +princess24 +devils1 +123123z +L +bubbles3 +secret2 +flores1 +florent +october11 +clementine +cousin +shauna +ilovematt1 +popstar +1223 +camara +anitha +dancer12 +dragon21 +Liverpool1 +seahawks +kidrock +chevelle1 +sexy#1 +link123 +anakonda +scottie1 +puzzle +zero123 +maryland1 +campbell1 +dra +110018 +pimp4life +ksusha +maureen1 +butterfly9 +pommes +july31 +carrot1 +platon +geetha +geheim123 +andrew3 +jordan4 +vipers +hampton +no1knows +anusha +pink21 +shearer +find_pass +518518 +lover5 +sheridan +fiorella +homies1 +snoop +mommyof2 +3698741 +karolina1 +mcdonalds1 +christin +kitchen +mistress +kowalski +smokey2 +myspace4me +motherof3 +liverpool123 +diamond123 +chris16 +predator1 +happy3 +rfn.irf +april30 +tarheel +B +nicole5 +love2007 +123456789* +internazionale +bernice +000666 +daniel3 +852741 +tunafish +seahorse +sidekick1 +lovers12 +ramirez1 +jasper123 +fidelio +michael10 +smile2 +1234qwerty +sporty +asd666fds +hotty +salamandra +bubby1 +octavia +loveyou! +1235 +c00kie +pizzahut +goldfinger +bbbbbb1 +system32 +bball22 +bengals +hurley1 +LOVE +jackson123 +walleye +dawson1 +carlton1 +01012011 +2twins +shahrukh +ananda +march29 +demon1q2w3e4r +�������� +marie3 +baggies1 +method +october14 +bvp33W7epU +tracker +klopklop +gospel +pinkpink +monroe1 +morrowind +lordjesus +princess17 +dragoon1 +jackass123 +whitesox1 +clarisse +october15 +butters1 +princess20 +snowie +ruthie +ringo1 +chicks +masamune +alligator +kolbasa +vivian1 +balloon +nessa1 +love420 +rufus +sarasara +beloved1 +oioioi +mike69 +mygirl1 +1baseball +whatup1 +immortal1 +jordan45 +ankita +einstein1 +leonel +wert +mohamed1 +cutie13 +havefun +insurance +hottie4 +pink15 +krista1 +mandrake +taylor10 +zaqzaq +football. +carebears1 +football69 +denis1 +magick +magicman +apples2 +123454 +1flower +adrian123 +destiny7 +popo09 +789456123a +alianza +nicole15 +candela +beatrice1 +viper12 +shane123 +bigone +iloveme3 +snowy1 +maisie +players +watson1 +grant1 +1112 +stacy1 +3daysgrace +stuff +alex15 +bobby4 +rjhjdf +thisisme +octubre +kids123 +matrix123 +silver12 +eatme1 +19601960 +siobhan +azert +origin +68camaro +friendofjoan +mateusz1 +lululu +y23456 +paradis +gallardo +362514 +hellomoto1 +password45 +mindy1 +mel123 +1010101010 +bitch4 +doremi +Victoria +dragon99 +poop69 +mark_963 +loser101 +tereza +&hearts: +green23 +jalisco1 +bounce +gayatri +deadhead +pistache +embrace +taylor3 +saretta +roberta1 +rbOTmvZ954 +tortue +gamer +titanium +lennon1 +harish +lara +5plK4L5Uc7 +jim123 +nellie1 +magnum1 +raistlin +nfy.irf +alisa +dakota12 +leroy1 +jade123 +maria13 +aramis +wareagle +continue +grandad +090 +uzumaki +eistee +stewart20 +fraser +159357a +Taylor +portable +tunisie +goofy +avinash +painter1 +23 +jamesbond1 +stuart1 +bearbear1 +a55555 +0007 +martini1 +myspace06 +eri +hey12345 +ballerina +yourgay1 +rashid +tata +kaitlin1 +verizon +aloha +pandabear +hansolo +cornwall +qwerpoiu +july20 +beretta +nanny1 +b-ball +bobdylan +quattro +weronika +21 +1qaz@WSX +poiuytre +omar123 +sixty9 +lovesex +alexia1 +147258369a +1nicole +starwars12 +jayson1 +samsung2 +reliance +juliana123 +eternal1 +chuckie1 +wisconsin +adrenalin +jimmie +belinea +squirt1 +notredame1 +jessie123 +blackout +myboys2 +killzone +bangkok +liz123 +animation +cocaine +bigfish +alyssa12 +mac +ola +o23456 +vasiliy +shakur +jaime +kkkkk +nokia5200 +booster +flo +twinkie1 +sisters1 +gunther +forrest1 +thebeatles +marie13 +catman +ruby123 +singing +12346789 +fatty +children4 +nickolas +bertrand +diva123 +102030405060 +hannah10 +kat +windsurf +rerere +vera +hockey123 +xiaoxiao +bandit12 +youknow1 +combat123654 +p4ssword +coccinella +angell +superman123 +love32 +salasana +babygirl6 +vjqgfhjkm +queens1 +marimar +princess123 +555555a +bookie +slinky +whatever4 +class2010 +mustang50 +member1 +marie05 +bmw325 +herbert1 +fuckfuck1 +rfntymrf +5845201314 +contrase +nick11 +sophie12 +monkeyboy1 +serseri +suslik +doodlebug +555444 +public +tzir25l5KN +12345678d +3.1415926 +star10 +harekrishna +chingy +5X1CJdsb9p +whatever12 +monkey15 +schneider +vienna +marita +4girls +thailand1 +maserati +meandyou1 +rooney1 +july26 +777888999 +vivien +electrical +khaled +bacon +august26 +vintage +capetown +fuckyou0 +aliyah +bible +peterbilt +shazam +november12 +jacob12 +consuelo +senator +michael21 +Qwerty1 +mel +grant +inuyasha12 +ddddddd +sheffield +softball5 +reno911 +omni +love96 +pegasus1 +squirrel1 +jaybird +snoopdog1 +jammer +nurse +gina +chad +pipoca +love90 +brandon11 +getsome +infantry +London01 +thematrix +1chris +perros +ohiostate +hugo +qwerty10 +richard123 +dedewang +rapper +sandwich +ashley15 +Natasha +pigeon +lacrimosa +password25 +hello4 +30media +ilovemykids +punisher1 +cookie! +kitties +cocksucker +downtown +tundra +peace12 +pooter +137900 +diamond12 +lemons1 +dedede +whatup +combat +cvzefh1gkc +stronger +queenbee +chloee +doggies +filipe +coca-cola +pol +Qwer1234 +richard2 +pimpdaddy +makaka +roxie1 +jason2 +wrangler1 +playstation2 +japan1 +terrence +Tigger +macdaddy +tigerlily +1FpTJTl919 +uzumymw +freedom123 +1234123 +hockey99 +justin21 +1dollar +blues +187187 +India123 +jesusloves +twins1 +west +q123123 +generation +rich +loveme22 +johnnydepp +sauron +madman1 +corentin +Jackson +sheetal +abby12 +bubbles! +scheisse +niggers1 +softball14 +bart +robert11 +airplane1 +rescue +auditt +world +can +player123 +egorka +101090 +arod13 +heyheyhey1 +baltimore +lopata +kurtcobain +rocky12 +armani1 +cutie11 +bambi1 +jazzy123 +tatjana +edward2 +meenakshi +W1aUbvOQ +danish +surprise +mariners +040 +rachel12 +ottootto +bismilah +gwapoko +flatblocker +chocho +mustang67 +gaelle +sokolov +122122 +michael22 +dreamgirl +hottie69 +sharks1 +ann123 +algebra +barbie12 +rudolf +babyboy123 +checkmate +welder +skyliner34 +himanshu +merlot +lollol123 +aerosmith1 +llama1 +blaster1 +joselito +hunter5 +october3 +stuttgart +david11 +sylvester1 +centrino +zach +sex101 +060 +barry +hockey2 +pink16 +nik +realestate +romans +dodong +honolulu +nascar8 +bob1234 +blue44 +stoney +santafe +Sergey +beamer +& +27081989 +918273 +sinatra +vietnam1 +1mustang +juju +longbeach1 +football99 +turtle2 +analsex +boss123 +guess1 +princess. +daughter1 +kirby +romane +charlie5 +camel1 +keller +lolol +julie123 +scamper +keywest +purple8 +vickie +jasmine7 +couscous +myfriend +cheese11 +miley123 +sally123 +1sexybitch +wasabi +skaterboy1 +carlos2 +trisha1 +noelia +butterfly5 +tenten +lynlyn +funtime +bitch08 +maxim +camion +linker +naynay +mickey01 +kamran +matematika +native1 +zorro1 +400064 +softball22 +ang +weather1 +eastside13 +ricky123 +camden +500500 +peach +tony20 +softball8 +nokia5130 +sony123 +bailey2 +12345x +brebre1 +justin22 +halo12 +birdie1 +poophead1 +asasas1 +forever123 +foster1 +iloveyou18 +antonina +sch +popopopo +heartless1 +wassup1 +trapper +blacks +1qazxsw +tiamo +7894561 +bobby12 +love66 +love95 +bubba12 +boyfriend1 +sahabat +august27 +bryce1 +nenette +demon1q2w3e4r5t +trinitron +iluvyou +property +italy1 +beebee +vacances +290 +ninjas +johncena12 +may +divine1 +devine +171819 +dundee +browneyes1 +korova +saopaulo +dfytxrf +junkie1 +weston +1jordan +1a2a3a4a5a +0147852 +101088 +tiziana +pistol +forgetit +nipple +gangsta6 +rafaela +putter +19 +antoinette +jeannie +hunter13 +proview +myspace201 +9958123 +sephiroth1 +active +dirty +chintu +ASDFGH +bootsie +coolgirl1 +hello99 +pegaso +october16 +rita +010989 +paris123 +noah +newyear +godslove +carter3 +allie +junpyo +kimber +taurus1 +cullen +olive +lovejesus +harley69 +hej123 +lynette +500072 +roshan +1234as +emokid1 +titan1 +fiona +zaqxsw12 +annmarie +hockey19 +transport +unlimited +allyson +harvest +trustme +fyutkjxtr +iloveyou143 +surf +curious1 +tigers12 +cutter +musical1 +cowboys9 +island1 +aries1 +jordan14 +tink12 +fun123 +bastien +1954 +fcbayern +hot97hot +cesare +berlin1 +mallard +Jessica1 +satan1 +2CxdN8S271 +grayson +vaishali +anamika +number6 +r123456789 +nike12 +saviour +kevin11 +????? +steph123 +fernandes +tigger3 +plasma +cheerleader +and123 +salinas +celticfc +gunnar +dougie +frodo +diehard +987654a +jim +stephanie2 +!QAZ1qaz +520530 +march3 +concorde +12345six +edinburgh +community +johnboy +mouse123 +�+������+ +static +slipknot12 +wheels +annemarie +omar +badboy12 +bra +mutter +happy5 +hungry +rockie +topgun1 +01234567890 +pimp14 +becca +loveme69 +1224 +chris6 +bball10 +riley123 +subaru1 +1234aa +foxracing1 +gravity +cancan +opopop +jj1234 +monkey. +sensei +J1V1fp2BXm +everlast +tiger5 +swallow +13141314 +seminole +fanny +marias +last +romana +misfits1 +sunshine13 +tommie +Dragon01 +111777 +hunter10 +sternchen +silly +berkeley +eleanor1 +rb26dett +globus +favre4 +felipe1 +ernesto1 +nickel +kermit1 +ilovejosh +mazda +1234567r +purple21 +leedsutd +ilovematt +papaya +fragola +123lol +nokia3100 +1234567Qq +marta1 +hannah3 +elizabeth7 +azerty12 +hudson1 +serpent +metallica2 +bangbang1 +yU5L97wK8Q +qazxsw12 +1qwertyuio +dieter +yahoo2 +renegade1 +blackwater +nevermind1 +marielle +killer99 +bismillah1 +coolbeans +squash +yassine +daisy2 +Matthew1 +doglover +harvard +cnfybckfd +gcheckout +hothot +historia +superman69 +samsung12 +chinna +fudge1 +alexis01 +hikari +124578963 +vader1 +ryan11 +bubble01 +username +976431 +thunderbird +Nikita +idontcare1 +hopeless +getmoney2 +maomao +letme1n +looney +meridian +divorce1 +poopy123 +airbus +bigpimp1 +october17 +normal +fluffy123 +ball +mcdonalds +sport1 +123467 +cindy123 +psychology +123a123a +gordito +gamer1 +emanuel1 +miamia +black5 +12345zxcvb +ingodwetrust +hfljcnm +123581321 +poker +coach1 +catalina1 +nicole18 +prudence +cornelius +justin7 +mommy5 +russia1 +buddyboy1 +flowers2 +acc123. +1818 +brendon +messi +1baller +ola123 +colin +arcobaleno +masha +jjjjj +junior01 +doggy123 +iloveu7 +nat +nicola1 +morrison1 +catdog123 +lolipop123 +eraser +humberto +1apple +junior10 +brayan +butcher +orange7 +12love +cake +trident +blue45 +gracia +celular +titeuf +michael9 +mamadou +10101 +duke123 +Linkedin1 +football77 +booker +rockstar2 +happyfeet1 +ib6ub9 +david3 +augusta +spaceman +flames1 +coventry +sdf7asdf6asdg8df +19611961 +successful +sunshine5 +mason123 +kevin2 +mysterio +blanca1 +ashley23 +nicole08 +12345asdfg +harlem +manning +libra1 +badazz1 +prince12 +hillbilly1 +anthony23 +ffffffff +colors +1212121 +1life2live +iloveyou24 +thecure +hiphop2 +1brandon +universo +honeybear +earth +babybaby1 +tempest +applesauce +hannah7 +cancer69 +estate +dragon23 +rememberme +1919 +zoomzoom +Superman +goose +1peanut +tardis +abc1234567 +oceans +amylee +football123 +primus +bennett1 +call911 +bad +qpalzm +station +olaola +3babies +alanis +vikram +shotokan1 +nono +121213 +star14 +ginger11 +cVZEFh1gkc +peanut11 +atreyu +mariella +champs +01091989 +krissy1 +austria +green4 +horse123 +august8 +cheer101 +apple5 +987 +manchester1 +emily12 +qwertyasdfgh +sticky +banzai +bv123 +honeybun +159258357 +emogirl +salem1 +reuben +james22 +cooter +darkside1 +nymets +sheldon1 +girl12 +bailey11 +jessica5 +plastic1 +1computer +august20 +hippie +fuckme! +batman13 +hateyou +diamond7 +iloveyou19 +iloveboys +motherof2 +muffins +changes +12345678901234567890 +abc123456789 +charlie11 +manny +pierce +pyramid1 +iceberg +66mustang +hawaiian +chelsea11 +newnew1 +chewie +haslo1 +snuffy +420247 +naomi +davis +maxence +sawyer +3Qdlqb49jS +nic +nastenka +963741 +mahmoud +sprinter +Warrior1 +alcatraz +shiela +marlon1 +morgan2 +foxylady +kimmy +sergej +october25 +matthews +inferno1 +talisman +cloud1 +jer2911 +poiuyt1 +brownsugar +neopets +xander1 +Sunshine1 +glenn +living +justin5 +adidas123 +59trick +bizkit +tarheel1 +babyboy12 +kolokol +kareem +monmon +olivia123 +alicante +october5 +emma12 +larissa1 +johnathan +torpedo +hello23 +karukera +1123456 +tiffany2 +1z2x3c4v5b +hhhhh +hoe123 +superfly1 +roxy12 +daddys1 +castor +princessa +angie123 +george2 +shepherd +rjitxrf +honey12 +tonino +devon +nigeria1 +october18 +12345612 +nokia5230 +l123456789 +vandana +miguel123 +max1234 +cypress +hamburger1 +michelle7 +buddy01 +monkey77 +123456@ +stayout1 +weed12 +panama1 +qwerrewq +songoku +skater13 +piper +halflife2 +jen123 +ivan123 +taz123 +beth +meteor +malik +march30 +wtf123 +butterfly0 +bitch. +adrianna1 +david7 +lionking1 +icecream12 +bryan123 +purple14 +woaini123 +planeta +josie +bbbb +dramaqueen +compaq12 +killer01 +shit12 +carly1 +thekid +magic32 +songbird +vargas +octopus +seahawks1 +scooby123 +football01 +marisa1 +daniel23 +winter12 +flyboy +ramon1 +iloveyou20 +milton1 +ballet1 +family1st +alondra1 +santacruz +macintosh +reynaldo +Samsung +samuele +drizzt +hell +fredrick +@!@ +love91 +sunshine4 +htubcnhfwbz +pink01 +011194 +arielle +stardust1 +aragorn1 +bieber +looser1 +myjesus +coke +rachel123 +Sophie +abcdef12 +silvio +waffles1 +kris +babyg1 +15 +punker +commerce +dupadupa +iloveyou17 +didididi +aminata +iloveyou07 +bff123 +doogie +14725836 +dannyboy1 +october8 +r4e3w2q1 +jello1 +jesus07 +24862486 +obinna +paulette +123qwe456 +philippine +123456zz +1qazse4 +chris69 +ilovemike1 +romans828 +sausage1 +43214321 +Tester01 +aze123 +viviane +constance +tweety123 +james5 +mireille +sexyred1 +ladybug2 +travail +12345aa +killa123 +atlars10 +com +angel25 +159357258 +chuckles +juan12 +athlon +bobo123 +1111qq +carmel1 +mackie +whitey +tractor1 +godspeed +november20 +hope123 +king13 +needajob +brandon01 +nfy.if +star23 +triangle +shruti +elmo +121288 +ecuador1 +tycoon +bbbbbbbb +hammed +tree123 +shawna +whisper1 +timberland +patrick12 +horses123 +peach1 +test12 +jarvis +3344520 +shinobi +1717 +ashley18 +pussys +love29 +dudley1 +franky1 +cookie7 +polo123 +kishore +nevim +bigbrother +liliya +zildjian +papichulo +Id6c3wr6uN +psicologia +madzia +1harley +pistons +19591959 +ser +patriot1 +a1234567890 +bynthytn +ipod123 +kitty5 +ultimate1 +800620 +chanel5 +love4eva +november18 +hellfire1 +westcoast1 +nicoleta +mercado +chicken7 +groove +aguilar +mail +peppino +accounting +woaini520 +angel19 +secret12 +babygurl13 +chicken5 +karla +iamtheone +michal1 +hockey14 +aku123 +crazydog +jimbob1 +bones +goodnews +bookie1 +qwertz123 +limegreen1 +lalakers +dangerous1 +777777a +mango123 +piano +passions +Football +terrance1 +Blink182 +sixteen16 +den +killyou +babe12 +hassan1 +cookie01 +football88 +sugarbear +JESSICA +girly1 +vagina69 +anabel +567567 +london11 +erick +spinner +wednesday1 +casper12 +format +antonia1 +Qwerty12 +cassie123 +people12 +shadow10 +tigger69 +katharina +integrity +lucifer1 +barber +kamilla +morgan01 +classof06 +123456789x +nefertiti +jessica21 +091296 +superior +money01 +character +070 +cottage +augustus +playstatio +yoshi1 +1472583690 +cheyanne +chipper10 +100986 +fhntvrf +bbbbbbb +buckshot +fujitsu +michaeljac +sassy2 +bacardi1 +ilovehim12 +message +starburst1 +mcdonald +rachid +cheerleade +jennie1 +cacaca +sansan +voetbal +windows98 +jjjjjjjj +tianya +ilovemymum +yasmin1 +Andrea +panchito +bandit01 +131061 +megadeth1 +zavilov +400067 +gjkbujy +popova +kittylove +123123aa +winxclub +www +sara12 +tommy2 +schumacher +jenkins +poi123 +phil413 +mighty1 +jazzman +butterfly4 +scooby12 +soccer. +fickdich +gordita +flyfly +sylvia1 +753753 +123red +1bigdick +jordan08 +everyday +casino1 +yes +academia +852369 +ballin2 +8eight +totti10 +sasasasa +cheech +justin23 +shayla +flame +nathan2 +salami +baseball20 +charles2 +mam +modern +killer22 +Killer +eminem2 +myangel1 +120197 +mortal +word +dale88 +lakers08 +rfhfylfi +kambing +kamil1 +babygirl17 +24crow +lola12 +robert13 +jellyfish +specialk +deadpool +pelican +132465798 +alberta +gwapa +PAULINE +leah +simmons +aldrin +quadro +sexylove +1heart +gundam1 +jacky +yosemite +bibiche +hottie7 +Brandon +world1 +fox123 +yesenia +hgfdsa +psalms23 +my2sons +mary12 +portland1 +goat +giancarlo +hgrFQg4577 +nash13 +hahaha! +cupcake2 +bugatti +aragon +luke123 +1235813 +greyhound +softball4 +gogo +fy.nrf +rahul +bottle +romeo123 +blue55 +flowerpower +hellos +house123 +mexico11 +terence +cherish +icecream2 +impreza +emerica +strange +Oliver +nuggets +runescape2 +muffins1 +12monkeys +danielle2 +lauren2 +passord +wiggles1 +qwerty111 +happy11 +antoine1 +gavin +newday +asdfghjkl:': +tauchen +blue24 +????????? +haters +lover4 +starr1 +nbvjatq +102102 +minicalibra +chinchin +gateway2 +portia +ghost123 +monkey24 +delicious1 +major1 +saffron +galileo +sheriff +ghbdtn123 +mashka +lavinia +gilberto +ghhh47hj7649 +bangsat +1234567y +1234567890z +patch1 +555222 +hansol +kerstin +b1234567 +mustang66 +alien +saurabh +838383 +terserah +football18 +anton1 +oriflame +bosco +shayne +pinocchio +matthew11 +misiaczek +manfred +graham1 +jesus5 +dutchess1 +madden08 +angeleyes1 +grandma2 +anime123 +kitten12 +t123456789 +apocalypse +diamond3 +amparo +rehbwf +jake11 +1012 +mingming +gigi +rocky5 +myspace15 +calle13 +dictionary +1234567l +153426 +uranus +kramer1 +pulamea +rodrigo1 +lololol +jake1234 +cba321 +boys +only4me +mendoza1 +dimples1 +quality1 +august29 +zimbabwe +zhou1980 +phillies1 +jingle +1v7upjw3nt +09051945 +guitar12 +360flip +jaylen +patatina +bronson +jordan! +begemot +cupcake12 +poopoo2 +windmill +daniel14 +october27 +bobesponja +monitor1 +jimjim +barosan +59mile +bigsexy +summer7 +ant +1121 +engineer1 +19weed +number13 +marcin1 +bravo +1asdfghjkl +jackie12 +thomas13 +lucky21 +kartal +vision1 +sassy12 +chickens1 +imagine1 +grammy +tyson123 +pinklady +hawkeye1 +taylor7 +kokakola +dallas123 +qwerty9 +monica123 +1aaaaa +maxell +asturias +weezer1 +royal1 +jkl123 +mephisto +october24 +graciela +COREGMEDIA +moses +QAZWSX +J +mimi12 +possible +teresita +zxcvasdf +southside3 +melissa12 +josiah1 +buck +bball21 +dancer2 +thegreat +120702 +madhuri +ssssss1 +simple123 +redsox34 +milkman +sunshine22 +hockey17 +braxton +olatunji +01011985 +gemma +123456789aa +kthjxrf +bab +prettyme +love04 +soleil13 +lawson +lipton +qazwsx1234 +janvier +chico123 +economics +parents +121106 +cookie5 +reload +george01 +gagarin +horses2 +anissa +kiki12 +hallo12 +shawn123 +homer123 +fener1907 +blowme69 +cocoa +katie12 +shibby1 +orange22 +reginald +chris08 +newman1 +redbone1 +rosalinda +lexie1 +poophead +dodo +friendofGerly +lauretta +buckwheat +someone1 +talent +lucky8 +quebec +daisymae +monster3 +stronzo +matty +tonyhawk +cosmic +water12 +loveya2 +dragon666 +boom +jasper12 +fred1234 +winter08 +jameson +jelszo +dick69 +underdog +pat123 +alfie +ilovemydad +sister2 +baby24 +firewall +god777 +soccer25 +nate +blue33 +soccer33 +380015 +123321z +sissy +dino +skidoo +woofwoof +poo123 +terrance +tamahome +killkill +tomboy +chilli +jordyn1 +champions +89898989 +zacatecas1 +shasha1 +z1x2c3v4b5 +kjrjvjnbd +echizen18 +girls2 +piramide +iamgay1 +evony123 +ramiro +prosperity +james21 +gromit +pixies +hannah13 +marco123 +1210 +dfhdfhf +mayowa +Chelsea +beyond +335577 +tolulope +yesenia1 +baseball! +sushi1 +080 +kamote +inactive1996Aug +tarakan +carnival +russian +marble +dick12 +198900 +pawpaw +angel05 +1233211 +boogers +ilovemyfam +sparky123 +poupoune +4ever +biggles +televizor +nicole4 +buddy11 +blue01 +crazygirl +iw14Fi9jwQa +221122 +golfball +liverpool0 +googoo +shad0w +bigboss1 +66bob +fightclub +greedisgood +1summer +stanford +oilers +DBM +girlie +sr20det +happygirl +chris1234 +1230456 +gogeta +worship1 +connection +hurensohn +caballero +october20 +christopher1 +scratch +0123654789 +ellen1 +puppy2 +asa123 +zipper1 +prelude1 +12step +chinni +barcelone +clark +froggie1 +hockey9 +bigboy123 +smokin +roadkill +ministry +virgin1 +sinclair +francesca1 +winter11 +452001 +jenny12 +cena54 +employment +national1 +mommyof3 +raindrop +kitty3 +12qw! +april7 +ifeanyi +irock123 +ellobo +1234567890qwertyuiop +&hearts +patterson +Xt97794xT +mike01 +hackers +ilovegirls +warlock1 +R +Gfhjkm +prosto +judith1 +tata123 +vfhujif +october6 +delaney +schnecke +wowwow +policia +forzajuve +prasanna +silvia1 +matthew5 +s0ccer +140473 +reader +frodo1 +tobias1 +jeanette1 +brooks1 +ashley5 +spaghetti +junior11 +00110011 +lily123 +321456987 +audi80 +54321a +alliswell +airborne1 +maurice4 +maldini +mickey7 +monkey16 +marinka +barkley1 +bahamas +banana2 +cachou +28081976 +markie +flamenco +avemaria +mat123 +tacoma +147147147 +25257758 +01478520 +colombo +sowhat +razor1 +yahweh +vfndtq +puppy12 +lithium +joshua3 +couponmom +andrew22 +privacy +paprika +love2011 +1newlife +popular +baseba11 +f: +fynjirf +chat +november17 +zlatan +twenty20 +bahamut +vjkjrj +eastwood +maryann1 +people2 +lioness +rebels1 +1pimpin +74123698 +metall +safety1 +asdf12345 +christa +1234556 +pro100 +look +1michelle +sk8erboi +comeon +delilah1 +steelers43 +joshua13 +malone +vfhbirf +viewsonic1 +nick1234 +karamba +jordan6 +james7 +meggie +albion +mortimer +tripleh1 +jello +superduper +sexy25 +lemonade1 +08520852 +copenhagen +advocate +guevara +fffff +jaylen1 +hotdog123 +ebenezer +amatory +1111122222 +baseball09 +567tyu +iloveu4 +irene1 +Ginger +741236985 +mozart1 +love56 +beyblade +motorcycle +almost1 +madison123 +bratz +69cougar +SAMSUNG +kitty7 +november23 +kamikadze +560034 +caveman +braxton1 +bramble +Voyager1 +derparol +qwerfdsa +rfgecnf +10201020 +porter1 +imthebest1 +198300 +mario64 +anthony6 +foolish +brittany2 +mustapha +gayboy1 +ou29q6666 +14 +office1 +freefree +encore +midnight2 +jarhead +mimine +16161616 +independent +dancer123 +superman21 +bobby2 +16 +october4 +chula1 +just4you +bitch07 +jack11 +november10 +status +leeann +winwin +rfvfcenhf +playa +greenwood +852654 +tiger7 +undercover +pheonix +volley1 +159875321 +dean +67camaro +szczurek +raven123 +girlpower +vergessen +sherri +12345o +november21 +brent1 +purple69 +outkast +waterfall1 +bmw123 +natural1 +marguerite +counter1 +Jasmine +sunshine10 +zapata +deeznuts +december20 +dima123 +12345678j +qwertyasd +chris07 +chaselo +barrett +keenan +1badass +tiger23 +holein1 +jericho1 +komputer1 +michael6 +400093 +kiara +sexyblack1 +cavalo +leilani +baller21 +daniel15 +ortega +benten +lineage +speedway +chapman +malish +eskimo +zeynep +slipknot2 +friends7 +123QWE +greatest +demilovato +astalavista +nonono1 +yes123 +haslo +dogfood +Amanda +pimp10 +fergus +maplestory +jessie12 +stacy +churchill +stress +joker12 +0okm9ijn +wolfgang1 +qweasd12 +bribri1 +tigerwoods +jeronimo +quartz +as12345 +brokenhear +violette +night +destiny3 +beefcake +jancok +baracuda +890890 +DRAGON +juanjose +ronaldo123 +wanrltw +loser4 +heyyou +justin! +asswipe1 +nigger12 +nicole09 +shahid +yasmina +onlyme1 +first1 +hello10 +sixsix6 +vulcan +chief1 +12344321a +humble +qH6xl1p9xJ +unlock +moo123 +myspace99 +money69 +brilliant +grisha +1211 +Spinner +voyage +titan +marymary +fisherman1 +hippo1 +26262626 +arsenalfc +kidrock1 +m1chael +amdturion64 +twenty +sweetiepie +ilovemykid +kratos +cnthdf +puddles +jacob2 +N +baltimore1 +sean123 +18273645 +100001 +idiot +allen123 +clyde1 +december21 +madison12 +madmax1 +stolen1 +random123 +hindustan +lotus123 +demon1234 +mack +p00p00 +asdf123456 +daniel21 +vodka1 +niceguy +thunder2 +Michael123 +kolkata +doomsday +crystal2 +979797 +skate8 +wojtek +super12 +golfgti +!@#$%^ +cingular1 +johnny123 +bombers +1asdfgh +shadow5 +kochamcie +dell12 +astros +qwertz1 +october28 +maria2 +emily2 +wally +********** +pinkie1 +angus +hockey22 +ANGEL +noway1 +november22 +marketing1 +999111 +zx123456 +123asdf +123four +makeup +slonik +petrova +slave1 +delpiero10 +9638527410 +gretchen1 +chainsaw +justyna +melodie +chewbacca +goalie +mas +i< +vehpbr +kerry +zxcv12 +786110 +lions1 +stayout +nestle +energy1 +pa$$word +telecaster +andrew7 +luca +sacramento +zamora +itsmylife +hondas +1abcdefg +hardware +asian1 +ilikesex +pastor1 +mikimiki +198611 +ewq321 +hunter7 +icecube +fff +maxpower +slapshot +walrus +stereo +october26 +earnhardt3 +10293847 +lansing +trombone1 +hellow +kostik +juliet1 +puppys +dragon77 +bigballs1 +maynard1 +hamada +biker1 +whiteboy +blackdog1 +powerof3 +alonzo +2000comeer +mailman +Ashley +saints25 +Aleksandr +shampoo +elway7 +jordan15 +xxxxx1 +good2go +carlota +hi12345 +loveme11 +banshee1 +12340987 +nick13 +kay123 +aleksander +tascha +lkjhgfdsa1 +vanessa06 +mukesh +skating1 +reshma +tekila +babies2 +redstar +xoxoxo +doudoune +titine +hootie +alexis13 +anthony15 +baby2008 +mmo110110 +wersdf +janek1 +korn +orange13 +opernhaus1 +arturo1 +delldell +lolek123 +campeon +7415963 +fuckit2 +woodland +harman +pandabear1 +trouble2 +69mustang +flower11 +crepusculo +cabron +merda +praline +everett +coolbeans1 +THOMAS +7779311 +jonathan2 +carol123 +humphrey +hello6 +astra +dfcbkbcf +7ugd5hip2j +joey12 +nokia5530 +monkey88 +robert3 +november13 +shadow21 +luisa +waterboy +inter10 +johan +01012010 +beaches1 +daniel5 +password44 +green420 +paulo +demon12345 +gogogo1 +JOSHUA +coolboy1 +eric12 +jessika +charlie4 +swagger +easton +cassie12 +stars123 +c2h5oh +123456789+ +01011991 +monkey1234 +#1pimp +kameron1 +van +justin16 +311311 +alice123 +lancer1 +august30 +apelsin +joy123 +nomore1 +armada +soldat +221188 +tiger11 +hhhhhhh +persona +delgado +delicious +fat +taylor5 +presto +joshua10 +�+��+����� +beachbum +cocoloco +manson666 +funmilola +ken123 +graduate +scuba1 +summer22 +lalaland1 +jordan24 +sarah2 +ruth +priya +july30 +NICOLE +codered +d1234567 +lazarus +jingles +faraon +steven2 +gymnast +wsbe279qSG +night1 +anchor +jordan07 +francia +Jonathan +parola123 +shawna1 +turner1 +presario1 +wutang1 +wdtnjxtr +johnjohn1 +china123 +baseball16 +taylor21 +colonel +frog123 +freaks +22071972 +powder1 +tarzan1 +fresh123 +alfonso1 +rollin60 +prestige +spurs +perfection +virtual +ANTHONY +portal +cool123456 +midget1 +denali +lisa12 +clipper +smile! +life123 +frederik +jorge123 +mario12 +april5 +othello +valencia1 +sexbomb +vfvf +ilovemylife +darnell +leland +myfamily1 +family01 +cjytxrf +honesty1 +arkansas +jessy +jen +igorek +love4ever1 +socks1 +packard1 +justina +123password +brianna2 +free12 +m1am1b3ach +chick +jasmine5 +Tristan01 +marina123 +loverman +zack +Pa55w0rd +coldplay1 +dantheman +reyes +just4u +brendon1 +mechanic +1charlie +westwood1 +mike21 +december22 +hopeful1 +pippen33 +realnigga1 +myhoney +robin123 +reefer +batata +joshua7 +aaaaaaaa1 +andy12 +winter99 +marmite +chicharito +martyn +loser11 +plumber1 +short1 +100261 +10pace +martian +shoes +raziel +password89 +noreen +fivestar +avrillavigne +3000gt +tinker12 +hollywood2 +starburst +taffy1 +400076 +roberts1 +minhasenha +shopper +catdog12 +dogman +09061976 +xxx666 +clarence1 +maryrose +afghanistan +themaster +jazz123 +stunna1 +500000 +12345123 +graphics +anthony21 +plokij +samuel12 +rainbow12 +mafia +superstar2 +131 +ilovemyfamily +soccer06 +crash1 +ezequiel +ganja +nolove1 +lavigne +murray1 +lebanon +homework1 +cookies12 +amoramor +cyprus +bigtits1 +academy +admin1234 +mellow +kings +ilikeyou +confidence +october19 +elliot1 +ppoo0099 +lovehim1 +ghghgh +cronaldo +suckit69 +120389 +lakota +sarina +thomas3 +filip +ashley69 +12345i +manon +slider +32167 +mozilla +chrysler +angele +stewie +usarmy +tiger13 +dennis123 +baller22 +parlament +montgomery +sweet13 +brasil1 +global1 +mirela +31x7T5XBke +mishijos +iloveryan +pendejo +boris1 +gold123 +wyatt1 +happyfeet +strange1 +slick +kill123 +traveler +jack01 +diabolo +november15 +laurah +tryagain +vauxhall +angle1 +alexis11 +aleksa +hammers1 +bball24 +niunia +thisisit +erik +govols +popcorn12 +paloma1 +merde +butterfly! +treasure1 +jewel1 +20092010 +nata +pittsburgh +drake +bmx123 +32323232 +gisela +tyler11 +dewayne1 +candle1 +praise1 +giraffe1 +sparrow1 +fish12 +etnies +timepass +luv123 +kkk +mckenna +homers +asdfghjkl; +dragon6 +�+������ +lonnie +socrate +ashlyn +mylover +herrera +alanna +rosa +weed69 +baddog +lavezzi +meowmeow1 +giulio +positivo +13579- +horses12 +baybay1 +harley11 +online123 +brisbane +hotsauce +gigolo +fxzZ75$yer +domenica +nicole07 +123456u +firefox1 +Joseph +ordenador +milo +aloha1 +son +harry24 +amanda3 +poulette +tennis123 +fcporto +summer3 +spongebob9 +1master +transforme +braden +berserk +feuerwehr +designer1 +ilovesam1 +brooke12 +cosmin +oasis1 +moumoune +simba11 +jarrett +venom1 +kamehameha +redcar +gangsta123 +153153 +swatch +sexy20 +mustang7 +purple6 +cutie3 +showtime1 +123456788 +baboso +capricornio +yeahyeah +bmwbmw +maxmax1 +lavanya +button1 +1236 +alyssa123 +shakespeare +rosario1 +12345689 +dragonfire +lisboa +poop00 +hottie14 +prayer1 +minimum +1justin +limegreen +loveme23 +mate +crystal123 +justin14 +fffffff +cnfkrth +meredith1 +pimp22 +neworleans +qwerty55 +pennstate +bandit123 +lavender1 +anno1602 +linked1 +123456zx +kittys +121290 +benjamin15 +mulligan +zakaria +patrice1 +aug +baseball18 +dolores1 +woodstock1 +m0nk3y +carpediem1 +all +arcadia +cooler1 +dddddddddd +pussy101 +queen123 +wanda1 +cbr900rr +poptropica +angelok +bigtime +nowehaslo +fghjkl +nicholas2 +mack10 +jessica10 +vfhbyjxrf +muffin12 +939393 +matt1988 +fuc +element2 +prophet +foryou +kyle12 +fishbone +music4me +laughter +kitty13 +seaman +110024 +fred12 +black666 +tiger3 +hm9958123 +1soccer +dolphins13 +erick1 +jamess +qwertyytrewq +wanted1 +juniper +sophie01 +1234qaz +ninanina +andrew21 +december13 +vitaliy +dogcat1 +liverpool7 +kaycee +swathi +fcbarcelona +missouri +chris09 +lauren01 +builder +pinguino +eternity1 +bronx1 +yamaha125 +calcio +dfg5Fhg5VGFh1 +austin13 +748159263 +ghjcnjq +timberlake +viriato +protect +cool13 +funny123 +destiny12 +sweet666 +bucket +misskitty +12qw34 +presley1 +richards +circle +mini +computadora +krasota +jessy1 +Thegreat123 +bologna1 +metroid +lovely7 +hustle1 +screen +sirena +erika22 +wertzu +suicide1 +iloveryan1 +nokia6230 +lapochka +drums1 +alina1 +mollydog1 +pumpkins +10011001 +kelvin1 +whatwhat +cardinal1 +century +shayshay1 +ram +911 +fat123 +bravo1 +lilwayne12 +zoe123 +totoro +counterstrike +blue16 +�������� +tippy1 +phuong +fullmetal +salsa +4money +esperanza1 +allahis1 +dKxjIzc282 +euteamo +markiza +challenge +cas +elmejor +ilovelucy +k1234567 +morena1 +softball9 +1597530 +newnew +buddy3 +1024 +marie11 +jonathon1 +baller24 +13241324 +daddy01 +sun123 +121289 +m@d!z +Nathan01 +kanchan +sugarbear1 +boobies2 +rjhjkm +gbenga +febrero +ballin12 +sooner1 +sss +sathya +amor12 +202122 +quGRqFo825 +bagpuss +superman22 +batman3 +beckham1 +michelle11 +mathematics +bonbon1 +kumar123 +football17 +shadow69 +danilka +ilovealex +ilovedogs +kameron +ryan962052 +profit +dragon76 +helpme2 +federal +andrew10 +dance4life +heartless +iverson03 +waffle +jesuslovesme +Naruto +Nicholas +cardiff +amanda! +cars123 +tamere +pizza2 +mmm123 +madden07 +mari +milacek +green10 +baggins +augustine +a12121212 +871982 +rashad1 +september3 +bbbbb +ilovecats +tessa +massive +hoover1 +ghjdthrf +redline1 +555333 +143 +abcxyz +mommy01 +ken +marker +ketchup +trojan1 +izabella +bling1 +love111 +JORDAN +redwood +maddison1 +henrik +salamanca +1234567c +music7 +lukasz12 +eagles12 +Melissa +nkechi1 +daddy3 +1robert +sunshine69 +1245 +marbella +jobhunt +gjhjkm +ramsey +daisey +perkins +wordlife +awesome! +lover11 +angelito1 +1qaz2wsx3e +germania +newyork123 +cocaine1 +krishnan +apache1 +pimpin12 +ipswich +education1 +bunnies1 +pearls +walalang +lover21 +stacie +hunter08 +lennox +rochester +punk123 +wwww +beagle1 +123qazwsx +426hemi +babygirl24 +fuckshit +ashley17 +1destiny +130130 +michelle13 +1907 +rjyatnrf +frogs1 +muscle +kristine1 +tigger7 +suckme1 +october29 +dododo +gopher +gunners1 +tujhrf +tomcat1 +pavlik +heythere +beardog +matthew01 +40028922 +fishtank +dabears +elmo12 +131313a +dimension +dookenr1 +pearljam1 +harsha +powers1 +1011 +chioma +chris4 +bambou +hammond +music3 +november5 +ddzj39cb3 +41034103 +fucklife +babykoh +renren +kaikai +wildman +snapper1 +llll +michael69 +angeli +francoise +starwar5 +woshishui +3sYqo15hiL +januari +sassie +zeus +newpasswor +400706 +noiembrie +felicita +scorpione +1william +jessica14 +nataha +159753159753 +hannover +paulie +kobe +lorenz +password27 +denzel +amoureux +fresh +ichliebedi +198111 +sailing1 +blue69 +feline +forzanapoli +giuliana +1a1a1a1a +amanda21 +615243 +phil +bambi +nideknil +saveme +cowboys81 +anurag +jelena +shortie1 +FOOTBALL +coolness1 +jam123 +sanjeev +1453 +food123 +gucio +girls123 +modena +jasmine13 +star15 +A123456789 +gator +loserface1 +foxy +mydear +baltazar +William1 +150801 +robocop +natasa +jaiden +killua +victoria12 +stinky01 +millennium +13791379 +abbie1 +putangina +shayne123 +5050 +loveme7 +peppe +austin10 +holler +1953 +sushi +123852 +mangos +concord +black3 +venus1 +lickme1 +michael. +hamburg1 +lovelygirl +dadadada +pimp21 +kasey1 +playboy12 +negro1 +lunatic +mykids4 +selenagome +nascar3 +brennan1 +cannon1 +chris24 +chicago23 +12345as +josette1 +ineedyou +aq1sw2de3 +kitty11 +parola1 +dropdead +1950 +pookie2 +123456789y +pollo +leeloo +timmy123 +aaron12 +Love +funky +googletester +macaroni +fake12 +311070 +super8 +blackrose1 +canelle +newjersey +fletcher1 +gizzmo +kingpin1 +mybabies +01012000 +amanda22 +books +raptor1 +forever12 +poop22 +papapapa +brucelee1 +laracroft +habiba +mancity1 +daddys +198800 +lololo1 +magical1 +411014 +olivia12 +raj123 +ilovesex1 +bryson +guiness +2angels +love321 +imissu +bluedog1 +hawaii808 +meme12 +teodora +qwqwqwqw +william7 +virgil +tyler13 +suerte +marusya +nikki12 +summer13 +shayla1 +justdoit1 +marinara +118118 +serious +kagome1 +kampala +jordan8 +rfhfvtkmrf +franci +longbeach +326159487 +redfish1 +angedemon +777111 +vh5150 +hacker123 +tay123 +barbie2 +3232 +daytona1 +10987654321 +pascale +brooklyn2 +mickey11 +134679258 +doglover1 +november16 +whynot1 +ryjgrf +automobil +mustard1 +movies1 +sincere +cinzia +200669 +smoking1 +goodgood +dim +teste123 +december23 +justin15 +xdqwerty +grease +mybaby2 +star21 +197800 +batman01 +edward17 +103196 +stigmata +lakers32 +val +marseille1 +starbuck +333888 +misterio +karma +boulette +warner +junk123 +inter1908 +asas +yankees7 +meadow +jaigurudev +dolphin2 +beanie1 +dkssud12 +888666 +scotch +2hot4you +trent1 +shoes1 +0101 +getout +airport +meathead +felipe123 +llamas +bri +chivas#1 +shadow99 +blessed7 +andreia +3s43pth5aea +because1 +ilovejoe +nat123 +polarbear1 +felice +newuser +women +romaroma +222222222 +surena13 +daemon +alexander3 +langga +brothers1 +bazooka +pjkjnj +tingting +dog1234 +agathe +villevalo +475869 +anthony22 +vince1 +301197 +ww111111 +fishfish +skating +poker123 +bummer +soleluna +rasheed +hal9000 +messi19 +olusegun +lucy12 +troy +stinger1 +blue77 +stinker1 +1237895 +loser13 +nigger69 +no +cvbhyjdf +batman7 +opelcorsa +forgiven +absolute +gerardo1 +olechka +football54 +premium +angel20 +valley1 +stratocaster +Freedom1 +candy11 +001100 +madness1 +slut69 +bigbooty1 +batman23 +assholes +bolaji +happydays1 +tanginamo +primrose +198511 +temppassword +angels3 +aligator +allahakbar +flounder +nessa1234 +ford150 +loser3 +12101961 +pokemon10 +111666 +bottom +leika1 +november2 +scrabble +amber2 +goodies +sweet69 +snoopdogg1 +bumble +dottie1 +lolotte +19821108 +mahalq +252627 +angel99 +staples +pocket +tombrady12 +wwwwwww +electronics +tuesday1 +jessica22 +racer1 +bbbbb1 +solitario +mcgrady1 +hawkesbury93 +cuttie1 +sk8erboy +mommom +bicycle +choochoo +paola1 +misha1 +quentin1 +adonai +weaver +goodtime +angel77 +happy22 +bonito +espagne +shandy +yomomma +barca +terrys +����������� +198411 +shell +sanjuan +154322358 +g00gle +mickey13 +love!! +daisymay +art123 +1234567891234567 +dj1234 +251314 +H +cvthnm +unicorns +buffy123 +steffen +glamorous1 +miroslav +leicester +lydcc20091314 +october9 +elements +yfcnz +perico +second +titties1 +madison5 +munchie +weedman +paddy1 +bribri +aparna +sam1234 +moonstar +bunny12 +12345abcd +feather1 +k.,jdm +money07 +wolfman1 +alex07 +peyton18 +shadows1 +cristo1 +hf +painting +tichuots +pampam +december11 +jessica4 +caramba +55667788 +meagan1 +estela +original1 +waters1 +mirella +leralera +cooper12 +senior06 +aphrodite +ilovesam +198612 +bunny2 +saphire +yourmom123 +nolimit1 +minnesota1 +5551212 +X99QOmx561 +w8woord +NhA7EbF6kP +chevy350 +dude11 +negrito +april6 +pleasure1 +onetwo12 +abundance +lozinka +avalon08 +shelby12 +123123123q +loveme13 +black7 +dumdum +apple22 +zebulon +3sisters +forgotten1 +bhaby +lonewolf1 +deshawn1 +fernanda1 +steele +ilov3you +hello8 +hX28o9e646 +flower4 +sup +adam1234 +iamhappy +boosie1 +phyllis +assman1 +2short +rainman +123q123q +gemma1 +dayton +marietta +johnny12 +taekwondo1 +baller123 +kelly12 +keepout8 +manuel123 +fearless1 +joseph11 +jake01 +pro +jewel +852123 +annabell +itsme +canada123 +cfiekz +dozer1 +rabbits +27272727 +mivida +����+������� +uuuuuu +angelface +rampage +loveyou3 +ntktdbpjh +123456780 +lunaluna +1200nerds +vinnie1 +123456asdf +400072 +yellow13 +Q1w2e3r4 +willem +92Dk2cidP +marta7 +elizabet +slacker +mouette +kayden +u +callaway +roserose +my-space +green14 +alemania +shanice +hawaiian1 +austin3 +1q2w3e4r5t6 +monopoly1 +star01 +david23 +loretta1 +tulipe +zhang123 +jayden08 +damilare +achille +gearsofwar +adeyemi +onetime +david5 +fuzzy +amoreterno +160403 +winter09 +bebita +pedarsag +traffic +italy +ram1500 +badman1 +121001 +1chocolate +bitch15 +marilou +lenny1 +corbin +missie +powerpuff +Soccer01 +satanas +scooter123 +bad123 +lokita +klinger1 +record +headshot +johnny2 +nextel +chiqui +shadow23 +ashwini +yaroslav +michael14 +birdie123 +marishka +loco123 +198585 +tyler01 +ernie1 +dakota01 +senha +habbo123 +198989 +123456789qwerty +calico +smirnova +sphinx +lina90 +ownage +edxk20qMfS +jaycee +damon1 +salima +brent +cascade +temporary +tytyty +rajendra +oatmeal +ficken1 +bracken +schumi +fucker12 +desire1 +missy2 +holyshit1 +treefrog +robot +joy +fduecn +native +jan123 +159753852 +naruto101 +yahoo100 +ulises +itsme1 +tweety13 +newthree51 +123qq123 +adrian12 +jesus#1 +perry1 +Lzhan16889 +pink69 +triple +language +jayhawks +dashka +pfqxbr +tbone1 +lovemom +adolfo +swinger +moemoe +maricar +ilove? +total90 +deandre1 +december17 +maranatha +july +gadget +engineering +north1 +clemente +tkfkdgo7 +e93c50 +bebe12 +keepout1 +gandhi +pqntmt1247 +wdtnjr +Lauren +123654987 +real +hunter99 +zoosk1 +2010comer +dominick1 +sunshine8 +rowdy1 +0r968ji9ufj6 +leinad +perach +candy13 +canon +haylee +mag +678910 +1faith +invisible +evan +nobody1 +password32 +gardenia +kate123 +lighting +plus44 +monalisa1 +peaceout1 +lalitha +parole +tyler5 +ilovenick +transam1 +zaxscd +robotech +000786 +breakdance +wyoming +kristal +sword +27352735 +charlie! +montero +smile12 +ludivine +musician +sexy06 +@@@@@@ +nasty +fer +powerman +koko123 +kayla2 +panic1 +mirantte +yaallah +important +bankai +fourteen +gotohell1 +salvation1 +vitamin +raduga +123admin321A +guitarhero +greenday2 +mustang5 +dynamic +spider123 +amoureuse +shorty3 +chelle1234 +cubbies +luv4ever +rktjgfnhf +klaudia01 +woofer +yankees23 +playgirl1 +pictures1 +login123 +pocahontas +spikes +fuckthewor +lady12 +pedrito +Alexander1 +alone1 +cream +hallohallo +lukas1 +cutie5 +fuckyou09 +puppet +Arsenal +rudeboy +yomismo +rudy +kurama +tigres +carajo +enigma1 +inna +onetwo +spiderman7 +amy +frankfurt +girlsrule +rachelle1 +alfa147 +kakakaka +rai-131 +liza +juanito1 +K +cornell +reilly +w1991a +nanook +december2 +under18 +positive1 +catlover +1qaz@wsx +f4u*123 +tonya1 +onkelz +lfybkf +juventini +ollie +boogers1 +25 +sardegna +password06 +bigblue +moneys1 +stretch +kseniya +198787 +myhome +CHARLIE +rain +merida +iluvme2 +Anthony1 +cristh +ella +thomas10 +28282828 +sidekick +borboleta +samsun +shubham +chocolate5 +1andrew +satyam +chingy1 +peepee +joseph01 +4391634m +Pa$$w0rd +pass9876 +michel1 +trabalho +stealth1 +chevy2 +ahov +polska123 +vermont1 +kaiser1 +constantine +cristy +vbifyz +allen3 +schatz1 +ophelia +quicksilver +rockandroll +sailor1 +fuckyou10 +malice +solnishko +NARUTO +hillary1 +lilpimp1 +chinchilla +smokey01 +miracles +310 +win +buddy7 +thedog +blackstar +04022000 +tilly1 +jules +peppermint +nadege +isabel972 +12345678r +another +gentle +Danielle +3526535265 +armenia +wert1234 +boy +essence +waswas +football28 +devildog1 +lynn123 +spongebob7 +messenger1 +popopo1 +koala +zhd741220 +memphis10 +401107 +jjjjjjjjjj +deadmau5 +escalade +carl +porno1 +ncc74656 +rupert1 +shaun +oscar12 +werter +haribo +oldschool1 +september8 +lloyd +cowboys2 +wildwood +13587930210 +teddy2 +change1234 +jumper1 +galaxy1 +smile0_0 +library1 +ab12345 +paramedic +maritza +reborn +qwertqwert +katie2 +elizabeth9 +emo666 +doughboy +pass_2011 +l1nked1n +naresh +juanpablo +astrid29 +april8 +qazwsxedcrfvtgb +bball13 +poopmaster +korean +twenty1 +speedo +13571357 +lover23 +antivirus +bunghole +critter1 +helicopter +000006 +itachi1 +619rey +har +gfgfvfvf +esteban1 +110016 +damnit1 +12344321q +raiders2 +houdini +hbhc8290826 +only1me +nescafe +427468 +bahia1979 +forever7 +baseball08 +1234love +pingpong1 +LOVERS +grande +maria666 +asakapa +babybear1 +games123 +marquez +01011981 +mentos +qwerty8 +auriane +neverland +laddie +morgan11 +mynameis1 +1purple +junior88 +masters1 +solitude +cameron123 +antonio123 +mongol +nicole. +victor12 +rivera1 +ahmed1 +villa1 +jon +spartans1 +mewtwo +11110000 +198686 +liberta +557799 +hitachi +p@$$w0rd +minemine +17 +sweetie2 +beowulf +joel123 +spoiled +castillo1 +nicky123 +hal +198512 +flowers123 +fischer +atlantis1 +173928 +soccer69 +katya +paladin1 +143143143 +imyaimyaimya +mamma123 +jose1234 +jubilee +kool12 +benny123 +zwickau +heythere1 +whore +SUNSHINE +spears +12345zxc +alyssa2 +123456! +cuttie +sabine12 +arvind +twingo +zxc841219 +Dalejr88 +14629227 +29422277 +mustang65 +gaara1 +notorious +anthony10 +spionin8688 +edwards1 +929292 +aqswde +madison7 +123987456 +112020 +101089 +313313 +thizz2 +fowler +mmmmm1 +juggalo420 +gianna1 +high420 +andrews +31313131 +ghjuhfvvf +florian1 +pilipinas +carissa +ramona1 +larry123 +confirm +december18 +bball123 +chachi +llllllll +chris101 +december15 +Kirill1990 +germaine +0420 +jakejake +ww651118 +nicole17 +myspace24 +green21 +husker +201001 +12365478 +omshanti +elizabeth8 +bea +sammy01 +fucklife1 +gtavicecity +macdre1 +skinner +krazy1 +iloveyou<3 +byteme +0987 +gangster12 +24 +123456+ +prince2 +hollie1 +raspberry +lucky4 +jordan09 +jimmy2 +myspacepas +baba123 +barnes +heyyou1 +82214989 +bubbles13 +soccer77 +luckies +football95 +shaina +1234567898 +10241024 +trunks1 +browning +circus +sodapop +lhfrjy +chriss +password1! +synergy +salam +broadband1 +happy13 +fylhtq12 +madison4 +anthony9 +hotdog2 +asdf:lkj +marigold +blbyf +hellraiser +yogesh +112345 +will123 +shorty7 +hshshs +freestuff +babyboy3 +seminoles +money1234 +asdasd12 +mari123 +baseball19 +mobsters1 +louise123 +finley +prova +blake123 +latoya +baylee +d0r1nc0urt +gusgus +canard +kittie1 +wasdwasd +bubbles7 +buckley +jazzie +derick +mudvayne1 +cronaldo7 +mullet +silkroad +******** +davidic1 +1211109032 +baseball33 +harvick29 +striker1 +RTW150809 +22152182 +stoned +midnite +jessica69 +t36473647 +Sebastian +������������� +sincere1 +chadwick +prodigy1 +wildchild +venezia +bird33 +nibbles1 +killer6 +fuckyouall +92298899 +elisabeth1 +David +san123 +435453 +780813 +amrita +godgod +lonsdale +djkjlz +#1stunna +edberg +petey1 +ariadna +flame1 +pl +pennstate1 +ettore +hotmail.com +absolut +nikki6 +brandon4 +fucku69 +anthony14 +mamamia1 +1treehill +cedric1 +den221991 +198100 +orange5 +myrtle +production +fuckmehard +ram123 +beans1 +cool10 +pasadena +arabella +blaine +texas12 +fletch +honda125 +madison01 +handyman +kims89 +198711 +may123 +cheeky1 +carlos10 +nedved +november14 +andrew23 +mariusz +transit +1bigdaddy +kellie1 +53472235 +magda1 +victoria2 +pushpa +ilds4edad +lou +pixie +luis13 +cocotte +aquarius1 +todd +angela123 +teamo12 +washburn +jiefang007 +staredobre +mosquito +200888 +121286 +addicted +586016 +quality123 +H8LLP9F +flower5 +qpwoeiruty +hate +124124 +psp123 +kisses2 +xsw21qaz +sparkles1 +red456 +bitch10 +resing1965 +chevyz71 +khan +stevens +007700 +karakartal +jojojo1 +cupcakes1 +lala11 +ash +duckie1 +caramella +monster13 +153759 +platypus +05200520 +rebekah1 +november7 +boeing747 +Sandra +rhiannon1 +w123456789 +7410 +a4tech +vfcnth +eatme69 +012012 +football16 +lucian +1,00001E+14 +198412 +lananh +hellas +perfect10 +peggy1 +mohammed1 +23skidoo +golfing1 +money9 +rihanna1 +tetris +bayern94 +oooooooo +tl281188t +nautica +littleone +charisma +giogio +xige5516726 +kismet +520025 +gggggg1 +sundance1 +serrano +florida2 +pushkin +valkyrie +chiefs1 +jjjjjjj +tasha123 +vanille1 +uhfaabnb +hockey16 +madryt +9632147 +hikaru +ploppy10 +alucard1 +reveur +Welcome +110091 +1qwertyu +lakers123 +muhammad1 +greene +wrestle1 +darkman +Beethoven9 +hannah! +yayaya +pajero +charly1 +vanessa12 +jeep +toilet +roseann +20 +tinman +newcall +ducky +alivioo +vuc7neyu0 +185800 +player13 +police123 +Alexandra +123ert +diva +eugenio +niki +mbahurip +battery +jkljkl +uchiha +ovr220278 +Blackcat123 +sexy1 +turtles1 +madrid1 +564335 +magdalena1 +ANDREA +mm123456 +edoardo +degrassi1 +sales +summer5 +weasel1 +annabel +killer4 +pussy7 +serkan +april123 +19561956 +pimp1234 +dogshit +charlie13 +dimebag1 +7418529630 +zzzzz1 +darkknight +december16 +buzhidao +ADELINE +fordf350 +bitch1234 +paisley +flower3 +gwarmonster +bartman +hunter22 +yemi19900911 +leigh +belmont +alesha +80 +johncena54 +654789 +muffin123 +meteora +popstar1 +ilovedavid +mibebe +nuggets1 +brandon10 +skank1 +shadow! +ekmzyf +prototype +cat1234 +peanut3 +pink07 +piffish +colibri +raluca +gfs2z6wb +kookie +smokin1 +homies +qazxswedcvfr +nicole6 +spolana +juninho +halifax +kindness +gossipgirl +kapej111 +mmm +book +qICiqdP162 +phx602 +hellen +elizabeth0 +loveis1 +sunfire +buddie1 +tortoise +jasmine11 +athens +michelle! +buddah +melania +ryan1234 +shitshit +supervisor +leticia1 +The +tigger21 +alex16 +anthony8 +angel! +butter12 +morales1 +dtxyjcnm +bhbyrf +roro1024 +zaq1zaq1 +electron +2wsxzaq1 +citron +dragoste +lucille1 +monkey09 +kangaroo1 +tennis12 +31081981rs +reason +password66 +050965 +amanda69 +123456789qw +comedy +poepen19 +jkjkjk +ilovejohn +locura +PovlmLy727 +nigger! +159753258 +swampfire +123qweASD +dontknow1 +shorty11 +arslan +pppppp1 +foolish1 +bible1 +radeon +realtor +lovemykids +p5415420 +Jordan2345 +godisable +monkey33 +12345678z +valeriya +139381512 +anthony! +25393275 +volume1 +tyler3 +poser2 +happy1234 +1234567g +bball2 +behappy1 +jeremy12 +kassie +babymama1 +zander1 +roderick +dou +didine +weiwei +hambone +znt: +bon +monkey07 +jesuslives +groupd2013 +maggie3 +firestorm +firefire +uphill45 +68582988 +puppydog1 +69charger +frogs +11111111a +supa1906 +mamita1 +dede +monkey08 +eggplant +blunts +moreno1 +mustang01 +01011987 +bartek1 +mywife +fathead1 +lil123 +1abcdef +1q2q3q4q5q +choice +gummybear +anechka +jimmy12 +Minecraft +19571957 +mierda1 +Secret +dieguito +eli +vegas +cortez1 +xaxaxa +spyder1 +queenbee1 +paluso00 +whatever7 +shrimp +mjdsf11 +j4n4jel4 +shanice1 +rodrigues +18 +1amanda +123123321 +cumshot +Brodie10 +acapulco +1952 +trapdoor60 +kristel +nascar20 +snorre98 +7seven +maggie13 +olitec00 +Superman1 +248001 +sonoio +petram +ballon +mumdad +acts238 +linkedin11 +vascorossi +sharpie +bigpimpin +crazy101 +qwarty +jkiuztdftL57 +lovely! +paraiso +alex18 +justus +jenni +bob101 +connard +5children +swapna +wang123 +iloveyoux3 +trina1 +pokemon3 +thissucks1 +kitty6 +kiss12 +Xantria10315 +batman69 +aabb1122 +gangsta12 +idiot1 +kuana230345 +ophelie +starwarsfan10 +taylor! +fluffy12 +civic1 +lindinha +familiyafamiliya +patience1 +lexus +viper123 +bluejay +pommes123 +5a8b9c2d +maxpayne +cksdnd12 +aksrms8010 +fiona1 +111888 +awei1616 +buffett +teddybear2 +pumpkin2 +policeman +futyn007 +gigabyte +lilili +bhjxrf +infamous1 +fruity +candygirl +uchenna +sable1 +bouboule +star101 +shayshay +rambo123 +niggers +lebronjame +frosch +alesana +0987654321q +gutschein +attack +blkdrag0ns +1598741 +supernova1 +finger1 +dragon9 +13245768 +justin08 +marilyn59 +blablabla1 +lightning2 +astig +topbull +astros1 +dakota123 +wrasloco11 +skaterdude +catdog2 +blah12 +luc +poilut +aa224466 +500016 +randyorton +singing1 +myspace00 +placebo1 +ulisse +jewels1 +lilica +brandon! +killer21 +ornella +Usa12345 +jadakiss +fubar09 +nacho1 +angels12 +foofoo +myblocker +JESUS +19941028 +mustafa1 +pissoff1 +jessica8 +Rhinos111 +0147896325 +almighty1 +kokokoko +clapton +4826159 +26665806 +sverige +kar +Teonamaria1 +fuckthat1 +candies +advance +volcano +Asdf1234 +sn00py +mal +salem +124356 +marmotte +haloreach +hockey5 +juancho +water2 +courage9 +ronaldo17 +good4u +jiang8kevin +allmine1 +shaheen +destin +kokomo +ficken76 +avenged +jewish +bonanza +chocolate9 +dakota2 +dangerous12 +Isabella +1272446 +loyola +seigneur +tiger10 +tiger22 +nineteen +jasmine4 +nerone +mercurio +mark1234 +bluerose +mis +Looby123 +ice +sexychick1 +railroad +november25 +wildthing +anetka11 +recovery1 +rancid1 +chambers +fritz +ZbychLas +allrecipes +punjab +axelle +cds04121989 +masterkey +1324 +princes1 +fucku12 +ray +fx-one +latifa +12345678k +pipeline +motorhead +happyhappy +iCXkyB7972 +1daniel +yfhenj +londres +vitor1268123 +369369369 +rosales +september7 +asdasdasd1 +mamapapa1 +monkey17 +123456789qaz +sithlord +monica12 +1jasmine +skater11 +lena123 +1023 +araceli +wendell +kurwamac +healthy +povray14 +nfvfhf +don123 +glasses +1Q2W3E4R +bloodz1 +lloyd1 +password123456 +music11 +vicecity +painkiller +159357r +aviation +849vak17 +kurdistan +peppers +ringo +lillie1 +q1w2e3r4t5y6u7i8o9p0 +mysecret +rockers +smokie1 +cutie01 +texas100 +www111 +saitou +4567 +killemall +altair +11121314 +focus +mutant +tony1234 +action1 +berry +mamikawada +aa261599 +bucky1 +jul +stitch1 +epsilon +alchemist +christmas2 +bigbear1 +killer10 +jessica15 +Diamond +element123 +weronika1992 +a5201314 +2211 +tintin1 +62543234 +rodeo1 +sweetangel +ghosts +honda450 +antonio2 +scarface2 +icegirl +upperd7 +clovis +oreo12 +nena123 +128128 +thomson +@bigmir.net +jdd04257 +anfisa +maiden666 +catholic +j5644574 +doggystyle +trueblue +camilla1 +freiheit +Twinkle15 +leopoldo +jetsmets +serdar +hornets +tenshin +chilly +19581958 +ashraf +b2spirit +emirates +jordon +valeri +1002 +konfetka +zaq1 +ehdgnl12 +ABCD1234 +sipfhair +cheguevara +baller5 +doodlebug1 +aquila +nathan11 +Football1 +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +M01759766727 +sandie +1867sb +summer00 +barakuda +neo123 +19451945 +baby2009 +vergeten +juju1987 +584521 +ernest1 +class +campos +april9 +Neworleans12345 +marygrace +po918dg +tyrael04 +liam +kjifhf +william2631 +calgary +december31 +learning +clifton +400050 +pass1478 +jordan9 +norton1 +me1212 +superwoman +singh +rogelio +Leika86 +keystone1 +luna123 +1905 +kara2711 +sonics +Aug!272010 +noelle1 +062593 +jessi1 +green6 +choclate +green15 +2fresh +october30 +kissing +avalon1 +brenden +gogirl +homerun1 +vampiro +blabla123 +frontier +rosalia +corbin1 +katana1 +sexy4life +frisco415 +purdue +letmeinnow +party123 +wasted +naruto7 +1234567h +u83xu3u83 +kirkland +sushma +crack +vfkbyf +master69 +danielito +eli123 +101080 +candy5 +alain +honeybun1 +passward +spitsy16 +Yggdrasil4 +pallino +n123456789 +dianna +stupid! +ss563563ss +carpet1 +voldemort +bamidele +lynette1 +angels123 +mazda1 +macdaddy1 +letizia +robert7 +attitude1 +poiu07 +iminlove +dinero +charly2004 +hannah5 +Computer +dilbert1 +94246843 +shelby123 +ferret1 +crystal12 +superhero +jackmore1 +ohshit +susie +fathead +32342711 +james10 +toonarmy +wiktoria +stargazer +infinito +floyd1 +shriram +rockey +single2 +superman8 +coco11 +aliceadsl +Madison +irving +kalyani +maryjoy +nomeacuerdo +52hoova +happy01 +idefix +gfynthf +sabrina123 +perro +cxfcnkbdfz +seminoles1 +cannibal +mnbvcxz123 +renuka +richardson +wealth +45678 +ashley6 +nation +qq1234 +myspace77 +pink09 +tigers2 +sandra12 +piepie +222444 +Komputer12 +1Olmetec1 +145145 +soccer88 +yfcn.if +ROBERT +fb1907 +c6h12o6 +leningrad +musik +lalita +u8t6e4 +heavenly1 +Mamika10 +david21 +deadly +satsuki +impact +fire12 +alleycat +yolo +ashley09 +football19 +poland1 +pollux +mousse +cookie4 +523456 +Kevnwo128 +trackstar1 +ytreza +spongebob0 +crybaby1 +pauko97 +kaleb1 +abayomi +teenaa111 +staples1 +pessac +gogators +akademiks11 +denis123 +fourkids +cabbage1 +shadow14 +battle1 +ewelina +youandme1 +carpenter1 +fairy +Seahorse1 +pie +natiichen999 +maiden1 +lover22 +dallas2 +vaughn +21052003 +jessica23 +fhctybq +tanzania +1cutie +goblue1 +james1234 +roger123 +125678 +27254931 +1loves +pass11 +ABCDEF +goodtimes1 +pepsi2 +halo219 +courtney12 +llama +dallas01 +swetha +marmalade +l1verpool +hockey21 +ldgend +iforget +moon123 +django +budman +newstart1 +concrete1 +cleo +ganja420 +andrea2 +charlie10 +threekids +david22 +hamburg15 +basketbal9 +werewolf1 +qq18ww899 +complete +hermione1 +ilovejoe1 +london01 +5656 +maximiliano +lost +hunter07 +nokia5310 +326598 +Tarzan00 +alfa156 +truth1 +pentagon +85218812 +killer9 +killjoy +iPad +chocolate8 +Nwolf72 +orient +buster13 +vicky123 +meow123 +pioupiou +h4t3cr3w +dfktynby +lauren11 +incredible +velvet1 +Smb0512bz +luckyboy +tricky1 +steflio3123 +hello69 +198311 +001579238 +bharathi +michelle01 +94327579 +bettina23 +hunter4 +bucuresti +zerozero +cordell123 +411001 +29694419 +minimal +110034 +Stani06 +werock1 +monarch +courage1 +hannover96 +Heather +batman22 +bond +thibault +andre1986 +matthew4 +sentinel +nummero1 +black11 +summer2008 +fleurs +love30 +123456789101112 +yvonne90 +jarox1301! +seinfeld +love87 +kittykitty +sexybitch2 +farley +jordan99 +vfhnsirf +ashwin +john13 +cloclo +43922572 +mlb229 +money8 +notebook1 +bin +alvin1 +cacca +sex666 +shurik +santhosh +football27 +franca +heather12 +bl8LYGB0 +alex2000 +homeboy1 +ayodeji +qazplm +starwars111 +ziggy123 +semangat +dizzy1 +breaker +kambal +Biscuit22 +slipknot9 +together1 +ibanezjs +rainbow3 +banaan +green17 +haha1234 +hydrogen +Kinomoto89 +pt120439 +fragolina +evgeniya +passw0rd1 +123321aa +mahendra +ludi1234 +video +Maburro +Mercedes +yomisma +ebony +skeleton +LARA1308 +lokoloko +1zn6FpN01n +missy12 +ch0c0late +tigger! +121282 +cowboys12 +soccer05 +Boobies2 +abhinav +felix1952 +medical1 +ilove12 +Pa +110059 +whistler +maciek06 +jarrod +pokemon7 +markus1 +godlike +stumpy +gs1905 +superman4 +pakistan12 +nikolas1 +candy3 +farmacia +123321qwe +Charlotte +mikemike1 +0range +hehehe1 +madona +boomerang +Princess1 +succes +someday +kartoffelpuffer +ijrjkflrf +nickiminaj +passcode +ashley08 +Barcelona +52253823 +m12345678 +spider-man +27412678 +sabbath1 +1nigger +agustus +matt1234 +raiders12 +mayquinn2 +1987123 +55665566 +wiseman +loco +sweet18 +q1q2q3q4q5 +david10 +devil123 +wwe619 +shalom1 +april3 +iloveyouso +198712 +gonzo1 +pugsley +dario +abc@123 +alejandro2 +zack123 +milan1 +agnes +redhorse +cherry13 +garbage1 +520LOVE101182 +halo22 +mojojojo +515253 +doodles1 +chelsea7 +loyalty +smoker1 +1asdfg +illini +starry +linked123 +matyas2001 +leopard1 +barley +melrose +elise +stupid12 +spice1 +buttface1 +qaqaqa +1233 +hannahmontana +nothings123 +j0rdan +yumyum1 +12346 +love456 +pa$$w0rd +montreal1 +34343434 +tuputamadre +135792 +10200718 +ciccia +96101z +yasemin +jesusis +huskies1 +montagne +boxers +malvina +bowwow2 +LEOlong1985 +vodka +kelley1 +mental +braves10 +cutie10 +chris! +888777- +march5 +cannelle +qwertzu +love1314 +jesus1234 +21152117 +Sandberg5 +ska02ska +d41d8cd +march6 +44332211 +malishka +6817zd57 +listen +ffffffffff +twiztid1 +Lightpower12345 +nikita123 +bmw320 +300300 +misfit +000000000000 +chantel +somerset +1234567890123 +dell500 +duster +rfhfgep +SUPERMAN +bella01 +jaiden1 +kissmyass2 +mandingo +lolly +nanou4552 +jammin +raprap +lenalena +blackpool +majesty +mommy7 +aladdin +vbienrf +hans4Queck +vaibhav +L5L5L5 +qq123123 +henderson1 +saigon +openup1 +smirnov +hillside +gangbang +vale46 +caca12 +sunshine21 +tuangbi +123456az +girlygirl1 +Zaq12wsx +kakashi21 +link +newjersey1 +maella1311 +2w3e4r +101086 +bertha1 +thebeast +102030a +197900 +1grandma +football56 +31337a +fysihz5g +messiah1 +hello01 +Fenchel55 +thissucks +gaudens +saddam +l3tm31n +nashville +qazedc +KILLER +barbiegirl +1204 +junkmail +berger +custom +surethang +boroda +jcdenis1 +pennywise +ilovelife +madmad +morango +123666 +bunker +98989898 +evelin +098poi +robotics +brody1 +hockey3 +123234 +grayson1 +jewish1 +moose123 +watever +Beast556 +riddick +dar +1america +creeper +finland +qwerty123456789 +a6543210 +paopao +orange! +mckenna1 +CrowBird +gaylord +312312 +mu080295 +coyote1 +1234qq +techno13 +honeybunny +laska +nikki2 +shorty14 +nandini +yfnfirf +1freedom +hollister3 +622906268 +sad123 +pinguin +1234asd +Legend22 +hampton1 +nicholas12 +220389 +emoboy +qq123456789 +2sisters +booboo11 +rose1234 +horror +ghbdtnrfrltkf +123456mm +cocococo +crackers1 +twelve +thecat +fktyeirf +110025 +1214 +manu123 +sedona +cars +231 +karo13 +rotten +jesse12 +123edc +1314 +pilgrim +ohyeah1 +britt12 +thriller +alana1 +treguier +sim +addl0223 +madden09 +sangeetha +mkal2707 +br00klyn +ilo +brown13 +shayna +monday123 +smokey13 +angelseye22 +farfallina +chitown1 +ilove3 +chief +cookies! +cole +buddydog +lotus1 +Stefangreil1983 +jackjack1 +naruto5 +makenzie +0909 +limited +791159392 +monkeys2 +hannahmont +jet +hfleuf +121285 +lebron1 +priscila +Redab1993 +letitbe +pelota +danny2 +myfather +virtue1234 +southside2 +bri123 +wheeler +julieann +aninha +zooyork1 +adrienne1 +serafina14 +4mykids +111680 +leonor +bou +brandnew1 +naruto9 +fuckit! +ladiesman1 +me12345 +heart123 +wishbone1 +redbone +dark123 +2kroliczek +total12scherz +Baseball +1234567p +single123 +201 +nene +bright1 +abcdefghi1 +poiu0987 +cutie14 +jmoney1 +slash1 +lover14 +sample +hockey8 +stunner +cummins +ogplanet +tulipan +dracula1 +freeway1 +adams33486 +lakewood +chocolate4 +o12345 +12345678987654321 +bitch666 +010180 +marsik +crybaby +sweet17 +gabriel2 +FUCKYOU +111111111111111 +whoknows +kkkkkkkkkk +contra +sss111 +SPEz3012 +julie2811 +ch +lucinda +vijay +smokey420 +cutiepie2 +daniel18 +max12345 +mormor +chicken11 +f1uUHZa723 +eve +moi +razjel1 +november8 +tinkerbell1 +cierra +a54321 +tapout +rose24731 +mildred1 +qwert54321 +pendejo1 +150556 +trainer +softball21 +studio54 +jasper01 +lisamarie +shortie +damion +getsome1 +kimmie1 +Mickey +goldberg1 +reloaded +eva +wpcAKir264 +r1234567 +wert123 +eatpussy +emilio1 +myspace88 +132680 +par +armstrong1 +cervantes +anthony08 +rooney8 +buddy5 +whitetiger +power12 +mickey3 +54321q +vader +joshua21 +4224035 +andreita +viola +mario140773 +accounts +asswipe +sunshine9 +manolito +64impala +badgers +alex17 +umbrella1 +mob123 +oojs4ykl +ruler1991 +paquito +dav +ramon +treflip +november24 +BBLeo1zz +tendulkar +marilena +william5 +angel27 +oldnavy +green8 +legendary +rhodan01 +Nathan +voltaire +fuckyou88 +guardian1 +weyersheim +honey215 +carebears +cool22 +ripcurl +linusd8 +vanessa2 +rainbows1 +depechemode +bandit2 +gidget1 +purple16 +dabears1 +01011988 +marko +axlrose +armorgames +superman01 +dkz1999 +lucie +sodapop1 +santamaria +father123 +m1chelle +pg260365 +mexicano1 +sexymama12 +bumper +121284 +sacha1234 +winter01 +mgreen39 +moderncombat +q1a2z3 +baller13 +stella123 +hola1234 +nazareth +christina2 +19810301 +november27 +ZZ8807zpl +theband1 +123459876 +nimbus +mendez +dance12 +december28 +rockon! +dora123 +tuxedo +nice123 +pizzahut1 +lucky10 +billiejoe1 +getlost +Polenka1 +magazine +bootsie1 +beast123 +la +gruby12 +taiwan +jesus143 +babababa +duncan21 +olivia2 +ace +southwest1 +pomalo123 +rocky3 +863560 +theshit1 +Somanypickles27 +forever3 +ahbird1984 +norma1 +01470147 +services +MICHELLE +mil +moonmoon +chr +jujuju +latoya1 +dd123456 +191191 +vanhalen1 +leliane50934 +lmapacey +gggggggggg +smith123 +peggy +shorty69 +august2 +papatoma1 +forsaken +fudge +wayne123 +sammy7 +159487 +rabat1945 +333221 +optimus1 +Rachel +imelda +aczx7812 +sadsad +chanelbag +puttana +hester23 +blunt420 +johnny1959 +rashad +masina +herbalife +jessica. +daniel16 +pussy5 +yancai +12345A +lovers69 +andrew5 +678678 +awesome2 +sexe +123456ok +Madonna12 +hattie +saint +257ers +hello101 +oasis +damaris +desadesa +libby +bored1 +drifter +fuckme12 +onlyyou +sanders1 +blix729 +1234five +2password +nickie +monstercha +a1169619 +badboys2 +pascual +kitty101 +itisme +brooke123 +gab +bambolina +nottingham +softball23 +cubbies1 +marian1 +nancy123 +onlyone +4rfv5tgb +Pokemon +lacey +edmond +puppies2 +purple9 +1tigger +purple15 +cowboyup +maxima1 +rangerover +3232547 +wrestler1 +castle1 +momo12 +przyjaciolki +beavis1 +morton +yellow! +123678 +viagra +moonshine1 +123zzz +zombies +stripes +SDream +christian7 +lenka +wigolf +hawkeyes +21864812 +satnam +Tanja1993 +butterball +mexico01 +cooper123 +erotic +music5 +rosaria +fuckyou01 +iloveyou88 +bergkamp +50505050 +ahmad +ligabue +pookie12 +mpeater +wsxedc +sevgilim +jomacapa +crash +lolo12 +lilwayne2 +edmonton +hollie99 +advent +youporn +eastern +benfica1 +jesus23 +E2yFp41B +b00bies +8008070 +tkfkdgo1 +lacoste1 +Zesh1412 +makulit +jasmine01 +ignoranto +henni1907 +hooper +music13 +dragon8 +1007 +monster7 +zac123 +crunch +escola +soulja1 +good12 +han +dark666 +faca210898 +northern +dogshit1 +grateful1 +december14 +goodmorning +lovebug2 +bff4ever +chris19 +flyers1 +yaoiisgrand +fineboy +221133 +rosco1 +haha11 +1ofakind +Roanne42300 +murali +nokia3250 +allsop +candy101 +fantasma +01012009 +qw12qw12 +graffiti1 +rs11220 +pokemon9 +sokolova +clown1 +776158ab +one234 +phoenix888 +102 +jyothi +123456789as +sk8ers +lilmama2 +mexico7 +kerry1 +rover +alex24 +1234567n +marie7 +oliver01 +maldives +bubbas +baller11 +1205 +xlsl9963 +icetea +islamabad +aaaa11 +c1234567 +laurel12creek +1E+14 +kingfish +kfcnjxrf +bball14 +91866709 +2w3e4r5t +chutrung +malcom +tadpole +cavs23 +560001 +Mase4ever +yoyoyoyo +deirjj +edmund +mom1234 +qwertyu8 +romy01 +1106782 +seanpaul +escobar +coco1234 +fucked1 +bangaram +kassandra1 +andrusic1 +yandi20080527 +manuel12 +Ezekiel11991 +marek14michal +fuchurli +lovehurts2 +721521 +jimmie48 +raffaella +LIVERPOOL +monterrey +haggis +unforgiven +Lancia037 +golfinho +davidoff +yanks1 +484066 +barker +jordan06 +fidelity +boomer12 +Gambion32 +0icOtpd785 +hateme1 +guillermo1 +trivium1 +treu14 +042945d +rakaii +scanner +qwerty4 +Puma123 +landmark +dogg +ronaldo07 +november3 +arsenal12 +cosmopolitan +muffin2 +ice123 +ossi2000 +qyahzn +gigaman8891 +author +1shorty +hermann +alyson +101087 +yt +assface1 +cxy831126 +rocks +fabregas4 +bibi +lucky6 +bre123 +mufasa +117117 +keegan1 +mercy +ibicguwjic +comcast +heartbroke +sparky12 +Mustang +carnage +apple11 +greatone +becker +monkey18 +trandafir +blackout1 +birdhouse +fossil1 +winter123 +delphi +saxophone1 +jes +121292 +floyd +101085 +87calis +metal123 +lucky77 +123ABC +sestra +blue88 +qwe456 +josh13 +Power999 +carrots +xbonesx +working1 +holler1 +Boguska123 +tmvlzj12 +156156 +skillet +illuminati +w12101957 +snoopy13 +rover1 +black22 +lightbulb +milk +gazelle +1208 +emmanuelle +maddox +74699723 +super7 +jenjen1 +chandan +bball5 +jasmina +cal +cream1 +2933455 +michael18 +aguilas +wrigley +komodo +sig53num +shorty01 +baby05 +wubin007 +ballin3 +brebre +Grine89 +popper +teetee1 +iloveu13 +8008beb +ruqueb +marvel5454 +covenant +00 +yamato +cierra1 +aaaaa5 +hotlips +kris10 +camden1 +butterflies +madara +Thebears12 +doug +aimee +eragon1 +sammy13 +555000 +181920 +wan123 +black23 +20070509031 +asdfghjkl12 +789321 +james4 +1bigdog +bobcats1 +testtest1 +67529353 +46265216 +solo7590 +2pacshakur +bukola +forever4 +papabear +iloveu22 +marie23 +panorama +samsun55 +brother2 +assh0le +soulmate1 +pink08 +kylie +robert22 +lydia1 +crysis +prisca +peepee1 +italie +colgate +waldiw82 +salmankhan +skateordie +batman5 +robinho +icthus01 +123333 +michael08 +malik123 +malaysia1 +chelsea8 +tigger5 +chitarra +jm0753 +almario927 +thinking +dogs12 +jjjjj1 +rosa123 +kakaroto +eighteen +1102 +heterosexual +hardwork +meowmix +jamal +maganda1 +kira +smashing +mateus +poster +lapinou +awesome12 +wolf123 +monster5 +gisele +weekend +Phoenix +giggle +makeup1 +mariama +sheshe +capecod +spiker +lucinka +alpacino +neopets1 +breathe +Madison1 +tracker1 +waterman +thieric +arabella24630 +jigsaw +tigger23 +patron +chasity1 +guesswho +softball15 +justin18 +dominion +jojojojo +killer1234 +anjana +Royals22 +junior3 +2727 +seatleon +2416101113 +calderon +concepcion +chinook +xred4654 +micah1 +rdukv46x +soukayna +hummer2 +lovejoy +bela2404 +edwardcullen +money4940 +aimee1 +alex99 +jr1234 +alterego +siempre +heinrich +america7 +anatoliy +khan123 +Jose1995 +bingbing +power2 +chivas2 +120n2X +diego10 +cat15175 +winter07 +z1234567 +march7 +overkill +eightball +1zzzzz +soulfly +killa12 +michael15 +3d8cubaj2e +metro1 +ania1986 +chanelle +x12345 +098890 +mostafa +weed13 +lasalle +dipset5 +pluto1 +sandoval +red321 +jolinek33 +Meatball99 +01011986 +110110110 +smokey11 +vfvfvfvf +ada +600041 +my5kids +000009 +philly215 +quake3 +slut123 +pokemon5 +hockey4 +monyet +lilli2006 +myspace16 +fishing2 +focus1 +superboy +pilot1 +myspace17 +seneca +1banana +tronwell +weenie +krystyna56 +newton1 +sinned +20072008 +whoareyou +23628221 +geniusv +raleigh +rksk3210 +71191926 +pri +festival +minister +simson +pranav +myboo1 +petting +yomamma1 +daredevil1 +sebastian106 +peace! +gautam +Monkey +marie14 +slunicko +nitro1 +baby25 +angela12 +badoobadoo +b00b00 +cookie23 +jackie2 +oliver2 +jayden07 +cameron12 +royal +gobucks +panda12 +aja152 +trader +lionheart1 +buceta +dabomb +theodore1 +fifa2010 +he635789 +224488 +mm170667 +igetmoney1 +bears54 +freedom! +rayman +elite1 +lestat1 +shaney14 +marica +snake123 +85726648 +easyas123 +fallen_angel +colour +racerx +puto81 +jackpot1 +Knackwurst8853 +mommom1 +852456i +400059 +pingvin +carnaval +110058 +pimp15 +asdewq +s12345678 +turtle12 +111444 +miki +3141592654 +irock +5234055 +volkova +dbrecz +nicole8 +betty123 +teetee +baby02 +veri1234 +lizbeth +pop168168 +dalbas73 +наташа +pinky2 +2246926 +frisco1 +hoffman +121287 +hello14 +money14 +parolamea +baritone +gennaro +0p9o8i7u +tommy12 +giulietta +1124 +james69 +EthanRyan01 +kjiflm +jimena +paul12 +Mikael412 +198484 +supreme1 +arianne +godiM001 +pussies +tony13 +andrew! +lucky69 +istanbul34 +rockford +march9 +P1466186 +fullmetal1 +yoyo12 +independen +lovely3 +1215 +ghjnjnbg +chemical1 +babygurl14 +thedude +4me2know +croskey +sindhu +atletico +kitten123 +carito +lilsexy1 +salerno +bitches! +imsexy1 +Caroline. +taylor14 +heather123 +accountant +1badboy +shania1 +carmelo1 +gdcc9921 +marshal +juan13 +bratz123 +michaeljackson +221 +wil +licorice +create1 +megafon +cradle +renee123 +adv23 +sammi1 +1111111q +444 +mayank +clarinet1 +sol +FieSta01 +abcabc123 +tomek +odette +kaboom +clochette +mammina +grandad1 +milly1 +ziom82 +gabbie +babygirl06 +ohcaptain +electronic +pinkpanther +friends5 +feathers +incognito +tkgsoo083bsr +volimte +lehjxrf +angola +heeren981a +nougat +Ezekiel11989 +hallie +perry +Vanessa141175 +shawty +d6ug7epz +noel +astroboy +teapot +253314 +alisher +nebraska1 +proverbs +grinch +kinky1 +marsel +mytime +kaden10 +cats12 +channel +4567890 +destinee +killer45 +shashank +spiderman4 +layla +Freedom +sabine21 +daniel07 +lovemom1 +lilou +lilmama12 +Cr1st1an +terrence1 +maribel1 +sampdoria +47593893 +skittles12 +ggg +ravens52 +kenya1 +proverbs31 +cars98 +bill123 +pakistan786 +kipper1 +bobcats +leeds1 +poiuytreza +dolphin7 +ilcerchio +mygirls3 +889900 +timfranzke +beans +metallica6 +freedom12 +01011984 +zippy1 +nataliya +wonderwoman +119911 +password? +jessica9 +15731573 +crescent +black21 +211 +qwertzui +justin69 +198410 +computer11 +mustang123 +deeznutz +pablo123 +tagesgruppe2010 +hockey15 +?? +speranza +MD1998PB +cronos +ashley4 +mamina +kingjames +robert69 +jemima +gbgbcmrf +hans +nickelback +ytrewq1 +schokolade +marie22 +manjula +nglw9840 +chris06 +morelle45 +gilmore +wilma +charline +uae_boy +jp72l05w +baller10 +karaoke1 +pimpjuice1 +1947 +neeraj +renate +freemusic +jibopogie +redemption +november30 +columbia1 +taylor4 +robby1 +palomino +lucky07 +anthony07 +christo +camron1 +lana +fialka +fatboy2 +alexis10 +tweety3 +pimping +redsox12 +grazia +memorex1 +chester2 +hanson1 +monange +josemanuel +nene123 +shell1 +12312345 +12345678c +1209 +rapture +starship +yorkie +holycow +hermosa1 +Jasper +summer21 +zaq1xsw2cde3 +enocnayr +football45 +texas2 +futbol1 +zk.: +51615801 +kaifer124 +blackhawk1 +raiden +acdc123 +020304 +estrada +yasmine1 +redskins21 +vitor1 +1948 +abc123123 +silverkey3 +8520 +clark1 +miguel12 +tiffany123 +namaste78 +maddie123 +j12345678 +slimjim +hiphop123 +dewayne +ledzeppelin +kolodiy +oscar2 +mia305 +dresden +hateme +wiccan +blueangel +tanisha +elmira +socorro +precious2 +airsoft1 +flower7 +miniclip +jonas3 +hernan +joseph3 +marvel1 +tater1 +sweethome +oliver11 +qwerty66 +dimasik +35365123 +jonny5 +blueboy1 +live4him +12345678b +527728 +baby19 +06LB18 +abercrombie +danika +defender101 +shannon2 +kasandra +love2006 +foundation +newvision +jack13 +108108 +299kgj8hgf +111111aa +neneng +asia +pink18 +splendid +hateyou1 +mexico3 +password34 +cayman +nessie +dale +prison +tania1 +haley123 +mjdh065 +welcome6 +webber +cutlass +bigboi +toaster +cg9600 +crazyman +22021988 +jadebibou +cheer08 +weewee +bob12345 +lahmy1 +baseball. +lumiere +justin07 +fluffy2 +toulouse31 +893208 +goliath1 +123456ss +faith7 +salsa1 +gerrard1 +airtel +Nastya +zebra123 +qwertyu123 +what123 +trapdoor39 +madafaka +marykay +lllll +beeline +horny69 +abiola +john23 +maik1996 +ananya +barton +amina +perkele +cabrera +1236547 +utjhubq +maryanne +794613852 +tanaka +godson1 +kitten2 +rockman +979575 +mesedka +c0mputer +greg123 +domdom +jackson12 +zxcvbnm0 +197979 +nasser +lucky22 +papers +imissyou1 +woshishei319 +lahoumti +wow +lilred1 +dominator +olympus +allyson1 +Aysa2423 +qwe123qwe123 +hondacbr +kxdw0980 +nashi1996 +master13 +dylan12 +1420839army +matt11 +110006 +federer +jolene +doctorwho +Alex +fenohasina39 +kaulitz +love2000 +samir +12356 +maxix565656 +44f16f17f +iforgot2 +QQQQQQO +c00kies +buddy13 +ks120473 +rhino1 +sophie2 +anton123 +mclarenf1 +123443 +patch +chidori +november26 +motorbike +asassin1997 +guruji +taylor22 +facundo +1701 +sunshine23 +billiejoe +hippo +astray +kehinde +gal +nmt89109328673 +flash123 +nuclear +velocity +asd321 +80173Rroom5 +midori +Julian1705 +16246149 +savings +poot62 +soso +pangga +marques +560066 +sonysony +halo1234 +oluwafemi +fraise +wrestler +casandra +fireworks +bulldog2 +babi123 +junior5 +elizabeth5 +tayuya44 +julio123 +george11 +qwerty67 +pussy4me +ee19920528 +gremio +132040 +123456789000 +qamilek1 +chantel1 +renard +leloto +kiwi +xup6xup6 +lover! +89173371487v +qawsed123 +lh6209lh +987987987 +d1e234tp +oooo +112233qq +forgetmenot +Vanessa +albatross +774517397 +15727666 +1234567890qwe +borec123654 +26r10d +magma9824660 +pussy3 +toutoune +sinister +315315 +b4272327 +inibif47 +morenita +klopik +dardevilk +dimas34rus +brinchen23 +tracer +8-9899578642 +chowder +nemo +tristen +212212 +9508402243id +89058895869cth +brown123 +fgjrfkbgcbc34 +kretsaha53 +cristal1 +rachel2 +hejhej123 +1loser +holuha00 +manchesterunited +123456* +mummy123 +vladcherktecktonik +eileen1 +101092 +lenny +jumanji +duke12 +huangfeisuny +brady +3tktkthth +silverfox +312881040 +james14 +lightbulb1 +emmitt22 +esidez57 +brenna +44442013vkkv +chimera +198312 +montoya +november9 +mymusic1 +bo1997 +littlegirl +qazwsx11 +1357reti99 +521125 +paula04 +dallas11 +bublik +lover7 +destiny5 +searching +camel232 +padilla +adsl120 +family11 +bullet695 +13301827475 +josh11 +G +looney1 +olufiz14 +brandy12 +25nuvaha +11231123 +soccer1234 +toni +Summer +ramzes +1590736tany +rejoice +dental +harley13 +sarika +nj2mp73t +snoopy01 +80fefune +baraka +narendra +9121318barssuki +butter2 +taco123 +sonya +funtik +andrade +119872653 +ashutosh +k25061405u +juliadronina1996 +disco1 +qw10081973 +andrey1412ua +110096 +maine1 +usarmy1 +578322 +iloveu143 +marcus123 +3106934abc +william11 +05081980bija +19541954 +mortgage +blackburn +lucky01 +metallic +alexis3 +ethiopia +gualapmi +011151zangetsu +d04081999 +latrice1 +fragile +yfnfitymrf +reflex +payback1 +hacked +junior08 +lanlan1234 +51200000 +j: +ccopacell1 +pookie123 +jandre007 +laurie1 +islam +mustang12 +newyork12 +amnesia +cam123 +josh1234 +ktvt6tn9 +jeremy123 +moldova +cisco1 +cow123 +buzzard +ltybcrj1992 +dougie1 +loveme01 +class06 +esprit +m8a8vHr6 +beardog1 +080365 +hoodnigga1 +1urkilbth674 +casanova1 +nicknick +november6 +maggiemay +814336633 +dank420 +cameron3 +starter +asshole5 +pimp09 +bella13 +coke123 +madalena +1488 +mosima11 +honda2 +chemistry1 +lukas123 +min +mother01 +rastaman1 +kirik26trimyasov +ellie123 +ranjan +12three +gummybear1 +bullet83 +treehouse +sasin414 +asemmanis +alex08 +theboys +punky1 +japanese92 +settembre +mcr123 +dedamiwa +angel26 +iopjkl12 +qawsed1 +spanner +bristol1 +belinea85 +sexygirl2 +klg604 +usuck1 +blackbird1 +aspen1 +love31 +justin17 +ingo10477 +britt123 +soccer00 +junior8 +jessica16 +jesus4life +diplomat +juicy +freedom3 +fanculo +e123456789 +antonino +p123456789 +nevergiveup +tiptop +c3por2d2 +fuck22 +aquamarine +pasha +kimberly12 +Whiskers1 +jeannette +zy19791201 +190190 +dusty123 +anushka +spongebob5 +gaby123 +Austin +cyber +maks +andg1705 +q2345678 +xzibit +arsenal11 +comics +1pepper +honeybee1 +126126 +toriamos +mayra1 +kapusta +rolandia42 +fabolous +goodlove +newlife09 +disaster +jonasbroth +scraty98 +enjoy +matthew13 +shotokan +immanuel +asdfghjkl0 +royals +sassygirl +vangogh +dadounet +911turbo +semarang +lucky9 +poulet +mocha +vaemai31 +bella11 +jarhead1 +dianita +1abcde +potatoes +u79999i +alexander7 +hello21 +zxc123zxc +bijoux +susie1 +peekaboo1 +ju2002 +totototo +goaway1 +northside +211211 +moneyman87 +bimmer +queenb1 +clarissa1 +agnieszka1 +rhfcfdxbr +princess06 +comet1 +marcus12 +giuliano +patterson1 +1234567890987654321 +jayden2 +cristobal +snickers2 +scouts +ooooo +conpro73 +sakina +bitch16 +spider12 +pregmar2 +happy! +candy7 +inflames +hannah4 +123456789zxc +john2567 +database +nicoletta +sdsdsd +723723723 +maika2006 +iloveu5 +arkansas1 +26 +jesus4ever +login1 +aquino +fuckyou14 +hopkins +reptile +neptune1 +1basketbal +560043 +7eleven +110070 +bryce +��+���������� +gayboy +joshua22 +justin4 +slater +chanda +chicken4 +imation +gudiya +ele +andi121382 +seymour +1111112 +T +sweet15 +019283 +was123 +giselle1 +redbird +kenwood1 +lookatme +1993ga4mi +13489277 +hotdogs +underoath +friend2 +donaldduck +snowy +shorty15 +mypass1 +ronaldo10 +EtnXtxSa65 +kitty69 +transfer +killing +hohoho1 +a159753 +woowoo +chewy +jackoff +tiger01 +john22 +iamawesome +broadway1 +donato +jam +dopeboy1 +F +jess12 +patrick7 +schilf02 +banner +114114 +capitals11 +crackhead +01011982 +pimpin3 +lala1234 +money15 +zpaqrt2963 +shadow9 +cutie4 +ilovejohn1 +baby88 +shorty5 +gemelli +engel00007 +dodgeram1 +Morgan +aabbccdd +bulbul +15516210 +vflfufcrfh +martinique +sandokan +iluvyou1 +JOSEPH +1203 +milanista +hshn7669 +love333 +madelyn +gag5691 +jesus22 +clarke +rahul123 +eagle123 +happyday1 +kikikiki +13Marino +bloods5 +66613666 +mischa +koupelna +major +oregon1 +monty123 +piccolo1 +silver2 +grecia +tiramisu +euphoria +chelsea01 +jessica18 +tucker12 +please123 +111188 +18297649 +bulgaria +jac +satria +marcio +leilani1 +1orange +shiningeagle +locked +harley07 +rajeev +redwin3d +carroll +llllll1 +patrick3 +301285mn +frederick1 +salama +121233 +cookie22 +blue25 +biscotte +Naruto924 +sonicx +mNbmNbmNb +rossia19 +freak123 +mara +osvaldo +ramos +198282 +robert23 +tink +wolf359 +sonyvaio +sisters2 +sutton +starwars03ja +burrito1 +sainath +45533990 +harley08 +srikanth +fkbyrf +allstars +fu00190 +samson123 +love2012 +sober3 +wm0001 +hhh +josefa +december24 +SHADOW +kristi1 +wanderer +binky1 +cookie10 +aldebaran +michael09 +stubby +angel02 +nvidia +54226269 +120689 +nthvbyfnjh +galant +mydream +marisha +mad123 +johndoe +Teufel99 +vidaloka +garlic +swansea +t1234567 +ilovejames +password42 +mandarina +inter123 +mona +escorpio +MASTER +dbnfkbq +jetski +xenosaga1234 +david69 +mob4life +telefon1 +ilovedogs1 +smurf1 +55chevy +yellow23 +cassius +rohini +reality1 +emeline +111985 +uhbujhbq +band123 +sweetgirl1 +darwin1 +oieoie +Snoopy +blacksheep +loveme21 +tabatha +iloveher2 +kamil555 +blackboy +sanjose1 +121088 +isabell +1aaaaaa +better1 +peugeot206 +happyman +apple7 +november28 +search1 +menace +fuckyou08 +snoopy11 +spiders +memememe +myaccount +petrovich +gabber +burnout +mexico5 +olive1 +69664848 +kahitano +joana +blade123 +Virgilio12 +linkedin01 +1234567e +audi +roscoe131 +fantasy7 +suckdick1 +fairy1 +concetta +lakers12 +kmk420 +sofiane +jayjay123 +misiek1 +ilovemoney +blackbelt +nicole69 +smithy +chairman +topdog1 +pieter +teejay +poop101 +trikers21 +december29 +radical1 +therapy +12345789 +Angel +runaway +Tielandros01 +happy4 +thomas21 +srbija +qqqwwweee +daniel17 +130989 +approtec +warwick +brighton1 +stargirl +rosana +dsadsa +number22 +rubberduck +dutch1 +89272585 +gillian1 +1hateyou +missing +viet12 +herbie1 +vampires1 +258147 +honeypie +biteme! +ghjcnjgfhjkm +bush25 +impala1 +zz123456 +ouioui +19551955 +callme +8PHroWZ622 +austin7 +gunit50 +emmawatson +andrew14 +killerin66 +angelgirl +court1 +merdeka +station1 +diamond5 +pisces1 +christian0 +farside +dancer! +pinpin +bbb123 +111987 +megan12 +love86 +jnkwear1 +alex12345 +tigers11 +youknow +falp5050 +softball! +civic +1q2a3z +bank24 +sammy11 +photo +170845 +abcdefg12 +29271188 +tarantula +angel675 +ballack +cadbury +november4 +jason13 +elcubano1893A +urdg5psk5 +doggy2 +ASHLEY +ashley07 +1matthew +mantis +player23 +tigers123 +terry123 +frost +ANDREW +avenger1 +thanks1 +lucky23 +uzumaki2 +bro +123580 +daddy5 +slimjim1 +loveyou7 +nonenone +htown713 +197878 +kmzwa8awaa +chicca39 +karishma +27140621 +ltdjxrf +ganster1 +67890 +brianna12 +zxcvbn12 +leroy +kokot +rfgbnjirf +xiomara +secret! +leader1 +christoph +Q0tsrBV488 +tropical1 +grasshopper +alan123 +95135876 +secrets1 +meimei +cuervo +musift10 +bremen +PASSWORD1 +source +goku +monte1 +love98 +twilight13 +naruto14 +playboy13 +wwwwwwwwww +shannon123 +chango +fucku! +ozzie1 +jaw138whet330 +jaisairam +caterpillar +lydia +gaspar +eagles10 +2233 +73439984 +Pokemon1 +lucien +kuwait +venom +hannah99 +fugazi +residentevil +8616695 +clyde +83742222 +iloveu. +idiota +haylee1 +123963 +james15 +kevin13 +poopy2 +32flame +asshole. +puddles1 +alyssa01 +a696969 +poupou +rex123 +heitor250493 +metropolis +saint1 +r041stcu +dlfaor09 +vfhbjk1801 +poohpooh +infinite +valentin1 +1234567w +brandon14 +Wokami +rider1 +czsxumtf +diva12 +golf123 +abc123. +cooter1 +vitolino10 +audiopel +verena +glacier +blood12 +dickens +qqqq11 +kevco33 +littlebear +wrinkles +amanda10 +baller15 +11223343 +strelok +vector +luckystar +johana +hotdog12 +pussyeater +jokers1 +cookiemonster +hi123456 +katiebug +seaside +brandon8 +valdez +daddy11 +female1 +columbus1 +sk8ing +bas +zaphod +medina1 +greenday! +shanna1 +luther1 +cyclops +696969a +wwwww +princess25 +woody123 +carollo12 +tinker123 +michael07 +P@ssword +fab +goodwill +switch +bigmike +bunbun +abbey2010 +876543 +shine +smiling +ozzy +gutta1 +engelchen +valentino1 +nico39 +raerae1 +Tokio1 +akasha +angeles1 +nederland +Beastie0 +nathalia +nolose +magno456 +pfkegf +1114 +Gopher12 +owt243yGbh +mustang3 +three +aaaa1234 +support1 +nodoubt +tomas1 +fishman +Brammi1 +peleleco +yyyy +leno4ka +karlita +anastacia +daniel! +skydive +112200 +pacheco +vandah +lin456 +ernie +299792458 +zimmermann33 +yeahbaby +paddy +badboys1 +Berlin +daniel4 +grinface +charlie8 +pidaras +mother11 +london2 +sherlock1 +linkedin4me +102010 +karlos +01011989 +king22 +capitan +tigger10 +tangina +ghjcnbnenrf +sunkist1 +manuela1 +packer +moomoo2 +hunter69 +march2 +1lovers +mom101 +dzxtckfd +scooter12 +654456 +comando +kavkaz +bradford1 +yoshi +dei3mutter +earnhardt +marbles +sha22una +1616 +cooldude09 +reggae1 +lilone1 +13579a +gerardway1 +19960122 +blood2 +andres123 +chica +pacific1 +111116 +fosters +softball6 +emotion +furball +ballack13 +kendrick +bugger1 +snowwhite1 +chinese1 +Kolkol90 +nicole24 +newdelhi +chess +256256 +irock! +whitepower +loplop +22janv67 +undergroun +mariage +lucky14 +nhanngu +9198425200 +pimp07 +197600 +120588 +casillas +w3wjnhek +zhenya +wright1 +summer2009 +auckland +560017 +sha123 +stallion1 +redsox24 +kenshi21 +con +tttttttt +robert21 +hawkins +476730751 +12345678l +senthil +linda12 +01011983 +cali +highlife +elizabeth4 +ltymub +500034 +mojo +chino +pianoman +wildlife +666satan +rolling +dancer11 +skater3 +sc00ter +gargamel +120789 +59230120 +kardelen +mauro +oluwatosin +volvo1 +sexual1 +tvs3108 +jesica +flipflop1 +perez +kocham +peacemaker +Pitapooe1 +orioles +1getmoney +beijing +amanda7 +hijodeputa +199000 +ralphie +jellybeans +Vesproongh12 +Vladimir +king21 +3456 +erwin +Gabriel +ryan01 +150781 +lauren! +hollow +wendy123 +palmtree1 +Caroline +jacky1 +600017 +7heaven +jorgito +ravindra +howdy +leedsunited +vadimka +diabolik +pourquoi +website +brm600 +carlita +Bandit +march8 +puddin1 +khongbiet +ayanami +alina123 +Pass1234 +brandon6 +keke123 +nihaoma +refresh +jhonny +gre +girlsrule1 +ricard +super2 +musashi +alexxx +thursday1 +dmsgk0103 +2q2w3e8r5t +grendel +gracey +marie15 +travis12 +kevinbg01 +goodyear +774411 +yana +mindy +desktop +butler1 +robert5 +3Tutso24qF +just +hyperion +tank +worker +pepsi12 +apinoy +brandnew +janine1 +alex69 +Delivered +caracol +sophie11 +broker +whatever3 +sc00by +chrono +shady +440226 +jayhawk +fake11 +skittles2 +valkenhayn +ripple +carlos01 +reagan1 +xerxes +nofear1 +ural +ballsack1 +starman +63245009 +comanche +umit1406 +goldenboy +karappinha +lowell +saleen +magno07 +skater8 +cfif +jacopo +brook1 +theend1 +minecraft123 +umberto +hotsauce1 +mordor +webkinz1 +blind1 +pringles1 +strobe93 +bryson1 +ihateyou12 +buddys +mycomputer +iloveyou00 +yacine +sanfran +sean12 +260686 +triforce +fucklove12 +123qweasdz +opendoor +133113 +familyof5 +koolio +dinner +ballsack +tomek1 +111986 +pioner +hunter21 +hovno +X8coQx1F1zh +spikey1 +123159 +laura12 +2626 +brandy123 +jaypee +ganja1 +qsdfghjklm +socks +baby03 +1cowboy +aaa000 +xsdsxs +hamtaro +kristian1 +chowdary +jkl +babies3 +hunter09 +manana +mor +thunder123 +campanita +abbey +lovehim +bigben7 +realtor1 +lancia +198211 +39073588 +cocodrilo +cheyanne1 +vesper +jackson3 +tech +redsox07 +120286 +jesus. +vinayaka +smooch +almeida +dance2 +nokia7610 +alex06 +qazxcvbnm +pimpin123 +astro1 +gobears +hardy1 +poopface1 +cobalt +pitiponc +ocean11 +cheer09 +sheep1 +bernice1 +crap +carly +tiger21 +happy6 +fox +calendar +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +ama +chester123 +1101 +mintal24 +anapaula +marcus2 +gunther1 +12345677654321 +sexy77 +fuckshit1 +marie5 +110049 +12qwer +82597971 +jenn +bball15 +121087 +honeymoon +jackass12 +requiem +republic +4friends +taichi +bathroom +5550123 +biology1 +jemoeder +boxer +v3xAfy4k3Y +football42 +angelic1 +0123654 +400080 +sunflowers +money99 +randy123 +enamorada +demons1 +sexy45 +nicaragua +maddie12 +1winner +198212 +hewlett +namour +electro1 +magodeoz +1qaz3edc +jenifer1 +thing1 +january12 +sebastian2 +math +sixtynine +cheeks +aaaaaa6 +sayangkamu +neville +fritz1 +connor01 +andersen +hustla1 +tickle +vtldtlm +cincinnati +profile1 +leeminho +Metallica +newhouse +ppppppp +125478 +kristie +hornets1 +fresno1 +greatness +steven01 +bear11 +danny13 +inlove2 +satellite1 +basti_1014 +peanut7 +paulchen +5stars +junior23 +1thomas +oldnavy1 +rerjkrf +babyboy13 +1sexygirl +jardin +filter +loveit1 +cj: +sunflower2 +anna1234 +FAMILY +jbond007 +faster1 +carcar +teddy12 +parliament +generals +121984 +christel +baby2010 +gagoka +fun4me +girls3 +peanutbutt +magica +pinball +westside12 +alissa1 +hardon +bolivia +gaetan +30seconds +1104 +keaton +lavalamp +10971199 +ccc123 +ganster +1ty2an3JA +01233210 +d9189498 +richard3 +098123 +john01 +$money$ +stafford +mystic1 +cristine +heartbeat +lipy110593 +slasher +hongkong1 +1queen +endless +futuro +bonehead1 +carvalho +thunder12 +jesper +dblock1 +silver7 +gamemaster +001234 +michael17 +basil1 +herbsmd +maple1 +timeout +hottie22 +g123456789 +candles +melissa7 +28 +keke12 +eastside5 +butter123 +Z +atticus1 +blue18 +121416 +Zmx870919123 +str +danzig +fester +babaji +BRASIL +vball1 +truffles +1103 +ambrose +rivaldo +Jackson1 +peanut13 +1lovely +poppie +1949 +christoph89 +cnfcbr +120589 +toocool +baybay +mike10 +maxie1 +bullshit2 +march4 +01012001 +magpies +puravida +joshua5 +cherry7 +me123456 +210210 +yomama2 +Raumschiff +harley06 +backsdau +twilight2 +lourdes1 +thecrow +gypsy +)ryan +pogi +92246247 +napster +judy +1903 +alien1 +eliane +ILOVEU +sunshine. +gladys1 +monkeys123 +naruto22 +560068 +Jennifer1 +chispita +susieq +money! +yesyes1 +allegro +purple17 +ragnarok1 +bikini +nashville1 +vivaldi +shikha +120587 +venkatesh +xx123456 +gardner +jmoney +joseph13 +555999 +hockey18 +copyright +paintball2 +daniel08 +6661313 +toby12 +kujawka98 +messina +booboo3 +familie +loyalty1 +skulls +whatthe +philippines +kayden1 +batistuta +february1 +spongebob4 +justin6 +jellybelly +bloodz +emmett +cannabis1 +omgomg1 +rustydog +tilly +hurricanes +angelface1 +12451245 +diablo123 +bender1 +lina +167943 +cooking1 +beruska +lollipop12 +shadow0262 +cash123 +Joonah +747546 +angel03 +bnm123 +dogfood1 +milkman1 +master10 +willis1 +sexychick +pikapika +she +1school +cannondale +martin2 +dogwood +oceano +verygood +alexander0 +gaygay1 +mario2 +dakota11 +ponpon +101288 +football81 +Skelitor66 +gabriel12 +juliocesar +purity +tucson +soccer02 +vernon1 +siddharth +sunshine123 +dougal +nananana +elcamino +venture +passer +choppers +barney123 +2121321q +brooklyn12 +110009 +fofinha +horace +tra +camels +kazanova +lovehina +12101210 +meatloaf1 +keyblade +63145151 +bearcat +natashka +dotcom +juillet +woohoo1 +muschi +fuckit69 +vinny1 +timosha +sami +michelle19 +3doorsdown +workout +L58jkdjP!m +w1970a +belinha +pepper5 +lpz93sssKqw8Q +sandy12 +seashell +110022 +liz +talk2me +babyangel +fag123 +tweety01 +1234567890p +brenden1 +jonalyn +Merlin +198222 +honda12 +120687 +sinaloa +darian +paige123 +daniel. +kelebek +fallout1 +bunnie +analyn +mamatata +vagabond +caleb123 +ninguna +justforfun +1kitty +audi1991 +casa +fandango +star16 +cheese7 +weirdo +keeper1 +violin1 +mafioso +banker +benedetta +guyana +death13 +009009 +slim +2boobies +mexicano +mauricio1 +military1 +12231223 +gohome +999777 +goodman1 +baguvix +gra +4freedom +mer +xxx111 +karim +smeghead +fancy1 +qvo78evm +nate123 +isis +T7U9Hx +tito +polinka +m1ul9x9i20 +signature +.ktymrf +120788 +graces +anisha +alizee +mother4 +5610405 +m0nster +panpan +686611 +Password12 +superman9 +werilopert +repytwjdf +respekt +boston12 +tyler10 +zodnat +piggy123 +loxpider +louisiana1 +1234567f +113322 +555551 +dixie123 +batman21 +newspaper +tata1964 +volcom123 +wwewwe +soccer03 +branden +love2hate +sss123 +123www +alex09 +a12b13c14 +ingeniero +beastie +ya623349 +celinesimon +1jennifer +donjuan +27 +peachy1 +nadegda +sweety123 +king10 +bh90210 +longlong +olivetti +tonyhawk1 +home12 +nick01 +nicole88 +wweraw +joker69 +gamers +money24 +ss123456 +maricon +hate123 +gambler +mjordan23 +pollito1 +1badbitch +goodies1 +andrea01 +mike14 +roosters +vikavika +azacos +nothing123 +manutd7 +EBEANS +adidas12 +qazwsxedcr +balboa +kissme12 +050607 +katelynn +fishes1 +zoezoe +qw12345 +rosetta +pomidor +myworld1 +interista +HARLEY +angelgirl1 +yousuck! +matchbox20 +pass@123 +joshua23 +jonas12 +edward11 +123cat +odyssey +vicekw +delaney1 +babyblue2 +allan1 +samantha11 +pink17 +cheese4 +delight +thedog1 +barbiedoll +cool23 +Mod7tygrysow +chitra +michelle10 +polpetta +scarface12 +marcelle +li0903 +hhhhhhhhhh +seaways +01 +emopunk +8675309a +j0nathan +freedom08 +thekid1 +30303030 +tyler7 +wingzero +frenchie +fishy +yellow01 +chukwu +james09 +Blessed1 +silver11 +roman123 +deleon +ginevra +osiris1 +glenn1 +lashay1 +1125 +askimsin +113456 +monkey25 +norwich +booter +december7 +sanantonio +yenyen +rakista +lovebirds +pan +salamat +hott +emi +toietmoi +shelby2 +michelle5 +kill666 +lol123lol +wareagle1 +pippen +12233445 +konijn +alexus +cholo13 +sweet5 +james07 +tucker2 +ilove420 +playmate +cowboy69 +maggie10 +baseball07 +brian12 +1buster +fripouille +blackboy1 +happy12345 +villa +preety +connor12 +niggas +dagestan +12341234a +hero +chatte +program +Hello +december5 +super5 +korona +zzz +bubbles11 +skull1 +tomato1 +malibog +im +1�2��3�� +passwords1 +dancer13 +pokemons +gobucks1 +avenged7x +121090 +white123 +sarah11 +kiran +masterchief +12152325 +1brother +tony11 +astral +knicks1 +sheep +ankara06 +jesus08 +govinda +franco1 +cyborg +007008 +hokies +ivanka +Baseball1 +moo +milo123 +jackass3 +feniks +i12345 +010191 +cowboys123 +baby20 +mateo +jerico +dada123 +naenae1 +golfgolf +emokid +andrea11 +1029 +castro1 +hate666 +brandon22 +snowball2 +dor +bessie1 +sensation +anita123 +gladiator1 +billy2 +a123456b +Soso123aljg +1tweety +adam11 +jujuvivi +arwd89 +irisha +huhuhu +soccer44 +lfiekz +jordan05 +sky +futebol +jb1234 +888888888 +wer +220a220a +excite +Abenteuer +h123456789 +cherry69 +tiffany12 +Dennis +dct +stormdogs +alpine1 +qazxsw2 +dexter123 +dbnfkz +omgomg +SuperManBoy +hallo1234 +azsxdcfvgb +fullhouse +LasVegas +sukasuka +qwe123123 +justme2 +888777 +protection +azazel +cards1 +galadriel +pilot +forfun +naruto1234 +saleem +koolkid1 +Melanie +free4all +mybossmyhero1 +napoleone +sugars +taylor99 +nascar48 +blink-182 +killer101 +brenda123 +bronson1 +norris +flego0815 +10101990 +Rebecca +west123 +jaja +lovemusic +nairobi +3647226 +fuckoff666 +112255 +mexico14 +monster11 +tatertot +chillin1 +football52 +beta +1226 +padlock +f1f2f3f4 +141 +!qaz1qaz +venezuela1 +kathy123 +iiyama +chantal1 +1220 +hakeem +yjdsqujl +010190 +hellsing1 +justin09 +xyz +reklama +geronimo1 +satriani +ybrbnjc +urmom +blondy +rossana +foxtrot1 +andrew4 +poopie2 +1357900 +10101987 +pinetree +946hvt +economia +121986 +penner +poopoo123 +jojo11 +volcom12 +rocky4 +cicero +121312 +william01 +jacob01 +poiuytr +gulliver +cavalier1 +forever! +1323456 +daphne1 +52525252 +dahlia +ayodele +1Q2W3E +reallove +lovemyself +121987 +lights1 +rerehepf +witch1 +december27 +raketa +brownies +stellar +lilmama123 +lisenok +vbkfyf +08080808 +buttercup2 +lonnie1 +ERS +boohoo +pokemon13 +mayflower +411038 +a12345a +january13 +cccccccc +choco +everett1 +csyjxtr +36363636 +turtle123 +gloria123 +bitchs1 +vasile +krishna123 +august5 +karol +sex6969 +helmut +Password2 +asshole7 +vintage1 +willard +secret7 +SECRET +sexyass +planet1 +gigi123 +december26 +margera +333111 +helper +7783757s +nadezhda +momomomo +sakshi +killer14 +tushar +560008 +corndog +101084 +north14 +1201 +madeira +thunder7 +jamie12 +1monster +myfriends +paco +gooner +harry12 +slash123 +keekee1 +hotwheels1 +tristen1 +escape1 +fanny1 +nevertarget7 +775533 +bigdaddy2 +love<3 +james08 +julian123 +helloween +upyours +rocky11 +lucrezia +trinity2 +peacelove +nyjets +bebebe +caveman1 +cor +2212 +elizabeth! +ass1234 +deathrow +slappy +elias +1christ +oldman1 +windsor1 +danone +dream123 +yzerman19 +highland1 +kid123 +devin123 +element12 +peaches123 +tapout1 +lili123 +casimir +macho1 +120488 +celtics34 +solutions +assassins +x7vs8mxg +151 +wocaonima +football66 +simeon +12345670 +nguyen4thewin +dublin1 +1003 +12345ab +samantha3 +twilight! +meowmix1 +yasmeen +jenkins1 +colasisi +naruto3 +redwing +munchie1 +eagles11 +morozova +christian3 +jason11 +six666 +rogers1 +lalala2 +zaqwsx123 +rafael123 +alphaomega +yj2009 +182182 +ilovepink +playball +open4me +polonia +sprocket +michael16 +defiant +rottweiler +Antonine1 +fotbal +ser123 +peace7 +august4 +candie +rastafari1 +david1234 +privacy1 +158158 +nbvjif +juliet123 +freedom09 +����������� +dragon14 +malaya +campus +sexy33 +sweetypie +darryl1 +nathan23 +jaguars +lover01 +obama09 +bre +максим +123456789@ +alex88 +k47Rizxt2G +hippie1 +rocknsock1 +512512 +perlita +p939468 +1025 +Jasmine1 +zydfhm +jamesbond0 +heaven2 +cheese5 +hellyeah1 +carlos11 +bombon +ashley. +richard12 +kahuna +wormix +mikmik +aaron2 +jessie2 +aceace +mormon +cobras +nutrition +december3 +blackangel +cheddar +resistant50m +1234O8o +avril1 +honeybear1 +douchebag1 +sayonara +ballin123 +bugaboo +sticks +robert10 +cbcmrb +20102011 +person1 +70142021103 +naruto23 +joker2 +casey2 +contreras +mommy6 +rachel01 +intel +111111z +drpepper23 +desperate +smiley123 +tuffy1 +angels7 +brodie1 +161718 +ludovica +qaz1234 +muerte +hendrik +blessme +malakas +babmicmar +ceasar +shadow6 +taylor6 +manning1 +tanner12 +black6 +morado +abcdabcd +lynn12 +game123 +poop13 +hannah22 +gangsta13 +qwerty555 +fr33dom +yellow4 +198610 +500003 +canucks +arsenal10 +hoihoi +saved1 +minnie2 +lipstick1 +kkkkk1 +theboy +lepidus +merhaba +968574 +windows123 +181181 +hunter06 +rose11 +liliane +159123 +metin2 +babyboo2 +dupont24 +rocky7 +epiphone +shadow666 +741236 +mailru +hawks1 +westside2 +tigre +belle123 +master7 +anakin1 +Jcfs32014 +250588 +pink88 +burgerking +good4you +somierda +america11 +dmoney +frankie2 +touchdown +inuyasha2 +loveme4me +giuseppina +250250 +sexo69 +90801 +cooper2 +packardbell +Barney +classof11 +54545454 +joshua19 +Brandon1 +tierra +pool +1228 +mortgage1 +1joshua +daddy13 +197500 +1Thursday +iloveyou33 +allah123 +marcelino +sullivan1 +jaybird1 +kevin7 +Fyfcnfcbz +boner1 +looloo +Kristina +niagara +clara1 +yingyang +purple. +bazas52 +ladies1 +drakula +things +shampoo1 +export +martin01 +wildflower +baseball99 +kamil123 +Chelsea1 +Fktrcfylh +marie16 +fucktheworld +jesus111 +cacacaca +292tom +alexandre1 +sonic2 +all4love +millwall1 +jalen1 +l1qoH9wq2U +master5 +aquarium +natalie2 +cattle +kailey +chris8 +okokok1 +plants +choco1 +fuckme3 +dennis12 +tigger4 +111984 +flatron1 +jennifer3 +barber1 +gracie01 +eagles2 +lectures +ceckbr +anna11 +paranoia +andy1234 +friend123 +96132925 +junior22 +calabria +rrrrrrrr +elise1 +timisoara +chicho +bowler +cocktail +12123 +bobdole +g4life +micky +wood +november29 +010203a +level27 +steelers12 +800001 +net +foxracing +bud +mutley +alex2010 +patrycja +baby2007 +tumbin +rosita1 +0931541082 +321ewq +premier1 +timmy2 +hahaha2 +olympia +snowbird +direct +checkers1 +theman123 +111111m +guerra +4561230 +summer04 +social1 +hhhhhh1 +muneca +bichon +accord1 +war +sweet11 +booboo13 +vfhbyrf +doggies1 +david14 +lumina +angel143 +120590 +australie +schoolboy +bouncer1 +canada12 +yankees123 +baboon +password92 +hammerhead +bonkers1 +egghead +stockholm +400607 +qw12er34 +booboo22 +120688 +hilltop +killa2 +jessica6 +happyness +ltkmaby +stargatesg1 +dylan2 +skater5 +minnie123 +hottie23 +millionaire +appletree +schatzi1 +chenchen +111189 +password93 +cisco123 +dfghjc +fuckoff12 +angelique1 +050585 +aabbcc123 +cody11 +sexsex69 +granite +steven11 +chocolate0 +300000 +teamwork +hotdogs1 +test12345 +1107 +mussolini +123456lol +pinky12 +taylorswif +sneakers1 +135799 +flexible +sabaka +1218 +latitude +communication +colt1911 +withoutu +nokiaa +army +santander +v1ct0ry +411027 +smiley13 +batman10 +pointer +minnie12 +mumanddad +supriya +zafira +dollface +120586 +kkk666 +matthew8 +cara4coM +summer4 +jonatan +abdallah +kumari +chowchow +groucho +gizmo2 +sabres +147258a +cristiana +HUNTER +airsoft +master22 +payaso +jade12 +sonnenblume +mapamapa7 +250585 +nathalie1 +tiny +101189 +jordan16 +avalanche1 +logan2 +drogba11 +fotografia +monita +blackheart +WILLIAM +lollipop0 +chivas14 +badakhshan +paparoach +donatella +omega123 +charles123 +bitch9 +1432 +family10 +joseluis1 +hakunamatata +radar1 +rodman +december30 +password123456789 +gangsta3 +1134 +guitar7 +120489 +spiderman5 +graceland +aaff +becky123 +taylor08 +sweet10 +777000 +159963 +223311 +dbrekz +sixsix +mavericks +marie10 +120690 +180888 +3762352 +rockstar! +ericson +1234qwerasdf +wisconsin1 +shorty101 +macross +flora +hoosiers +werdna +chelsea10 +christine2 +cunt123 +shitfuck1 +default1 +memyselfandi +rbcekz +minchia +bambina +110048 +pepe123 +medellin +sunny36 +cessna172 +bowling300 +buster22 +jakub +andrzej +derevo +2much4u +ZV_!80lo +spice +Chester +ranger12 +Butterfly +MaStEr77 +nbvcxw +katia +3434 +griffey +gonzo +serebro +MONKEY +liberdade +1105 +gallagher +casper13 +jojo1234 +jazzie1 +tititi +open1234 +01011970 +hunter23 +tricia1 +chucho +lachlan +cheer2 +michelle22 +sommer1 +Dakota +lakers2 +sujatha +1005 +morrissey +brains +mama22 +trapper1 +balls123 +makoto +joshua08 +wibble +austin99 +123����� +elena123 +brandon15 +peaches12 +micron +ghana +slutty1 +johncena2 +13311331 +klondike +family! +bball33 +marie21 +luckygirl +remo1d72a +coconuts +wrestle +sarahjane +hotgirls +tyler4 +wellness +antoni +nicole06 +45M2DO5BS +essence1 +qwerty89 +brandon9 +cesar123 +spongebob! +luv +kukolka +retired1 +vladvlad +nicotheo +camaleon +bean +jake13 +sexy4u +Bonnie +zmf1704c +wawawa +haslo123 +hazard +badass2 +erika123 +ros +111222a +cheer! +indonesia1 +cdtnjxrf +belladonna +daydream +gungun +ceckbrcerfkbxyjcnm2 +bateau +hehe +tonytony +elephants +iklo +seccion33 +maxi +bettyboo +mewmew +negro +lonestar1 +barron +maumau +Internet +aspirin +aqswdefr +sanjose408 +dragos +hollister7 +jediknight +martino +maximovie +branden1 +sexysexy1 +yakuza +snow123 +enzo +121085 +gaby +boner +fart123 +1james +eagles20 +gomez +fernandez1 +draven +cashflow +antonio12 +526452 +january11 +crf450 +bartender +june06 +2daughters +matthew6 +enfants +brooke2 +portsmouth +faith2 +hahahaha1 +andrew15 +zelda123 +martin6 +070787 +lassie1 +dudeman +4r3e2w1q +minecraft1 +chantelle1 +alex1995 +oskar +zzxxcc +JENNIFER +ooo000 +subaru29 +players1 +camaron +tombraider +favorite +crazy88 +seth +1booboo +texas10 +sharmila +poohbear3 +templar +password02 +romero1 +blood666 +manatee +eagles123 +segredo +chellam +nika +fatty123 +football50 +monaliza +dulce1 +bedford +110288 +Bennie!! +aiden +soriano +eminem11 +1samantha +123123m +nantes +q1w2e3r4t5y6u7 +637846 +engage +doris +lakers23 +12312300 +alexus1 +kanada +7seven7 +hottie10 +19870212 +170787 +shraddha +businka +hunnybunny +impulse +brandon21 +silvestre +mobydick +string +blue17 +zach123 +fatfat1 +far +celine1 +banjo1 +panter +boring +as +skate3 +fruitcake +bull +chloe2 +kieran1 +hottie16 +aaaaaa11 +aeynbr +tiantian +jaguars1 +vepsrf +jackdaniels +supermom +121985 +larson +paixao +sammy3 +198011 +boobs123 +121280 +helios +food12 +semsem +laser1 +purple24 +mjmj12 +maria11 +101285 +bmw525 +friends11 +30 +karina123 +nicole9 +anais +james6 +mimimimi +lewis123 +searay +oakland510 +rhapsody +1qw23e +168888 +9lives +33rjhjds +habbo1 +dragon4 +porche +nigga5 +258789 +dingo1 +dudedude +jamesdean +jennifer8 +120288 +william4 +password87 +robot1 +qazwsxe +lesley1 +meg123 +sayang123 +lopez123 +hottie15 +hockey77 +101188 +oks65b6666 +spongebob8 +papito1 +500081 +1batman +moochie +middle +rockrock +legacy1 +213141 +nookie1 +slugger +albany +bomber1 +vick44 +163163 +shakti +jayjay12 +service45 +123xxx +sapper +patrol +magic12 +interpol +cdjkjxm +ashley8 +numbers +buffon +temptation +125521 +mikhail +joujou +abubakar +christie1 +jennifer7 +smail.ru +purple18 +jessica17 +10101991 +nameles +nova +icandoit +winamp +single09 +stallone +baseball01 +xtube +billy12 +marios +gangsta74 +edward13 +babypapa +asss +olga123 +yf +hatred +yankees3 +ashley19 +cowboy2 +bajskorv +irishman +sugar2 +peace3 +tomahawk +10102010 +asshole11 +121188 +999888777 +kelechi +adorable +bell +kamiloza +compass +hannah08 +isadora +2monkeys +slash +bethel +951753852 +qwerty654321 +chris9 +johnnie +hoosier +ferris +looping +333333a +proton +swagger1 +6820055 +imawesome +cowboys13 +999999a +chicky +motley +caesar1 +120000 +elenanesterova +muaythai +sakura12 +walleye1 +mother5 +ducks1 +arielle1 +aurelio +adamadam +video1 +flossie +123123s +121089 +mamacita1 +keywest1 +020406 +bitch18 +wwwwww1 +gulfik +fishing123 +dimafilippov +753951852 +1222 +ohmygod1 +5845211314 +mrbean +2brothers +tmoney1 +jalisco +400601 +corey123 +10000 +James +natalie123 +primetime +thanatos +gundam00 +newone +spice333 +101286 +crazy11 +stripper1 +Christine +myspace18 +gracie123 +sefa1986 +heather7 +pavlova +1013 +sisters3 +brandon23 +nighthawk +603575 +jones123 +1dumbass +conan +snivanie +soccer27 +fatboy123 +jasmine10 +yuliana +nilesh +ops111 +assword +byron1 +ad2021 +joseph7 +taffy +volkorez +owolabi +milan88 +etnies1 +j0shua +delaware +naranja +man55580 +------ +slava +rrrr +greece1 +225522 +marylou +michelle4 +missika +baron1 +Gleiser4 +saleens7 +glory1 +bmw318 +maxwell2 +ilovedad +nutter +whatthefuc +july0788 +january22 +rightnow +pink24 +de +yourmom12 +teamo13 +1202 +213456 +110588 +carmen123 +123456Q +happyface +hasan +h2opolo +michelle21 +boys123 +kj +abe1973 +jessejames +atlantida +honeybunch +stingray1 +shadow15 +edwina +carissa1 +powerful1 +boss167 +varico +newlife2 +smiti1 +beatles4 +mia30 +gemini2 +123ass +customer +hatelove +bellissimo +ingeras +1babygurl +babygurl3 +q1234567890 +wizard101 +gady123 +t326598 +1236547890 +kokoro +simonona +pooter1 +michou +computer5 +cunt69 +sex1234 +capslock1 +slaptasis +dorcas +tobydog +qwerty1517 +soccer55 +waterboy1 +camillo +evelyne +cranberry +yeahyeah1 +k2010302 +robert1708 +ernestsantikov +bubbles5 +shirankova42 +620850 +matthew10 +crunk1 +quadd +shiznits +august7 +elektro73 +123555 +100686 +lailas +kelsie +lyva84 +LOVEME +kotox76 +michelle14 +vitaminka88 +maxpredator +1mickey +jimelen +kotyk22 +dorota +vibi123 +shuhrat007 +sulamifcherenchikova1979 +vkuradovetc +mushroomka +yanchikchmoki +fredfred1 +moshco +summer2011 +1qasw2 +varga43 +musyka85 +vkrbashyan +troika93 +dantheman1 +1234567qwe +lenyi +lifestyle +vfvfvskfhfve +princess99 +spread-hop +myzone +baronessa87 +gorlonis +olgastrashney +god7507 +123321456 +sta93 +cobain1 +arkoximsp +dfdfdf +daewoo65 +kuzya-ser +eremei_vasechkin +loveko +nif686 +forgin +679956 +thug__ +maksimka876 +charlie6 +22222a +vkorotin +rtertuy77ijyhu7i +grih-rom +casper2 +volkova.ksyusha.89 +kotkova37 +maks.abramov.99.99 +kotmichanik +valya.kryuchkova.1990 +d9160847880 +papuskin +ramsia1986 +volkovoi_net +muhon +strekoza79 +sunnyest +lorik197110 +pokey1 +r_masick +betsynx0kof +aliya.mutallapova +aleksej.shorin.86 +gifema +buster10 +bellaboo +maksimilian_nasirov +5695595 +shukshinasveta +erast.82 +rio7777 +nusha.88 +renkanom +prosvirkind +spection +solomaha-denis +sagalil +valya-garanina +galina9181 +soloveibormalei +oksana130279 +robby +zabivay +kotya_bagdan +jeremie +lexa.maxus +560029 +okein +tema-bushelev +sans2010 +alexrv_06 +inar_ka +enyvbuois +maria-fam +g1hp +guldaniya.galina +sgga +len_nik44 +lopew +sivenkovklin +skrip-natalya +filatovaev1981 +63val63 +blond72 +sergeev2212 +raymonde336schwegel7331987 +zarinalin87 +tyrell +miha-nov +djedenhit +e.ovcharova +sofya.kulikova.87 +elwooo +marinaorlova1991 +vkot_2010 +shukurova-ismigu +yulyasik2002 +123654q +taskaev777 +borismf5tsh +volohovich-t +smirl +maxonina22 +trustme_k +sewewf +mbrim +len4ik31 +stronghold +serban24 +rezo_2010 +victorclavier +varduhigohar +vkravchenko +annagor20 +volkovanata77 +kirill.kirillov.2013 +sin1_19 +supervista +wwwksenechkawww +kotovichvalentina +cowboys09 +texasdoor +artov.95 +mknaxhxeh8yp3tf +sheela +nbvcxz +vargden +mkjhgf1996 +11-05-1992 +kovalienko63 +ghusieva1958 +julia_eduardovna +vip_trading +mihail_alekseevskiy406 +sidorow64 +rer-tuy +hugo854lataille1988 +andreyka.gorshkov.98 +aleksandr.ustinov.2012 +stavr75 +fggjkbyfhbq007 +maxim3999 +tolstyh.oxana +regina-rebina +mishanna1936 +gluxov70 +rickjames1 +bolshoj_zmej +sgydvntep +kotovas-70 +mir-180991 +aleksis1611 +oleg2ci +summer.fruit +x444am +vkoomare88 +sraka105 +zabolotnov1968 +61atnakaeva +beloved_a_devil +zablo +yulianaz85 +volfram.kozlov173902 +possum1 +veralipatnikova +rena.vano1990 +antonichmeli +zabolotneva_ira +sheba417yorck1986vxm7 +ineedajob +rus20dem +nika_kisa88 +madtubes +kotikova_n_m +zabelina12391 +ghrhfh +kovalskaya-t +emo_limonad +stassenka +baleri22 +opiumbaron +goman1985 +yy.tt.67 +dmitrii-skargo +yuliasha87 +mr.stas192 +dimok091 +antonls +spiridonmarkin1982 +bandidas747 +hismatdan +radik070775 +victori1967 +serg-niki20 +marina.shapovalo +cheetos1 +shar-vin +firakoki +masjnj67 +boromirus +sredina-va +vihlaeva2012 +cutegirl1 +mol.kos +mam_p +mihail-saratov +1qaw321 +ggolob +sevgeyq9v7kor +ksushapanda +vm.shlykov +malhotra493ozzy1991282151 +lobkova.1979 +delirium9111 +sava_72 +radion-dankov +valya.2057 +romka_ya93 +6610_2006 +arina-sharapova-80 +jannaarhipova +rusali_1979 +dnina666 +forgiven1 +kovach8 +d-x-m +mavriciy +burchenkovi +subprodukty +6651953 +isaulov.a +nust007 +stone_mitich +stecova85 +irinabrig +stas.gorodissky +lucky17 +rashaun966krager1993 +victoria.kl106 +vadyusha.isaev.83 +oleg272727 +lexir777 +sonya200102 +rusiphon4 +sor1989 +imabitch1 +miss-evgeniya-93 +ivankaterinchenko +mkolendzyan +panmen188 +gheniagabb +hermina617berno1990f6i +sergan11 +kudielia.anna +asa62 +valya-city +varich-masha +ser_kuzmin +qwert.0002 +olga.rumyanceva.1985 +kovalevagn2057 +vkors +victoria989 +101083 +asil.dovlatov.1982 +kotova.69 +svetlana-mironova-13 +venta021 +6552090 +max_masha +nastina33592 +sirazhdinov.shamil +alena_plotnikova_1995 +elenst14 +netti-88 +vkoval87 +vks1zz9v_7ceu69 +sveta-kisil +313233 +plankova2012 +varadero +u.hohlov +tarik-66 +raskevichtanja +stepanov_georgij +yluy1981 +duskolyan +innabuk +mpnaduysi +anna2976 +victoria14.09 +samitluiza1 +razdvatri3 +mirlan_o +nikolay_thebest +mobiline_b +teh-consul +zabludshaya +asabsmelik5g +marinochka.zhelannaya +rachelle289ariyoshi5251987 +derector-85 +narashchivaiunoghti +kotovam85 +volgograd.orlovka +aliev0583 +75fs +kir-ettk +slavik200887 +rinat-88 +serash2240 +belinova14 +computer3 +madcow +mmakssimka +galinkaru +zabirov2 +r6a50de3ujwtog4 +surooo777 +su4ik +shaquillesecx10 +ksyusha.kulagina.91 +loveone +sssuka80 +mudok +ravich92 +oleginator1 +zabolotniy.a +kelly2 +bolatov.almaz +bavixepym +stas_the_best.ru +macegorova.mariya +nastya-b86 +sopli22 +monp5haynes +prosto_chelkynchik +serpa7 +zabor.hut2 +dud_1995 +kirill999_97 +maitland571ka1994 +axssyha +vkontkate +grishin0308 +jasmin-ris +ribka227555 +volkova.elena.13 +111zabavina +vkryshkin +djdjfedor +i18bzbk3ay8 +mikhayildopy +asotjan +mozellbranou81e +simonova_lyudmila_73 +777kroxa +matrassesotk +stason729 +ok20.07 +nataliystre +nata271283 +kukatov86 +mklmkl22 +tyumchenko_ok +dovbeshkosushova.1972 +thehock +aukewpyrt +miuaybecv +olga.kazakova_85 +almaz_kiramov +marina.ushakovaznuv +ms.cc.gg +vktorov +golubinskij.87 +spn5 +fler_2351 +julija2010x +spuvd +volhsara56 +yansubina +6572757 +natalya.dmitrieva.1978 +yana.kolomoets +ira.klopot +apalkova.tatiana +bayrafis +yxelik +scsc78 +bulka-a-shah +renesmeecallen +ifuckyou1987 +vkovshut_annab1988fg +elensobko +silantyi1987 +zarygalina +olesya.kolchina +igaev90 +irina280374 +tor8585 +shevcov_alesha +elynca96 +botafogo +ghkdf14 +volodya-ivanov-63 +mutalim.gusenov +djhjyf010 +silakova.nadezhda.2012 +olechka061187 +victorfrunz +ktv910 +ahmed_orudzhov +guzel.t.f +sergey.lushnikoff +voroshilova.liliya +maxa-06 +oksanav-13 +goderdzikarxjxv +helga_557634 +moscowcallin +victor_evdokimov +sirik010875 +levenyatko2007 +victoria392eliezrie1992frp +moshkin1998 +vic685 +zaxarov-1976 +maxemys +slipchenko2004 +manovitskaya +zabelinaalena +igorek-filatov +constance626boilard1987 +aleks-270379 +rendakova_sveta +sodikov.talat +dok74rus +sss-nastya-sss +rauzawcsiv +victoria-berkat-energo +simonovskiy1970 +raduga388 +sorokina7778 +artemblya +erofka +maxchislov +soyma.ivan +siiifonjiknalivai +victoria_shkurco +ksyuta76 +smail2u +mayrik67 +minkova_i +sungatullinad +reginka2393 +sp.zakaz +mishaghbdtn +milay-ven2011 +rexrex +albina-1945 +julia.olga +kubnik +mmedinaa +275-22-74 +miss.marina.nikolaeva.2013 +spamar33 +astigor +victoriandr01 +zaborskiy80 +maximus1393 +sigreic +89217657066 +sergeevna_10.10.91 +sin-gulya +valya.ivko +victoria_002 +rita497 +valentina.victoria +djtatko +kuchelaeva +maksus_2003 +stella354926 +margo.emi +aminin94 +dan_cheb +serj-gr1966 +strelka.m +almira +raduga2508 +ratashn67 +ms.dolgikh +stan021092 +kudrina1962 +stas_kolos +andrei_rew +egor.vasilin +blyad_be_90 +sukasbliat +len_rin_kagamine_02 +marininys +annhen1 +vgizetdinov +fedorov717 +sergey_brrr24 +mnenrad6983616 +denis_nazarenko +pokopushkin +kirienko_svetlana +13grom +sidorval +rcalgif86 +style_style +semina-alina +zezina80 +andrey.shalanov +antoha50a +7777_74 +6917123 +666fafnir +valya.korobeynik +elvira198927 +sophieytorf +komnatnyy88 +milanova-kira +torgsotra +6215348 +oksanaorgadykova +varfeevich +ch_vitalij +raif.21 +evgenii-shenderovich +egorov_maxim +kudakova.83 +gvinpinka123 +feram0n +yanaluch +svoron1977 +irochka-ova +e-eremeeva1976 +dima199219921 +qwertykolakola +svetlana26rus +dimapet09 +mikalyalia +mariagoncharenko +galina-davidyuk +galinka_korneeva +foks8484 +manka198707 +miraa_84 +zarina_sabirova +piankova72 +maximova_elena77 +mrdmarina +varfolomeeva0990 +svetlana_07 +nadjaem +panda_3108 +srcuqq1_2j1h3rbf +sibiryak5 +valya-sidenko +olqa_motosova +victoria_91 +olyashev12 +yulia-dubrovina +ghrimachiova64 +ya_nochka86 +volgirevagv +volfram.kozlov123633 +dolgushina.76 +nata_titj25 +sergei_man9 +9602929770 +isatelt +TheSmokin +nastyaanciferova +olga.lekarewa +alexdok76 +aydani_ +voliahim1891 +sfasdfsdfa +michel69.69 +shponka35 +lexaafanasiev84 +milankasanakoeva +mikhailova-w +limonyk +dima35360 +dmitrij.mironov2014 +vika.krivonos.1995 +andreyka.zhilin.1981 +arinayu0 +vkulak +mariannaz2 +sh_o_a_2013 +rinat.76 +andruhova.1982 +www.ivan-18 +angarova81 +olya.i.02 +victoria-dyatlova +drozdovaksusha +florida123 +kakosja +xalitova1988 +mar_prod +vova436 +kudrjashova62 +nargiz-a +s-firsova +sharmaine005foskett6071988 +silenakriv +mitia159 +svetik_kryuchkov +zarinochka_b +vkundeyai +antusenok_zhekonya +shishmarev76 +maksim.bychkov.1986 +lady.procenko71 +seregakalygin +slava_kulbidyuk +serova2008 +bazueva.1990 +golga.70 +lisicyna704 +mocanuv +kuchierova1994 +lllllll +volkova.67 +moss032 +stepa-2009 +kovshikova1981 +vihrova1974 +ravshan1017 +armyach-aleksandra +slastenka93 +natasha_19.65 +vkpxrnoda +mjuan5ogm +valya.gorodn +r.polinin +neslyxovska +sergio.b93 +victoria.20000 +reyrtutyd +89140041205 +dimlimonov +dr.karaul +maximova.60 +ira202909 +g_alisa1502 +mkalancea +pridprid +vikatc +zabloczkaya2012 +listopad.iuliia +simorodok62 +canon1 +zarinka1111 +kovrnatasha +tamriko0942 +naz-74 +levana928 +akkolesnikov +onamrdiu +yulia_yulia_13 +djon.net +yahnox75 +kuponatora +filatov_and +zabotin_sasha +prozukin-shift +mila90974 +ber +n_pletneva +oleg.jann +kovalha +cartoons +dymkovpavel +slava.grinco +volga11955 +molchanova_tlt +goluboglazka08 +marinadeduxinaa +lupashku89 +natatuma79 +vashenko.u.u +djmaikl86 +sm.karat +qwedcxzas +andrey-1983_08 +blackpearl +dianochka1924 +mishas001 +max6751 +bad_boys_adience +rozlori +manin-d +ololoeva-99 +chucha0810 +vakantie +6125060 +bytopmcd +zuewamarija +kotopes_o +spring938burston0001990 +serega-cash +manuliktatyana +zenit-talnah +olgha.pietrova.1979 +rerghr +dana-14 +kurmangazieva_gulmira +oriflame_1910 +melmel +vika-selfish +sungelika86 +volhina-73 +seregjvich +maria_q +osynadepu +mzyankin +101020 +misch.sosnin +playboy7 +sigora79 +aztyvl_ka44ze +yushinazena2009 +ben_a95 +safronov_3112 +mito.lo +ignatova_1978_09 +ralphc8xf +avkhachev78 +valya-lera1 +pyanzina_elena +sorokina-999-01 +sonia-91 +motrya.larina +sakoshka_masha +glafira110169 +rbtsozeva +vkoryano +hamulakvitaly +zarina_loves +max.kirilov.90 +shunia0505 +milena699803 +rkamkin.karoli1988mp +mahmudali1987 +bolno_18035 +rezvanov_a +shirshov.1968 +zabolotnova31337 +nat5g +olegshut +nati.beridze.92 +riwr2hky4w3tjgg +tender +mixaxa2003 +kotova_74 +posoxina.88 +avetisyanartur +morozovavalya28 +voloshink +kuliiev.79 +kuznecovviktorr +eanovozhilov +valya-valya-1982 +varida.alibaeva +raisa720290 +mandds1mg6bv8re +aksenov.dms +sergei1986inna +lena5stars +rita_nizhnik_r +prikoluxa +avikuzen +standard1 +oxana.o +crosby +mojurus5575566 +machukreeva +arividerchi_shatalov +zolotarev08 +lisenkogv +rexocinod +ghalina_1971 +rzaev_ilgar +ivanov2305 +6430130 +tema.barabin +never_desponding +litosik +dimebag +varfolomey_72 +azik_06 +pletnevakaterina +simonova5570 +karusev_spb +felix.1957 +dove797 +gofman_osk +rahmudinov92 +tasya.5 +volokitina.olga +kati-leva +fishbaracuda +rogovsasha123 +777dashuta157 +ms.polza +hallucinationse +magic-n12 +azefirov.inno1987.r +davidstrokov +lexa-let4ik +gjcaixxx +victoriy70 +bakuman.manga.drawing +mirellabroersma1987570 +mordva1783 +mityukova.anya +stroikarat +welder1 +zarinaismailova +mylfard +qwertyuiopasdfghjkl151515 +k.u.r.t +sergey-personal +starpozitiv +victor_sakhalin1990-20 +dimulya.vasilenko +alfakran +fs.swl +safonova.1967 +evial_marina +mede_voda +kuchinovao +sporu-netu +aylyan2001 +anna.savickaya.1986 +vartk +ivanovamotya +blackangel09021 +slonenok1009 +vihotsieva94 +simonoff-dj +regawf7ss1dm7rn +krick.bk +golovizina_elena +aceeva.irina +vicusa.tatyana +gidrometeoburo +stalker_lemurrr +volik-yulia +mks.01 +damira.shagabutdinova +tishenkoff +malina_bratsk +0210-605 +jeka-ka85 +aqwleeb_6e0pk59 +mks33 +iurkeawov +ksyukha1990 +mak301988 +football26 +andohz +kejan82 +simakov_evg +sieuwaprd +tema_ku +sogevigdil1981 +jeter02 +valya.lantux.83 +jekan860803 +ylik1911 +stsnatasha2008 +zaborov_t +volkovaolguna +dgonni86 +maxa-78 +universidad +matveev792010 +gadjieva.gulmira +famar219948 +valya.shapoval +vs-nd +fyujk.fyukf.87 +connor123 +sbally_64 +6041074 +slava-45 +zevs_ev +annywka_86 +kinyabuzova.eleonora +e_dovich +popovkin83 +fomalex10 +alija-gatina0 +sgtrsgh +sunnny56 +laobidenko +strezhetova +sovin.sv +zabihullin99 +stason16.92 +wwwamador91 +aza_93-93 +sergej_de_sad +olga.ponomarenko.2012 +sattorov-q +armada-n +marimax.85 +leto-nataly +TheCrazyMaxim +26.09.67 +sov1_86 +maria-demidchik +eloisa +korostelev_3333 +fjodorova-natashenka +avto55.rus +ari-kyarova +valya.klimenko.87 +sergey.melnik-1996 +londra +serikpaevna_92 +vik22535477 +frant_nat +voljanka1976 +koala_1995 +nemochkao1975 +marina_stryazhkova +fotinia-66 +oleg-andry +rogovivan72 +stepanov.ag +evgenkac +barkov_65 +serg.aleg +fatimah +hrustem65 +sergdock +ry1dtv +gaar_vitalik73 +balentinra +monaliza2786 +shilard +strange.lena +sataieva.elinka +babich.e +romanova.natalya.96 +redko5 +abrejkina +gatina_albina +trofimishe +volodina.elena66 +lizasp07 +6450716 +arturamirov89 +black10 +t_v_belyakova +efimkin_igor +ilya_al_80 +aram198309 +sergio-emperior +samsuchonok +arsik-di-noxcho95 +fardubay +zarina_zhasan +fedotovsa76 +laser +palmer1 +mihailpezhemskii +sosexy1 +antsiferova1973 +monk3y +serg-ks.87 +kamazist.tsobenko +mogychajagopa +dimitr692010 +gholovach75 +zachodnio +skorpions23.5 +shorty23 +serega_torov +telegina_65 +parfenovav +llll.70 +ramis_bairamov +simmons1 +raisa_smelkova +compaq2 +ss_1983 +kafedra_oisp +ametistfatal +dua82 +shea019bernabei1992 +donskihv +varika0 +marielwfledlow +dimastic +volkslt35 +leeann1 +bikers +nastenabendel +amigo +kudryavcevavalya +ilovekiss +nikkie +ryabec.m +myhouse +lexa290195 +lipovv70 +shakmakovataisiya1992 +79621601378.kirill +ryan13 +143love +10101989 +halohalo007 +231288 +an4oys12120 +vedro.ru +marcia1 +1space +monica2 +january23 +sexy_julija +bigdaddy69 +pepper13 +codered1 +dawid +loser7 +chocolate6 +criminal1 +monkey55 +1guitar +bubblegum2 +231089 +rfnz +brianna123 +alcohol +ei33a +chrome +gargoyle +560100 +bwFq23jp7F +douche1 +alchemy +sinead +1taylor +bonnie123 +10231023 +1mexico +joshua07 +candys +badboy69 +whyme +asshole4 +denise12 +selenagomez +nfhfrfy +thedoors1 +joachim +danielle3 +bigger +gatto +1357997531 +mshelp12 +hussein +coolcool1 +bailey13 +02020202 +festus +dindin +doom +bondage +newlife08 +hannibal1 +1junior +7878 +motherof4 +girlpower1 +buster3 +edcrfv +matrix12 +rock101 +mylove4u +providence +keekee +080888 +120388 +1206 +elohim +560032 +moses123 +hummingbird +pierrot +kilian +maciek1 +travis123 +200100 +hybrid +2gelaF3h4A +babloo +zaq1234 +skate13 +554433 +loser. +fulham +marek1 +corndog1 +123456qqq +waffle1 +1black +lauren13 +alvarado +december8 +sexyback +ashlyn1 +ronaldinho10 +5482 +shocker +sleeping +�+�����+��� +august08 +minou +shithappens +indy500 +michelle23 +pwlamea10 +adeniyi +101091 +elias1 +mark11 +soleil1 +michael24 +f123456789 +savemoney +ivonne +stas +aa12345 +kikay +3monkeys +������� +avery +raerae +1hotdog +chance12 +101187 +biodun +sabrina2 +peaceful1 +Barbara +miamiheat +yellow21 +lobito +micky1 +petrus +angela01 +friends. +julianne +nokia6630 +f22raptor +dude1234 +nipples1 +cntgfy +nickname +1231231231 +tsubasa +firetruck +dre +103103 +outkast1 +zimmerman +damiano +shanshan +sloneczko +oneone +espresso +manda1 +firstlove +doughboy1 +imagination +reddwarf +5tgb6yhn +kristinka +jeff12 +sorry1 +maria10 +ararat +fourteen14 +helloyou +splash1 +3stooges +gorillaz1 +jesus21 +conrad1 +kamal +tiny123 +rock11 +tillie +freeride +mikejones +fuck_you +freeme +friendly1 +nbuhtyjr +chelsie +my2babies +jaiganesh +sunkist +rockband1 +laila +beemer +emergency +youtube123 +223366 +060686 +010188 +12345678p +1021 +luckie +password90 +burberry +dia +audi100 +reece1 +snookie +Johnny +830928urodziny +llllllllll +tina12 +miley +198510 +alaina +daniel99 +praisegod +ukraina +leila +pitufo +12121987 +GEORGE +batman! +2bitches +rey123 +monterrey1 +saun +anutka +sorry +1dream +mikado +jenna123 +putamadre +stocks +120987 +amerika1 +guzman +nokianokia +lostlove +seven1 +buddies +papa12 +maxx +organic +yoda +petewentz1 +708090 +pass007 +hardstyle +matrix2 +rubber1 +rockwell +password91 +getalife +кристина +halo23 +bailey10 +xboxlive1 +jjj123 +dragon15 +newman12 +thomas7 +ramana +cayenne +wertwert +blahblahblah +maggie22 +margera1 +preacher1 +thomas23 +fabricio +chelsea3 +yankees12 +toujours +margosha +12541254 +Jessie +troll +mentor +12351235 +cake123 +martin11 +aa112233 +csyekz +loveme5 +omar12 +qwerasdf1 +718293 +gbyudby +ficken123 +princess88 +scarecrow +r0ckstar +12121990 +dianka +brenda12 +january21 +perez1 +mercy1 +arcoiris +massimiliano +120686 +cho +030609 +markmark +jackson7 +naruto01 +steeler1 +imogen +bigblue1 +5xq57cGseB +Tuermchen +number21 +hannah07 +suarez +000333 +rose13 +mamo4ka +souljaboy +niknik +king01 +196969 +amanda15 +123321s +invincible +august3 +lyonnais +richelle +43211234 +dilara +gamer123 +400097 +brigada +google3 +avanti +ahovwpib +guerrero1 +hel +savita +milly +slayer123 +1106 +50cents +blackmetal +qqaazz +i81u812 +t1gger +midnite1 +hassan123 +randolph +kakadu +LPPnLdTZX +10101988 +trapdoor43 +charlie9 +chloe12 +playa69 +020508 +rerecz +iminlove1 +apple4 +michelin +405060 +qwerty09 +nisha1 +coorslight +mydick1 +vasco +gaygay +szymon +0o0o0o +redalert2 +sangoku +chivas01 +purple77 +custom1 +bbb +400001 +daniel6 +gamecocks1 +stgiles +brittany11 +derek123 +123456prof_root3.sql.txt:, +welcome01 +ig4abox4 +lulu12 +energie +monkey00 +hattrick +bicicleta +london10 +hellno +bearcats +tyrese +49ers1 +hicham +12123434 +happy10 +aidan +susana1 +harley03 +cookie14 +alexis7 +truth +RICHARD +pinkrose +rexona +sweet3 +555111 +dudeman1 +roflcopter +bball4life +gretta +linden +micah +murat +silence1 +jimmie1 +lolly1 +bonethugs +babygirl25 +patrick5 +aka1908 +anthony69 +Computer1 +123456� +fingers1 +infamous +pippin1 +antalya +baldwin +senorita +949494 +ron +edwardcull +101082 +apple1234 +sewing +olivia01 +44magnum +fer123 +carina1 +pornstar69 +Pepper +blowfish +accent +foreveryou +cowboy12 +visual +jonasbrothers +aaaaaaaaaaaa +jordans23 +120485 +altima +rosewood +cameroon +oakley1 +sarge1 +lambchop +morten +sydney01 +Tiffany +dfghjk +breeze1 +cherry11 +lover15 +pppppppppp +flirt +lockdown +francais +angel04 +1superstar +101287 +852147 +coventry1 +111983 +green16 +alfa +ofelia +Hallo123 +amanda18 +woaini521 +asstastic +amber13 +brock1 +COMPUTER +niko +nicolo +lala22 +zeeshan +magadan +greentea1 +qwerty14 +sunshine6 +dongdong +jomama +zigzag1 +010109 +okidoki +leomessi +fuck23 +titleist1 +123dog +contacts +101289 +hungry1 +in2806rbk +stefani +veracruz +conway +jitendra +lexington +gandon +octobre +seatibiza +alex05 +today123 +balloon1 +marcelo1 +tmoney +wingnut +atdhfkm +kbctyjr +HANNAH +sakuragi +sonne +sweet! +fight1 +jeremias +mikkel +198811 +101290 +locoloco +ilia16739 +htubyf +punjabi +filipino +koukou +molly11 +JUSTIN +mourad +percy1 +highbury +family05 +beautiful7 +annann +cheer13 +defense +disney123 +peace&love +thetruth +babygirl. +single12 +books1 +olo65b6666 +qsdfgh +jess1ca +nascar08 +jigga1 +rapunzel +alexei +hyacinth +1elizabeth +14521452 +mohawk +melissa3 +skater7 +110388 +hunter6 +chelseafc1 +Richard1 +135 +flowers12 +wellcome +kristopher +buzz +j3ssica +nakamura +redneck2 +maddy123 +nitro +reggie25 +hardrock1 +12345678t +owen +blink1 +morgan13 +brianne +bear1234 +booger2 +112244 +offspring1 +600042 +mike15 +alex25 +charlie22 +3030 +quinton1 +mike08 +michi +natale +12345trewq +asdfghjkl;' +taylor07 +newbie +optimist +bassoon +jayden123 +dawid1 +flower10 +vedder +fuckm3 +roflmao +purplehaze +150150 +gilligan +dionne +marlin1 +3429795 +macbook +baker123 +josiane +yorkshire +110589 +baby77 +11211121 +dragon00 +ashley24 +fallon +tyrell1 +noah123 +ramadan +1buddy +draco +webster7 +tretre +volkov +romanov +fuckyoubitch +25tolife +sugarplum +147852963 +baron +chesterfield +230388 +andrea13 +spider2 +baseball27 +sexyone1 +10111213 +perro1 +sidewinder +okinawa +chevy123 +pervert +david4 +forester +whatever. +dickie +force1 +fresita +torres09 +arlene1 +anthony09 +mememe123 +marie01 +chevy69 +delta123 +tarantino +pheonix1 +1password1 +brandon08 +connected +dunhill +katelynn1 +margie1 +diamond4 +cheetos +2828 +disco +zaxscdvf +clock +classof10 +cloudy +ginger13 +ziomek +bolero +millie123 +wilson123 +jesus4 +gewinner +cassie2 +dallas13 +1poohbear +270787 +limerick +kodiak1 +hinata1 +ZXCVBN +cghfqn +bluebear +Angelina +usnavy +reefer1 +9379992a +weare1 +mallard1 +051988 +korn666 +del +jesus09 +junior7 +андрей +noemi +rebeka +happyme +mustang99 +camron +290989 +alphonse +riders +godfrey +10121012 +football51 +denise2 +pass12345 +123456prof_root2.sql.txt:, +soccer04 +industrial +puneet +420420420 +justin8 +1207 +angel89 +trance1 +chicago2 +rockstar13 +robson +mydaddy +dayton1 +w1w2w3 +blaise +120888 +blue07 +jayjay2 +Manchester +sidekick2 +lighter +pitbull2 +gatsby +nurses +ilovemommy +jeremy2 +cali123 +misery +amanda23 +gbgrf +benjamin2 +201201 +cherish1 +azer +ashishbiyani +135797531 +060708 +sometimes +fifa09 +coffee123 +120585 +kalinka +sarah13 +raiders123 +drums +cadence +bigfish1 +584131421 +makarov +jacob11 +100688 +th0mas +nene12 +carlo1 +a11111111 +jayden09 +88889999 +rene +virgilio +lmao123 +солнышко +kush420 +123400 +titoune +dogface +a123a123 +MOTHER +eroticy +1bigboy +mika +raja +tennis2 +cneltyn +111980 +dell1234 +iluvyou2 +leighton +alexander9 +myspace33 +kobina +012345678910 +elektra +http://www +gol +jj123456 +grammy1 +110789 +130588 +artemis1 +beatriz1 +amitie +cutie7 +alexis5 +calcutta +geibcnbr +jeanne1 +Genius +doghouse1 +nick22 +onelove2 +megan2 +147123 +biggirl +mnmnmn +1031 +peanut22 +merlino +manyak +hilton1 +blue52 +chanchan +auggie +macgyver +chemist +suck +sporty1 +520123 +jazzy12 +gracie2 +S9QxA9Yn9Cc= +ahmad123 +120988 +lovealways +110487 +turismo +summers +1120 +suckit2 +STALKER +cookie101 +pittbull +terror1 +nicole19 +football30 +ross +kirsty1 +fling1 +sesshomaru +russland +bubbles4 +imsexy +joshua4 +thatsme +tabasco +ou8123 +downtown1 +selina1 +plies1 +savior1 +1cheese +plymouth1 +manga +erica123 +Virginia +universe1 +explore +detective +sa123456 +bigboobs1 +emploi +143445254 +cocochanel +08082008 +4242 +crazyboy +joshua06 +cowboys21 +destinee1 +forsaken1 +gaylord1 +tiziano +lekker +ytngfhjkz +junior21 +jeannie1 +322223 +brabus +bitch24 +o0o0o0 +priest +bettyboop2 +jose14 +gfgjxrf +david15 +afghan +asdfghjkl2 +l1234567 +september6 +andrew69 +zxc12345 +deathmetal +water5 +thelma1 +flip +abcd4321 +asdf4321 +paint1 +sweetbaby +vfylfhby +20080808 +furkan +camino +star55 +janeth +owen10 +lovely11 +volkodav +orange4 +gremlin1 +lions +10001000 +258025 +@yahoo.com +dima1995 +skater14 +FOREVER +doris1 +bogota +9268356683 +pinkgirl +greenapple +121291 +dragon24 +nana11 +110989 +trent +forever13 +ladybugs +110065 +aslan +hollister5 +Angela +1227 +zxcdsa +cyy813zRvR +210588 +1david +vanguard +emma1234 +nadeem +evil +metoyou +phenix +aliyah1 +grandma3 +mexico15 +ilovetyler +ottawa +paradiso +bella10 +rockstar7 +sexy12345 +capullo +yellowcard +renaud +101010a +12345666 +pepsimax +shamil +dance101 +ababab +tooshort +Samantha1 +shelby01 +520520520 +cheese13 +01478963 +alex77 +shorty10 +9874563210 +rebecca123 +224422 +nachos +�+�����+��� +1478520 +shamus +420smoke +tahoe1 +cinder1 +7890 +11223 +shocker1 +rockstar10 +mustanggt +furniture +everquest +221288 +harryp +chetan +197300 +mailbox +solo +guyana1 +hottie6 +chrisb +jessie01 +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +3344521 +misskitty1 +lalala12 +000ooo +abbie +214214 +google11 +258258258 +macbeth +orgasm +ghbdtn1 +myboys3 +kaden1 +bluetooth +remote1 +stranger1 +1qa2ws3ed4rf +topgear +bartender1 +john3 +louise12 +heartbreaker +trucking +141001 +112233aa +snapon +daddy7 +emmitt +jaqueline +12251225 +JUNIOR +skyblue1 +fabolous1 +keesha +fxzz75 +healthy1 +jajajaja +molly01 +elisa1 +qa27111985qa +cooker +vthctltc +1133557799 +passwerd +whyme1 +qwerty56 +vfhrbp +1jackass +deshawn +beograd +datnigga1 +rostov +transformer +fruity1 +salina +CHELSEA +Olivia +blunt1 +password101 +amor13 +grunge +chocolate. +rugrats1 +A123456a +blade2 +romania1 +1joseph +pavlov +amanecer +tubby1 +lambda +credit +400063 +shadow88 +fortune1 +pawel1 +toomuch +1madison +vjhrjdrf +willy123 +bronze +niggaz1 +fusion1 +ckfdbr +buggy1 +uruguay +1tiger +schmidt +guitars +wtpmjgda +poetry1 +sunshine09 +sweet6 +131211 +hockey33 +aremania +pinnacle +glory +пїЅпїЅпїЅпїЅпїЅпїЅ@mail.ru +quinton +lexi +bigdog2 +gmail.com +cheer07 +cerveza +allblacks +Soccer +dancer87 +kotek +sweet7 +марина +guitar3 +august6 +screwyou +100888 +120486 +198622 +fordtruck +green77 +bb123456 +sujata +nygiants +ibrahim1 +funfun1 +jason01 +boobs2 +betsy1 +beautiful3 +231188 +iceland +trees +cool101 +maymay1 +bimsta +sassygirl1 +matthew23 +hannah14 +lovers! +alex101 +123412341234 +5203344 +jimboy +babushka +jacob3 +tommyboy1 +subwoofer +blu +maestro1 +iloveyou77 +560075 +jesuslove +10101986 +rookie1 +sonnyboy +michelle8 +princ3ss +dolly123 +cherry3 +leon123 +greenday7 +hannah6 +samantha7 +dorian1 +135789 +hihihihi +cookies3 +work123 +naruto99 +shinobi1 +retarded1 +suckit! +asgard +shithead2 +florentina +memyself +maddie01 +december9 +120487 +123321qq +jenny2 +jesusislor +james17 +idunno1 +rukawa +evergreen1 +recipes +eatme2 +player3 +emily13 +blaze123 +Mustang1 +jas123 +1raiders +otto +davidson1 +bluegrass +shanthi +salmon1 +warcraft2 +iloveben +gurudev +carolina12 +keith123 +mollymoo +crayola1 +Patrick1 +olives +bartolo +polish +peanut5 +aguilas1 +khalil1 +uptown1 +chicken. +movie +wilfred +222888 +12141214 +dipshit1 +143001 +shauna1 +tri +duracell +5683love +nostromo +1yellow +molotov +officer +1dancer +dorina +cla +green33 +000011 +howdy1 +492001 +prettygurl +astro +jason5 +00998877 +icecube1 +ilovepink1 +carlos22 +120989 +vfvf123 +carlos23 +Matrix +puffin +vfnbkmlf +bubble2 +gomez1 +charizard +wookie1 +naked +mikey12 +superman6 +destiny4 +raissa +franny +miguelangel +weiner +costa90 +CARLOS +school11 +dom123 +samantha13 +�+�����+�����+�����+�����+�����+����@mail.ru +lerochka +apple23 +560093 +sosiska +rfnzrfnz +1008 +blowjob69 +carlos3 +maggie7 +hard +skylark +bball32 +200588 +dandan1 +hemant +midway +543216 +naruto15 +oxford1 +8080 +belfast +hottie21 +sofiya +filosofia +nothing2 +bunnys +smart123 +flossy +sowhat1 +mysterio1 +happylife +ginger22 +family8 +september5 +guitar11 +squeaky +shitfuck +frisky1 +mariamaria +saranya +111982 +pussy23 +password26 +saturday1 +svetka +170986 +lfhbyf +123! +denisse +buddy10 +superman. +mangas +different +fatiha +shannon12 +pratibha +freedom11 +chispa +james18 +orange23 +callofduty4 +pf +3131 +godschild1 +amber11 +football72 +ghbdtnghbdtn +94793763 +friends6 +olabode +celestial +emo4life +tripod +1redneck +pinhead +fs7600 +pendragon +whatever11 +martyna +whitey1 +BATMAN +alex2008 +mike24 +jacque +harriet1 +hobbit1 +punker1 +film +daniel09 +123hello +sslazio +400092 +fantastic1 +jason21 +pipiska +loveme. +morozov +retire +shorty21 +dipstick +murugan +dasdas +121989 +charmander +paragon +shay123 +1234576 +n111011 +Christopher +tacos1 +cupcake3 +peaches3 +crazy69 +goofball +alias +timothy2 +boulder +alex777 +bulls1 +sysadmin +sparkie +jaden +amanda14 +yankees27 +drumline +24081986 +morgan10 +sneaky +sakura123 +austin5 +pepperoni +decembre +strider1 +ilikepie2 +laserjet +conchita +travis2 +courtney2 +jellyfish1 +philou +leviathan +cameron7 +200300 +chance123 +marlen +333222111 +tweety7 +lin +friends13 +monday12 +methodman +fleur +timeless +lbfyjxrf +carmen12 +anth0ny +231231 +damion1 +adrian2 +sparky2 +nigga3 +loreto +eastern1 +dammit1 +chance2 +fatboy12 +ryan22 +120887 +130988 +montenegro +taetae +emily3 +tigger14 +122 +george3 +thor +memory1 +oriana +2580456 +daisuke +worldcup +edgar123 +fucker. +sunitha +sonia123 +deguzman +natasha123 +topbutton +god1st +poop25 +meandyou2 +carletto +chip +mcfly1 +pepper22 +tonight +daniel69 +bimbo +mantra +deleted +palembang +whosyourdaddy +rock1234 +champs1 +hotgirls1 +claymore +2hearts +Stephanie +Q18lG49iq8BhU +varsity +palestine +makenzie1 +mooses +graziella +z1z1z1 +foot +bitch8 +aventura1 +221286 +triumph1 +12241224 +blackmagic +balloons +achtung +wonderwall +buttface +zxzxzxzx +nathan3 +carioca +temple1 +nelly123 +ddddd1 +133133 +loki +tiger4 +class2011 +411007 +yinyang +lindas +gangster2 +peterbilt1 +garuda +babyboi1 +chris20 +rachel11 +merlin123 +byebye1 +abuela +metro +197000 +buster7 +oluwasegun +250587 +321cba +kenworth1 +loca123 +duke11 +rico +kahlua +alla +harper1 +sexy88 +killswitch +black69 +acidburn +scareface1 +payday +111187 +12311231 +katie3 +newyork7 +weedman420 +buddah1 +yetunde +samara1 +only1god +alex20 +vlad123 +itsasecret +ketchup1 +120986 +vancouver1 +br +Nicolas +tianna +13579246 +four +mountaindew +angel007 +machoman +301087 +steelers86 +berserker +BABYGIRL +warpten +yourmom69 +jajaja1 +1911 +karine73 +Patricia +greengrass +120889 +carotte +madison11 +clarice +minerva1 +guadeloupe +77778888 +toto123 +sydney12 +peter12 +james16 +jocker +marialuisa +jos +carter2 +baby89 +lisa1234 +68mustang +a987654 +xtreme1 +cocacola12 +robertson +christiane +FLOWER +123myspace +cancun1 +strike1 +1015 +helsinki +p00hbear +12qwasyx +ginger3 +dazzle +23wesdxc +peace11 +pianos +091209 +hollaback1 +countrygir +cs_000 +fatoumata +tumadre +javier123 +baraban +ban +tequieromucho +edward01 +arshavin +daniel20 +hibiscus +profession +abc.123 +miaomiao +sexy55 +angel33 +bidule +cherrypie +aztecs +wetpussy1 +ANTONIO +jesus14 +joshua14 +bella3 +bullrider1 +bmw +lunchbox +frog12 +happys +220788 +loveu3 +collie +logan12 +suzana +shana1 +amadeus1 +heaven123 +neoneo +121186 +1233211234567 +cowboys8 +john14 +january17 +74123 +skater101 +patches2 +disciple +shadow4 +cross +sexygurl +MATTHEW +kevin01 +nonsense +100689 +klimov +sar +loveyou4 +flower22 +smokes +brooklynn1 +Louise +generic +120490 +bruins1 +chicks1 +nina12 +verano +fuckubitch +madhavi +mu0LFpv2 +110686 +tatertot1 +delfina +18121812 +cancel1 +ruffles +kingdomhearts +asdf456 +198383 +jason23 +110889 +carling +heybaby1 +soprano1 +love123456789 +lucia1 +Johnson +cactus1 +cheese. +fagget1 +1sister +sorrow +success123 +polo12 +rainbow5 +triniti +rainbow69 +dianne1 +luigi1 +pollo1 +786000 +rugrat +penis! +rocks1 +playboy3 +freshman +yo +mexico23 +iloveu11 +loaded +redeye +1234567v +bball4 +dortmund09 +commodore +karamel +brian2 +softball24 +amore1 +nigger5 +emolove +baseball44 +p0o9i8u7y6 +track +datsun +ranger01 +iamgreat +joshua18 +127127 +kolkol +oberon +shana +090989 +buster5 +caution +evaeva +december6 +bitch420 +chevy454 +manny123 +adams +dumbledore +marmar1 +return +stockton +vidanova +ford123 +diamond6 +iris +bebeto +231090 +changes1 +password78 +speak2me +mami123 +110389 +kirakira +110888 +lottie1 +monster! +barrett1 +crespo +theworld +killer007 +augustin +gilmore1 +mus +aini1314 +rjcvjc +amit +sweetu +turnip +darknight +ilovecody1 +spillo +k1ller +julian12 +5252 +1216 +Maverick +alicia123 +hogwarts1 +jose11 +boom123 +tamerlan +happy69 +cadence1 +sixpack +lovey1 +john69 +198911 +001973 +wingman +120187 +chessie +iluvu! +beverley +hotmail2 +110088 +capcom +marcela1 +mia +hehe123 +patagonia +paris75 +lovable1 +223223 +david07 +sober1 +sofia123 +save +drew123 +custard +sgdHhfC4x2 +freddy123 +maritza1 +02021987 +kzkzkz +luckyone +knuckles1 +1qqqqq +gnusmas +mimoza +brooklynn +ivana +November +8letters +grimreaper +discus +technics1 +trustn01 +daniella1 +jomblo +crazy7 +geisha +intelinside +cardenas +annalena +nicolas123 +pig123 +bbbbbbbbbb +scooter3 +gracie12 +lazaro +lanena1 +jjj +henry12 +storm123 +gangsta7 +blue56 +upyachka +matthew9 +starlite +smile3 +marie08 +help123 +220687 +eliza1 +nastja +121185 +address +partygirl1 +dragon101 +william13 +1qayxsw2 +costarica1 +nihao123 +bluejays +babygrl1 +hilltop1 +vampire666 +wankers1 +shalimar +iseedeadpeople +play123 +command1 +smartass +harley3 +carlos21 +bilancia +polipo +georgiana +speakers +rescue1 +cheese22 +135531 +123lol123 +candyfloss +freefall +clifton1 +mouton +BUSTER +moumou +198522 +Chris +123445 +fucker5 +hannah23 +whatwhat1 +blondie2 +matt13 +biatch1 +12121986 +bisexual +taylor23 +daddyo +savannah2 +teamo2 +mexico9 +ganapati +120790 +rrrrrrr +zebras +cosmo123 +daniel06 +sandrita +198012 +12356789 +shinchan +peppers1 +indigo1 +khankhan +asd123123 +321987 +Edward +california1 +solitaire +orchidea +january10 +jaihind +ginger7 +316316 +katusha +family09 +811224bai +pizzas1 +nemo123 +amanda16 +typetogether +hedwig +sugarbaby1 +bb1234 +pajarito +bootsy +bitanem +my123456 +dwight1 +worldwar2 +121988 +12many +punk12 +1111aa +ich +Cooper +22061941 +carnage1 +suburban +gfgfgf +gabriel7 +nicole25 +210688 +vijay123 +vladimir1 +kareem1 +arrow +1217 +ben10 +profesor +january28 +123sexy +popcorn3 +slipknot13 +0202 +Friends +element5 +flower13 +1rockstar +openopen +shuttle +my4boys +jimbeam +420000 +vodafone1 +phones +bailey7 +tombstone +gasgas +sambo1 +jackie01 +woainima +loco12 +analog +741147 +lamejor +feelgood +jayla1 +love4all +vaishnavi +banks +beautiful! +masyanya +jordan17 +provence +jameson1 +luckey +110786 +softball16 +abraxas +killah +hawk +camcam +doggy12 +Isabelle +yourmama +vinay123 +gostosa +angela2 +Garfield +1drummer +snappy +qwerty90 +daddy23 +6789 +filipa +joshua99 +watford +sangita +12121988 +sup3rman +mydick +argent +loveall +fhvfutljy +joaquin1 +fresno +rocko1 +shippuden +rosina +poop99 +michelle69 +flower! +110990 +tx9Z6ht5eO +luckys +u6kz2lppto +raghav +pompiers +123123qq +benjamin12 +minimini +miguel13 +pentium1 +Vincent +pandas1 +pugsley1 +secreta +diving +summer23 +happy101 +balong +lamine +556655 +babes1 +flaquita +bamako +emily11 +razor +1369 +happybunny +koolio1 +fuckthat +forgive +building +bel +pooky1 +asdasdasdasd +tomasz +kantutan +100486 +cherry5 +prospect +a2a2a2a2 +shizzle +muffy1 +hunny1 +rockydog +hunter05 +fafafa +liefde +123qwe456rty +cedrick +jordan18 +220288 +denise123 +leanna +defender1 +trinity7 +rollin +jun +weiner1 +roseline +helloo1 +pussylover +notorious1 +mummypapa +pA1ub65udD +pepper3 +neenee +ab12cd34 +thizz1 +millos13 +ch33s3 +cutie15 +junior09 +papercut +december4 +07071987 +sitaram +lanena +wallpaper +171 +eduarda +blue08 +jojo13 +010185 +221088 +GoxyBoib +beaumont +whore123 +casey12 +pepsicola1 +lauryn +crayola +z010203 +birdhouse1 +mousey +1234567qwertyu +cowboyup1 +qqqqqqq1 +godswill +dragon! +fighting +sas +vk_vk_777 +Sabrina +qwerty15 +loraine +superb +music01 +moustique +deskjet1 +7788521 +melissa13 +caligula +sco +canes1 +survivor1 +bombers1 +moment +matthew! +chelsea13 +goodnight +120188 +Samuel +Batman +lizzy123 +110590 +sadie2 +xzsawq21 +intheend +miss +dtkjcbgtl +chippy1 +deandre +110045 +nirmal +snikers +libera +bowl300 +tool +biscuits +jenn1fer +fuckhead +01011978 +pookey +legoland +idontknow2 +kashif +pepper7 +sting +killer! +021084 +alonso1 +jane123 +kendrick1 +cheska +1234go +innocent1 +winter10 +slippers +jasmine8 +10101985 +xsw23edc +doobie1 +scooby-doo +goirish +sexy100 +elvisp +6poppin +topsecret1 +johnny7 +superman14 +201088 +bong420 +lover6 +198210 +zero12 +namaste1 +assfuck +yankee2 +firdaus +audir8 +123456789987 +redwall +pineda +chameleon +111111s +skeptron +crissy +juanmanuel +football31 +makita +dexter12 +blondinka +hopper1 +january25 +smiths +stonewall +maggio +1stlove +junkie +saturno +kelsey12 +ruby12 +blinky +roselyn +blunts1 +january2 +dipset2 +thc2000 +mysterious +champ123 +creator +bhbcrf +minina +babygurl01 +12121989 +maggie! +london99 +himmel +191 +hope12 +lori +ilovejason +анастасия +bailey3 +vorona +knowledge1 +pekpek +bigass1 +brandy2 +element7 +miller12 +nissan240 +ibiza +120685 +1hannah +anaana +1128 +deuce2 +fabiola1 +dance! +christa1 +lucydog +hahaha3 +140289 +pumkin +hambone1 +marley420 +sucess +bambola +dagmar +jesse2 +1478 +cheer11 +luvbug +seminole1 +110489 +cubalibre +cooper01 +tony14 +wade03 +masterp +netball +catcher +ashley9 +dallas21 +nico123 +peluche1 +angelz +morocco +emo +sergio123 +eliza +eumeamo +crusher +jingles1 +thrasher +chikita +egor +easter1 +230689 +kassie1 +567765 +postman +kukuku +Abc123456 +krypton +pussy13 +francesco1 +bowman +music4 +bhabes +guadalajara +juan23 +jologs +jared123 +snoopy7 +0p9o8i +evgenia +cole123 +786 +adrenaline +jiggaman +password12345678 +justin06 +ghj +sandy2 +100585 +oooooooooo +code +rkfdbfnehf +gaming +lolol1 +gary123 +fbU89bxx5F +babygurl15 +fatfat +starlet +frenchy +MUSTANG +ver +fucku3 +flvbybcnhfnjh +220688 +123456love +maggiemae +000000q +silvester +foreverlove +jeanie +subzero1 +facebook12 +green9 +hounddog +lion123 +jacob13 +yokohama +karuna +printing +11223344a +parol +bitchs +smileyface +carlito1 +301090 +whatever5 +piccolina +05051985 +bigbuck1 +olgaolga +usmc1775 +5454 +chips +ioioio +ilovejake1 +150585 +senveben +vanity +godofwar1 +fuckyou99 +acdc +eastenders +iloveyou25 +allegra +topolina +vertical +under1 +kayla13 +tastatura +stokrotka +pokemon22 +sweet14 +EXIT_WINDOW +dotnet +jordan03 +cocopuff +12121 +gameover1 +pizzaman +3151020 +braden1 +bowwow12 +gogo123 +biggirl1 +olatunde +sashasasha +makmak +sunshine19 +mom&dad +198912 +skynet +silly123 +copper12 +vbhevbh +chris25 +angel12345 +ready +rainer +pooh13 +poopoo12 +watever1 +flyfish +#1hottie +lucky101 +tori +luvme2 +godofwar2 +220488 +prabha +blowme2 +construction +poornima +EUdlEKB645 +sunsun +a0123456 +frimousse +fars419 +001986 +nature1 +daniel9 +jordan02 +acosta +rockstar11 +chocolate123 +iloveyoubaby +1ladybug +198722 +nyt +my3babies +il0veu +andrew08 +sommar +wings +orchard +120385 +harley99 +glamorous +girlygirl +anupama +nurlan +231189 +jules1 +1233214 +121003 +jennings +harley7 +f14tomcat +spinner1 +eagles36 +shekinah +sexy26 +1christian +sylwia +qazqaz123 +buckshot1 +mama12345 +alcapone +noob +nirvana123 +duck123 +meuamor +okay +hannah06 +hooter +08081988 +eduardo123 +andromeda1 +january14 +war123 +iloveyou99 +woman +castello +minmin +kimberley1 +prabhu +grandson +sadie12 +mooney +mamasita1 +bigbutt1 +nicole20 +supercool +boston123 +2244 +w1965a +albert123 +junaid +4brothers +arjay +kwiatek +master23 +apple13 +1212312121 +catnip +jennifer11 +4twenty +mexico86 +jessa +jetaime1 +zuzana +psalm91 +classy1 +9thward +crayon +szeretlek +1111114 +bubbles01 +chaos123 +iloveyou +nokia2000 +890 +whitetail +a789456 +001985 +120390 +10101984 +mylife2 +porshe +loveu123 +tester123 +family08 +1108 +sanpedro +damage +garnett +saratov +alex19 +stefanie1 +juanjo +dragon18 +docrafts +besties1 +dadmom +2pretty +sting1 +fynjybyf +bert +twiztid +hello111 +elizabeth6 +senior10 +inspector +120785 +password1234567 +takecare +origami +fuentes +trujillo +4meonly +1127 +dino123 +sweetmother +hondas2000 +tucker123 +eldiablo +camping1 +pet +cameron5 +master1234 +cutie09 +110062 +atlas1 +MARINA +oluwole +boomer123 +creature +SANDRA +giordano +secret01 +iphone3g +wakeup +ladybug7 +bennyboy +ginger5 +cameroun +1028 +101284 +soloio +100487 +barney12 +kasper1 +corrie +goonies1 +bowhunter +diana12 +sugarbaby +1234me +1sexymama +mirko +coolest1 +spalding +amapola +snowball12 +funnybunny +spencer2 +stephy +1412 +bigbooty +koliko +123121 +cocker +franzi +smoothie +phillips1 +cnhtktw +kapitan +ashley06 +supermen +noob123 +121277 +lokiloki +dickface1 +new_user +2friends +ihateyou. +sara1234 +funtimes +blackjack2 +13691369 +avgust +bumbum1 +saheed +grape1 +crazy3 +543211 +westside3 +jewell +lollipop2 +baobao +1forever +understand +wireless1 +starr +jordans1 +zimmer +paulita +sonoma +melani +harvest1 +shadow8 +sasa123 +babygurl10 +davida +201090 +annick +london2012 +130688 +mamama1 +death12 +fuckin +killbill2 +110690 +annamarie +1109 +120386 +olya +six6six +tink13 +120584 +123520 +coco13 +highway +bubba3 +gabby12 +21122012 +jenny13 +trainer1 +loveme09 +01011992 +steven13 +240484 +samantha01 +10101980 +120484 +a1b1c1 +bojangles +anthony18 +angel28 +15963 +robyn +qwerty2010 +bucket1 +acmilan1 +bullshit! +pimp08 +chocobo +irule1 +sheeba1 +miami123 +espace +twenty2 +squishy1 +QAZWSXEDC +230588 +Cameron +lickme69 +1Q2w3e4r5t +acer +yomama123 +pink33 +012 +crazy5 +147852a +edgardo +dbz123 +jordon1 +one23456 +QWE123 +holiness +australien +turkiye +saphira +hanane +tuborg +mickey22 +110386 +121187 +cartagena +high +green18 +pisica +gfhjdjp +theman12 +ball12 +001984 +louis123 +toaster1 +sssss1 +taylor15 +acura1 +widzew +onetwothree +cromwell +treacle +gogetta1 +yourmom. +maddalena +jezebel +senior1 +malagu +121200 +jelly123 +Rammstein +sierra12 +iloveit +alexandra2 +andika +mountains +sharingan1 +3aNs97t397 +1346798520 +destiny01 +spiderman9 +south +555666777 +t-bone +159456 +0808 +brownpride +chivas7 +fiesta1 +elephant2 +gay +supers +xxx777 +january27 +blue101 +198310 +bonovox +me2you +becool +ladybug12 +SAMUEL +skates +trees1 +inter1 +mama13 +byajhvfnbrf +fiorellino +bigbaby1 +beerbeer +grace2 +cowboys24 +spurs21 +MARTIN +Michelle1 +kevin3 +phoenix2 +senha1 +nigger. +Ferrari +dancer3 +222666 +3brothers +vwgolf +230589 +springfield +alinochka +black9 +shorty22 +redeemed +sinatra1 +900900 +secret11 +12031990 +ericka1 +greenman +cornbread +tigris +olabisi +oneday +chipmunk1 +mustang05 +terranova +ariel123 +finally +spa +septembre +warlord1 +ladygaga1 +tsunami1 +alex1994 +lightsaber +smokin420 +shamanking +aaliyah2 +qwertyuiopasdfghjkl +cummins1 +thomas! +beethoven1 +lionelmessi +14321432 +snicker1 +melany +jazz12 +joshua05 +44445555 +nikolka +richboy1 +cookie21 +1017 +peaceandlove +russian1 +jasmine6 +peanut! +johnsmith +football75 +gtnhjdf +january7 +versace1 +198812 +vineyard +951753aa +131189 +frankie123 +1hxboqg2s +january16 +deltaforce +80808080 +hanumanji +lancaster1 +lala13 +Charles +frogman +myspace25 +120287 +258 +Florida +pussy11 +zaq11qaz +leeds +maldonado +joshua09 +2cute4you +polska12 +iluvhim1 +discovery1 +521314 +123345 +welcome3 +djljktq +samantha! +redalert1 +beastmode1 +astra1 +love78 +axel +221287 +chillout +diamond11 +dina +7654321a +smiley12 +mickey5 +Denise +harley10 +angelwings +121281 +eva123 +maniek +ezekiel1 +melina1 +alfie123 +barcelona2 +jack22 +sparky11 +02580258 +corky1 +polly123 +sunshine08 +geraldine1 +120190 +royalty +dingding +maya123 +ANGELA +cholo1 +willsmith +jasmine9 +nothing0 +parigi +kalyan +helpmegod +justin99 +311 +050588 +agata +larkin +trish1 +gertie +2bad4u +farhana +dragan +redapple +5566 +zachary2 +159789 +shiraz +mamans +sex4me +baby_girl +kicker1 +181 +11223300 +mitico +sassie1 +hawthorn +mailman1 +wildfire1 +poopsie +280888 +32103210 +kmzway87aa +hobbes1 +ichigo1 +january18 +fran +candyland1 +111289 +ladybug123 +basketball23 +poopie123 +yeah123 +1411 +r2d2r2d2 +seventeen1 +alex1993 +isaac123 +january15 +writer1 +whiterose +simply +volunteer +summer6 +babygurl16 +glendale +batuhan +ilovedad1 +yjwfn73J +marcos123 +familyof4 +20091988 +jaclyn +poppet +pepper! +100588 +adminadmin +blue09 +every1 +tipper1 +lalala3 +avenged1 +chelle1 +moemoe1 +password28 +Slipknot +Andreas +persib +159753q +badbitch +glasses1 +volare +petunia1 +monique2 +senior2010 +natnat +snickers12 +spoon +woodie +paroll +teatro +casper01 +11001100 +soccer45 +p1234567 +221090 +loveforeve +140290 +220689 +freelancer +fanta +commander1 +numlock +bermuda1 +w111111 +aline +pimps1 +100490 +feedback +234432 +bluedragon +sweet22 +assholes1 +hidalgo +gangsta5 +matter +harmonie +bigmike1 +morgan3 +gonzaga +ybrjkftdbx +basil +hurensohn1 +guitars1 +southafrica +daniela123 +verseau +vans123 +muzika +massey +ronaldo99 +251088 +blueblue1 +steel +man12345 +happy21 +isa +winter06 +theo +hotshit1 +slayer69 +1cowboys +atmosphere +sankar +january19 +Porsche +westie +oc247ngUcZ +120787 +lorelei +milenium +pajaro +253634 +Murphy +prachi +1QAZ2WSX +19531953 +aleksandar +barcellona +00123456 +space4me +reddragon1 +lastfm1 +0505 +class10 +bubbles8 +12312 +jessi +tito123 +bamboo1 +tyler14 +250788 +applejuice +yellow10 +precious12 +julissa1 +rock666 +malaika +1113 +burgess +leone +freedom4 +josh14 +251 +666000 +hitman2 +mickey10 +madhatter +walton +369147 +thomas5 +bubbly +tabby +catman1 +jake22 +lord123 +maddie2 +hannah09 +12121991 +stuff1 +baubau +250589 +jeanpaul +money20 +jayden01 +221289 +greta +djdjxrf +dawgs1 +michoacan +chocolates +789632 +vickie1 +000005 +gogogogo +090990 +delta88 +dolphin123 +metalhead1 +lalala! +kitty4 +carmina +sweet21 +120786 +bigass +ilove4 +1812 +askim +rfntyjr +12345678i +fuck14 +fausto +degrassi +fatgirl1 +96321478 +patrick11 +qwepoi +mauritius +daisy01 +jose23 +12ab34cd +mclovin1 +vicious1 +piyush +long +earth1 +angel55 +mensuck1 +nokia1100 +edward3 +muneca1 +zackary +ariete +bubulina +211288 +guitarman +230988 +himalaya +jolly1 +demetrius1 +rebecca2 +02 +valeriy +6173580 +jose15 +supra1 +ashlynn1 +234 +FRIENDS +bowser1 +newworld +pooja +informatica +120886 +asdfg1234 +alskdjfhg +katzen +m1m2m3 +1horse +bling +udacha +higgins1 +january26 +czz123456 +octavio +rom +123aze +complicated +12345u +dkflbvbhjdyf +live +6y4rV0a992 +evangeline +fuck777 +110890 +empress +jonathan13 +izabela +sassy101 +gunslinger +1richard +bandit11 +101186 +lincogo1 +caprice1 +tit +nikoniko +advanced +2311 +Arsenal1 +darshan +harley05 +kanarya +00000007 +volcom2 +alex1996 +v123456789 +1heaven +coolest +mother1234 +82468246 +.......... +love1995 +fenway +rocky6 +cheerios +12121985 +prince22 +jensen1 +workhard +kk1234 +raj +pacers +poontang +maelle +1q3e2w4r +oscars +jason22 +198181 +250388 +okmijn +dogsrule1 +kerala +9090 +maltese +jose10 +shinichi +nakita +bella22 +gossip +baller4 +Asdqwe123 +chiquito +thalia1 +akira1 +241188 +infotech +soledad1 +121086 +yasser +seos1234 +halfpint +davina +stopit1 +fuck-you +david17 +Natalie +popcorn7 +rudolph +cj +ttttt +carver +asdfgf +weston1 +anand +180180 +guildwars +lolilol +acer123 +410210 +241088 +shobha +console +hollydog +bullfrog1 +password94 +love1994 +230987 +raphael1 +lsutigers1 +booyah +olaoluwa +roxie +1qazwsxedc +yfnfkbz +Alexis +loser22 +coach +vinayak +password05 +destiny11 +5683 +marcolino +misspiggy +dasher +iceice +123444 +karin +sunny2 +1prince +madison6 +capitano +wolfie1 +PassWord +devilman +andrew16 +director1 +tamika +nazgul +020288 +snicker +cris123 +lock +kris123 +cooper11 +right1 +1maggie +marivic +omega3 +jennifer13 +bored +roma123 +ddd123 +niggaz +collection +jetta1 +annabella +roxygirl +100789 +bryanna1 +orange01 +tango123 +130686 +qwer11 +vanvan +ravi +charlie08 +robyn1 +6666661 +piotrek1 +12332100 +milan1899 +david6 +zippy +kitsune +redeemer +tigercat +tomorrow1 +claudiu +bibibi +00000001 +babyboy7 +softball08 +120290 +col +hannah02 +sportster +samiam1 +110788 +sacrifice +psalms +grenoble +021 +101081 +jayden12 +cochon +1�2��3��4� +nena12 +andrew07 +dakota13 +lashawn1 +squeak +didi +googlecheckout +foufou +daisy13 +200808 +pawel +rich123 +froggy12 +05051989 +mylove3 +bigdick69 +nguyen1 +j3qq4h7h2v +john21 +excellence +september4 +1234qwert +killer09 +1946 +utn05wWy +st +qwertyuiop12345 +holysh!t +szerelem +kitty! +imperial1 +happiness2 +jessica08 +bobo12 +210990 +martita +dima1997 +weeman +steel1 +louie123 +daniel1234 +pepito1 +taytay123 +brando1 +jacinto +servant +23031990 +spoon1 +rainbow! +july07 +pronto +passe +logout +maniac1 +jesus8 +catlover1 +asdfghjkl9 +loveme1234 +ladybug3 +asdcxz +number14 +211221 +landscape +best123 +spankme +reebok1 +love97 +superman19 +gatinho +asakura +bonifacio +face2face +hack +redsox11 +12345678911 +babyj1 +090988 +phoenix7 +Wanted123 +cuntface1 +honeydew +quaresma +samolet +aassddff +987654321z +fathima +speedracer +phone123 +heyhey123 +ricardo123 +bismark +corinthians +bello +rubbish +mongolia +chavez1 +12300 +iloveyou!! +hubert1 +forever5 +jasper2 +nokia8800 +vitamia +bengals85 +cabron1 +120491 +maxdog +1014 +baseball34 +davies +james24 +12349876 +billyboy1 +sh +130689 +dallascowb +tanya123 +first +camacho +basketba11 +nikole +amanda5 +starz1 +chelsie1 +Smokey +dragon1234 +1026 +superman24 +squishy +maximius +lizaliza +fan +bigcat +hottie07 +wilbur1 +kennwort1 +budgie +aliska +master3 +fuckoff3 +reynolds1 +196666 +mopar1 +trout1 +parola12 +sparks1 +america01 +dreamland +naples +mapuce +Nirvana +77777778 +caring +140288 +wildbill +love1993 +7thheaven +shantel1 +angelfire +121190 +gerber +penguin123 +eintracht +tre123 +anthony16 +terra +chappy +101184 +viktorija +kimberly2 +tanisha1 +911119 +pogiko +seadoo +imperator +11111z +262728 +hunter14 +220188 +kingdom2 +alexander5 +password: +isobel +010407 +5starchick +lover10 +penis2 +daniel24 +garrison +sadness +hamlet1 +fuckhead1 +hollister9 +foxfox +quinn1 +kevin22 +preciosa1 +avenir +marianne1 +sami123 +her +weewee1 +maricris +foxfire +freshman1 +12q12q +kiko +swag +sanane123 +ciara +daisy11 +stephan1 +sexymomma1 +shosho +yesterday1 +amaterasu +princeton1 +qazxsw21 +2000000 +hockey23 +dancer101 +robert! +isabella2 +bloodlust +1nonly +1030 +121084 +carlos7 +amores1 +shopper1 +monkey27 +paolita +schlampe +jennifer01 +210987 +anthony06 +salvo +chuchi +linkme +jas +ilovesex69 +Yankees +123456654 +stop +123456qwert +rockie1 +800800 +aaaaa11111 +roxy11 +Cameron1 +patpat +bavaria +115115 +a222222 +addict +monito +village1 +prisonbreak +perfume +vfvfvf +Darkness +square1 +johnnie1 +godiva +mot +blazers +z123123 +barcelona10 +654 +blah1234 +birgit +halo117 +TIGGER +schnuffi +user123 +130690 +happy23 +contrase+�a +info123 +bububu +shine1 +stoney1 +stronger1 +referee +pin +lola1234 +romanova +mine123 +madison08 +20101987 +sparco +1234561234 +matthew21 +andriy +montana16 +dmitrii +dulce +taylor8 +lookout +blacks1 +iamgod1 +sunny12 +carley +sycamore +110490 +chandigarh +erasmus +ultraman +01011977 +passionate +120387 +compact +fortaleza +420allday +hrvatska +lexi123 +queen2 +novikova +newlove +planning +godfirst +aaa333 +369 +rayray12 +pretzel +karolinka +thornton +sparkey +lockout +texas13 +pongo +katina +q123321 +120985 +love1992 +250590 +cypress1 +internet12 +imthe1 +asdzxc1 +spring08 +leland1 +goodfood +anthony17 +hesoyam123 +brianna3 +moe123 +1126 +monkeys! +asroma1927 +leopardo +horselover +3353212li +linklink +poohbear13 +xxx333 +mike07 +padres +lauren10 +matthew22 +david08 +100388 +espinosa +izzy123 +victor2 +101190 +passcode1 +samina +141288 +vvvvvvvv +1fuckoff +duke01 +f00tba11 +girish +22332233 +boozer +vaz21099 +onelove123 +manasa +catwoman1 +liezel +almost +baller14 +belkin +123456789qq +110003 +120990 +daisey1 +desperados +dolfijn +SAMANTHA +Svetlana +hitler88 +crystal7 +ponies +tupac2 +zinedine +2wsxcde3 +andrew06 +cowboy22 +bohica +princess94 +greenhouse +amylee1 +995511 +herkules +leather1 +143444 +65656565 +josue1 +linux +get +1234567890qw +alex1992 +skeet1 +120890 +roadster +joemama +iloveu8 +babycakes2 +thistle +dre123 +nebula +slipknot69 +hayastan +123098a +top +1playboy +filler +PARTS +2puppies +3141592 +architecture +rubyred +soyelmejor +sonic12 +mouser +gangster13 +newyork5 +tammie +blubber +hotel +waiting +angel00 +111223 +biker +ilovekevin +ambulance +czekolada +zoltan +kitty22 +kisses123 +sasha1998 +Benjamin1 +boss302 +fuckedup +dalejr08 +******* +happygirl1 +clarita +jason3 +dtythf +gatita1 +mommy101 +NBvBB32fa9 +kitty10 +thebeast1 +010181 +computer! +@mail.ru +bonethugs1 +221189 +findus +buddy23 +alexander8 +phyllis1 +password95 +johnboy1 +azzurro +tttttt1 +1alexander +hottie09 +flhtyfkby +gangstar +mymoney +feeling +Diamond1 +contest1 +redsox123 +celtic88 +diamond8 +15975346 +lovers3 +Christina +marquise +110586 +adventure1 +centurion +hiphop12 +death2 +pepper10 +saiyan +superbad1 +united123 +hotty123 +akatsuki1 +07072007 +sweetdream +pap +aisha +admin12345 +lauren3 +shaker +internet2 +attention +110015 +august9 +100889 +jughead +001987 +princess95 +smartboy +rudeboy1 +ocelot +hotbabe +231186 +cutie23 +anna13 +ma +lolz +miguel10 +spiffy +rhbcnbyjxrf +jeanine +blackbelt1 +231088 +willywonka +ironman2 +music22 +exchange +120885 +denny +hesoyam1 +smurf +manuelito +excalibur1 +1234578 +1928374655 +oatmeal1 +michaels +ninja2 +waldemar +mavericks1 +metalhead +shikamaru +dee +lucy1234 +tonka1 +bitter +doors +iluvu123 +kenny12 +makenna +lilwayne3 +junior07 +ve +hannah05 +belarus +400058 +kayla11 +panther2 +q2w3e4r5t6 +elektro +ppppp1 +aberdeen1 +baby143 +babette +110985 +sa2rawybas +football80 +purple99 +camilita +olds442 +231286 +mandela +avrora +150388 +homerj +petite +charles3 +all4you +candy01 +kozerog +livewire +johnston +getmoney5 +marciano +karmen +herohonda +sexymama2 +alonzo1 +clay +agente007 +karoline +brandon16 +booboo7 +jet'aime +fuckher1 +pebbles2 +thugstools +monsoon +queen12 +spoons +kane +juju123 +edward! +monies +369874125 +2wsx1qaz +josh23 +890iop +hamza +wordup +123456kk +qwer123456 +vlad1997 +shadow16 +drago +getmoney12 +sdfsdfsdf +rockhard +ktutylf +witch +vicious +veronica12 +411028 +boating +eric1234 +love42 +tweety11 +air +nathan10 +greatday1 +allaboutme +purple09 +140688 +198721 +summer8 +goodcharlotte +1music +beetle1 +papounet +001002 +king15 +100827092 +andrew6 +LOVEYOU +JASMINE +matheus123 +111288 +baseball123 +jesus15 +knockout +1234567abc +210487 +islander +bastet +241 +tierra1 +parol1 +dingo +handball1 +dasha123 +tigger08 +rosalina +val123 +natalie12 +abimbola +attorney +corinna +naosei +baylee1 +chingon1 +111186 +british +1597535 +cjytxrj +mickey23 +hotboy2 +tigers10 +CHRISTIAN +olajide +melisa1 +pride1 +1hotboy +0815 +theatre1 +fallenangel +963214785 +wrestling2 +facebook123 +garibaldi +juggernaut +26041986 +01011975 +120483 +ererer +escort1 +nirvana2 +nomercy +cccc +liebe +radhasoami +princess92 +!qazxsw2 +thakur +freak69 +spotty1 +trapstar1 +blackhole +210586 +220022 +gerrard08 +mommy10 +cumming +bharti +letmein12 +five55 +220589 +super1231 +silva +segun +power5 +franz +milkyway1 +travel88 +jesus666 +ayobami +vasquez +Yankees1 +29 +kb9zc8uxtx +kylian +1george +freedom5 +benita +nightwish1 +cameron01 +stunner1 +kevin21 +ser12345 +blahblah2 +ashley20 +lyudmila +bigpimp +horizon1 +hotsex1 +diabetes +arrowhead +master21 +heaven12 +missouri1 +PAKISTAN +kryptonite +jledfyxbr +pramod +hippos +maranata +faith12 +bmw325i +vic123 +cambodia +foo +wolf12 +emogirl1 +reporter +marie09 +tayler +310589 +lovebug123 +deadly1 +niharika +123789a +201286 +wildchild1 +blood13 +157157 +starwars123 +meathead1 +1001WDST +daisy3 +oswald +cruzeiro +paroli +hammertime +player11 +alexis08 +babygirl#1 +100589 +mamabear +100289 +brittany7 +���������������� +candy69 +baby12345 +belize +speed123 +shadow00 +baby1 +2210 +loser6 +manman12 +zcxfcnkbdf +y12345 +latin1 +1006 +150688 +justlove +moochie1 +maniez +neenee1 +sososo +iulian +asdfg6 +iloveyou05 +loser01 +ian123 +muffin11 +210890 +111988 +gordo +1219 +karen12 +michelle. +ikechukwu +cat12345 +brighteyes +duarte +303677 +dog12345 +andrew17 +emma11 +17931793 +fifa08 +lucas12 +111286 +ngockhoa +mayfair +blumen +death2all +230687 +110587 +salinas1 +10121990 +mamusia +251089 +justlooking +vermelho +241086 +hopeless1 +vasantha +clitoris +joey11 +friends4ever +cassie01 +shimmer +210789 +smartie +halo3odst +joaopedro +backdoor +chester12 +chicha +banana! +210690 +1love +mazdamx5 +John +froggy123 +lera +computer. +02021988 +skate11 +submarine +ApjSqpM844 +lovely01 +marrakech +230393 +cyclones +nick16 +princess89 +cocoa123 +saravanan +monkey44 +family13 +hockey6 +230390 +110687 +teclado +vignesh +cbr1000 +b12345678 +hercule +sexkitten +sabrina12 +magico +mai +mikey2 +251090 +Jesus123 +football06 +jean123 +bruce123 +ipodtouch +ron123 +kara +cubano +weirdo1 +ghbdtndctv +slinky1 +42424242 +jc1234 +murphy123 +key +brittany! +abc123abc123 +198523 +penis12 +metro2033 +tabatha1 +damian123 +blackmamba +margo +15975300 +210188 +trey +230389 +junior14 +231087 +ggg111 +maroon +100489 +dancer7 +lovingyou1 +seguridad +volodya +compassion +151188 +asuncion +question1 +2balls +1492 +killer88 +123456321 +emilie1 +micasa +outback +maruti +cruiser1 +momdad123 +123654789a +oli +anubis1 +nevada1 +alexander4 +winniethepooh +wildthing1 +jolly +asian +weapon +danial +rockin +kareena +karissa +55555q +jaydee +madison10 +soumya +lifeline +230688 +159357123 +088011 +kikokiko +go +lovegirl +charlie07 +ilove13 +shelton +beach123 +testqa12 +rfnmrf +acacia +fender123 +pbvfktnj +omerta +210488 +310588 +tre +homealone +erin123 +09 +11121987 +pimpin7 +sugar12 +moore +love911 +fairways +web123 +boston2 +Chocolate +goonies +brandon09 +behemoth +ric +tigger07 +131088 +mohamad +201288 +spawn1 +super10 +323323 +sunday123 +justin24 +131186 +softball09 +eyeball +emotional1 +candy22 +charleston +newmoon1 +197700 +equinox +happy8 +loveispain +325325 +angel95 +charlie21 +06061986 +43046721 +police911 +birddog +jasper11 +1bulldog +saravn +150890 +trustNO1 +dodgeviper +prince01 +velasco +ambrosia +vampire13 +5432112345 +iwantyou +nikitka +bowhunter1 +antoshka +hahaha12 +ducks +fiction +tennis11 +l1verp00l +Linked +wonderman2 +cornell1 +destroyer1 +thomas69 +llcoolj +paolino +arjuna +FREEDOM +cvbhyjd +maria15 +barca10 +cbr900 +100890 +xsplit +loca13 +arcangel1 +atalanta +machines +cross1 +postal1 +taylor09 +22112211 +brandon07 +buterfly +topher1 +kikugalanetroot +pimpjuice +raiders7 +bianka +azrael +alcantara +lucylucy +moomoo123 +bassmaster +rfgbnfy +thethe1 +family04 +urlacher54 +muller +cameleon +love520 +rhodes +infantry1 +sevens +gametime +22011988 +newyork3 +marci +ukflbfnjh12 +center1 +231086 +husker1 +varsity1 +kevins +sarmiento +remember2 +guille +140789 +daniel88 +kotek1 +job +lanzarote +251188 +nick10 +asshole13 +raheem +january29 +bujhtr +factory +261088 +jesse13 +chelsea! +teufel +nana1234 +princess05 +carlos14 +55556666 +tiger6 +bahamas1 +smarty1 +iloveadam +christ7 +abc_123 +roosevelt +woodside +katie11 +amicizia +january3 +teddie +bitches69 +spiderman0 +pitbul +louisiana +bff4life +victor13 +serene +music. +symphony +icecold +100389 +123123asd +termit +12341 +destiny13 +amo +911911911 +maniak +251288 +balla +010189 +tiger69 +bigbig +katy +jasons +pretty3 +ninja12 +jamielee +poop23 +anthony. +delboy +abcdef1234 +100687 +jaredleto +killian1 +1010101 +znt +silvestro +mj1234 +sammy5 +110987 +thedon +201289 +summer2007 +foreveryoung +197400 +mandala +fishface +kittycat12 +catsrule +230383 +danielita +fuck420 +ingrid1 +elvis77 +scirocco +prikol +bryant8 +stoned1 +dolphin12 +chris05 +zombie666 +buster69 +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +1580@welcamino +martinka +246246 +sunnyboy +4linkedin +goodie +donkey123 +johnson2 +mindfreak1 +andrew18 +petra1 +grand +candy10 +apples11 +eniola +lebanon1 +joseph10 +daisydog1 +ilovelucy1 +DIAMOND +йцукен +skills +zxcvvcxz +redskin +ham +hannah9 +myspace666 +momma +mets +surgery +bonnie12 +goodlife1 +sticky1 +010186 +al +sasha2 +09870987 +niceday +carlisle +delmar +stanton +brewer +floppy1 +qweasdzx +admin12 +thatshot1 +mike16 +deejay1 +lovely21 +gracias +carlos15 +wyatt +destroy1 +fresno559 +151288 +passwor1 +brownie2 +iwantu +yadira +drumline1 +boytoy +savannah12 +198710 +monkey92 +jarrett1 +220388 +bitches123 +bismarck +alex00 +daddy69 +roller1 +openit +triplets3 +mombasa +220487 +tunafish1 +barefoot +rocky13 +daniel8 +kukushka +makarova +curly1 +thomas14 +100190 +jeremy01 +cookie69 +Winston +buddy1234 +1spongebob +manutd123 +ade +dance3 +241089 +orange10 +maria01 +Ronaldo +cheesy +diablo12 +closer +scuba +simplicity +reese +���������� +getmoney08 +media +animal123 +surfsup +purple08 +130589 +Q1w2e3r4t5 +292814lolo +rickey +raoUjFL963 +bubble123 +happy420 +mentira +heybaby +danielle7 +singapore1 +coronado +400703 +sarah01 +flyaway +scooby11 +alexander6 +bambam123 +fightclub1 +raptor660 +martin13 +sword1 +120783 +131131 +mabuhay +tolentino +kitty01 +password31 +candyland +crush +georgina1 +liuchang +blades1 +monster4 +dipshit +stars12 +my3angels +cubswin +emmaemma +die +guam671 +greens1 +tumadre1 +orange21 +sombra +troy123 +longlife +220987 +sorrento +pearson +220690 +aprile +soccerball +jaishriram +192168 +andrew99 +stretch1 +$money +bubba7 +mydaddy1 +161 +jeroen +milica +210489 +trick1 +tara123 +lhepmz +tagada +charon +metallica7 +rerfhtre +nickolas1 +fuckup +Marie +titans10 +company1 +motivation +900000 +cars12 +goodguy +tiger9 +b00ger +u0HgtKt617 +schnucki +joker5 +green69 +1qazxcvb +frdfhbev +131286 +favour1 +lovely22 +luvme1 +1234QWER +killah1 +VICTORIA +theater +dima1996 +shelby11 +emily01 +3636 +peacock1 +lifesux +131087 +robots +gilipollas +blazeit420 +angel94 +david18 +400066 +coline +firefighte +tinatina +mustang07 +78907890 +nigel1 +puppys1 +sexyone +easytocrack1 +stream +donkeykong +Oassw0rd +new975wen +angel2008 +john10 +ratchet +buttmunch +101001 +jackoff1 +cris +passwor +turtle3 +family07 +ohshit1 +ccccccc +google5 +120189 +lawyer1 +noles1 +goalie1 +filhos +dabest1 +aleks +50000 +beer123 +yaalimadad +blaine1 +inspiron1 +everest1 +hancock +baggies +timur +florida12 +mike18 +110984 +feifei +alex1990 +buratino +brad123 +daking1 +123fuck +world123 +MTIzNDU2 +creamy +peace13 +beacon +bronte +boobies! +spidey1 +fyyeirf +edison1 +katarzyna +fuckoff. +thetruth1 +microphone +olemiss1 +grace12 +marlyn +sammydog +231187 +kovalenko +198623 +13421342 +hellokitty1 +nolan1 +mohamed123 +underdog1 +stones1 +231289 +ledzep1 +americano +210385 +erhfbyf +tiara1 +5544332211 +11011990 +lickit +qwerty33 +AMANDA +hustle +gelato +imani1 +donbosco +monkeys12 +poiuy1 +taytay12 +100488 +mama10 +karinka +manny24 +moises1 +rajput +thesims1 +ilovedan +survey +badass123 +Bubbles +nigger3 +michelle08 +destiny6 +1jackson +ismael1 +mishra +wealthy1 +hellome +lemon123 +rockstar3 +14021991 +chango1 +pft: +010187 +jumong +jarjar +sexy34 +newyork11 +Nicholas1 +dani12 +204060 +politics +labtec1 +123321456654 +favorit +dickson +monkey0 +vivalavida +greeny +asdfgh123456 +201186 +liteon +bella08 +hellno1 +supra +bambam2 +whore69 +computer7 +studioworks +buddy101 +88888888a +giggs11 +ayrton +mindless +21071988 +baby92 +kitties1 +aj1234 +230585 +220590 +123pass +samson12 +lc519QlpuU +nikki13 +february14 +panda2 +love007 +zachery +fish1234 +uptown +gonzales1 +fishhead +bloom +halohalo +fh +flower01 +71 +ilovecats1 +sunfire1 +lambert1 +kaka12 +gfhfljrc +231190 +sickness +buddy22 +grandprix +veritas1 +hihi123 +robins +madison07 +september0 +banderas +manhattan1 +110887 +sardar +candy23 +yang123 +nishant +knitting +222000 +110790 +shinoda +maksik +qwert11 +oooooo1 +michael06 +youngblood +cute11 +clippers +honey3 +slipknot7 +150690 +dragon25 +realtek. +luv2shop +711711 +tammy123 +scarabeo +pickles2 +sexy05 +ally +godlove +shadow17 +thewho +231085 +qwerty17 +jessie11 +080880 +kk123456 +adelaida +021288 +pigpig +230789 +secretary +dadada1 +jamie2 +brokenheart +sara2000 +cxfcnmttcnm +playa4life +pimpin23 +qwertyuiop1234567890 +123579 +maxmaxmax +tabata +monkey19 +fleetwood +toodles +piopio +1256 +hotman +leckmich +knockers +music08 +ALEXANDER +fredrick1 +qw12qw +robert14 +my4girls +bedrock +alvarez1 +icecream! +Schalke04 +peanut10 +onlyone1 +welcome7 +cthulhu +paula123 +1018 +machado +August +cheer5 +daffyduck +mustang88 +pistol1 +316497 +beachbum1 +megastar +Brandy +pitchoune +oussama +gjmptw +algeria +hannah15 +1mexican +carlos5 +lilone +Jeremy +1hotgirl +Antonio +radost +michael19 +matt22 +123qaz123 +tony69 +nicolle +K.: +i<3you +yamaha250 +rocawear1 +crf250 +superman15 +morley +tazmania1 +221087 +fuckabitch +lovely23 +hottie8 +muziek +dooley +sanmiguel +knickers +beast666 +sweetlove1 +guitar13 +210988 +redneck01 +january31 +kisses12 +mannheim +Steven +110486 +fake01 +mm1234 +maui +soniya +jayden06 +olakunle +jodie1 +monterey +tashkent +345543 +jiajia +mommy23 +gaga +060689 +reyes1 +scenic +110005 +joaninha +bball20 +children5 +concept +hello00 +arrows +1friends +derek2 +34erdfcv +211187 +cristiano1 +oliver10 +kathrine +eagle2 +bilbo +pantyhose +doudou1 +kolyan +110986 +marnie +saunders +think +sissy123 +titanik +william8 +Logitech +cowboys7 +110390 +guanajuato +threesome +maria23 +chaparrita +king14 +olivia11 +my_space +rebirth +Brittany +tututu +hothot1 +abbott +tygrysek +Silver +hottie9 +nathan13 +rock13 +hayabusa1 +dbjktnnf +kids03 +hinder1 +4family +slayer12 +tigresse +den123 +n0thing +1016 +123baby +jordan98 +11041988 +05051987 +jomar +brianne1 +penguin2 +123456aA +buddy4 +bailey22 +111290 +pretender +purple25 +gina123 +shreeram +stripes1 +12091209 +browny +simons +abercrombi +pascal1 +geneva1 +flubber +abacus +reeses +100590 +31121987 +miki123 +godschild +halowars +1whatever +PATRICK +wanda +tempesth1941 +fgFr56Hfve6 +samuel2 +myshit1 +dogman1 +parrot1 +dante123 +111088 +12345qq +12021988 +999333 +3691215 +iloveyou89 +apostol +250188 +angels11 +700091 +pallavolo +mama01 +elissa +w1960a +lakewood1 +anfield1 +molly7 +01234567891 +130789 +forever22 +recall +zhanna +nathan08 +220585 +cyclone1 +bhavani +221186 +alex123456 +superman20 +zaqwsx1 +hoochie1 +money16 +century21 +chips1 +christian9 +amateur +hockey101 +ladylove +jessica09 +jello123 +reussite +bebeko +cisco +deepti +lilman2 +waldo1 +130585 +130586 +corsair +XXXXXX +triathlon +1234567895 +buddy6 +cfvfhf +tweety5 +benetton +pasport +solene +larsen +paul1234 +137137 +bitch00 +240587 +joseph22 +z1z2z3 +carolin +030388 +clocks +shorty! +e8sZn4e5zC +nino +horton +radar +281188 +r0bert +bigpoppa +GABRIEL +joey1234 +karina12 +decker +19101989 +yessir +jack10 +thomas4 +asasin +misha123 +honey01 +blue20 +bless1 +gan +duende +parolparol +waterpolo1 +humbug +rebel123 +121091 +060690 +cocorico +chukwudi +160686 +marie4 +dickies +!@#$%^&*() +chubbs +aspire1 +guesswho1 +brooklyn5 +1heather +bubba01 +rostik +raiders24 +bosslady +ilenia +comedy1 +boyboy1 +marathon1 +chamber +emilee +150290 +lovely. +kurtis +jeanjean +ipod12 +131089 +123Admin321 +bobobobo +chinito +casper11 +amir +comets +100586 +vengeance +34523452 +gallina +tt1234567 +fresh12 +w1234567 +ilovekyle1 +max333 +fuller +tippy +sonson +261089 +yo1234 +harry2 +calogero +saviola +spider13 +albino +metalgear1 +blanka +120583 +2myspace +100987 +aguilera +med +kayla5 +kamilek +amanda17 +cory +jason69 +loveyou. +george13 +101291 +nicegirl +nnnnnnnn +euclid +251187 +aspen +daylight +bloody5 +cheer4life +peoples +tweety14 +210388 +maks123 +bug123 +170588 +110287 +palacios +relisys +dragon89 +arellano +spaceman1 +roseanne +pujols5 +zxcvbnm7 +aeiou +moroni +casa123 +david16 +january8 +nipper1 +actress +241186 +babygurl09 +12041990 +whitegirl1 +socom3 +hallmark +bear01 +packers12 +jacob5 +v000001 +pussy6 +963214 +bat +zinger +password30 +147369258 +small1 +west12 +ilovegod2 +jaisriram +mommy22 +231184 +muppet1 +tundra_cool2 +112233445566778899 +lisette +frisbee +paperclip +viviana1 +ripper1 +summer02 +angel92 +popsicle +210587 +genius123 +carman +221190 +princess27 +lilkim1 +111981 +krzysiek +rolando1 +aakash +808state +suzette +lovebaby +cyrano +molly3 +morkovka +987654123 +nicolai +ada123 +duffy1 +severus +mouses +algebra1 +ub6ib9 +death6 +forever. +trase1990 +codename +Heather1 +skater69 +sebastiano +mustang73 +19491001 +bike +soccer26 +220988 +tenchi +anderlecht +videogames +christi +january24 +mashina +woailaopo +preethi +finnegan +love2dance +198425 +suikoden +02021985 +joshua15 +sexy27 +pogiako1 +dmitry +shaolin1 +heather3 +anthrax +boss12 +austin22 +jana +lambofgod1 +mahalo +loveme08 +miley12 +january6 +michael88 +pretty7 +121983 +nike10 +friend12 +rjcnbr +poiu +chinadoll +naruto21 +balla23 +bigdaddy12 +stan +whatthe1 +emma01 +ljrnjh +12051988 +amarelo +frank12 +maelys +eddy +sweet23 +integral +pencil2 +230487 +domingo1 +cornbread1 +1q2w1q2w +jannat +nickcarter +kochanie1 +dfgdfg +outsider +bongbong +alex2009 +987321654 +miller2 +beware +eeee +cena123 +ginger! +draco1 +12121992 +dima1998 +babyangel1 +xtkjdtr +goarmy +spinning +975310 +goodwin +rossi +21101986 +estrellas +ladyluck +kil +linlin +122436 +star17 +222324 +leeroy +301 +230888 +nigga23 +tatanka +jesus1st +050589 +Ireland +dummy +babe13 +heaven11 +yellow. +adam01 +vanessa13 +ambers +nadia123 +251286 +peterson1 +cowboys11 +4r5t6y +linkedinpass +98741236 +150488 +sairam123 +wildman1 +12344 +marie17 +dimitri1 +58585858 +20101988 +ball123 +cashmoney2 +executive +Veronika +mommy13 +girly +records +just1n +misamores +jeanpierre +abc123def +110289 +barbados1 +100690 +assclown +merlyn +Peanut +jimenez1 +123zxc123 +bass123 +pass2 +nicole05 +101283 +233223 +908070 +redbaron +amanda. +madison06 +kayla3 +shadow77 +100886 +glass +fannie +comet +nikola1 +110886 +per +gabriel10 +1world +butterflie +orange8 +galway +astana +albero +ilove7 +milano1 +123456Aa +251183 +nipple1 +daughters +231287 +01011979 +monkey06 +iamgay +greatest1 +summerof69 +kitchen1 +lau +cowcow +amadeus55 +saverio +dead123 +babygurl7 +220588 +corinne1 +antonio13 +comeon111 +marriage1 +19501950 +drummerboy +schwarz +314159265 +138138 +010184 +nisha +shaira +gotenks +sk8forlife +1stupid +agent +tigers08 +outside +lumberjack +entrar +tacoma1 +pharmacy1 +rizwan +sammy101 +rock4ever +09877890 +patric +melissa11 +lovex3 +alyssa3 +lizaveta +alexis4 +arhangel +josh22 +teacup +nolongthing +silenthill +bal +hairspray1 +mariner +Lovely +richman +alltimelow +one123 +southwest +caravan1 +smile13 +dandelion +love555 +bella09 +forzalazio +pimp24 +jackson01 +computers1 +gaviota +magics +glenda1 +nick14 +maria5 +jocelyne +rhbcnbyrf +gemstone +popolo +bigboy3 +paramore12 +lebronjames +loading +ayanna +dragon55 +badass12 +hunter03 +JEAdmin +110787 +billgates +habibi1 +radek +getmoney09 +kiki11 +230989 +dragon16 +666devil +qwqwqw1 +marie07 +220888 +students +260689 +spike2 +dkair8dda +121990 +rahasia1 +stella12 +test01 +momof5 +balance1 +lovely5 +150590 +naruto! +gonavy +xavier12 +asdfg5 +apple10 +jordan. +bubba13 +sparta1 +halo2 +a123sd +navyseal +400709 +miroslava +130487 +spawn +lilred +dondon1 +lakers11 +marie18 +1129 +29292929 +teabag +hunter! +powell1 +24681357 +w1w2w3w4 +cbr1000rr +bluesman +eagles05 +lovesick +ceejay +150587 +01012008 +monkey66 +tan +orlando2 +sonya1 +120391 +darien +dempsey +sublime420 +a123123123 +data +poopface +jordan25 +kaplan +ignatius +230986 +hacked1 +1beauty +thejoker +flapjack +loverboy12 +killer66 +1ginger +blacklabel +monster69 +mayamaya +fylh.if +fairies +assface +austin08 +500082 +damon +beautifull +bricks +allh11 +12021987 +wer11111 +jurassic +290988 +bollywood +michelle09 +joecool +20051987 +charlotte2 +nicole89 +lautaro +beastmode +james8 +oinkoink +220587 +5678910 +198919 +jonathan3 +Dallas +baby93 +dade305 +volvo850 +josh01 +neopets11 +softball17 +110387 +000555 +redskin1 +hotmail.co +zaq12wsxcde3 +rupali +gabi +go4jobs +number24 +devon123 +singh123 +landry +madison8 +210689 +popcorn! +van123 +chaser1 +bitch17 +171288 +220586 +yaya +giggle1 +gallery +zxcvbnm12345 +230786 +oscar13 +negative +gsxr1100 +w1973a +WELCOME +dfcbkmtdf +monbebe +101282 +hannah8 +moore1 +kissme3 +fender12 +alex02 +02021986 +w1969a +cheddar1 +poop09 +charcoal +mymyspace1 +tookie +201020 +655321 +candy14 +220890 +nikolaev +bacon123 +farcry +kukuruza +love222 +daddy4 +lambretta +rodent +mexican123 +vika123 +teacher2 +ginger10 +lbc562 +junior15 +87654321a +rabbit123 +run4fun +111989 +cheshire +110585 +jacinta +110007 +brookie1 +александр +sheriff1 +lakeview +magalie +lmfao1 +silver01 +micro +apples! +spiderman8 +ma123456 +fishon +summer. +sexyboy123 +anatomy +infoinfo +el +elijah2 +10021987 +fr33d0m +cazzimiei +master99 +baby26 +3e2w1q +ilovemom2 +date +0303 +dede123 +sharp1 +linda2 +tweety21 +sacha +shadow1234 +mifamilia +stripper +molly5 +BCP201109a +120691 +cullen1 +justin05 +purple88 +whitehouse +251186 +mario13 +baller7 +12031993 +gato +angel2009 +001453 +020292 +maryjane420 +110292 +alyssa11 +cutiepie10 +joshua! +gar +1312 +baby04 +boomer2 +lilkim +141289 +2crazy +moonie +220289 +beavers +iamsexy +promotion +091088 +shortcake +landrover1 +funmilayo +sept11 +anthony24 +builder1 +12121984 +cherub +option +emyeuanh +ambassador +fernando12 +lamour +yogurt +carnell1 +sakthi +dana123 +rawr12 +hunter00 +sdf7asdf6asdg8df1 +iloveme4 +134567 +190989 +nick15 +forever23 +fenomeno +genova +asshole22 +12345678912 +gryphon +champions1 +qazxsw111 +040484 +confirm1 +harald +sanfran1 +120684 +unreal1 +pi314159 +jesus100 +fordfiesta +chapstick1 +batman08 +131187 +tanker1 +seeyou +silver22 +wrigley1 +hoffman1 +orange6 +221086 +destiny8 +pauleta +magic2 +yz250f +mike17 +joyful1 +sulaimon +pussy4 +terrible +speedy123 +honey7 +siobhan1 +abcabc1 +baby33 +thomas99 +sexyma1 +disney12 +131288 +yamyam +johannes1 +150489 +151286 +cheech1 +lansing1 +girlie1 +ruthless +drache +lilangel +ruthie1 +198080 +magicman1 +jennifer5 +10111986 +january20 +lamisma +200585 +caldwell +googoo1 +boobs69 +gambit1 +101079 +oleole +adams1 +fuckyou101 +holly12 +200489 +candy4 +whales +archer1 +hannah03 +redneck69 +121002 +hearts2 +lorenza +goldman +tomas123 +172839456 +wweraw1 +150989 +070788 +PRINCE +001982 +000013 +789520 +120292 +bunny7 +producer +zmxncbv +princess02 +a1l2e3x4 +kevin5 +milagro +franks +william10 +sparky01 +����������� +100387 +neil +lostsoul +northstar +photoshop +flaca1 +rosalba +evertonfc +kevin10 +marsha1 +oaktree +marijuana4 +ollie123 +1942 +mylover1 +120891 +14101987 +2312 +normandy +bambam12 +socrates1 +MERCEDES +asdfgh1234 +krasnodar +single08 +passion2 +210389 +poppin1 +mascara +heroes1 +brandie1 +maricela +kill12 +iloveadam1 +miller123 +satana666 +brittany13 +lover45 +password56 +123456456 +england66 +defjam +star24 +community1 +fri +21061989 +cutie16 +shining +221221 +dork +15021990 +sammyboy +black01 +ben100 +daboss1 +evildead +fktrcfylhjdyf +villevalo1 +coo +shabnam +alex2005 +safira +99XfXlo19uI +massive1 +money25 +15101987 +samurai7 +jesus25 +cosimo +system123 +Catherine +dollface1 +pretty11 +mot2passe +william! +a777777 +munster +wasted1 +ffffff1 +muruga +nik123 +111089 +c0cac0la +arrow1 +dallas08 +dead666 +brujita +dancer01 +inspiration +201189 +stopit +sydney123 +mik +110488 +hermine +middle1 +qwerty007 +scratch1 +poohead +10101992 +kevin23 +burning +nanou +orchidee +dreambig +delfines +1teacher +gianfranco +cccccc1 +eddie12 +jandikkz +delfin1 +nhfrnjh +saudade +500032 +Passw0rd1 +matvey +666666q +playmate1 +deniro +261 +22223333 +sativa +mamako +select1 +151090 +Qwe123 +mike1 +sexmachine +220390 +wombat1 +250789 +bubba11 +gretzky99 +xoxo123 +1944 +tomasek +yorkie1 +200688 +alejandra2 +javier12 +yusuf +kungfu1 +241189 +1rainbow +rj +lollol12 +sienna1 +invest +brookie +12021990 +shaq32 +311287 +Sparky +hummel +02021989 +dfaeff34232 +jagger1 +pokemon99 +waterski +rockandrol +donthate1 +hockey88 +120892 +sergeant +shiner +austin! +1234a +wakawaka +rocky01 +Thunder +papatya +poklop +yandel1 +inspire +199200 +location +softball20 +skunk1 +kitkat123 +amadou +angel93 +garland +123q321 +strelec +141088 +bellabella +99problems +ballin! +killer8 +seether1 +121189 +1austin +q963258741q +january5 +wheeler1 +poobear +300487 +jenni1 +bella5 +little123 +isa123 +melati +powerade +gateway123 +cali4nia +cows +christian5 +fiore +1337 +shyanne1 +menace1 +tomboy07 +123654123 +6lfXlo629uI +201187 +lalito +josejose +heather69 +gerry +150589 +veterinaria +protoss +royalty1 +cherrypie1 +pass01 +dogsrule +toffee1 +rockstar5 +class2009 +photography +davids1 +morelia1 +kerrie +rockstar69 +bubu +moulin +210590 +davey1 +news +314314 +kobe123 +dominguez +1carlos +hooligans +Ty2t1hv3oC +madelyn1 +hollister! +ira123 +operation1 +santa123 +lol111 +25121987 +robert4 +jarvis1 +1234567890qwerty +121279 +crazyhorse +free2bme +megatron1 +240588 +jasmine14 +NIKITA +bananas2 +princess93 +maryse +julissa +usmc0311 +ilovedick1 +22051987 +121083 +richard7 +skater4 +251189 +251085 +fuckall +211088 +savana +sempre +11335577 +kleenex +notvalid +camelot1 +jarred +aeiou123 +fucku13 +111185 +230189 +chainsaw1 +grand1 +logan5 +01020102 +hallodu +lauren22 +chivas09 +sossos +sleeper +kacper1 +spongebob6 +dumbbitch1 +cayden +loser23 +200587 +austin07 +hunter8 +19877891 +purplerain +stardoll +Purple +261186 +L1nk3d1n +120784 +mymom1 +freedom10 +cortina +football40 +lukasz1 +230190 +lucy11 +treysongz +vic +partytime +198621 +skiffy +10101983 +20101986 +w1974a +monkey666 +nikko +ooooooo +t1nkerbell +jaishiv +20081991 +psyche +honda400 +splinter1 +olufemi +marina12 +tracie +tyler6 +revolucion +mateo1 +jasmine08 +robert15 +purple33 +alex2006 +vfiekz +140287 +nicholas3 +hammer12 +nick23 +eagles22 +198422 +nikanika +gentleman +anointed1 +escuela +jakey1 +hester +pony +bebito +Sara2000 +systems +ritchie +0123456a +laurentiu +444777 +2dumb2live +sevenof9 +cambridge1 +lafayette +armadillo +muzyka +joshua02 +summer14 +A1234567 +myspace100 +parol123 +jamesb +7777777s +155155 +muskaan +pololo +110008 +laurine +candy6 +1229 +�������������������� +cool99 +carwash +sexytime1 +dunlop +boobies69 +warehouse +08 +wimbledon +music10 +west13 +987410 +221085 +12051987 +seaweed +cutie22 +blue19 +261188 +wazzup1 +07070707 +zxcvbnm,. +bigboy11 +400705 +booger12 +donna123 +fuckyou18 +misfit1 +13231323 +bookworm1 +19111991 +1pitbull +katie13 +594love168 +zaqxsw123 +357mag +sk8er1 +jason7 +bosslady1 +iddqdidkfa +shadow09 +cocacola2 +251200 +14021990 +motor1 +gjkbyjxrf +toluca +matt01 +antonietta +1stlady +321qaz +tyler22 +sherwood1 +train1 +TMM +laura2 +holmes1 +forever11 +efnesonline +patrick! +sporting1 +soccer94 +141087 +adrian13 +larsson +357magnum +#1princess +1379 +LINKEDIN +vlad1996 +guido +yankees11 +westside5 +dallas09 +grover1 +chaitanya +mikele +902100 +sexpistols +enTu6ea64H +ferrarif50 +ammaappa +arman +buckwheat1 +100988 +vertigo1 +lynne +terezka +nini +samsung7 +killer77 +cody13 +angle +images +130788 +789963 +paddington +200988 +bigdog12 +bigshow +dolcevita +dirk41 +angel2010 +1Q2w3e4r +schnuffel +uifKjhF522 +maggie4 +1027 +kasey +111990 +producer1 +america9 +ya +money88 +seniors08 +slipknot! +baby90 +140987 +sweetness2 +farrah +wsxqaz +benji123 +glamour1 +trabzon +400068 +220986 +caden1 +rbd123 +styles +150390 +celia +240890 +mansur +cutter1 +pimp16 +sammy10 +hunny +alicia12 +yuriy +qwerzxcv +crazy4 +sanlorenzo +apple01 +kendal +froggy2 +230890 +ilovetom +123456789012 +0707 +anastasija +rajani +steven7 +110285 +babylove12 +youloveme +201086 +201087 +julianna1 +ilovepie +replay +121991 +michelle20 +kitty9 +brasilia +lampshade1 +101987 +zidane1 +whitewolf +thekiller +492529 +22121986 +baddest1 +fuckthis2 +lego123 +chirag +brown12 +starfox +illinois1 +forum +justin9 +giants10 +brunette +anetka +cheesy1 +123sex +taylor9 +sk84ever +guizmo +1402 +432156 +winona +scooter7 +telefoon +bigbutt +memento +070789 +friends10 +dj +batman6 +gasman +diver1 +changeit +�+��+������ +oladimeji +oluwaseyi +gutierrez1 +finger11 +200488 +bigbuck +ih8you +120384 +honda600 +school3 +mahal1 +love67 +pampers +shabana +eighteen18 +mystical +xavier123 +2510 +molly13 +d21lWz1zjS +maksim2425 +worldwide +guyver +lakeside1 +030383 +69chevy +parissg +110988 +spike12 +jewelry +240486 +ahmad1 +paraguay +kinky +w1971a +bhaskar +mommy08 +crossroads +haterz1 +dude101 +sierra123 +alexis07 +lover09 +pasion +10071987 +titus +101986 +ready1 +fifa10 +iloveu23 +maman1 +211086 +moto +change123 +queenb +811009 +costello +baby00 +w1972a +mama23 +ryan23 +110027 +fuck21 +downhill +gfdkbr +prophet1 +james9 +a555555 +paperclip1 +201184 +100288 +gj +amber01 +thunder5 +w1ll1am +gerbil +aeroplane +sanctuary +151189 +shriganesh +goarmy1 +hyper1 +Florian +bolivar +122222 +media1 +pokemon! +twiggy1 +22021989 +44448888 +chaparra +2202 +michelle9 +pineapple2 +snoopy3 +1478523690 +143jesus +15031988 +salvatore1 +020289 +tasmania +nokia2700 +woodrow +12041988 +llamas1 +douche +16121987 +080890 +141188 +football89 +sweetdreams +teodor +moomoo12 +jujuba +270488 +boneca +14101991 +karel +lilgirl1 +mariners1 +player01 +biotech +fgfgfg +nacho +nolan +gretzky +222777 +winston2 +loshara +shailesh +Scooter +nathan7 +12021985 +sasuke13 +zacatecas +130990 +qazwsx123456 +cameron4 +bryanna +mahalko1 +Rainbow +2fast4you +gorda1 +jennyfer +tucker01 +bubbie +sooty1 +chicken6 +editor +faith01 +serious1 +laluna +198666 +finance1 +fussball1 +january9 +pla +tigers01 +zachery1 +ilovey0u +kirikou +jordan1234 +brain +12031203 +21031988 +990099 +110689 +rangers123 +princess28 +pickup +head +godslove1 +brandy01 +steeler +goodlord +farscape +raven12 +20052006 +matchbox +jonathan7 +hannah21 +250987 +198520 +sagittarius +springer1 +cowboy123 +tampabay +stud +ttd955AudG +161288 +thinkpad +theforce +rampage1 +babydaddy1 +bryan12 +develop +dumdum1 +281 +5201314520 +230590 +sunshine14 +jasmine09 +jupiter2 +240688 +johnny13 +jeannine +ghfdlf +linked2011 +140689 +shawnee +001978 +12101988 +joseph21 +chris88 +121982 +headhunter +lovepink +220486 +2511 +smurfs +lozano +rhjirf +ariadne +lfybkrf +dash920 +fairytail +marky +unicornio +lambofgod +84569280 +fucklove2 +austin14 +lalalala1 +snowdrop +yygjmy1984 +twoboys +tig +560038 +ger +pastel +260690 +240485 +iloveme7 +tbilisi +151287 +kylee1 +poderoso +cupcake11 +cutie! +blondi +sunshine77 +scooby13 +elnene1 +netscape +cc123456 +121980 +sports12 +John316 +greenday3 +pelon1 +1110 +25101987 +1331 +raccoon +231084 +justin1234 +060688 +marybeth +kishan +tylers +851216 +12101987 +purple07 +100189 +heritage1 +thunder3 +boots123 +climbing +andrey1983 +reece +navidad +1957chevy +13121987 +golden12 +220789 +smiley2 +rachel13 +250689 +dragon. +adamek +251289 +bugsy1 +110188 +paxton +tianna1 +14041987 +4angels +brahim +gavin123 +140292 +Elizabeth1 +chicken22 +awdawd +what12 +10111990 +150389 +wutang36 +juicy123 +mymail +paramedic1 +nbvjirf +skate101 +beth123 +120883 +200789 +400078 +football78 +patrick13 +north +ravinder +131086 +doberman1 +kristie1 +triple6 +mp3player +wert12 +ANGELS +carino +100787 +angel637 +fraggle +asdfgh7 +thomas08 +dude13 +flipmode +deeppurple +1708 +colegio +bojangles1 +sector9 +biteme123 +BASEBALL +tarkan +sony12 +tobi +danny7 +123QWEasd +nigga! +AjcuiVd289 +120285 +misty2 +sampoerna +251086 +superstar3 +antigua +mallika +210187 +bibles +booboo01 +joseph5 +levi +usausa +football35 +hennessy +100386 +aa1234561 +airwolf +nautica1 +tekken5 +lauren7 +dragon64 +sassycat +ilovemark +4204life +smokey3 +gerhard +shadow. +gwada971 +barbar +brand0n +hickory +ballin5 +amigos1 +121992 +helmet +kingofkings +chacal +mercer +tmobile1 +mayumi +james06 +sexy89 +julia12 +silver13 +131290 +tigerlily1 +reverse +lovers4 +ashley88 +1Q2W3E4R5T +jedi +050690 +iloveyou4e +009900 +121278 +kimber1 +240590 +12361236 +andy11 +alex03 +2w2w2w +gregoire +cerfcerf +ikenna +arlington +2kool4u +gizmo12 +bhbyf +section8 +titus1 +green101 +ttttttt +glorious +alexis22 +20071987 +ulrich +redfred1 +libelula +141186 +mustang11 +samsung01 +gumball +jesusc1 +1313131313 +serafim +10121987 +1alexis +lamborgini +patrick01 +felicity1 +JxsGx2Yd87 +smilla +achilles1 +fiatpunto +bananas! +130680 +policy1 +gohan +ilovebrian +drunk1 +�������� +ratman +chandra1 +230486 +654852 +perla +imcute +joebob +bootie +pflybwf +15121986 +aggies1 +101183 +santorini +firebolt +22121989 +warthog +gunjan +charlie69 +nathan06 +ultra +150588 +sweety2 +bone +VANESSA +kikiriki +Boomer +130389 +vale +angel0 +crazy14 +w00tw00t +unhappy +prince11 +taylor06 +5t6y7u8i +mexicana1 +facile +lovely6 +oyster +shadow101 +sai +summer03 +king24 +mayang +waswas1 +q123q123 +joshua16 +210486 +781227 +Prince +z: +redsox2004 +pimpin5 +hottie08 +toxic +13031991 +04041988 +sarah7 +024680 +140988 +rabbit12 +120282 +cutie08 +takamine +fleming +babyboy08 +ilovekyle +doritos +251290 +12061990 +pinkey +dude22 +checker +qeqeqe +vfpfafrf +meganfox +heart2 +230586 +socom2 +maggie5 +hotness1 +coco10 +fghfgh +1100 +wowwow1 +kamlesh +obama1 +john15 +dallas23 +amigo1 +091 +nike11 +redsox33 +furious +brittany10 +bridge1 +sammy6 +karla123 +159357852 +popular1 +19521952 +vicki1 +donuts1 +wiccan1 +present +melbourne1 +ralphie1 +2255 +P@$$w0rd +181088 +cody1234 +121080 +zxcvbnm2 +111287 +vinny +destiny08 +300688 +mygirls1 +thesims3 +rocketmail +ilikeit +green1234 +hoochie +ulysses +198719 +110685 +241190 +Chicago +qwerqwer1 +honey22 +elizabeth. +england123 +qg9543bh7 +totti +jinjin +hugo123 +999666333 +zack12 +marwan +sk8er4life +Williams +austin06 +privat +654321m +merlin01 +staind +mellow1 +246824 +260488 +alexis14 +brutal +anarchy99 +modem +jorden +alex04 +havefaith +Sydney +wayne2 +guitar! +down4life +3003 +newbaby +231285 +cet333333 +david09 +fishin +shredder +14121987 +150888 +links123 +specialk1 +10121988 +deeznuts1 +120884 +12345aaa +1dontknow +alanna1 +lolwut +barbie13 +199119 +jeanluc +iamtheman +luke12 +dog101 +rayane +barbie11 +happyboy +sissi +non +210191 +hamham +angel98 +horse2 +tratata +autocad +bisounours +dantes +mowgli +alex1991 +blessings1 +leslie123 +14041988 +des +100685 +exercise +19761968Serg +03 +king101 +pfchfytw +lovelove2 +vick07 +pakito +benidorm +1117 +sol123 +allison2 +marilu +560047 +daisies +danielle13 +400054 +aaabbbccc +1912 +zaq!2wsx +ajtdmw +bigapple +dj123456 +fujitvpass +yellow6 +binbin +sandwich1 +150788 +thankgod1 +120289 +pdq4RV +raiders3 +sandal +vip123 +250584 +101191 +3amigos +airjordan +emily7 +mcnabb5 +100286 +owens81 +kazuya +211188 +g1234567 +vfhrbpf +optiplex +aerobics +crusader1 +bigcock1 +a13579 +1tinkerbel +regional +cupcake! +olaitan +rules +dicembre +pussys1 +terri1 +210386 +bucks1 +jayvee +221177 +cagliari +zooyork +jirka +admin2010 +denzel1 +villegas +chrisbln +mommys +angel96 +antonello +amarillo1 +horses! +220686 +scott12 +jordan69 +kittycat2 +nicole99 +fuck.you +redbird1 +Christ +lucy01 +studmuffin +carroll1 +govols1 +elamor +destination +cocolino +cashmere +artista +abfkrf +14071987 +palomita +mari12 +blue92 +12345678g +qaywsxedc +yuyuyu +23041987 +blah11 +560016 +tyler23 +brooke11 +02061986 +246890 +zackary1 +110110jp +02021984 +dolphin13 +mary1234 +hawkins1 +lucile +hottie#1 +beatle +taylor16 +210989 +kernel +signal +kookoo +151086 +198555 +mullen +rose22 +emilia1 +murphy12 +teenager +motor +dreamer13 +Qwertyuiop +skate4 +123123w +Casper +almeria +koala1 +140285 +elmo13 +cordelia +liebling +erickson +hunters +iloveweed +polpol11 +121082 +22121987 +michell +harini +abidjan +americana +ceaser +pitcher +lily12 +sandra2 +glasgow1 +cokolada +midnight3 +conejita +kilimanjaro +_ +tiffany7 +harley22 +dumbass2 +tiger14 +101077 +honey5 +choupinette +rowing +130888 +PRETTY +1009 +anonymous1 +11111111111111111111 +cocaina +wolfwolf +Carlos +josette +nymets1 +tweety22 +1941 +hawk1020 +12345asdf +assfuck1 +horse12 +14021992 +ginette +131289 +25121986 +speakes +kaushik +federico1 +hamsters +231185 +523523 +jedimaster +pelangi +201190 +skibum +diamond9 +bandido +22041987 +rocking +doritos1 +hollister4 +270790 +130587 +buddydog1 +samantha8 +tweety16 +buford +8989 +rebecca12 +fatass123 +babydoll2 +raiders14 +darlin +tagged +ferrari123 +bubble12 +140286 +zezette +johnmark +tank123 +iloveme13 +shazia +251287 +trevon1 +01011976 +jessica07 +racheal +11121985 +Ab123456 +110684 +password96 +p3avbwjw +brandon17 +JONATHAN +donny1 +slacker1 +victoria7 +48624862 +chad123 +myspacesuc +clockwork +westwest +syracuse1 +1nternet +Jackie +housemusic +austin23 +connor2 +celebrity +demola +serge +alex1997 +music09 +ghjghj +lost4815162342 +eight +jackie11 +vjhjpjdf +kosovo +11021987 +fifi +fastcars +rrrrrr1 +120984 +13121312 +220990 +imtheman +141287 +andrea10 +summerlove +willie2 +1112131415 +bettis36 +261184 +kenny2 +120393 +250888 +haider +makelove +280688 +shadow24 +beer30 +110385 +271088 +andrew24 +trish +player7 +forbidden +lokita1 +01031980 +jasmine! +12121983 +02061987 +carmelita +satelite +loverboy2 +�+��+��+��+� +james101 +19071988 +ndaCebx2wx +lifetime1 +monkey89 +120782 +111090 +chingon +lost123 +baylor +think1 +bigtime1 +skaterboy +bluenose +Midnight +400005 +cj1234 +100990 +1410 +1234554321q +25051990 +cute13 +101185 +developer +bachelor +260188 +iceman12 +samantha10 +dredre +kucing1 +homeless +250989 +manutd99 +piston +123a456b +monet +090987 +pink25 +latrice +aeropostal +poptarts +trading +tink11 +turion64 +susan123 +marley123 +dollars1 +bubbles22 +dildo +headache +220485 +tookie1 +fifa07 +Godisgood +Sfring31 +auto +coffee2 +madison05 +naveed +110190 +wholefoo +dragon17 +starfire1 +santacruz1 +tigerlilly +shadow18 +030405 +Basketball +sensizim +geegee +jasmin123 +07 +mammoth +arsenal2 +1qazxcvbnm +pen +qwsxza +mickey21 +210685 +20061986 +michael20 +verito +chaos666 +player5 +261288 +14021987 +maries +12101986 +spades +green88 +alibaba1 +iloveyou27 +popo12 +mina +charles12 +wannabe +chewbacca1 +dr +17ciao72 +1elephant +oskar1 +14921492 +hondacrx +lottery +maria7 +101078 +kane123 +karol1 +4seasons +goofy123 +pretty13 +258654 +lyndon +comfort1 +12101990 +hamish1 +napalm +linkedin.com +karizma +green01 +na +130687 +justin19 +cristovive +100788 +nettie +666111 +coincoin +emily5 +star77 +espanol +honey11 +i234i234i234 +veteran +binky +10121991 +020890 +3blindmice +govind +dragon66 +winfield +230686 +230788 +famous123 +king09 +danielle! +peace101 +labrador1 +1130 +colby +gothic666 +101292 +jonah1 +130189 +madcat +chitown +mandarinka +trout +tijger +maria22 +edith1 +color1 +joseph08 +shimano +guccimane +20021986 +1lakers +clueless1 +kalimera +commandos +nieves +karthika +conan1 +mario66 +seraphim +101098 +babygurl11 +current +escaflowne +freddy12 +bigboy23 +jackson10 +201089 +saibaba1 +mouse2 +110583 +joshua8 +damola +yourface1 +burbuja +elephant12 +juan316 +110584 +Family +sweetie12 +251185 +danger123 +120291 +vsijyjr +0404 +shit11 +kamikaze1 +bigtruck +110691 +ileana +katka +bongo1 +215487 +sammi +buster21 +oscar22 +2kitties +12321232 +azerbaycan +myspace007 +200990 +geology +tony22 +10031987 +ryan21 +10121986 +deepfrequency +161188 +13051986 +kelli1 +121006 +daniel05 +chobits1 +guitarra1 +freeatlast +samsung11 +loveme10 +ciaoo +halo33 +nanny +nana13 +121182 +sexything1 +mu +fuckitall +140488 +loser69 +horses11 +ilovemydog +271288 +ARSENAL +120681 +yellowstone +andre3000 +michelle15 +250890 +ganpati +lovem3 +macedonia +delldell1 +me4ever +daniel25 +crazy! +invalid +bella1234 +andrew05 +winner123 +izzy +qawsed12 +zaqqaz +.ktxrf +khushboo +310000 +d12345678 +171285 +maria3 +201005 +puppy101 +martial +sk8sk8 +exclusive +020689 +please12 +qaz123qaz +naenae +perla1 +cena12 +jesusrocks +12081988 +stlouis +mortalkombat +ranetka +100101 +brandie +25121989 +novikov +20051986 +dominican +sexgod +12332112 +jonny123 +annmarie1 +mathias1 +doorknob +june08 +spiderman6 +banan +02041987 +230289 +love85 +220386 +radhaswami +locker +smile7 +warrior2 +strength1 +rap123 +ellabella +shorty16 +superman09 +star88 +�����������������+�+�����������+�������������������: +onions +arsenal7 +jasmin12 +yoyoyo123 +futura +124 +brandon18 +musician1 +mike09 +twilight4 +ferrari360 +shay12 +echo +yourmama1 +woofwoof1 +mami +3kings +211289 +holyghost +horacio +naked1 +complex +Stella +danielle11 +myspace19 +bud123 +chicken13 +Ghbdtn +bruna +treetop +iskandar +America +kev123 +espinoza +sesso +yoohoo +live4ever +morning1 +shinji +12011987 +laxman +daddy10 +kaiden +great123 +isabella12 +chepalle +piscis +13121988 +clock1 +oscar01 +0cDh0v99uE +greyhound1 +serg +cassie11 +100785 +smalls +seamus1 +mounir +milosc +456789a +140690 +jazzman1 +peacelove1 +mary13 +samael +iloveangel +paint +shorty4 +pingping +19091990 +pinklady1 +fly123 +151088 +final +football36 +bella7 +171189 +number15 +211290 +110484 +12031987 +ranger123 +renee12 +buttsex1 +shyanne +constant +170589 +cf +123asd123asd +alyssa13 +dave12 +maximum1 +pompey1 +diamond01 +Australia +salmo23 +211186 +241187 +parveen +jagoda +jackson4 +alexa123 +bladerunner +1cherry +vivere +U6e6r9hwiX +20021987 +cheer10 +snoopy22 +deputy +waleed +albania1 +wind +vfy.yz +smokey7 +kiwi123 +hereford +redfred +fuckbitche +pippopippo +andrew09 +tiberius +560085 +family06 +sathish +stargirl1 +keyblade1 +21121987 +ganjaman +ashley101 +korea +katlyn +Flower +tyler08 +sanfrancisco +cupcake13 +mediawire +callisto +123jesus +reeves +yfcnz123 +panties1 +bianca123 +rhubarb +raiders18 +newports1 +Cookie +qqqqqqqqq +iloveme. +a333444 +140788 +210185 +lizzard +pink77 +meriem +13121984 +230690 +l0veme +cyber123 +12121982 +hospital1 +1tunde +motion +browndog +speedy12 +life12 +345 +130985 +ijeoma +shizzle1 +magellan +buster! +n1gger +manuel13 +230889 +gulnara +porto +matt69 +baby99 +sarah3 +hsm123 +271 +11121986 +emoemo +luna12 +gumby1 +92702689 +12081987 +PURPLE +grandam +111182 +tropicana +1killa +ihatelove +boat +basement +undefined +01011993 +shadow08 +poker21 +flowergirl +steelers2 +120983 +summit1 +dave1234 +jose01 +mymother1 +любимая +testqa1 +aviator +por +peaches7 +w1968a +koleso +dimon +karissa1 +blade55 +Summer11 +любимый +licker +green! +sailboat1 +fast +nick101 +1dallas +bennie1 +alana +911111 +selena123 +jabroni +rubens +rfkbyf +foxhound +vfrfrf +ilovedaddy +money77 +mustang89 +131285 +d85lWz0zjS +morelia +momdad12 +lady01 +amanda4 +230288 +rrrrr +playing +carmine1 +twilight09 +181188 +02021990 +ttt +prowler +shree420 +lianne +funfunfun +angel29 +au +301188 +murphy01 +zachary12 +butt123 +mariah12 +1scooter +mas123 +vivienne +rolex +211286 +natedogg +Trinity +261286 +hoops +splendor +carlie +789456123q +coffee12 +ren +ladybird1 +freakshow +23101987 +block +jobseeker +15101986 +jamison +12031991 +100485 +20021985 +sanya +bigbob +jordan04 +600040 +008008 +lover16 +shortcake1 +roc +141086 +varanasi +147789 +23021989 +violeta1 +240388 +fuckyou17 +blessed3 +fiat500 +urlaub +amiret2015 +sonora +striper +110683 +princess77 +210788 +kenneth123 +spooner +225225 +mingus +sasuke2 +10011989 +alphabeta +twilight7 +joe1234 +pasadena1 +rhythm +hillcrest +shirin +ckjybr +fifteen +durham +thinking1 +united99 +mouche +131188 +trustgod +badgers1 +archangel1 +jacqui +bluedevils +bogey1 +qwerty87 +fuckyou00 +angelus1 +saywhat +videos +BRANDON +504boy +281281 +101181 +broken2 +sac916 +240988 +230787 +11922960 +190788 +charlie23 +September +maracaibo +rachele +dopey1 +mustang06 +juanma +lucknow +josemaria +260388 +joshua6 +opennow +klingon +narnia1 +120692 +220786 +starwars11 +daisymae1 +0147 +computer01 +1newyork +150987 +spliff +bitch4life +bullsh1t +beauty123 +reddevils +14021989 +jakester +newera +7e9lNk3fcO +chelsea5 +william23 +greatman +Junior +101095 +elite +ballin07 +dildo1 +mariaa +240489 +03031988 +avangard +pongo1 +rosamaria +19031987 +ilovejess1 +profesional +z123456z +daisy7 +hewitt +�������+��� +226001 +shawn12 +246801 +acoustic1 +pushok +100287 +franko +lin123 +krusty +walnut1 +america3 +barclay +sheba123 +lssy123 +pookie3 +beauty2 +bigbucks +priora +matmat +210787 +honeykoh +13031990 +spectrum1 +hot101 +chicken8 +vSjasnel12 +punk77 +yfcnzyfcnz +232629 +bully1 +antonov +clint +12151215 +jasmine23 +111110 +191288 +gendut +ja +700007 +141285 +paola123 +gabriel3 +dealer +Tucker +wishes +888555 +camprock +050590 +poohead1 +garima +AMERICA +mmm111 +carolina2 +kisska +pink99 +1stunner +02031987 +105105 +bigboy13 +glock17 +46709394 +planner +110191 +natedog +fruits +maria14 +lake +311288 +monteiro +goodjob +mum +151190 +198325 +197200 +clown +azerty1234 +skulls1 +christian8 +mercedes2 +hot2trot +barnaby +green55 +crown1 +fla +bigguy1 +271190 +250688 +gio123 +monkies +warhammer40k +steveo +170288 +0911 +sohail +10051987 +daddy6 +10041991 +freedom01 +klootzak +indochine +dimension1 +kyle11 +alesana1 +mutiara +chauncey +model +hentai1 +kids1234 +antonio3 +150188 +250790 +alex2007 +joaquim +byron +131190 +berlingo +beamer1 +kaleigh +spiral +mahogany +101182 +22051991 +10111987 +highlife1 +ganeshji +rockin1 +toblerone +jahjah +soccer95 +candy! +justin88 +211190 +221282 +camero +171188 +passed +julien1 +111284 +masha123 +marvin123 +100887 +1Ck75iflgA +nayeli +bellevue +baseball00 +joshua04 +200689 +cowboys5 +swingers +yogibear1 +something2 +options +tony23 +241090 +janna +willow12 +badboy13 +171171 +12101989 +garret +andr3w +shawn2 +moremoney1 +joan123 +charmaine1 +100100100 +jakers +morgen +230488 +original21 +kelsey123 +qpqpqpqp +destiny9 +sinbad1 +ilya +moon12 +death101 +rotten1 +271189 +10101982 +20121988 +fuckyou15 +kostas +deaths +luciano1 +stratford +130488 +shayna1 +letsplay +blackcat13 +johnwayne +drake123 +roy123 +120185 +poi +baller32 +elmer +lucylu +290688 +221284 +shadow07 +chowder1 +10251025 +aq1sw2 +zildjian1 +grapefruit +trailer +pravin +fuckit123 +mini123 +18021988 +wiktor +yfcn.irf +jennifer! +teamobebe +checco +policy +legends +5201314a +twilight11 +fontaine +iam +train +pelikan +babymama +volvov70 +050290 +hackers1 +rewq4321 +gizzmo1 +luckycharm +let +retarded +tanechka +jimmys +12031992 +moustache +kolade +dogpound +753951456 +4getmenot +monica13 +ilovejake +aceracer +framboise +crazyfrog +130684 +yzerman +steph12 +10051991 +apples3 +angel111 +sunbeam +douchebag +killall +epiphone1 +anal +gitrdone1 +horsey +120591 +football65 +10051988 +phoenix602 +trustme1 +carmella +monet1 +green99 +twinkles +melancia +southpaw +ilovejb +2104 +210889 +goo +bigdawg +auction +horney1 +starshine +160486 +150889 +music23 +geography +purple101 +100185 +bru +lilly12 +june07 +28091992 +tony01 +bushra +jumoke +babyg1rl +240589 +03031987 +01470258 +bolton1 +loreal +220989 +marlena +taetae1 +yYxTHH8J9k +wicket +crazy6 +peralta +010182 +sridevi +corncake21 +gossip1 +star99 +paradigm +bigpapa1 +noaccess +bridgette +221184 +kingofking +vfrcbvec +mensuck +hao123 +1patrick +20031990 +151289 +southeast1 +danny11 +glock40 +massacre +fucklov3 +enfant +190588 +imcool2 +111086 +nomar5 +concordia +arsenal01 +lbhtrnjh +coldbeer +m1m2m3m4 +201188 +good12345 +fil +figueroa +movingon +1pretty +021090 +flanker +drama +superior1 +130489 +little2 +nba123 +quimica +fuckoff13 +infernal +eric11 +softail +becca123 +gohan1 +120184 +221100 +220787 +rachida +gfhjkm12 +wenwen +yahoo11 +gorila +quest +heather11 +makaveli7 +peter2 +katie01 +keeley +23121988 +soccergirl +aaaaa6 +240990 +5thward +180889 +140787 +p@55w0rd +cookie6 +loveme14 +vlad1995 +samoht +passwordd +02081988 +master666 +150586 +cinders +smoke123 +198112 +saw123 +jodete +pasword123 +smile5 +lietuva +venere +abudhabi +inessa +fire911 +virago +2013 +fred11 +pinkpink1 +oneway +makenna1 +1father +14101985 +240689 +Natali +molotok +21121989 +bertie1 +sammie123 +rayray2 +berries +272829 +holla123 +smile11 +kuba +malang +100587 +brandon69 +celestine +basile +chloe01 +garnett21 +poopies +250787 +superbowl +yecgaa +12071990 +nonstop +max2000 +d2iTsr81jO +puppy7 +fifty50 +maggie08 +tunisia +mustang68 +skiing1 +skate5 +chasity +shrimp1 +james19 +bear13 +kira123 +michael99 +sistemas +mandie +dorado +700700 +rockies +210790 +fxzz75$yer +sinner1 +69chevelle +pantera666 +cutie07 +bogoss +hahahahaha +alhambra +mental1 +baby2006 +10121989 +147852369a +taratara +121184 +aa1111 +1qazaq1 +assunta +02071987 +211189 +mike88 +zoosk123 +ramrod +holger +lover9 +lokesh +124816 +tigers7 +lilly2 +220584 +tamanna +220685 +sxUaIehAtp +azucena +choose +ghbdtnbrb +daywalker +zoey123 +tigger99 +famiglia +pimpster1 +princess33 +cutie6 +sonny123 +111190 +160288 +123456789aaa +arigato +thinkpink +marimari +sexy28 +steven3 +mizzou +15121987 +hitomi +toluca1 +jannah +hidden1 +110485 +cookie9 +870621345 +love247 +mahmood +303303 +afrique +261185 +irock2 +suckit123 +flower6 +buttmunch1 +britta +951236 +joan +joker23 +daycare +05 +1234512 +21051987 +mylove01 +tigers13 +01041988 +fling123 +cioccolato +koolkat +gordo123 +banana7 +19101990 +tbone +brooke01 +punky +yomama12 +198777 +12331233 +01021985 +josefine +gators15 +pierce34 +bradshaw +prout +toilatoi +125 +1person +240986 +24091991 +17121987 +photos1 +bulls +ghana123 +320320 +dreamteam +fetish +chien +johnson48 +hockey24 +kayla01 +derecho +tiger101 +2310 +tiffany3 +bigboy7 +carter12 +mustang95 +qwertyasdf +filipek +sashok +chichi123 +alicja +flanders +121979 +35353535 +pretty5 +bergen +brown2 +kosova1 +130790 +040488 +10071991 +development +juliane +136136 +miamiheat3 +2boobs +planb1 +shantel +newbaby1 +farzana +smokey69 +19051987 +qwerty24 +killa5 +cowboys08 +sinister1 +gfhreh +kevin14 +aaa222 +joshua03 +jordan20 +fairytale +abcxyz123 +abegail +robinhood1 +herrera1 +120893 +letter1 +dontcare +171286 +houdini1 +natusik +111978 +310191 +vova123 +syzygy +laila1 +george22 +wizards +3216732167 +wxcvbn123 +160389 +20041987 +mani +lister +ipod +tanner2 +120581 +dylan01 +killer15 +smile22 +wendys +valdemar +racer +150986 +gansta +mama2010 +game12 +20101989 +davinci1 +suzie +gamble +110044 +kissmoko +220886 +manalo +Tigers +111285 +ryanryan +00000p +karl +whitehorse +011 +22101987 +light123 +moondog +odessa1 +201285 +130289 +121981 +12031986 +03031990 +analsex1 +princess00 +bnmbnm +210390 +nikenike +finalfanta +william9 +fslhggi +fight +www333 +hotmail12 +190988 +brittany3 +kiana1 +261187 +johnny3 +виктория +ranger2 +janicka +1914 +200586 +apple6 +daycare1 +cipolla +hotstuff12 +natalie3 +MONICA +1q2 +2morrow +240790 +211287 +bailee +mommy! +toystory +sexxy +m123123 +1peaches +ashley1234 +zach12 +thedude1 +01061988 +mexico100 +ykvpoia569 +sexy32 +password86 +monkey20 +111111d +17081945 +1daughter +boomer11 +sweeney +lakers13 +221185 +140588 +171088 +23452345 +godis +Guillaume +200686 +juarez +filimon +22121992 +tangerine1 +dollie +danny01 +20031987 +wodemima +nathan07 +sammie12 +123pro +140585 +11051987 +myheart1 +moimoimoi +angel100 +mexico21 +austin4 +bluebell1 +230985 +power3 +124563 +tivogliobene +abdul +xbox123 +250990 +younes +lagarto +aquiles +tomika +number123 +fruit +switch1 +160590 +15041987 +bobobo1 +shrek2 +punk101 +annapurna +money12345 +suckdick +collingwood +chocolat1 +madden06 +Fylhtq +claudio1 +13041987 +chrissie +misty12 +ducati999 +reefer420 +130685 +25051987 +alliance1 +jimmy7 +10121985 +220889 +marykay1 +fortress +jamar1 +sunshine07 +pokemon4 +marykate +nevermore1 +romans12 +vfrfhjdf +paradox1 +26842684 +juventus10 +Good123654 +cfvjktn +250386 +240789 +23121987 +fabio1 +pavement +mark23 +william22 +pogiako123 +vbhjckfdf +monster23 +010390 +221089 +240586 +theman2 +whatthehell +sweetpea2 +bluegrass1 +suchka +jaroslav +amine +dakota3 +alberta1 +peabody +Qwerty12345 +dustin12 +7153 +bratz12 +15051990 +linkedin12 +azzurra +mon123 +redsox2 +peluchin +vincent123 +candelaria +10061986 +198521 +121191 +Eminem +560095 +le +rabbit2 +karapuz +escalade1 +visitor +laylay1 +angelochek +reginald1 +zappa1 +johnlennon +23091989 +mexican12 +lelewa123 +chuck123 +fucker3 +505505 +270988 +jeter +michael25 +colts +www123456 +paris2 +jake10 +cowboys3 +manju +cutie9 +tyler07 +frederico +hoops1 +200002 +casio +perkins1 +booboo5 +18081988 +741123 +chris89 +6Acaxa54bE +flower23 +260988 +PATRICIA +passions1 +181187 +shop +��+�������� +doughnut +loop1206ssdsff +pavithra +frankie12 +sameera +220887 +sadiedog +130890 +charlie99 +anette +mustang9 +221285 +punkie +2m66xF2AJT +1й2ц3у +akanksha +barca1 +bidemi +gertrude1 +100885 +barney01 +liljon +fckgwrhqq2 +motorbike1 +2happy +harley09 +bandit13 +dingle +kailey1 +tanner123 +vincent2 +bounce1 +alialiali +workshop +platano +199111 +coelho +jimbeam1 +norma +bigblock +black14 +1danielle +asshole23 +higher +13031987 +newyorkcity +mimi13 +orochimaru +satchmo +patton1 +active1 +sliver +easton1 +gamecocks +sixers1 +140889 +jeepers +bitch06 +michelle16 +sesamo +cygnusx1 +fakefake +dragons2 +kurwa1 +ZAQ!2wsx +guitarman1 +ritter +fir +milk123 +amir123 +milomilo +281288 +veronika1 +070790 +14121988 +bambino1 +zaza +241288 +joseph23 +hank +trinity123 +sunshine24 +notreal1 +polaroid +zujlrf +whore! +animal12 +endurance +shower +111184 +klaudia1 +thebest123 +fyutkjr +22121988 +joshie +batman4 +jockey +100883 +freedom07 +cfifcfif +140586 +12111987 +myshit +myspace20 +terran +sanford +elenka +trivium +maravilla +VICTOR +cheche1 +10121992 +ivanivan +people3 +p0p0p0 +TAYLOR +kanika +1357246 +candyshop +tayson +natedog1 +130188 +meg +louise2 +judoka +michelle6 +almendra +toolman +meryem +301088 +����+����� +dragon09 +pokemon8 +apricot +8balls +1budlight +baby91 +havefun1 +120680 +bourbon +funny2 +309309 +chachacha +bobby3 +health1 +willow123 +02071986 +ragdoll +bobby7 +zaqwer +11qqaazz +230485 +kapow +11121990 +openme +angelo123 +jacob10 +0987poiu +waterloo1 +mathilda +280588 +sil +14101988 +2501 +230187 +moinmoin +yamamoto +qwert2 +market1 +fruitcake1 +karamelka +surrender +laredo +anhtuan +itsme123 +butterbean +superman88 +broadband +primera +240488 +230387 +anibal +godawgs +mashenka +250686 +victor01 +karting +crfprf +parakeet +nikitina +retro1 +palomo +monkeys3 +521521521 +savage2 +11021989 +200288 +freunde +zoe101 +250586 +010889 +seo12345 +789qwe +krystian +diamond13 +e1234567 +christian4 +harvey123 +130190 +bionicle1 +21031986 +240787 +lilli +030390 +fy.njxrf +sexyred +w1966a +fuckyou07 +li123456 +22071986 +198822 +lovebird1 +2ealtD3y4Y +beatrix +rrrrrrrrrr +princess26 +puffy1 +dutch +taytay2 +turbo123 +asia123 +pimp#1 +steven22 +asddsa123 +pimp420 +flowers3 +eeeeeeee +hatebreed +pad +love1996 +15051985 +amber3 +boycrazy1 +1904 +asd123456789 +240687 +amorcito1 +lovesong +marie6 +250288 +manpower +tweety08 +121092 +080889 +blue02 +artur1 +puppies123 +olidata +jobjob +jaja123 +jellybean2 +101985 +joshua17 +260687 +600020 +mark13 +11031990 +12051205 +bigmomma +400071 +antonio7 +741 +101984 +250488 +280690 +180288 +wentworth +w1967a +toast1 +ali12345 +241290 +15091987 +panasonik +linnea +liverpoo +04041991 +iloveyou* +22362236 +0147258 +fiddle +123456sa +chance01 +caramelo1 +celina1 +261190 +1jonathan +player21 +rugby123 +thomas15 +exotic +n1234567 +02051987 +Brooklyn +... +gravity1 +nikolaus +esperance +traviesa +21121990 +110189 +15051991 +elnino +lovely13 +Maria +78945 +oliver13 +maintain +elisabet +201012 +reeses1 +chaplin +11091986 +hostmaster +ilovemama +tiana1 +cheer4 +gabriel01 +456123a +123777 +ggggg1 +tonto +tulipano +redredred +tiamat +geirby +rainbow11 +dancer22 +star33 +311286 +Destiny +mexico#1 +13121991 +garage1 +claude1 +02031988 +001983 +redcat +mick +kaylie +4711 +camila123 +1908 +291189 +25051985 +longhair +elijah12 +wetter +mattmatt +240985 +toocool1 +duffer +170686 +hunter02 +howell +220220 +scoubidou +bonzai +092124 +25061987 +cornflakes +150990 +12061987 +20051988 +lollie +lucky15 +11041990 +200986 +171090 +02031989 +munich +301089 +1skater +skyrim +230790 +gerardway +101192 +daisymay1 +coco22 +sara11 +love1990 +sincity +22021991 +grillo +psalm139 +alexis06 +miguel2 +waseem +31121986 +melanie2 +hansolo1 +aiden123 +king69 +420time +kimba1 +14021986 +beejay +02101987 +cookie8 +fatass2 +sexy99 +cc1234 +records1 +fuzzball +600001 +jarrod1 +vindiesel +010690 +170890 +123smile +mommy09 +miranda2 +100786 +babyboy5 +111111111a +spiderman123 +hotties1 +110885 +161086 +123123e +tyler! +r2d2c3p0 +steam +w1964a +spanien +coke12 +15975321 +stephie +maxim1 +eliska +squeaky1 +198619 +125689 +katherine2 +ozzy123 +rocketman1 +balls2 +vaseline +andree +140686 +cabernet +311088 +cameron10 +topper1 +andrews1 +15051986 +kittys1 +rider +darian1 +secure1 +princess96 +kbcbxrf +brooklyn7 +lionel1 +nastya123 +michelle18 +yankees26 +james! +quique +23021987 +binladen +240685 +bluewater +crawford1 +10000000 +291188 +130984 +22041988 +skull +yamaha123 +fuckoff7 +andrew8 +nnnnnnn +asterix1 +cheergirl1 +Porsche911 +226016 +cliff +morgan7 +allie123 +frank2 +karola +kitten11 +daisy5 +megumi +weeman1 +23101991 +name +150487 +OLIVER +10051990 +231183 +seventy7 +kathrin +mbtVibranike +311089 +indian123 +commercial +jay1234 +winter2 +liljay1 +intern +01041987 +heretic +ufhvjybz +good1234 +prozac +230188 +sprout +hunter9 +nolimits +knockout1 +greenwood1 +radio123 +ruger1 +kestrel +robert18 +cyril +001980 +carlsberg +030688 +dbityrf +evgenii +20041988 +asdfjkl:1 +#1love +channing1 +3006 +toby1234 +borussia09 +tanguy +gustavo123 +luckystrike +thomas18 +310789 +legendary1 +charlton1 +19021988 +150689 +blitzkrieg +maulana +theshit +26031998m +ilove5 +jumpjet +diddle +ranger11 +blue27 +kozlova +townsend +moreira +angelika1 +mulberry +250487 +juvenile +ribbit +iloveyou06 +volvos40 +tanja +pepepe +ppp123 +Victor +black8 +bella07 +tyler15 +cool14 +dietpepsi +loveyou13 +william6 +100187 +lucky16 +babygirl95 +2512 +helen123 +maryjane69 +200787 +25121990 +198525 +250986 +anathema +sweetie123 +240889 +Ruslan +austin21 +ilovesarah +bubbles101 +fastcar +Christmas +dagger1 +70chevelle +sasha1996 +ivan12 +aircraft +271087 +111191 +antonin +200690 +250486 +16061987 +lolek +none123 +badboy11 +nameless +donkey12 +rus +16101987 +superman08 +estella +140283 +cazzo1001 +biscuits1 +10061988 +luana +chamonix +sixers3 +fromage +pallmall1 +290990 +112288 +beaker +270788 +breast +nokia6303 +kelsie1 +medic1 +234561 +yourname +susanne1 +mimi11 +kurosaki +vvvvvvv +198625 +080886 +eeeee +purpl3 +presidente +bigjohn +panzer1 +goldorak +kingkhan +iamlegend +raven2 +brasile +jackie13 +wordup1 +qazwsx2 +11111986 +babyd1 +pulcino +slayer6 +belier +robert6 +canary +booker1 +h-town +50cent1 +jeremy11 +11121991 +josh15 +reymysterio +guesswhat +030393 +raisin +10031988 +penguin7 +jackie3 +chocolate12 +mark01 +trebor1 +happyface1 +mapleleafs +zapato +cabezon +leahcim +zxcvbn123456 +123456000 +qazwsxedc12 +agent47 +star18 +34 +barkada +dark12 +cluster +charms +kantot +stephani +kraken +111975 +281088 +raptors +yourmother +gattina +19021991 +shelton1 +yaya123 +ilovefood +roxy101 +rasengan1 +dinosaurio +tyler06 +100290 +optima +grass1 +jerkoff +140890 +20061988 +01021990 +1111111111a +271185 +default_password +pooh11 +sundar +20031989 +lexie +blue66 +ABCDEFG +terra1 +tree12 +carbon1 +rockband2 +271289 +taylorgang +300888 +hollister8 +zamzam +woowoo1 +181286 +145300 +cyrus +princess#1 +140388 +1marine +money17 +12345678n +demonio +dragster +281287 +110286 +crazyman1 +cheese23 +1lovegod +201085 +lucero1 +america5 +cheese01 +freelove +neverdie +meaghan +pokerface1 +eagles7 +joh +kelsey2 +310189 +pants +edward22 +dawkins20 +90909 +tink101 +122987 +dinmamma +123bitch +annaba +paparazzi +killer55 +fake1234 +darkness2 +010388 +250988 +12081990 +130986 +mark22 +123456777 +bongo +griffith +plokijuh +tijuana +20121990 +honeyb +25101989 +hello15 +boomer01 +justin03 +bullseye1 +changeme123 +barbosa +260586 +sophia123 +jollibee +a88888888 +baggio10 +2pac4life +brenna1 +cyrille +120392 +erik123 +231181 +110063 +130187 +23051991 +tweety15 +mustang13 +workout1 +110892 +sexi123 +clear +ubnfhf +softball18 +playboy! +princess91 +chateau +marcella1 +nokia3210 +mercedes12 +iloveallah +220292 +123321qw +150988 +blandine +123usa +1019 +281190 +porn69 +1qwerty1 +20061987 +1love4me +orioles1 +110383 +hello55 +joanie +monte +Dbrnjhbz +funny12 +nokia3230 +im2cool +green24 +jimmy3 +roshni +tottigol +150787 +121293 +020788 +gears2 +rose14 +mybuddy +carrots1 +140590 +160589 +260588 +cucumber1 +02031986 +02041991 +rachel! +Angels +starstruck +wuschel +checkmate1 +vlad1998 +stamford +110785 +megan11 +daiana +310310 +200989 +eagles01 +130887 +rfnthbyrf +151183 +soccerstar +characters +Caterham7 +12061988 +wilma1 +heckfyxbr +icecream3 +rosey1 +11061987 +sergiu +peanut08 +ballers1 +vero +Ranger +010183 +windstar +140886 +brotherhood +experience +050689 +boycrazy +lefty1 +brooke3 +mahalcoh +willie123 +aristotle +golden123 +loveyou22 +nyc123 +098765432 +17071987 +alphabet1 +skater15 +1beautiful +skyline34 +4christ +shades +4040 +matthew07 +aniolek +xavier2 +lullaby +drifter1 +yahoomail1 +aftermath +230285 +heather! +insight +sultana +jasmine07 +rosa12 +mamont +moneyy +charisse +wilson12 +laurel1 +lighter1 +password03 +barbie3 +200788 +arsch +bolinha +scofield +nicholas7 +161286 +alisa1 +andresito +pass_word +casamento +fujifilm +150288 +alex1987 +30041991 +candie1 +500018 +Kevin +persia +steelers6 +imgay123 +hecnfv +thegirls +11081988 +14785236 +joker7 +candies1 +westbrom +130787 +roxy1234 +scandal +444555666 +mustang08 +saphir +grape +color +01031988 +12081991 +gotigers +19101987 +chelsea9 +money18 +matt23 +werwolf +мамочка +nigga4life +25051988 +orange99 +kimchi +usmc +gunbound +grandma5 +loser14 +ashl3y +Julian +ricky12 +portos +dancer4 +198519 +1115 +161085 +cocoliso +destino +10041987 +rocker123 +051288 +bigbaby +daddy22 +jeff1234 +kirby123 +constance1 +120882 +saniya +tinhyeu +chapman1 +angellove +salame +a1234 +vodoley +locos13 +198322 +23021990 +poobear1 +super3 +crazy22 +greenbay4 +000888 +needjob +1tiffany +10041990 +ilona +18811881 +vbktyf +����+����� +481516 +151087 +230287 +08154711 +040985 +singles +lauras +200389 +170590 +nicole1234 +jerald +020686 +calculus +12071988 +cloud7 +undertaker1 +121294 +Zxcvbnm +never4get +bailey08 +dixiedog +dashadasha +johnny11 +jk1234 +�+��+���+�� +nicaragua1 +1iloveu +wilhelm +harley02 +noone1 +120683 +truman1 +130486 +celeron1 +stephany +toledo1 +jump +your +austin02 +flaco1 +fallout2 +blunt +23031991 +bluegreen +natalia123 +jessica20 +blazers1 +merchant +170585 +baptist +pimpin! +andyandy +saraswathi +aaron11 +10081987 +danmark +thomas07 +ninjas1 +sam123456 +wakeboard1 +22031991 +mircea +11031991 +jacob7 +mega +20041990 +250190 +malossi +little12 +09091987 +sananelan +chicago7 +10011992 +shane12 +popcorn5 +porsche944 +michael05 +angelica12 +110029 +110591 +nekoneko +anya +killer. +manumanu +olayemi +250189 +luismiguel +signup +cookie. +131185 +baller33 +4babies +05081988 +harley! +dora12 +alvaro1 +fatima123 +120580 +21041992 +pastis +elgato +12345678w +fel +onizuka +tictac1 +nathan22 +kamal123 +ugly123 +bharath +sebring +diamond10 +myspace27 +nelson123 +barbie7 +120480 +220385 +123rf +140589 +princess03 +210189 +2015 +force +fuckyou77 +jessica19 +02071988 +lessthan3 +loveangel +damian12 +150289 +laika +220885 +061 +scooter5 +honest1 +underwear +199100 +elenita +monica01 +forever8 +mindfreak +11111987 +niewiem +ss1234 +goku123 +vjfLkiG522 +justin20 +twokids +popcorn11 +050587 +a789456123 +1passion +140587 +14011987 +444666 +13121990 +15081990 +billbill +littleman2 +vatoloco +content +guccimane1 +180590 +mak +qqwweerr +link1234 +290488 +single! +yfnecbr +david! +nietzsche +choclate1 +14021985 +diablo11 +leah123 +caro +100492 +bobby11 +foreverlov +qweras +blackdragon +22091991 +booboo69 +pazaway +yellow9 +twitter +adelka +demetrius +woodward +internacional +170688 +sheree +170488 +star07 +ranita +tanger +mysecret1 +120283 +simba2 +isaiah2 +titou +bless +w1963a +201080 +cricket123 +10041004 +3eHd1ixi1Y +malayalam +101011 +ktm125 +maggot1 +siegheil +�������+����� +12041986 +hello09 +100884 +angel2007 +sharky1 +16101988 +caribou +197575 +9988776655 +07071988 +cherry22 +250489 +all4him +alice12 +400004 +snooker1 +141089 +saab9000 +wanadoo +gizmos +140990 +super11 +wargames +cthuttdyf +models +q1w2e3r +lampshade +111979 +przemek +hooper1 +23121986 +bilbao +19051992 +sexy66 +200685 +smirnoff1 +asd123asd123 +vette +mko09ijn +bigpapa +static1 +cfytxrf +thuggin1 +fish11 +gfhjkzytn +abc789 +12021991 +getrich +samarth +drew12 +1311 +money55 +yazmin +test11 +benton +skazka +goldmine +albastru +66778899 +201000 +caroline12 +CAPA +parker12 +manolo1 +justice2 +12081986 +myspace45 +781001 +kassidy +sweetie3 +1kitten +davidd +15121989 +termite +poop90 +evolution8 +brewster1 +18061991 +140188 +241085 +catherine2 +12031988 +june2008 +chino123 +020290 +131090 +20081990 +medium +kikimora +fuckyou89 +Diablo +funeral +sad +sexisgood +billyjoe +nokia6120 +spring09 +281189 +10021990 +123456789012345 +bubba5 +mary11 +grease1 +ginuwine +garcia123 +CHOCOLATE +mitch123 +play2win +sector +greedy +priya123 +april04 +5858 +mynigga1 +coglione +bigboy69 +bitchface1 +angels4 +ilovehim. +killzone1 +21436587 +anne123 +25101990 +quantum1 +230684 +iceman2 +201290 +6string +gospel1 +essendon +coniglio +ashlynn +johndeer +15051987 +looking123 +rafa123 +consultant +shygirl +metallica9 +lizbeth1 +100790 +daryl +dagobert +maharaja +sasha1995 +triplex +twentyone +170586 +marduk +mickie +lashay +nike13 +sancho1 +rjnzhf +241286 +estrella12 +heidi123 +picachu +Valentina +adelante +reckless +221183 +shivers +130592 +190586 +fiocco +onmyown +21021986 +summer77 +aaa12345 +cherry14 +mydog1 +255255 +download1 +raul +leadership +john3:16 +23021988 +david24 +cellulare +11qq22ww +adrian11 +mustang98 +02061988 +amante +cousins +lolman +swordfish2 +angelangel +a102030 +elisha1 +141290 +3112 +hadley +impala64 +200589 +iamhere +251284 +150687 +jody +madame +justinb +10011986 +mariam1 +brandon06 +alternative +261087 +rainbow13 +pickles123 +pimpin13 +tomasito +030389 +14111987 +hannah16 +171086 +tobydog1 +12041991 +11061991 +andres12 +vjq +05050505 +matthew08 +241087 +gutentag +October +ihatelife1 +grandkids3 +13121986 +199512 +300588 +laloca1 +stephanie3 +Admin123 +five +carlos18 +150486 +walking +potter7 +120592 +120791 +gfhkfvtyn +hjvjxrf +angel91 +punkass +vfhecmrf +197911 +lynne1 +asshole9 +contessa +diehard1 +taz +carla123 +150789 +oneluv +duranduran +rangersfc +ivanna +150686 +wild +friendofArriane +100591 +ballin13 +mckinley +delores +liljon1 +anna88 +410206 +carter123 +redwood1 +goforit1 +marysia +abhijeet +s7777777 +muffin01 +bigdawg1 +bucky +171290 +19121991 +hejhej1 +jayhawk1 +dropdead1 +210686 +mandi1 +MELISSA +securite +otis +27101987 +az1234 +edalwin12 +12051986 +thomas09 +jack23 +sirius1 +kamila1 +mommy1234 +reaper666 +woodlands +spot +paulinha +741852963a +babygirl99 +niconico +23051987 +bubbles14 +02021982 +tantra +121183 +mike33 +140389 +20101984 +giada +sergeev +spain +myhouse1 +alfabeta +170388 +cahaya +15041988 +destiny10 +browning1 +230290 +bigdog123 +160890 +rodion +061288 +aqwxsz +grandma4 +star08 +free11 +1crystal +mail123 +100186 +seniors09 +kurwa +210684 +19121986 +claudia123 +pimpin01 +oreo11 +wildone +110592 +quest1 +22552255 +17121990 +asdlkj +lovesucks2 +caccola +shaved +commando1 +vredina +miyuki +blacklab +jiefang998 +mimmo +130590 +moymoy +olivia3 +020389 +finish +fitzgerald +qwerty101 +bowwow123 +100188 +lampard1 +zippo +lovey +11041991 +lazio +040490 +rocky10 +bossboss +cutiepie13 +larousse +jose21 +hunnie +210985 +10121984 +1254 +terrier +sports2 +serafina +banana5 +jacques1 +bienvenue +janeman +170289 +310590 +polopolo1 +badass69 +teodio +chicago123 +ali123456 +deicide +mariela1 +zazazaza +loveee +turtoise +dragon0 +140489 +221084 +javon1 +13021990 +soccer28 +221290 +police12 +18041991 +blackice +270989 +alex1998 +milanisti +mariko +bailey07 +bimbo1 +112212 +golf1234 +56835683 +hallelujah +xyzxyz +artem123 +petey +197676 +cod12qw75RqYi59n +1fatboy +murdock +13041988 +crystal3 +11031987 +987654321m +chopper2 +angels01 +stephen2 +grass +ducati1 +13061986 +20061991 +andone +snicket +cochise +rosemarie1 +pamplona +130891 +hetfield +scooby3 +prince7 +sarita1 +winifred +hopkins1 +confident +justina1 +13101987 +careers +bearcat1 +q1w2q1w2 +020688 +110784 +eunice1 +13371337 +babalu +vfvektxrf +oscar11 +10051989 +dannie +11092001 +rocio +chinky +alex92 +hotbabe1 +skinner1 +dolphin3 +cou +250685 +181186 +240788 +sawyer1 +jess1234 +asdjkl +thecat1 +marites +ma1234 +twins123 +271089 +alex007 +1candy +dasha1 +СЏ +101295 +anelka +sunmoon +bustamante +dogboy +160688 +diploma +lakers09 +10031989 +010192 +ripcurl1 +katenok +180690 +220187 +jazzy2 +20021991 +steelers10 +jayden3 +1lovejesus +july4th +olemiss +tori123 +healing +nikeair +gennaio +121978 +assclown1 +Scooter1 +getmoney3 +johnny01 +kellys +a22222 +numbers1 +260490 +nalini +240686 +221187 +25121985 +sunshine20 +Hockey +zalina +hollaback +taylormade +stefany +berry123 +samantha5 +salazar1 +skillet1 +guitar69 +31121990 +120186 +rehman +04 +aaron13 +gaucho +jesusis#1 +george7 +alf +kallie +rhinos +120383 +walik007 +lemuel +breaker1 +husky1 +rogue1 +alex2001 +scarface13 +11021988 +210984 +mike25 +alex1 +tuktuk +kevin07 +nikko1 +maharani +baby45 +winnipeg +archery +kay +iloveyousomuch +dreamon +bently +gucci123 +dizzy +scissors +touchdown1 +212121a +1234567890123456 +keykey +magyar +roldan +manga1 +12091989 +qwerasd +130286 +malawi +sheridan1 +Peaches +ilike69 +alicia2 +helpme123 +lahore123 +allahabad +281290 +regenbogen +23061990 +cheer06 +150790 +mexican2 +sp1derman +tigger09 +198421 +babygirl88 +prague +principal +illmatic +444888 +rafiki +230587 +200887 +nokia3110 +sabado +ventura1 +antony1 +straight +monkey05 +cheer3 +lapo4ka +asdfgh2 +180388 +intel1 +prancer +fuckl0ve +bringiton +Boston +171287 +mailkuliev +sequoia +NICOLAS +kingjames2 +baby55 +anaconda1 +hero123 +polini +gui +edelweiss +donkey2 +fifteen15 +tiffani +reyrey +shuffle +deep +danil +jaylin1 +nigga13 +choppers1 +m654321 +alexis23 +asdasd11 +des123 +fidodido +copper123 +210589 +210886 +Aleksey +liverpool12 +milagros1 +millerlite +140484 +basura +wicked13 +horses101 +700001 +74185296 +diana13 +20062007 +110391 +scroll +baseball69 +20021989 +130886 +03041991 +footba11 +kartik +23051990 +peewee2 +mogwai +tucker11 +mariah2 +segun1 +black4 +droopy1 +maybe +candy21 +nata123 +47474747 +260590 +super6 +77887788 +dungeon +mirinda +W +monika123 +123007 +07071986 +mememe3 +playa123 +231092 +nokias +bluegirl +19511951 +nana01 +111183 +301190 +whiteout +gabriel13 +scorpio7 +july04 +171186 +harvard1 +austin8 +02041988 +1dolphin +wwe12345 +lovebug12 +powerade1 +21011991 +galicia +colombia12 +stewart14 +snuggle +tequilla +020282 +Starwars1 +301286 +060788 +020590 +allday +02051986 +19071989 +cartier +lamborghin +15061987 +element3 +wilfredo +rfhjkbyf +261090 +cheer7 +belleza +dingbat +1steven +flawless +17121991 +internet123 +130288 +181089 +cosita1 +josh21 +emolove1 +bubbas1 +0001 +1sexylady +icarly +mona123 +12031985 +220186 +hammy1 +adidas11 +251190 +rainbow4 +grandkids4 +aka123 +vendetta1 +13121985 +20051985 +230785 +21051991 +taratata +������������� +azerty123456 +sunshine88 +pasta +V +thickness1 +bigmomma1 +160588 +tweety23 +hearty +april08 +25101988 +abcdef123456 +joker11 +20081987 +ALEXIS +cecelia +260589 +mariane +babyblue12 +joker666 +ryan14 +qwerty25 +joel12 +rubina +hockey01 +passion8 +multisync +bismilla +tomandjerry +lucky18 +int +breakfast +matthews1 +da +loveme6 +mustang6 +jijiji +02031991 +19031993 +261083 +charlie09 +pokemon23 +251182 +fuck1t +bobdylan1 +smoke20 +15071987 +agostino +cuba +williams2 +tigger15 +lelouch +nokia6500 +122003 +310585 +pepper4 +teachers +southpole +friends101 +roxygirl1 +mikolaj +duckduck +a147258 +southside4 +jasmine15 +123456tt +2410 +spaces +gethigh420 +dadsgirl1 +jessika1 +come2me +konoha +metallica8 +dreamer2 +ruben123 +riddle +chrissi +jonathan10 +girl11 +stupidass1 +monkey95 +10111011 +150190 +element13 +nevershout +salavat +050586 +eddie2 +250690 +28121987 +football64 +midnight7 +suckme69 +babe101 +rocklee1 +mankind1 +200390 +199412 +basic +nikitin +hunter04 +uekmyfhf +as0620 +estupido +180587 +dakota10 +egypt1 +winner12 +cioccolata +050788 +250886 +jerrey232x +tallulah +301285 +dawidek +almera +winniepooh +verde +220290 +020287 +1brittany +solnze +deb +hamster123 +sbc123 +f1f2f3 +virgule +12051992 +cardinals5 +198321 +jigger +antiques +000222 +lucky007 +thanh123 +katerina1 +webkinz +hannah04 +22031990 +vfkbyrf +fresh2def +sony1234 +sammy22 +edouard +tigertiger +ralphy +12051990 +henriette +10041986 +loser1234 +taztaz +X60zAY0468 +sharan +10091990 +honney +mickey14 +150386 +culture +120991 +iloveu14 +250286 +namrata +234567890 +athome +11121989 +powerhouse +january4 +vaz2106 +@elit-centr.com.ua +georgia2 +mischief1 +hubbabubba +withlove +2014 +300687 +koteczek +pimp06 +fuckyeah +kid1412 +111282 +murda1 +novell +210786 +290788 +robert08 +forward1 +Gracie +mangoes +lakers34 +montes +brock +fastball +15101985 +gmail +051289 +freedom13 +character1 +babygurl! +house2 +123888 +love6969 +yellowrose +babyboy01 +froggies +kashmir1 +pebble +wlafiga +erick123 +charis +rhianna +01011994 +fullmoon1 +beepbeep +jack111 +24688642 +getout1 +glamur +darby1 +130390 +ribeiro +bandito +qazxswedc1 +11081987 +sexytime +Happy123 +norbert1 +events +deacon1 +11061986 +123456789- +23101985 +MAGGIE +2505 +love36 +15101990 +debra1 +6Cxd2X986x +sandra01 +1bubbles +honey23 +makedonija +ladiesman +juegos +06061987 +k12345678 +catalyst +230292 +24041991 +keenan1 +26061989 +1turtle +180588 +puma +friends8 +584131420 +toptop +password98 +nnnn +frazier +liquid1 +pussy! +tiger8 +honda99 +nicki +bieberfeve +animelover +fyabcf +korn123 +311086 +lolek1 +melissa5 +tormenta +monster22 +acquario +raiders11 +zangetsu +juanes +myspace44 +mothers +kasumi +21031991 +arcade +nutmeg1 +rubicon +bonnie01 +geo +600004 +dawg +0311 +211087 +olivier1 +class2012 +22061987 +07071984 +carmencita +11071989 +151187 +100783 +260986 +10061987 +qfcFgdA3zx +333000 +babygurl08 +der +ok123456 +dany +22071987 +laylay +flirty +jackass69 +tanner01 +notagain +queen23 +pickle123 +airjordan2 +26101987 +220282 +robert16 +smoke2 +1119 +utyyflbq +gocubs +280689 +stirling +25051989 +mayday1 +pinokio +300690 +buster99 +karaganda +tinker11 +redsox5 +janessa1 +layouts! +timati +030588 +aa000000 +hollister0 +210190 +200187 +prime1 +02081989 +lovelife2 +oluwatoyin +peanut4 +cookie15 +11071987 +willi +hockey27 +sammy14 +240690 +roswell1 +agadir +password29 +s123123 +state1 +alexis05 +badabing +bebe13 +johnny! +caraculo +erotica +memories1 +365365 +sasquatch +18091991 +raffles +spring07 +aminat +hrithik +kilkenny +roxette +ce +141189 +110491 +20031991 +stickman +altoids +1smile +fenix +260989 +123456jj +oliwia +dragonslayer +271090 +25101991 +anhyeuem1 +170685 +faerie +killer24 +shannon7 +abigail2 +1green +hogan1 +carrillo +booboo10 +klklkl +elliemae +rockon123 +240987 +avatar123 +190589 +paulinka +13031985 +genesis11 +softball07 +jesus9 +nathan5 +110882 +loopy1 +muslim1 +father12 +s111111 +carlos69 +anonelbe +egorova +player22 +rodger +261289 +lollypop12 +sa1234 +101094 +14031991 +richard01 +monsters1 +160490 +adenike +ally123 +web +caballo1 +sydney11 +monster8 +pussy22 +furball1 +190789 +13061990 +lalaine +fuckyou24 +yourmom3 +cool21 +kilroy +bluejay1 +281289 +80sbaby +270688 +huihui +stephy1 +13121989 +banjo +jakarta1 +3535 +020687 +pooh14 +allgood +josie123 +stupid11 +mates +te +260691 +morgan5 +quick1 +kanker +12071991 +251285 +bobbys +alkaline +23081990 +seo123456 +renee2 +198723 +lordlord +pedrinho +14041992 +11021985 +240989 +100984 +lucass +ilovehim3 +repmvf +yeahright +im2sexy +aezakmi1 +loveyou5 +souleater +23061987 +lekkerding +ani +120120120 +050988 +underoath7 +double07 +23041986 +smile4u +timberwolf +190488 +chevalier +chelsea08 +dilligaf1 +hjvfyjdf +150886 +160587 +moc.oohay +25031988 +function +300590 +w1962a +love1989 +23051988 +carsten +kin +111177 +bee123 +next +301288 +jsbach +iggypop +BARCELONA +shabba +21031990 +1eminem +15987 +lucky24 +260190 +green25 +yingying +dustydog +nantucket +tijuana1 +jm1234 +monkeylove +cody01 +iamsexy1 +Claudia +celica1 +cock69 +666666s +110582 +screamo +milwaukee +mailbox1 +456asd +crips1 +jordan00 +abc123xyz +181290 +nathan05 +raymond2 +june09 +250490 +schwein +tissot +1943 +paupau +111087 +pisolo +emmarose +xxkk01234 +7u8i9o0p +foxylady1 +carmen2 +domain +kitkit +01021988 +islam1 +ghbhjlf +lilwayne23 +fishtank1 +coocoo +grandmother +setembro +harshita +30031988 +15021987 +puppy3 +asd789 +051 +MATRIX +02061989 +mario3 +130490 +crispy +100882 +22041986 +05051988 +soul +230891 +198010 +josh16 +13051987 +WoE45bYzRY +diablo3 +p0pc0rn +B1LKeB6711 +12051989 +shit69 +22061989 +guitar5 +kaleigh1 +iloveeric +06061988 +sochi2014 +peoples1 +romeo2 +11111985 +marquez1 +juan1234 +emin3m +hireme +greywolf +millertime +pumpkin12 +football84 +lyubov +kitty23 +ambika +21031987 +thecure1 +tomcruise +12061986 +14051987 +gogators1 +jackson11 +zappa +210785 +junior16 +agenda +Mother +qwerty18 +310888 +paulinho +rusty12 +230386 +looking4 +135795 +bammargera +deepblue +wakeboard +upload1 +andreeva +110692 +100985 +juniper1 +colors1 +banana3 +tigers07 +verbatim1 +120880 +131425 +BUTTERFLY +madhu +12111211 +merlin12 +spider3 +ole4ka +dukeduke +11011991 +nirvana7 +angels13 +angel. +20071988 +никита +iopiop +30061987 +austin6 +tigers09 +jiujitsu +fatbitch1 +dfcmrf +291 +240487 +asshole6 +10011985 +watch +skateboarding +quinn +oldsmobile +101988 +mirabelle +010788 +cash12 +12081208 +123456ma +buffett1 +chase12 +maruska +13101988 +7788250 +11101991 +jigsaw1 +liza123 +spectre +fvthbrf +sound1 +13111987 +common1 +timoha +19051988 +shorty6 +280188 +baby27 +bitch88 +chinatown +ilovesteve +280882 +12121212a +13101986 +matthew14 +00000000a +baseball32 +bondarenko +Twilight +220692 +16041987 +210186 +? +chapstick +18121991 +060789 +liverpool4 +bayarea1 +carolann +zinaida +bulldog12 +adebowale +280889 +slayer2 +1223456 +alireza +superman18 +668899 +WZF2SmE498 +24111987 +love1991 +12061991 +20061989 +harley04 +mizuno +270587 +roxy13 +titilayo +hemmelig +ender +12021202 +121081 +10011991 +000000000000000 +cameron11 +renata1 +150785 +yellow8 +1happy +dasani1 +football00 +booger123 +mariah123 +cyber1 +142536789 +adedeji +bella23 +11251125 +maria21 +120191 +12071989 +pochacco +198319 +alex95 +daddy101 +livelaughl +penny2 +boytoy1 +12101992 +cybershot +allahisgreat +jadakiss1 +161190 +albert12 +grace7 +jack24 +napoli1 +folgore +error +hotsex69 +20081988 +02051988 +06061990 +summer9 +hillside1 +161287 +150786 +07071989 +rovers1 +201283 +1shithead +kingjames1 +schools +minhavida +young123 +gtkmvtym +vaz2107 +school5 +andrea. +lilman12 +patty123 +titina +������ +010688 +Welkom01 +tigger24 +pollon +live4love +augusta1 +greek1 +20121985 +170790 +220285 +fredrik +yellow99 +sexy67 +mi +oluwatobi +valenzuela +16061986 +bananas123 +saphire1 +chouette +bleach123 +clotilde +120682 +Hawaii +rotary +martin10 +12071987 +210687 +4455 +tabbycat +16021990 +freaks1 +gfgekz +samira1 +tatatata +butcher1 +robert24 +49ers +160989 +199212 +120582 +gam +betina +1midnight +lucky88 +12101985 +bungle +21121988 +tigers3 +198910 +fuckedup1 +100682 +12121980 +vikings28 +tigerman +resident1 +dizzle1 +221091 +mario5 +161187 +250889 +rayray123 +silicon +noname1 +deniss +10021989 +05061987 +271286 +m111111 +horatio +500038 +pleasant +20051991 +sable +241285 +anabelle +modesto +heart12 +avenged7 +240490 +piazza31 +micmic +king99 +2412 +225566 +yomamma +17021991 +frankie3 +claudette +111192 +clarkkent +sensitive +vip +200487 +alan12 +nathan! +161090 +ktjybl +140487 +saisai +090986 +030987 +tamika1 +yanina +shushu +sasuke11 +princess98 +basket12 +manpreet +honda01 +24101988 +160290 +perfecto +daria +google. +070786 +160985 +katie5 +paralelepipedo +Maxwell +myspace55 +jayden05 +beau +iliana +070890 +bailey24 +sunshin3 +160888 +19091985 +qwertyuio0 +211285 +nostradamus +deer +caruso +tiger1234 +babygirl02 +twenty4 +thewall +muyiwa +10041989 +pumkin1 +lifeguard +01031989 +camryn +17031987 +sou +bolabola +sensor +myszka1 +101520 +maktub +immaculate +crissy1 +123asd456 +mclaren1 +lifegoeson +shelby13 +cheeks1 +chucha +inlinked +020888 +elpaso +crazyboy1 +shyshy +sos123 +poohbear11 +mystique +khalsa +signin +1234567A +joker3 +email1 +comein +majiajun +homie +161189 +SOPHIE +chicken69 +series +HELLO +missingyou +pawpaw1 +godawgs1 +kiran123 +pipipi +fonzie +Inuyasha +shipping +17101987 +diamond21 +wolverines +leonora +22061988 +271186 +alistair +bullrider +nin +surendra +pennylane +friends01 +feyenoord1 +japanese1 +bottom1 +silencio +andrew. +17121985 +170389 +tigger77 +eureka7 +nessa123 +magaly +espada +isaias +110291 +alpina +piepie1 +papamaman +terremoto +13061989 +vasilek +lilboy1 +crappy +280488 +110290 +sweden1 +888000 +110682 +david8 +sandra11 +15031990 +raulito +18101988 +17051988 +11091989 +dasani +15031991 +4vgYvq46aJ +stars2 +humble1 +invictus +quick +159357159357 +rerfhfxf +131085 +11bravo +xoxo +apple21 +12011988 +luis15 +samuel11 +10111988 +delano +sasha11 +corporation +santos123 +Melissa1 +annabell1 +5841314520 +1234567890s +twin +13081989 +310586 +jacobo +kisses4u +22041991 +13971397 +frida +virus1 +11021992 +ashley99 +prison1 +bmwm3gtr +dragon07 +230990 +family101 +leslie12 +crusty +devilmaycry4 +141190 +130987 +1number +121181 +andre12 +naruto4 +q1w2e3r4t5y6u7i8 +121295 +260684 +esqueci +mausi +25121991 +19051989 +minniemouse +tulip +Canada +pinkgirl1 +harpreet +260290 +nena13 +finlay +jessica24 +lucydog1 +22061991 +4209211 +261285 +pizza5 +01061987 +manuella +251084 +alex94 +wangwei +13051988 +121221 +130683 +errereer +mario10 +futbol10 +football74 +260685 +clouds1 +06 +angelie +quaker +chicken9 +littleone1 +weed11 +love2u +ryan10 +30101987 +trabzon61 +201083 +4everyoung +654321j +phoenix13 +l0vely +kisses! +031286 +a!515253 +1597532486 +icecream7 +trigun1 +hanna123 +kissme! +hockey! +jennifer19 +habana +jack07 +gifted +160487 +valiant +ilovemyson +vangie +eumesmo +peanut69 +SNOOPY +classical +shinigami1 +hey1234 +computer4 +kiki13 +johnny23 +crazy23 +hearts123 +lan +13081991 +juliette1 +260688 +gen +mayfield +16061988 +april07 +hellow1 +mahavir +automobile +dfcbktr +peepers +pink89 +kenneth2 +sarahs +10101993 +alyssa10 +daddy09 +george10 +28101991 +formule1 +lalalalala +250582 +02051989 +maryjane2 +231290 +channing +abby1234 +001979 +boxster +26061991 +270990 +penguin12 +nicolette +jumping +123456bb +290388 +pants1 +kiki1234 +david9 +softball00 +25031987 +smartass1 +10021988 +20091991 +rochester1 +bitches3 +mamanpapa +tazmanian +nnnnnnnnnn +cuteboy +hallie1 +121192 +20021990 +dirtbikes1 +11041986 +ballin22 +celibataire +washburn1 +fungus +p6264758 +ichbins +fhntv1998 +stupid3 +198110 +7US20 +jesusjesus +beebee1 +bailey5 +777444 +outback1 +231282 +numberone1 +198419 +23091986 +198423 +kostyan +hangover +luis14 +160987 +junior18 +jerkoff1 +jackass! +Monster +atlantic1 +sophia12 +holly2 +hyper +limewire +123321fvfv +hombre +auntie +tweety6 +tiger99 +123a321 +dinky1 +blahblah12 +16081988 +micha +141085 +Apple123 +290987 +home12345 +klaus +kadett +brody +nachito +1chelsea +315920 +lambo1 +19031990 +mikaela1 +10031992 +johndeer1 +gulnaz +241091 +fuckyou16 +031187 +mymummy +sudhir +buckley1 +vovavova +music1234 +190888 +199012 +oswaldo +amiga +persoff +Hallo +040489 +eminem69 +123569 +260789 +100691 +rarara +edcvfr +100991 +thundercat +buddy14 +sabina1 +lakeland +katten +112234 +honza +pink06 +critical +envision +honey21 +goodness1 +morgan22 +05051991 +atlas +tru +badboy3 +swim +getalife1 +12061989 +sureno +gateway12 +atomic1 +jimmy5 +454647 +270873_ +21041988 +21091987 +bigjoe +sarang +05051986 +scott2 +02041986 +11041987 +amoroso +bubba69 +edwin123 +��������� +11031985 +271187 +purple89 +chivas15 +daftpunk +zombie13 +lalo123 +annie12 +21121985 +live2love +faith777 +adidas69 +magic7 +crazylove +maldito +198720 +21061990 +10021991 +lateralus +canaille +forgetful1 +fubar1 +marcus01 +101293 +14021988 +161285 +1118 +appleapple +a1s2d3f4g5h6 +POKEMON +happybirthday +kakarot +d54q7xjmhx +fuckmenow +african +cloud123 +210585 +mybabies2 +andrea21 +151283 +kayla10 +holahola1 +13071987 +pizza3 +16101986 +pray4me +juggalo69 +markie1 +kailash +love35 +gangsta101 +tyler09 +pink00 +01021986 +turtle13 +23021985 +020388 +peanut07 +170786 +angel90 +corner +pizza11 +irina123 +a1b1c1d1 +230489 +Lvbnhbq +cfrehf +2020327 +lapin +chewy123 +monster6 +louisville +210490 +babygirl27 +17121986 +pepper23 +21011987 +faith3 +c00per +robles +11051990 +1234qwerasdfzxcv +newlife4me +ford250 +freebie +sargent +240186 +78963 +victoria3 +kamera +mautauaja +coc +1smokey +010488 +thibaut +zoozoo +cheap +blood3 +example +gerson +ganesh123 +ASD123 +ayden1 +ineedmoney +130385 +offshore +kampret +a23456789 +babyboy11 +101202 +ballin21 +hollywood7 +funtime1 +261290 +sexkitten1 +jennifer21 +23091991 +amber14 +cde34rfv +qwe123rty +alex1999 +01071986 +poohbear5 +100891 +leicester1 +baby94 +croatia +151290 +motylek +coccinelle +130784 +micheal2 +15021991 +turk182 +whatever69 +orbital +280886 +tortilla +hawks +website1 +261189 +231182 +soccer96 +vicelord5 +eleonore +class2008 +111111qq +11081989 +pookie11 +moonchild +100684 +spiderman! +afolabi +toilet1 +jennifer23 +medico +sridhar +tatyana1 +tin +100692 +chelsea4 +210683 +afroman1 +30031992 +speech +maggiemay1 +140291 +basset +brain1 +scoobie +tttttttttt +021089 +cheyenne12 +missie1 +220391 +arisha +include +220489 +321meins +220284 +bitch#1 +1sweetie +volgograd +141187 +cippalippa +shemale +021088 +1nicholas +s1s2s3 +24689 +zxc1234 +04041986 +100390 +stephens +beauty12 +asnaeb +rhino +22111989 +191188 +fkm: +cnhtrjpf +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +antelope +vfvfbgfgf +packer1 +lechat +tweety07 +babalola +421201 +bailey99 +face +sonu +bianca12 +violator +wendell1 +pecker +190590 +charlot +cantor +280388 +000012 +20121986 +30121986 +226010 +lambada +12031989 +book123 +123212 +dragon33 +fairview +hammerfall +morgan! +booboo! +married2 +alex1989 +iloveyouu +SUMMER +dewey1 +nittany +pimp99 +joey13 +zoey +cookie17 +241084 +110384 +irvine +vegas123 +270984 +rockband +161084 +innovation +jonesy +300589 +icp123 +aniyah1 +bubbles23 +15021985 +1234567i +henry2 +amit123 +jeevan +sunnyday1 +10011990 +treble +kimkim1 +njkcnsq +tasneem +cheesey1 +yagami +candy15 +living1 +strasbourg +sin +core2duo +anonim +dulcinea +271188 +mylove11 +12021992 +panda13 +dunkin +321321a +snowman2 +25021988 +12561256 +198424 +accept +fuckuall +swetlana +19031985 +kickboxing +01101987 +eatshit2 +081 +26041988 +ccccc +01021987 +mujeres +fartface +2pac +doubled +momdad2 +bmw2002 +agusia +melissa01 +les +heineken1 +21guns +love2you +schubert +iloveamy +carnival1 +sure +shogun1 +mickey07 +jacksparrow +jenny11 +travolta +callaway1 +mariska +crockett +291088 +happy99 +toolbox +pumpkin3 +18041987 +senate +230185 +ifeoma +nate12 +18121989 +dancer5 +100191 +notnow +ac +password* +fylhtqrf +babita +140390 +21021991 +NATHAN +250687 +imabitch +19071991 +margareta +11021990 +gauthier +ionela +Albert +hazelnut +031089 +25101985 +290689 +01011974 +sex12345 +mynewlife +austen +roosevelt1 +irlanda +patrick4 +28041987 +godrules +03031986 +prometheus +140790 +sexiest1 +pittbull1 +z12345678 +160889 +matt21 +220684 +PCwAC33gb9 +18021991 +14061988 +bella4 +13061987 +010102 +cerber +georgette +andrea22 +19041988 +satan6 +marie! +football85 +785612 +lulu889jdddd +05061986 +alexis02 +dol +jojo22 +ride4life +121004 +comida +270789 +gjvbljh +223355 +automatic +cyrus1 +sea +30secondstomars +deadhead1 +school10 +171085 +bradley2 +daniel00 +09091989 +nyyankees +rollie +bobby5 +140385 +iloveher! +kate12 +cassey +luis1234 +510510 +buldog +sabian +punjabi1 +alexander123 +candles1 +875421 +kl098709 +members +100491 +rocker12 +251280 +11121984 +281185 +bigboy5 +steelers36 +bobbyjack1 +slovakia +dodge1500 +170988 +epson +denton +believer +devendra +davedave +10021986 +cielo +18051990 +140985 +17021990 +blbntyf +shygirl1 +12091991 +ibrahimovic +98769876 +yourmum1 +ibelieve +herewego +123qweqwe +geforce +monserrat +jonathan11 +sierra01 +dynamite1 +071188 +oliver22 +adedoyin +190587 +152152 +abcde1234 +caliente1 +orange. +124567 +channel1 +02051991 +lilfizz +pussy21 +edward7 +bastos +andrea3 +tampa1 +11071991 +09091990 +padrepio +radiation +yan +ralph123 +150592 +parsons +04041989 +021286 +jaipur +500029 +elwood1 +198765 +polkmn +pochta +marzia +12021986 +10011987 +weed4life +jennifer69 +benben1 +20071990 +220785 +130388 +lumber +snow12 +leon12 +123qwe321 +200285 +torito +110891 +thelord +plopplop +marker1 +cherry! +jodie +tiamaria +january30 +524645 +154154 +13071988 +brianna7 +1234we +scooby01 +keller1 +gabbie1 +wilder +justin. +140986 +301085 +01071987 +hyphy1 +260489 +pookie01 +01071985 +houston2 +jacko +marley12 +iloveme11 +22111991 +12041987 +140984 +020987 +calista +diedie +myson1 +120284 +lilfizz1 +bullshit69 +turtle11 +clever1 +nokia12 +brooklyn3 +terrapin +salute +county +10011984 +marjorie1 +abuelita +sexy44 +23101990 +systemofadown +letsfuck +happydog +1q1q1q1q1q +sachin123 +emoemo1 +gjgeufq +11061988 +luis10 +airport1 +matrix01 +06061985 +29710455d +musics +10031991 +sarah22 +pokemon0 +superman07 +101280 +270188 +girasol +runaway1 +mickey69 +06061989 +wellcome1 +loveher1 +wojiushiwo +snoopy! +23031987 +010108 +271284 +juggle +180490 +fender2 +a147258369 +semper +jammin1 +blue34 +pomme +desert1 +050595 +10051986 +214 +seb +babygirl123 +260288 +stalingrad +231091 +uhf9QDH +vicente1 +santi +angie12 +x1x2x3 +120482 +100989 +madzia1 +abdulla +chicas +hailey01 +21061987 +alex2002 +riviera +101093 +29121987 +200386 +19051990 +coklat +metroid1 +aquafina +111977 +falcon7 +1122331 +mickey4 +longhorns2 +boysoverfl +gretel +28051991 +mila +jrcfyjxrf +240187 +131191 +mir +mustang8 +millicent +123123d +davidb +lovess +army123 +owner +200800 +22051990 +sudhakar +mariaelena +pompom1 +malatya44 +asa +160388 +chijioke +loveyou11 +151184 +201084 +movement +betito +01041986 +victor11 +pluton +gogreen +daniel89 +heartagram +lea +120281 +Anastasia +cutiepie11 +12111991 +15081987 +ilovejacob +doc +tuscany +140486 +170785 +brianna5 +1234567qw +webcam1 +bugaboo1 +1303 +12001200 +11111989 +25041987 +heynow +bedroom +aaa777 +120183 +lego +mohsin +letters +cowboys01 +watkins +kalani +271184 +lovegame +210289 +poop10 +keerthi +MONEY +qwertyui2p +020488 +urmom123 +eagles09 +130186 +candyshop1 +nosmoking +gemini69 +4815162342lost +2110 +bulldogs12 +mamica +paris12 +melon1 +crappy1 +greenday13 +521000 +jus +performance +250185 +montrose +please2 +dolphins2 +12041989 +luckyme1 +England +eric13 +everquest1 +132 +zorro123 +john1010 +270487 +01081988 +ashley93 +really1 +trey123 +olivia13 +kassidy1 +ruslana +melon +zindagi +piranha +vfhctkm +ppp +gb15kv99 +101210 +260486 +wasd123 +200290 +paulpaul +skaters +r1chard +200882 +outlaws +281286 +101193 +kevin15 +vince15 +amaya1 +291287 +eminem13 +051290 +tyrese1 +123456.. +tanusha +061290 +310787 +metallica! +13031992 +brooke13 +rock&roll +260790 +mommy07 +nippon +311285 +hardcore69 +allo +18121990 +michael0 +happy4u +160585 +condom1 +21041987 +viola1 +jojo23 +riley2 +111976 +turtle7 +poohbear7 +soccer32 +1405 +leavemealo +money33 +nicki1 +crazy10 +290687 +Samsung1 +charlee +bianco +160390 +budda1 +16071987 +taco12 +matthias1 +star67 +kitty8 +godfirst1 +jayhawks1 +03041987 +11071988 +1charles +sulaiman +171187 +alright +01091987 +MICKEY +energia +manman123 +agustin1 +250887 +brasil10 +pasta1 +18021987 +23011985 +gta123 +freshstart +mustang03 +fruit1 +willard1 +annie2 +11061990 +sowmya +sopranos +optical +pepepepe +18121987 +170484 +cassy1 +2204 +andrew9 +marmaris +arsenal4 +180990 +tigger16 +bus +111991 +phish +meme11 +majestic1 +hometown +laura13 +1nathan +304050 +03061986 +demonic1 +1310 +211089 +lalola +rose23 +654321s +67676767 +525525 +waterford +tempest1 +dthjxrf +alexis6 +tracy123 +carmela1 +revival +mickey! +190985 +romulus +junkyard +zxcvbnm8 +211085 +charlie. +10061989 +allthebest +yannis +ilov3u +15011987 +piesek +ocampo +dean123 +310388 +loveme8 +1308 +sumerki +gjyxbr +twinboys +040888 +190288 +170987 +199011 +babyboy09 +redwing1 +vaughn1 +rommel1 +glass1 +050686 +silver3 +hooch1 +20031986 +nassim +goodfellas +03041986 +iloveyou02 +Alyssa +chester7 +francine1 +haruka +bliss +more +santaclaus +niranjan +april01 +stevens1 +loser21 +311090 +123йцу +falling +010888 +02081986 +informatio +300388 +azer1234 +freeze1 +fxnocp14 +9876541 +whoops +160689 +22021990 +takeshi +13081988 +01041985 +chooch +19061987 +clancy1 +percy +bolanle +bailey! +portvale +luckyman +irock12 +199312 +1200 +19091988 +lthtdj +plmokn +banger +24101986 +sarah5 +backpack +mine12 +11111991 +rendezvous +hotmail. +13051991 +landen +teardrop +240585 +211283 +laloca +hitesh +hardcore12 +skater10 +220286 +amber5 +17051990 +210484 +julito +20051992 +firetruck1 +19041991 +adrian01 +monella +260788 +DAVID +canadian1 +fakefake1 +130591 +130885 +gamefreak1 +space2 +beerman +lexington1 +denya2531914 +Karina +tinker01 +findme +tomboy1 +transporter +221281 +16051988 +a3eilm2s2y +020588 +bluestar1 +beezer +130287 +sayang2 +casamia +260390 +240389 +bambie +300686 +220185 +sham69 +201092 +200591 +classy +peanut23 +smile4 +jesus12345 +jennifer10 +rideordie1 +zoomer +welcome11 +oriental +junk +16897168 +sammy4 +13011987 +austin09 +iddqd +gcb +250785 +250683 +polish1 +selim2010 +311289 +360360 +200289 +280988 +tigers22 +547896321 +david06 +10061985 +joseph4 +yogi +one4all +129129 +ducky123 +loca12 +chiken +161089 +daman1 +pokemon101 +ritesh +020286 +monique12 +sananto210 +love234 +lovelove12 +20071989 +cricket2 +SWEETY +03031983 +19091986 +160787 +jose22 +001981 +jeniffer +310190 +sexy02 +24101987 +xyzzy +11021991 +fresh2 +marcopolo1 +vostok +fakeass1 +05051990 +shanny +traveller +skillz +pianoforte +271086 +140888 +143445 +amira +q2w3e4r +trackstar +198620 +babycat +babyboo12 +marihuana1 +montana2 +pikachu2 +madison13 +utility +10081985 +4everyours +22061985 +051186 +jamison1 +duke22 +kulangot +killer00 +subtitle +forklift +barefoot1 +voltage +iceage +bokbok +shannon3 +charm +cards +love2shop +1234567o +bouchon +sab +madhouse +caution1 +010589 +opel +princess45 +14041989 +199511 +20121991 +24121987 +firestar +diabolika +fire11 +nicole03 +02588520 +threeboys +150887 +3210 +king07 +beefcake1 +star09 +08081986 +junior4 +michelle17 +william08 +football82 +sorriso +15041991 +long123 +21121991 +210887 +190490 +010588 +rakker +11011987 +allahallah +12121993 +301184 +23101989 +willie12 +lakers01 +manoj +27051988 +andrei1 +bunny13 +someday1 +������� +sophie13 +tujheirf +teagan +wormwood +160488 +0711 +28101987 +franziska +stlouis1 +afrodite +golf12 +199612 +Zachary1 +norwood +23081988 +doodie +26061990 +kelinci +baobab +130387 +ily1234 +mou +official +13111990 +deidara +micro1 +elmejor1 +ilovetim +10051985 +filefront +nithya +dobermann +300488 +bunghole1 +radcliffe +01061990 +imsocool1 +110283 +yanochka +mylove13 +20121987 +robert. +papi123 +cristianoronaldo +180589 +capricorne +240289 +ter +181086 +ducati916 +damn +nando +aloysius +lulululu +antigone +1qqqqqq +daniel27 +manman2 +lockdown1 +231082 +samantha21 +jkjkjk1 +luisa1 +kayla7 +1antonio +824655 +1fishing +remedios +haleigh1 +ella123 +direito +28081991 +dodo123 +midland +170985 +snooky +mariola +140989 +170789 +elemental +live2die +alysha +hell123 +fucku7 +free1234 +chevys +4141 +180687 +hailey2 +lover1234 +101281 +600018 +panget1 +poppies +bayern1 +passion123 +mickey08 +230490 +paco123 +magazin +annisa +rimini +261086 +clement1 +spanky123 +Mike +turquoise +cali13 +eminem3 +andalucia +Shannon +04041990 +charl1e +230885 +sales1 +wilkinson +110392 +annarita +zaqwsx12 +compton310 +153246 +14121989 +texas11 +cute14 +shareaza +Kirill +belmont1 +conquest +sisisi +bread1 +melons +031 +melanie123 +dance11 +smithers +justin02 +anaclara +i97wb6sxq7 +asshole21 +myspace111 +bestia +tyler8 +screwyou1 +123321qweewq +blondes +bigballer1 +badoo123 +hannah1234 +1910 +170486 +firehouse +nessuna +220191 +catania46 +poop1 +edith +17111986 +13061988 +az147258 +030990 +johnson123 +20091989 +sophie10 +allen12 +270588 +linus +1234Qwer +dragon20 +20121989 +duke1234 +240288 +020789 +253545 +2205 +13021987 +cupcake7 +jacko1 +170485 +tazman1 +16121986 +maddog2020 +treetree +raja123 +crystal13 +josh69 +301086 +111180 +ghbphfr +lesbian69 +princess97 +7410852963 +kitten7 +chloe3 +110492 +shaggy2 +031189 +reddy +cookie09 +01071988 +outlawz +tatina +100584 +vfnhbwf +coleen +ch1cken +19071987 +251083 +jetta +angel45 +hotboy12 +aguila1 +cereal +shortstop +brazil10 +sports123 +marusia +moogle +wsx123456 +kacenka +h97e7IjwwB +lionlion +busdriver +wsxzaq +primetime1 +boston11 +volkan +pam +28021992 +110884 +240386 +babyboy07 +asdfasdfasdf +Christian1 +dance13 +onetreehill +130290 +010590 +280800 +010389 +12041992 +marinella +alex89 +130485 +miami3 +swapnil +180886 +matt14 +dragonlord +cap +nokian +1906 +peanut21 +a123 +021188 +17101991 +alligator1 +lopas123 +smooches +180887 +arshad +pete123 +11101986 +moi123 +sassy01 +281087 +21101987 +230591 +temporary1 +whiplash +11051988 +iloveyou26 +131287 +18031988 +riverrat +25111986 +yahooo1 +cowboys#1 +shakes +197811 +pointblank +250691 +#1girl +marinela +110791 +samdog +cherry01 +03031989 +ania +jessie13 +semenova +04041987 +versus +311087 +091190 +thelove +311085 +flawless1 +��������+��� +12011985 +231284 +thuglife2 +andrew02 +5236 +300587 +zxczxc123 +chaussette +220983 +mitchel +austin05 +pink20 +240390 +270689 +dakine +rashida +sasori +ELIZABETH +indica +110883 +justin25 +cintia +a0000000 +16101991 +gareth1 +20081985 +swagga1 +140887 +manda +gatito1 +wally123 +200687 +hannah. +puerto +yuanyuan +26121990 +pamelita +salam123 +thedoctor +180986 +spence +CrkUrrP954 +john16 +diamond23 +bobafett1 +adonis1 +a7654321 +120992 +747747 +isabell1 +24121990 +181191 +18121986 +22101986 +10qpalzm +love43 +jennifer22 +google! +181090 +rocket12 +246135 +13021991 +250583 +sambuca +marriott +201185 +mashamasha +tommy3 +160786 +pacino +junior24 +freedom69 +biologie +e3w2q1 +12111986 +fucku22 +cunningham +primax +rush +lacika +acting +31031987 +15071986 +alex93 +lalakers1 +azerty31 +14101986 +madison9 +podolski +200188 +alex2004 +11241124 +vipers1 +December +b33m6yghef +131183 +210485 +dmb2010 +JACKSON +salma +connections +270589 +16101990 +holas +mathys +potter12 +060685 +love4god +hiphop101 +080989 +cheese101 +12061985 +pro123 +victor10 +zaq1@WSX +22031984 +hornet1 +anthony05 +lbyfvj +nicole26 +puerto1 +12021989 +alex1988 +sanjuan1 +honey13 +04041985 +13061991 +martusia +password@123 +cinta1 +random12 +leanna1 +200485 +02101986 +200886 +mexico18 +intel123 +a1b2c3d4e5f6 +morpheus1 +motors +aekara21 +121180 +2111 +07071990 +soylamejor +halley +heaven77 +j654321 +WsYDCIG761 +140187 +26061987 +wordlife1 +tilly123 +11051989 +cassie13 +sprinkles +20011987 +21071987 +21101988 +ca +181289 +271290 +heidelberg +lildee1 +secret69 +231191 +150285 +exeter +friendz +260485 +fakegirl1 +monkey45 +600000 +251184 +ratchet1 +moonpie +parker2 +198326 +deportivo +cowboys10 +gabe +cosmos1 +amirah +ian +ethan01 +200592 +nikki11 +skittle1 +07071977 +queeny +LONDON +15051989 +cement +kinglove5 +tigger6 +muscle1 +1305 +miley101 +william. +230685 +andrea23 +submit +050591 +badazz +paramount +diank123 +babyphat12 +pinky7 +charter1 +kolibri +climber +heyman +05071986 +27121989 +ryder1 +alexis03 +gattino +cherry101 +nigel +skate7 +batman99 +thomas06 +bigbang1 +24041990 +24121986 +200885 +160687 +citibank +veronica2 +hotlips1 +anthony19 +omomom +MYLOVE +way2cool +rainman1 +reyna1 +maggot666 +sunshine33 +danica1 +12roses +bogart1 +hanswurst +terence1 +festina +loveme101 +kalender +saranghae +blair1 +230886 +24051988 +brandon. +espiritu +yamaha12 +cvtifhbrb +cassie3 +mcaBdaw2vx +e6fc37 +sherif +rudy123 +lordgod +archibald +121977 +22111986 +170989 +strannik +Pakistan +novita +16111987 +212 +111181 +yahoocom +chulo1 +16121991 +291085 +laughing +fairway +280585 +merrill +cascada +1qazxcv +baby28 +130393 +koalas +barbie10 +lisa11 +blanket +scamper1 +250285 +120479 +14121991 +boston34 +austin98 +12051991 +25101986 +kittens2 +chatting +heyhey2 +290590 +311290 +momma2 +19021990 +230392 +walters +02011986 +ladder +31101991 +hunter15 +baseball06 +fakename1 +griselda +sallie +191088 +24061986 +dominic2 +1234567aa +14021984 +dell11 +010489 +math123 +< +chichi12 +matvei +ferrer +snyder +julian01 +hilfiger +aggie1 +brat +21081987 +landlord +catdaddy +Frankie +edward23 +thienthan +thisisme1 +newhope +flygirl1 +12051985 +020490 +elvira1 +280390 +motley1 +iloveyou28 +Aa123456789 +200484 +030589 +daniel04 +olivia10 +yashar +hummerh3 +ab69432 +redblue +210288 +ericsson1 +denny1 +purchase +140209 +130892 +WWWAAABBB +barcelona9 +marianita +mireya +dashawn1 +sherbert +21232123 +danny3 +myspace34 +thomas6 +strawberry1 +misiaczek1 +kalleanka +strike3 +pimousse +150685 +sister3 +ovidiu +xm55xExBZS +19111987 +02071985 +holeinone +yusuke +mohammad1 +cherry6 +271285 +lorenita +blind +160788 +23041991 +250684 +300689 +obsidian +luck +solotime +hendra +buster08 +gogirl1 +fashion123 +michelle123 +marquise1 +godis#1 +gremlins +barcelona7 +ghtktcnm +02021980 +prinsesa +030890 +phoenix123 +koolkid +manuel2 +221283 +geheim1 +04061991 +wysiwyg +avatar12 +golova +undead1 +asmara +victoria11 +jaime123 +navajo +02071984 +chivas23 +yankee13 +17891789 +mafia123 +224455 +netgear +ljubav +1230321 +kyle1234 +mehdi +d54p7xjkha +20031988 +thomas. +21021987 +horses3 +17041986 +iskander +flakes +mason2 +teamo15 +02091988 +sas123 +130391 +180685 +300585 +misael +cruise1 +sammys +treehouse1 +141090 +halloo +230883 +stefano1 +brenda2 +197474 +gwendoline +glory2god +171289 +xoxoxo1 +monster10 +30061988 +beautiful8 +karlitos +14101989 +25121988 +t5r4e3w2q1 +ifeoluwa +fische +281089 +pre +chyna1 +duckies +love2005 +crips13 +22021985 +baikal +01021989 +17101990 +130386 +washere +wilson2 +Polina +caramail +201284 +010689 +shutup! +sahara1 +killa3 +141182 +okok +fremont +109876 +310890 +bottle1 +cool12345 +lokito +11031988 +stop123 +jakedog +deneme +deepali +nuts +061089 +14031990 +170490 +summer15 +armystrong +151186 +25091987 +10101981 +4mutdfgvtp +22081990 +dork123 +thebitch1 +14121990 +a1a2a3a4a5a6 +yolande +vecmrf +130785 +101214 +olamide1 +ranjana +nana10 +236236 +playtime1 +bettyboo1 +200891 +whores +0987654321a +101980 +230191 +whitetail1 +heyy +10071986 +takethat +270490 +molly10 +Fluffy +adidas2 +200387 +kickme +duckman +black15 +26031991 +290190 +babygirl05 +151282 +mutabor +12081992 +250595 +me&you +1edward +jeter1 +17111987 +marchelle27 +1505 +cinthia +101989 +10031990 +superjunior +nick21 +sugarplum1 +ugly +deedee12 +trabant +charter +azalea +taylor02 +100683 +258369147 +cvb123 +060691 +ipodnano +cheers1 +carnation +123111 +040690 +justin101 +cakes1 +aa123456789 +rodrigo123 +lovely4 +blood23 +heaven01 +ytpyf. +rockey1 +tophat +taylor18 +220884 +davenport +p00pie +170888 +woodman +190990 +sniper123 +310591 +avenue +ww123456 +131291 +likeme +19101988 +freaky69 +18101987 +mexico22 +8uxzd1b3BD +76543210 +wartune +lostlove1 +roberto123 +aosamples +110783 +soccer89 +160189 +210584 +14051991 +hello90 +010687 +will12 +cellphone2 +revathi +abby11 +oldskool +170984 +1512 +whatever13 +21091990 +pooky +15121990 +191289 +superstar7 +100583 +versailles +241281 +waterart +230791 +newports +hyundai1 +Bismillah +16021987 +flight1 +samuel10 +banane1 +183461 +5t4r3e2w1q +lisa01 +fenster +bagheera +1709 +harrypotter1 +hamza123 +soroka +ayanna1 +moving +2sweet4u +dickies1 +02021992 +4music +15111988 +bloodz5 +14061989 +250784 +monamona +magister +12345. +hector123 +230584 +final1 +221191 +311284 +44556677 +guido1 +280489 +w1961a +macika +123456ll +100383 +cocopops +sexman +joseantonio +football53 +10011988 +rosco +blueskies +123123abc +031288 +20101990 +100284 +imfree +daddy08 +crafty +my2angels +scout123 +bball34 +iloveeric1 +robert17 +4567891 +12345676 +polkadot +280590 +fhntvbq +tiburon1 +99 +netball1 +mommyof4 +301186 +natasha2 +270785 +170487 +screamer +joshua24 +14111986 +500001 +hotrod69 +crazy01 +sunflower7 +krasavica +02101985 +mason12 +15081988 +bubbles10 +kierra +ilovelife1 +zanoza +a123456789a +fuckthis! +220291 +rickjames +12456 +james25 +mimi1234 +02021991 +tobiloba +14101984 +bobdole1 +slipper +Rebecca1 +101982 +pooh23 +smiler +loser10 +gabby2 +ahmet +343536 +footbal +cabinet +sonne1 +12354 +140786 +changed1 +100283 +manowar1 +11031983 +neversaynever +100184 +football0 +220491 +240190 +proview1 +moose2 +19021987 +j8675309 +costanza +jonathan01 +qwertyu7 +survival +darkness12 +cutiepie3 +wwwaaabbb +������������ +22051986 +251282 +22061990 +magomed +200590 +251987 +699669 +plane +nanette +123alex +22101985 +19481948 +steven10 +marmelad +34567890 +kazeem +280486 +210290 +court +23101986 +09091986 +s3cr3t +q12we34r +15101988 +rfnhby +13101989 +muffin! +laranja +shi +4wdaxQ642F +12101984 +kusanagi +tinker3 +ilovedanny +110067 +cstrike +r12345678 +toejam +ballerina1 +bergkamp10 +devonte1 +250985 +baghdad +lieben +engel +mendes +hellos1 +151185 +monkey02 +210387 +beluga +anilkumar +210691 +160988 +millie12 +1234q +cuisine +bears123 +vfhcbr +babylove2 +freelance +macdonald +delores1 +okocha +15101991 +onetwo34 +12091987 +followme +humility +rfcgth +pieman +insert1 +naruto6 +daydreamer +tempo +hernandez2 +maine +dan1el +sexiest +delete2 +11111111q +doggie2 +rivers1 +charlie14 +02091987 +Gandalf +jesus6 +asaasa +famous12 +1�2��3��4�5�� +john117 +shadow0 +24101989 +22011987 +george! +Marcel +hockey44 +031086 +051287 +iphone4 +6969696969 +tony21 +3uc9xN53xH +jesus2009 +ilovemum +kaliber44 +3rdward +leila1 +love84 +240786 +cometa +ashash +saddie +pass2word +21011988 +12101991 +gunit123 +soccer93 +pimpin11 +wan0425 +Hamburg +110483 +19121988 +andreev +philadelphia +right +cool15 +Marine +gosia +limone +insurance1 +Jesus777 +230385 +boris123 +prosper1 +ginger4 +june01 +nicole87 +BsXXbGs322 +twitch +cobra11 +pocholo +saab900 +10121983 +bootycall +chris12345 +zachary3 +5213344 +job4me +241183 +tweety09 +20091985 +jack21 +uqa9ebw445 +wutangclan +florida7 +scooby7 +260990 +dallas10 +SAYANG +13101992 +100384 +baberuth +bebo123 +Tobias +021087 +rocket123 +chance11 +hairball +matrix11 +isabel123 +140685 +198524 +fabiano +mastercard +pizzapie +technical +shay +puffetta +261085 +salomon1 +4horsemen +11011986 +cannavaro +nnamdi +31121985 +nicole94 +fanatic +hedgehog1 +170683 +salaam +130786 +teixeira +1victoria +flower8 +prunelle +music21 +rodolfo1 +270489 +gtnhjd +gangsta4 +blackwidow +110020 +18051988 +lakers3 +nike90 +parkour1 +ansari +Windows +22021987 +laurette +cooper3 +session +bubblez1 +kompages4u +mojito +19041990 +bommel +vanessa3 +120481 +c12345678 +carlos1234 +shaquille +jesus17 +030386 +computer10 +godloves +sexy00 +chouchou1 +denise01 +hailee +happy2008 +mcgrady +emily10 +25111987 +bob111 +231192 +overlord1 +12041204 +skunk +020586 +lavalamp1 +maryjane13 +johanne +papasito +babygirl92 +fubar +831012 +hothothot +collette +02051985 +520 +46494649 +twenty3 +quake +24031990 +marko1 +sexythang1 +luv2dance +house12 +sexyboy12 +01081985 +wilmer +ramone +steven69 +26031987 +babygurl21 +vanessa7 +compaq11 +babouche +oakwood +1cheater +natas666 +020589 +joemama1 +ignacio1 +zero1234 +star45 +tigger88 +peace5 +sexsexsex1 +130383 +34567 +Victoria1 +281191 +kt +banana69 +vivi +monique123 +muttley +triple3 +10081990 +080885 +din +cretin +171087 +geordie +195 +taliban +bobert +loop +25262526 +ferguson1 +bernhard +232323a +panchita +masaya +sheffield1 +anggandako +catfood +180686 +061289 +bridgette1 +live4god +frogfrog +dothedew +justindrew +sept23 +daytek +15121985 +21021989 +23111988 +hottie17 +1407 +marie8 +puteri +lunatica +river123 +131282 +jimmy11 +160190 +Cassie +jkmuf +qaz321 +godisone +nikolaeva +kerouac +111qqq111 +vfylfhbyrf +mickey6 +azqswx +deedee123 +22111987 +310587 +301187 +halamadrid +cherry10 +11071985 +01041990 +21061991 +131084 +sfgiants +161289 +neverever +130291 +emo101 +annushka +290589 +william21 +bengal +q123456q +kenya +Phoenix1 +layla123 +skidoo1 +141185 +junior06 +elijah01 +brothers2 +Iloveyou2 +10061991 +200490 +lesbians +humberto1 +hitman123 +021187 +briggs +161088 +heartbroken +zapper +a:sldkfj +22091987 +130582 +geo123 +12111990 +lilangel1 +jakob1 +fuck01 +ilikeu123 +jeremy13 +99998888 +malatya +iloveweed1 +alex2003 +kam +andrea7 +heslo123 +kombat +qwerttrewq +audirs4 +sunshine17 +moneybags +210384 +25101984 +miamiheat1 +clowns1 +ovechkin8 +helpme! +necromancer +19081988 +imsocool +26061986 +buster23 +jd1234 +never123 +shaman1 +20111987 +170489 +20061990 +dogface1 +wayne12 +03031991 +key123 +boiler +200889 +octavian +LOULOU +cualquiera +patryk1 +awesome11 +nightwolf +cocopuff1 +anh123 +050790 +maksimus +scorpio11 +jasmine21 +marie24 +yousef +cayden1 +simple12 +mexico! +tony10 +adam13 +only1love +what3v3r +farrell +sherri1 +020690 +anyone +23011990 +24041987 +thequeen +0102 +hangar18 +110095 +liverpool10 +120578 +110284 +banana13 +15081989 +650829yjm +26051987 +vEf6g55frZ +jake23 +traffic1 +william07 +130691 +24081988 +rockstar21 +17071985 +luis23 +17101988 +pentagram +discover1 +31121991 +17041987 +10111989 +wannabe1 +100292 +95368452 +recruit +halloween2 +310786 +everton123 +010787 +doggydog +blobby +family9 +01011971 +manger +BENJAMIN +jianfei000 +sam101 +fedorov +anselmo +monster9 +jaylin +130285 +250389 +kitty14 +tunder +marjan +220387 +ilovejesse +trash1 +william69 +peanut6 +13021989 +20101985 +rachel3 +291286 +jerry12 +yellow25 +selena12 +151084 +swinger1 +kelli +vf +1bunny +230286 +piggie +hotness +02081990 +texans +18091987 +250385 +louise01 +paoletta +amazon1 +lina123 +allstars1 +natividad +lyndsey +igor123 +ladder49 +bball7 +babycake +220490 +23031985 +20121983 +sunil +Blessed +breizh +railroad1 +advantage +phish1 +outcast +bubbles. +ar +130783 +23071991 +121275 +251087 +kingtut +cinco5 +mullet1 +maxim1935 +101180 +14091990 +ray619 +ethan12 +120881 +1cupcake +170889 +sistema +260587 +jamal123 +020485 +300486 +greetings +bhavana +26031990 +050989 +mahalqoh +197812 +janet123 +235235 +koffie +job123 +310187 +maverik +smile101 +198920 +winners1 +kensington +29662012 +1cameron +lakers10 +hotstuff2 +evan123 +02041985 +bronco2 +christia +46464646 +18041990 +eagles21 +Florida1 +sandia +a131313 +bebe11 +19091989 +270289 +durban +21021990 +melissa22 +arashi +thomas88 +assword1 +andy13 +110120119 +longman +101279 +13041990 +poptarts1 +nelson12 +120981 +marius1 +24061987 +barbie! +198819 +jimmy69 +11101985 +bolita +warwar +pedro12 +Miller +bear22 +ily4ever +paulo123 +supper +221092 +diego12 +copeland +sierra2 +andrew1234 +nas +paisley1 +buckaroo +qwasqwas +160885 +vampire2 +solnyshko +100592 +180688 +camper1 +nicol +29071986 +porky1 +pamela123 +17101989 +jasmine16 +daddy21 +19081991 +kissme11 +230384 +forlife +schlumpf +280884 +georgi +1muffin +vierge +GINGER +310788 +21051988 +010585 +051188 +safeway +19091991 +joseph14 +20031992 +01051986 +24101990 +Leonardo +charger69 +040486 +ruthless1 +291087 +schlange +smokeweed4 +hotpants +spi +volvo240 +nathan21 +zackery +13111986 +852000 +151091 +jaxson +ronaldo09 +020285 +281085 +16031987 +mybaby12 +pooh22 +irina1 +jackson6 +babe11 +260888 +purple27 +ghjkju +meister1 +11091990 +porn123 +021085 +001976 +maestra +cheeto +7894 +021021 +04051990 +198323 +01031984 +21111986 +internatio +fuckass1 +seether +qwerty1234567 +paquita +steven! +291086 +jerrylee +23101992 +30031990 +rock69 +010890 +cleaning +2103 +hunter24 +itdxtyrj +marauder +amstel +country2 +180890 +terri +700019 +router +godofwar3 +i84Avh9ltI +nikolaj +knoxville +lotlot +Scorpion +280887 +15041990 +211282 +ozzie +demon13 +14121985 +balder +quasar +jasmine22 +constanza +000008 +halflife1 +hotmomma1 +fucker11 +link12 +moonstone +Monika +01031987 +141184 +blank1 +kingkong12 +051190 +tobytoby +panhead +why +wasser1 +megapolis +rutgers +drummer2 +bitch25 +mymoney1 +110030 +zoom +110185 +�+����+��������� +city +20132013 +februari +030686 +concord1 +02051984 +280280 +lakota1 +jessica88 +conejito +260385 +leandra +skater! +77889900 +booboo9 +201011 +invader +freakout +22121991 +simba12 +400051 +ala +87878787 +210591 +fakeone1 +trident1 +genesis2 +nicole92 +destiny07 +301185 +18051987 +301189 +cheaters1 +chachi1 +benzema +89216279708a +310790 +19121989 +Dolphin +28061991 +candida +123456789u +newday1 +heyman1 +sabine1 +spiderpig1 +myboys1 +24031987 +Nadine +Test123 +21051990 +231988 +liam123 +1honey +250591 +120780 +040590 +boosie +sarasota +Tennis +mustang10 +avocado +220383 +taylor05 +09091985 +steph2 +160289 +sapito +clutch +lolypop +22101988 +241289 +grandson1 +1231231234 +grinder +dev +angela11 +170990 +48484848 +monica11 +10041992 +mayaki +fairlane +peace4 +15021989 +180389 +abcdefghijk +hansel +sharon123 +king08 +iluvmlml +123478 +partyboy1 +peewee12 +Daniela +javelin +joseph15 +290188 +ari123 +jonathan5 +grundig +david12345 +dreamz +musik1 +mustang04 +31051991 +12345678909 +120492 +rohit +maple +27041988 +14091987 +but +babygurl5 +22011991 +05061989 +poohpooh1 +passwerd1 +stacie1 +25061985 +11121988 +slipknot8 +stubby1 +madison04 +bones123 +123456789Q +lilmike1 +highway1 +stefan123 +fdfnfh +Maksim +zxc321 +25091986 +963210 +bitches12 +310188 +chewie1 +mamata +babygurl69 +gamecock +amanda07 +everlast1 +margret +03031992 +bobb +110593 +madden10 +25081994 +sandi +17061986 +sleep +jukebox +biagio +dance5 +100392 +anna2010 +150983 +22051989 +balling1 +050688 +261284 +dolphin5 +logitech12 +123!@# +taison +hello321 +johnny69 +201002 +02091986 +200189 +monday01 +paredes +4given +02081985 +30061986 +p51mustang +passpass1 +130889 +loveone1 +cheyenne2 +jason10 +010289 +thomas17 +20041985 +orange14 +1232 +141286 +badboy7 +chill1 +sabres1 +090690 +29041991 +15111986 +deeznutz1 +10021992 +21041989 +3110 +gringo1 +arunkumar +killing1 +150884 +130884 +22041992 +michelle07 +lucinda1 +11021986 +000002 +3qvn5K4qgV +bball25 +130484 +imhot1 +cachito +030590 +171183 +yankees22 +speedy2 +11091985 +be +200790 +passera +060692 +25011991 +a999999 +burner +snuffles +parisien +160287 +luvyou +7Fxf3Jba8t +cristopher +13111985 +celinedion +4myself +198626 +banks1 +111123 +lizeth +lovekoto +171190 +beautiful0 +oscar3 +longer +skittles! +nortex4 +ms1234 +12041985 +silverstar +tadpole1 +15081991 +22081991 +charlote +170287 +060990 +robert07 +spurs123 +198624 +140284 +18101985 +270290 +151182 +25081988 +doitnow +wes +robert09 +251283 +mirian +230884 +pokemon6 +whatisit +nicholas11 +lkj65b6666 +260692 +211090 +jobsearch1 +020990 +number1mom +looker +research1 +yoyoma +mommy8 +cingular +iuliana +shitshit1 +rocket88 +harley5 +300990 +prescott +paranoid1 +creeper1 +23071985 +24041985 +clint1 +080891 +111091 +patrick8 +lobo +glover +kabal +326326 +nineteen19 +220683 +020486 +figaro1 +15091989 +oreo1234 +240991 +eight888 +400016 +pumpkin7 +bimbim +mariangela +28081990 +01061989 +25061991 +20081986 +gemini13 +fuck10 +ramsey1 +panthers12 +fivekids +230186 +2208 +26021990 +Steelers +10031986 +110393 +kingkong2 +29041987 +01031985 +12091986 +kitkat12 +110052 +acoustic +barbie01 +testament +240189 +123123r +amanda24 +viceroy +100784 +findajob +charlie06 +20041986 +19071990 +northwest +rawr +punkass1 +13011989 +problem +guiness1 +526282 +060687 +sveta123 +montse +100680 +nutty1 +capecod1 +nikeair1 +penpen +03111987 +jennifer4 +10071990 +aloha123 +roosters1 +1408 +wwwww1 +19051986 +10061992 +fiammalex1@hotmail.it +23021991 +13031986 +theIigD4x2 +021287 +rocky22 +1066 +15121984 +nononono +01081990 +alex96 +copper2 +210286 +not_needed +djdxbr +hottie. +23061988 +170583 +frontera +juggalo17 +02081987 +alexis99 +willsmith1 +cazador +alex27 +241287 +10311031 +10111985 +ipswich1 +24101991 +cabrio +octavia1 +24061988 +rfhfvtkm +010490 +anna01 +woman1 +010587 +silver69 +27071991 +190688 +11011989 +josecarlos +hate12 +takashi +lover8 +banking +gracie11 +23051986 +152207 +shante1 +texas5 +22031989 +fluffy11 +30121987 +11111qqqqq +01061986 +br549 +antani +20051989 +25041988 +skinhead1 +cheer14 +21121986 +word123 +140189 +academy1 +hibernian +katarina1 +vicki +ipodnano1 +holybible +t12345678 +padrino +natalie7 +john18 +rabbits1 +amorsito +22091988 +happy9 +141284 +greenpeace +15061988 +rug +left4dead2 +8562835 +steven21 +23051989 +sithlord1 +18061987 +290587 +love#1 +mike06 +sully1 +010290 +mike20 +school01 +rocawear +mandeep +sweetp +190388 +sugipula +lkjlkj +sister12 +xcvbnm +����� +amyamy +playbill +donut1 +25041991 +dawn123 +04051987 +fgjrfkbgcbc +tangkay +27071987 +33445566 +nascar12 +290585 +240784 +howard12 +hammond1 +heaven777 +116116 +saxon +11061992 +belette +bubbles69 +melissa! +katerinka +talita +cammello +urgay1 +thesaint +baboy +lithium1 +15121982 +steve12 +121994 +xep624 +26011990 +lovinglife +280288 +andreina +walter123 +spiders1 +danni1 +steelhead +green45 +20011989 +snoopy69 +dragonforce +040487 +wildcard +01051985 +haleigh +am1234 +1234456 +amisha +26041991 +playboy11 +intelligent +01091985 +10091986 +lola11 +alexis! +240286 +bam +totally +eagles08 +sincity1 +198444 +rocklee +22101990 +7410852 +pussy01 +motown +19121987 +real123 +chestnut1 +130284 +14061991 +nodoubt1 +����������+����+�� +ronny +osprey +311282 +alexandro +bunny11 +140386 +260387 +jumbo +080690 +eyeball1 +painless +angel97 +170190 +ciprian +trevor12 +drpepper12 +julian2 +20091987 +nepal123 +020986 +marta123 +ethan2 +irish123 +280386 +240785 +setter +280290 +21071986 +280890 +charles7 +197666 +140387 +13041991 +20021988 +dickface +jacobblack +123456- +ilovejon +nasa +11061985 +haggard +corazones +tiger88 +dora +dionisio +teens +ilovejose1 +youth1 +30041987 +230984 +alexis21 +thug +swansea1 +regent +18091985 +blake12 +191087 +cad +12091988 +him123 +030789 +scooter11 +pratik +15121988 +tess +venice1 +jada123 +josh10 +111085 +9inchnails +24121989 +canarias +08522580 +topogigio +curly +chairs +pocitac +hardcore! +boobies123 +eastwood1 +maxwell123 +maddie11 +aero87 +sandra13 +nightshade +mayhem1 +shockwave +fordtruck1 +chris33 +lala10 +14071986 +a232323 +belldandy +31 +963963963 +110681 +13011988 +01091986 +steven23 +hailey12 +codegeass +material +anointed +552255 +berkut +hailey123 +090390 +alaina1 +wasd1234 +vfhbif +tellme +pretty! +beast12 +nnnnn +mamaliga +yC6AbQSFjo +laugh1 +18101986 +alino4ka +140983 +05061990 +lala23 +cardiff1 +29091987 +mexico4 +vendredi +littlefoot +newport2 +19051993 +041 +dam +mother7 +mushrooms +marble1 +bingbong +16021989 +21041990 +madison! +770880 +10071989 +marmite1 +150490 +towers +pikachu123 +vfrfhjys +Orlando +01041983 +budlight2 +james12345 +19001900 +paris11 +unlimited1 +050888 +alvarito +arlette +vaughan +19051991 +gabika +19933991 +catcher1 +051088 +rjdfktyrj +loveislove +ravi123 +30031991 +11031993 +11201120 +laverne +fucklove69 +mousepad +210885 +melo123 +230683 +brian13 +150891 +cavaliers +rockon2 +lastochka +sunnyside +wyoming1 +haircut +30101986 +160986 +jayanthi +jablay +cottoncandy +271828 +greta1 +210888 +alex1985 +ammananna +fishy123 +chilly1 +5.254.105.20:test +quilter +160387 +giallo +12011990 +kruger +501501 +180788 +270189 +rainyday +04041984 +orange69 +16121989 +ilovejay +22031988 +dakota7 +ritika +bereza +jarule1 +frieda +cd123456 +thomas16 +sc00byd00 +dimanche +wiggle +556644 +connor11 +281186 +7777777q +060684 +gizzy1 +america. +mothermary +hunt +25962596 +150291 +teddybear3 +121993 +hellohi +jordans +vjzctvmz +smitha +02101984 +14121992 +betsy +070784 +mylove! +magneto +110983 +wwe +badboyz +death69 +пароль +sterne +dylan13 +852741963 +mariee +220790 +thechosen1 +blood14 +111283 +samsamsam +08081991 +211185 +heyhey12 +dev123 +131182 +plumbing +171284 +loquita +imissyou2 +brianna4 +angel87 +21051986 +travis01 +aisyah +marissa2 +sunshine16 +tandem +iloveyou93 +sassy7 +lauren5 +12071992 +obsession +partygirl +ciaociao1 +201082 +kimmy123 +23isback +26101989 +sayuri +261287 +zse45rdx +terrible1 +davidvilla +251192 +yflt:lf +180585 +punk13 +catnip1 +junior69 +begood +player14 +RONALDO +amanda08 +ilovekim +150384 +20061985 +Password11 +mandolin +040491 +17121988 +coolio123 +starwars6 +macbook1 +12081985 +fro +Indianalib +270386 +geronto +windows2 +babygirl89 +iphone1 +041188 +jeffgordon +23081991 +150783 +rain123 +888888a +theclash +sage +30051989 +engine1 +time2go +magenta1 +15031989 +tinky1 +tigran +cashflow1 +samuraix +231291 +1w2w3w +hello88 +adidas10 +alfons +Admin +170885 +dentist1 +091091 +sweetthing +frankies +vfrcbr +11021102 +bundy1 +snoopy10 +29091988 +yassin +fernan +nermal +beto123 +graduation +rosalind +dreamboy +11081992 +123money +mydreams +051089 +cordova +werthrf +gangsta! +170185 +miranda123 +karachi1 +cindy12 +block1 +09091988 +maria1234 +111100 +23031989 +canario +84268426 +king55 +therion +honeypot +turbo2 +23011991 +26101988 +02071991 +151284 +16121988 +flyhigh +aeiou1 +dashboard +thunderbolt +gillette +jamiroquai +lucky08 +171185 +Dexter +matthew06 +17041991 +sergio12 +moss18 +560040 +560094 +farah +grisou +piper123 +adi123 +mattman +17051991 +dogbone +lotion +trx450r +220682 +nicole93 +killerbee +rachel7 +snookie1 +291290 +junior17 +ravikumar +callme1 +renault1 +nicole02 +anamaria1 +eveline +kiko123 +hannah00 +katiebug1 +yukon1 +brandy11 +blue00 +280686 +85200258 +27041990 +elijah123 +031285 +zoe +belly1 +afroman +newark +lilmomma1 +megan13 +010487 +worinima +300586 +11041989 +batman09 +mustang02 +a1314520 +redsox13 +lolpop +150684 +richard5 +zkl858 +alma +thekillers +210982 +suzie1 +01101991 +ginger69 +redneck12 +20031984 +0110 +tacos +blazedup42 +belochka +15071991 +1puppy +welldone +love&hate +rick123 +len +Martina +lickme2 +250984 +29041992 +cobra427 +canada11 +10081988 +audis4 +kwiatuszek +kai123 +230887 +charito +abogado +babby1 +howie1 +5t6y7u +fatina +nascar2 +chinadoll1 +lander +1404 +life101 +100391 +ivette +marvelous +281086 +030690 +jorge12 +170491 +hunter101 +whores1 +061285 +jerson +600600 +23041992 +danny22 +2305 +hydro1 +vanessa11 +hotgirl2 +escobar1 +sweetypie1 +r123098 +nascimento +cobra123 +ciaran +switzerland +gusgus1 +ballin11 +200385 +katze +girls12 +31121992 +131284 +xavier01 +jose18 +florida3 +141083 +success2 +27101989 +winslow +270986 +athlon64 +orologio +30041985 +++++++ +011088 +11121112 +dustin123 +harhar +nala +hockey20 +ciccina +april09 +Adgjmptw +omolara +victoria10 +23031993 +outlook +topcat1 +1302 +280989 +andrey123 +16081991 +1power +cohiba +rockme +nicole00 +290389 +danny5 +020487 +11111984 +geoffrey1 +131082 +luckie1 +110032 +komando +lovechild +youyou1 +15021988 +sushi123 +weedweed +abudfv +14121986 +iloveyou92 +homo123 +bitch33 +fuckher +17021987 +09091991 +kikker +fabio123 +babygirl26 +nan +number20 +11031989 +150885 +music4ever +23041990 +hjlbyf +inlove! +22081987 +maranda1 +kiskis +Starwars +27101986 +pawelek +2411 +sammy21 +260889 +budget +bubby +89mustang +wolf13 +Pakistan1 +samson01 +joann1 +230491 +xswqaz +killme2 +220891 +austin9 +urmila +tia123 +qpwoei +27061988 +happyy +chess1 +14231423 +321abc +30051985 +honda3 +thunder11 +7894561231 +micheline +butterfly. +vovchik +sexme1 +123456xx +berliner +061088 +pokhara +pookie13 +31011990 +dylan3 +Qy5tOgR996 +dec +18071991 +bearcats1 +17051987 +chrystal +220190 +15051984 +hoebag1 +coquine +pooh15 +123-123 +rustem +22021992 +madera +010486 +paulie1 +limpopo +210583 +nosey1 +shanta +bohemia +murmur +06061991 +love1986 +caribe +forbes +romeo12 +orange88 +flower. +princess32 +zxczxc1 +12091990 +barney2 +00001 +kusuma +yankees21 +iloveyouma +qwert123456 +green08 +210991 +namita +riddick1 +220883 +160485 +libertad1 +3yIxda15hR +periwinkle +cjrjkjdf +typewriter +canton +kyle13 +glenwood +airmax +010786 +180789 +110014 +24071987 +underwood +192021 +300986 +sandydog +130681 +devil6 +looking4u +sister123 +1598753a +031188 +morrow +231280 +050584 +yfafyz +cowboy11 +111291 +chivas3 +19960309 +22011992 +mansfield +29101991 +04051988 +simonsays +disney2 +soeusei +superhero1 +16061992 +mumtaz +ranger99 +a111111111 +pig +181288 +7474 +22121990 +15031985 +191185 +2929 +moody1 +javiera +20101992 +199019 +buster14 +24041992 +23061991 +jonah +shark123 +291186 +15031987 +bonsoir +13101990 +master00 +26121988 +18101991 +10091987 +helpme12 +eminem. +220984 +chacho +guyguy +210491 +escorpion1 +22101984 +17101986 +hhhhh1 +cracker2 +051185 +dd1234 +roxy01 +13091988 +23091987 +golfnut +30031987 +w1992a +jitterbug +gheorghe +11101990 +slbenfica +z28camaro +jejeje +gamefreak +dumb +gblfhfc +hotmomma +yniQnmK733 +master88 +25041990 +raven13 +020585 +12365 +a2345678 +zaza123 +chivas101 +susanita +watashi +hollywood3 +shawnee1 +20101991 +ground +tennis01 +mouloudia +chris99 +01081984 +lauren21 +emilka +198810 +stamps +report +missyou1 +2508 +limewire1 +rohan +daniel02 +291185 +cascades +topaz +110881 +libras +haha22 +01051990 +people11 +hereiam +cherry15 +rajasthan +babygirl94 +rainier +rapido +bestrong +01051987 +pimpin21 +gunter +210391 +pretty10 +animal2 +blueman +24051991 +160187 +poohbear4 +bailey4 +10041985 +200388 +devdas +ytyfdb +180387 +winter00 +caliber +wizzard +troubles +hunter88 +palace1 +cortney1 +frontline +toby11 +210181 +shrek1 +159951159 +jackiechan +batman14 +121093 +jesuscrist +mythology +asteroid +dreamgirl1 +240982 +fatality +160790 +120381 +241284 +ozzy666 +250186 +150584 +1415926 +duffy +159753456852 +damaris1 +150591 +coco01 +ateneo +250592 +mariana123 +251180 +190690 +kierra1 +ms123456 +140783 +134134 +dallas5 +281283 +hamster2 +31031988 +281182 +bubbles21 +amador +jer +superman77 +stellar1 +success7 +151085 +finalfantasy7 +budman1 +22051988 +123124 +fosters1 +parker01 +kfylsi +peggysue +reeree +QWERTYU +toast +luis11 +240185 +301289 +natation +180188 +lucylou +samantha4 +benedikt +angels5 +kissass1 +02081991 +asdfghjkl:' +backup +ou8124me +14081988 +fake101 +amber7 +dickdick +180190 +a2a2a2 +220691 +sept22 +280490 +amanda6 +190188 +7sO2ekbc6R +ramadhan +ham123 +ihatethis1 +personnel +luminita +231080 +bramble1 +stepanova +oliveoil +nora +pelon13 +megan01 +02021993 +raymond123 +2504 +15081986 +23121985 +280487 +310785 +comrade +dating1 +cbrown1 +florina +carousel +chico12 +03061988 +hacking +300785 +ryan15 +181085 +imtheman1 +jenny01 +ghjnjrjk +161091 +Orange +zoolander +14041986 +yoshi123 +290486 +12fuckyou +mercedez +three333 +welcome5 +elias123 +araceli1 +narut0 +20000 +dreaming1 +nessa +26021988 +kumasi +140687 +justin00 +lbvekz +.kzirf +fuckin1 +150187 +12041984 +nigger11 +jesusteamo +norfolk +25051991 +joejonas12 +beautiful9 +19121990 +makayla2 +141091 +13031989 +28121988 +booboo4 +nathan4 +fatgirl +130583 +diamond22 +overdose +290185 +bitch99 +samantha14 +123456ty +kelly7 +olaniyi +8inches +soccer34 +ownage1 +mocha123 +school9 +28021985 +30101985 +freenet +291289 +02011987 +specialized +kaylie1 +1243 +garten +chivas5 +changed +250484 +02021983 +109109 +nuggets15 +killzone2 +2304 +useless +sokolik +miller31 +707707 +170689 +fresh23 +12061992 +foofighters +230284 +busayo +loveth +02071983 +121193 +180489 +happy77 +codmw2 +444444444 +100293 +strekoza +220985 +putri +110495 +henrietta +jenny7 +23031988 +jake14 +summer88 +sal123 +rufus123 +18031987 +191286 +030685 +gjgjdf +taylor17 +rylee1 +field +chuckles1 +mychemical +020284 +amor15 +24041989 +31051990 +chidori1 +janaki +jordan97 +money111 +199222 +santafe1 +iloveyouto +tavares +redcar1 +donte1 +511511 +leedsutd1 +goducks +jesus333 +darcy1 +fishfood +spencer123 +andrew88 +020279 +02101988 +24011991 +anytime +baller69 +01081987 +MANUEL +iloveben1 +jesus18 +120982 +monkeyface +15121992 +210184 +16101989 +zxcvfdsa +dominika1 +smokey22 +thrice +alex98 +smartguy +zaratustra +jordan19 +seniseviyoru +bulldog123 +250184 +tigger8 +blondie! +mandragora +14041990 +123456789� +15061990 +oliver3 +110010 +ran +23111987 +butter11 +rancho +thinkpink1 +25011988 +290690 +samsung3 +qwerty16 +140186 +18061985 +coffee11 +240682 +bugaga +telefone +raleigh1 +shayne1 +czarina +omotayo +katalina +533656 +27071989 +12071984 +hottie24 +ballin7 +22111990 +beertje +15051992 +sarah10 +photograph +luisito1 +13021986 +xyz12345 +anthony02 +richter +141282 +280389 +yellow77 +nikki7 +11081986 +dogger +shrek +cortney +201192 +water3 +fynjif +jeffrey2 +salzburg +gangsta23 +29051990 +baby-girl +dick11 +booty2 +10081991 +100285 +09051985 +fuckme. +loveme16 +ytyfdbcnm +zxcvb12 +fucker4 +justin04 +18061984 +zxcasdqwe1 +12081989 +soccer92 +josef +mw0501 +fuckmyspac +10041984 +sigma1 +kingking1 +music07 +139139 +14121982 +analiza +140583 +homersimpson +sembarang +20021984 +250885 +dakota99 +battery1 +300989 +10081989 +marlins1 +dodododo +fidget +muscles +24091986 +miles123 +enternow +21031985 +zackery1 +marcus11 +chris77 +20071986 +bonnie2 +150492 +25021987 +300390 +dancer14 +batman8 +picolo +may2008 +220591 +15081985 +floriane +famous2 +device +chi123 +nuevavida +180691 +passione +memorial +15121983 +vkontakte.ru +5254143 +allen2 +summer16 +9852a9 +280586 +svetlanka +196900 +hunger +sidorov +3edcvfr4 +coolman123 +mami12 +kalle +makassar +rodrigue +221182 +mememe2 +rebelde123 +montserrat +metallica0 +snickers3 +eminem7 +heather5 +157359 +100385 +naseem +cocacola123 +100892 +trina +25051986 +hardstyle1 +24111989 +18061990 +audia8 +pep +semaj1 +deepthi +sexy29 +iluvme! +fuck3r +26121987 +o123456789 +888168 +yellow33 +200890 +koshechka +crazy4you +rjpthju +1234562 +roadkill1 +1sweet +14051990 +shooting +4071505 +alberto123 +blanco1 +mitzi1 +Lakers +251292 +est +kelsey11 +diamonds2 +23061989 +nadezda +booty123 +blueballs +bowwow3 +hameed +j111111 +2468101214 +bailey06 +28051990 +love1987 +womble +daddygirl +mandy12 +krystle +peewee123 +aaazzz +hjkl +falcon12 +finest1 +buttfuck +010988 +buster4 +hellspawn +rosette +heath +22051992 +13081987 +taureau +lorien +melrose1 +blackburn1 +chevy01 +112000 +embassy +cowboy01 +billkaulitz +madeleine1 +motogp +10121993 +22071991 +lunchbox1 +pelican1 +pregnant +supermom1 +wraith +210986 +ellis1 +corolla1 +secret3 +281282 +120879 +13121983 +8ba9Klw1cE +iloveny +1909 +willow01 +0okmnji9 +15071988 +10121982 +031289 +22021986 +291184 +isidora +fullhouse1 +teddys +corporate +kookie1 +water11 +baloncesto +pitufina +karisma +17031992 +kashish +onetime1 +mamulya +clearwater +20111986 +230482 +Marion +gfnhbjn +25091989 +241185 +123zxcv +25091990 +dudes +drpepper2 +23121991 +mae123 +birtanem +01031986 +091286 +love41 +110480 +11081990 +400614 +12345678e +11111112 +jesus2008 +nokia5700 +century1 +iceberg1 +786123 +bullets +fishman1 +christiana +gigigi +hydro420 +monster21 +261082 +astoria +iloveaaron +madhav +dancer08 +crazy21 +babilonia +smegma +18061988 +buller +ricky2 +friendsforever +trevon +aisha1 +vatoloco1 +cameron6 +150186 +20091984 +pretty6 +fred01 +mirror1 +��+������� +1596357 +1spiderman +18011987 +log +245245 +300987 +PEPPER +artem1999 +kalimero +080887 +14081991 +friends08 +america#1 +m1garand +bemine +biteme12 +killacam1 +makina +guessit +111111j +h1234567 +03031984 +161184 +071290 +carebear12 +21061988 +220783 +cheer01 +27071988 +kristal1 +lll +241192 +18081990 +15091990 +Lucky +06081991 +190290 +kimbo1 +17041989 +songbird1 +husky +brick1 +12061984 +pascha +nevets +taylor03 +020587 +22121985 +picnic +kumar1 +qaz123123 +198821 +prettywoman +10091985 +bassplayer +melissa69 +kirara +babyboy23 +stumpy1 +maggie07 +100482 +24121991 +gramma +28121990 +nikki3 +bobby13 +password81 +marc123 +02071989 +abnormal +david19 +debil +maemae1 +27051986 +121208 +the1andonl +ripken +1510 +guitar01 +slippery +190689 +cuteangel +03061985 +loveme24 +21081991 +22081986 +emprego +lifelife +fire1234 +smellycat +heath1 +2101 +106106 +112113 +19061991 +001988 +hotman1 +123432 +ryan07 +030988 +13love +eggman +200985 +24051990 +111084 +yoyo11 +tiger15 +jazzmine +150000 +mario11 +241184 +041187 +lucky99 +26031988 +23102310 +16041991 +01051988 +10111983 +hhh123 +270690 +251094 +andrea14 +Courtney +30121988 +26021985 +mobil +ericeric +cheese69 +bil +geelong +footbal1 +littleboy +14081989 +newone1 +170189 +pastis51 +100192 +comeback +23242526 +050990 +hotshit +16061989 +210892 +madrigal +satisfaction +080988 +psalms91 +mansour +redondo +02051990 +iloveme5 +deeven +130584 +imcool123 +28101988 +19031991 +23071986 +lagwagon +261084 +farouk +hockey69 +180292 +260785 +rockys +menina +BARBIE +carefree +131181 +friends9 +burnout1 +852456a +lovejesus1 +sept16 +buddy07 +1life1love +lealea +11101987 +240888 +sandy11 +uf +ripazha +myhusband +31121988 +luvu4ever +270784 +230792 +281091 +15987532 +mystuff +tigger18 +301287 +thought +chauhan +120980 +24071990 +150385 +23041985 +joyjoy1 +01101984 +2303 +YYZ59gtP100 +meadow1 +jimmy13 +genuine +passat1 +27121991 +600028 +lakers21 +11031986 +07071992 +889988 +baldwin1 +boulot +password85 +01081989 +volvos60 +180391 +carlson +tgbyhn +citrus +talgat +19121992 +lenusik +iamtheking +14081986 +funstuff +250485 +thedon1 +cutify +ujnbrf +letsgo1 +cow +silver21 +aznpride +191089 +single01 +solo123 +240188 +met +spaghetti1 +yayang +amazonka +Tinkerbell +bears23 +stick +sarah! +hiroshi +beer69 +Gy3Yt2RGLs +shreeganesh +24021990 +leaves +111www +advokat +27091991 +not +7794422 +caseydog +220484 +301084 +fonseca +donny +987456123 +29061990 +hysteria +wade +230784 +28101986 +ooo +modelo +12345678h +150984 +sharik +catscats +1.23457E +sexygirls +azerty01 +josefina1 +june2006 +1234567890m +freeme1 +211091 +pearl123 +glorioso +11051991 +1234321q +llcoolj1 +6D2-24E5r +emm +1truth +dominique2 +aptiva +14061986 +cutie21 +23111989 +250287 +bridges +150286 +mikel +jackman +300490 +161087 +hair +slugger1 +21061986 +29101990 +babyboo123 +190285 +250491 +eagles13 +f1234567 +1937 +orwell +houses1 +snuggle1 +421301 +sophie3 +slammer +crocodil +papi +110991 +peaches! +11051984 +hippo123 +tebow15 +101178 +25051984 +chaingang1 +100582 +sashenka +218540 +03061987 +210383 +215215 +14061987 +coors1 +icecold1 +1westside +22101991 +betty21 +vfkmdbyf +02041990 +larsson7 +cole12 +sasasa1 +07061985nina +steven5 +gattuso +repytwjd +google1234 +11071986 +univers +sassy11 +halo3rocks +raw123 +rodeo +17121984 +shorty09 +matthew09 +28051987 +8520456 +baller01 +pinocho +197611 +keykey1 +110382 +24081991 +280790 +shortstuff +21101991 +130792 +superman16 +bestfriend1 +gfhfif +shyshy1 +coolie +moveon +101213 +laptop123 +ashley05 +22041990 +081288 +051092 +cousin1 +300190 +09876543211 +camaro68 +15071985 +class11 +jp1234 +born2win +goth666 +transcend +riodejaneiro +planes +06011982 +darlington +17041992 +161282 +132001 +bluefish1 +salinas831 +patricia12 +chicken23 +mistake +shekhar +28101985 +darrin +19471947 +123123l +1900 +22081988 +.adgj +manamana +snatch1 +sasha13 +yamaha2 +091288 +chill +200580 +cardoso +macho +21101989 +270389 +poilkj +omen666 +shahzad +iluvchris1 +120382 +awerty +stampede +ottobre +onlylove +198601 +gender +tyler21 +120678 +25071987 +hill +654654654 +weird1 +290588 +emil +dragonz +process +300485 +vavilon +21011986 +17081988 +colombe +ramakrishna +babygirl93 +poubelle +kumkum +181185 +060988 +290487 +pfqxjyjr +04021987 +p2ssw0rd +18081987 +aileen1 +apollo12 +aserzx1 +olympic +020989 +demian +mechanic1 +1357642 +ilovemark1 +27011988 +aardvark1 +keke +180987 +christian! +6666667 +140891 +pocket1 +konami +milly123 +sentra +ministry1 +kiersten +sample1 +angel2000 +27021990 +myebiz123 +happy14 +070990 +why123 +anicka +240591 +grandkids1 +ZZZZZZ +welcom +roflmao1 +civilwar +wallst +johny +border +duck12 +maggie21 +snoopy5 +cookie08 +divorced +parker123 +500028 +iloveno1 +15111987 +link2011 +21041986 +05091984 +2106 +090588 +imperium +hotpussy +barone +21021988 +shadow89 +babygirl96 +star25 +08081987 +Tweety +300788 +bipbip +17071990 +29061988 +040890 +irule +puppies12 +aaaaaa12 +cock123 +20011988 +230991 +211284 +nikita12 +291090 +calabaza +Lucky1 +honda7 +mermaids +janeiro +dominica +massimo1 +antman +JUVENTUS +shells +sutherland +franco123 +beavers1 +tigger17 +nexus +canine +13101984 +blue06 +adebola +wagner1 +pumpkin123 +tygrys +loveu12 +missy01 +140490 +03071987 +george5 +gamma +catering +281082 +mustang23 +16101985 +10021984 +2597758 +mongo1 +bauhaus +1hotmomma +220287 +mae +champ24 +030490 +lashawn +pelumi +221987 +kimerald +ashtray +10071988 +Shannon1 +199300 +hellboy2 +agatka +30081988 +05031987 +ohbaby1 +asasasasas +wtpfhm +carebear2 +kelly11 +billion +110021 +rolltide12 +mommydaddy +apollon +260386 +kaylin +januar +samsung5 +anna22 +lol321 +hearts12 +kakawka +260391 +Jack +snowhite +badboy23 +ciocolata +230391 +david25 +mike19 +170386 +Abc12345 +280289 +alisson +radmila5 +arthur123 +ripley1 +231283 +jacob22 +blue456 +021086 +cleo123 +camaro67 +260187 +01021984 +inzaghi +24021986 +maradona1 +pressure +29031988 +asdfdsa +110981 +191186 +atx512 +tugboat +040485 +1forgot +29011987 +awesome3 +110186 +19061990 +brit +Crystal +tommy7 +football76 +cucaracha +iron +030689 +sweetboy +143441 +reggie12 +okokokok +150383 +12111985 +270985 +bigone1 +mansoor +cacahuete +cerulean +ocean123 +matt17 +prince3 +midnight13 +090985 +250883 +20041991 +gaby12 +michael27 +23031986 +luanda +copito +matrix23 +alfalfa +holloway +david88 +Gemini +hubby1 +puppy5 +11101988 +sexxxx +darkmoon +211184 +02031984 +kill3r +23121990 +aaaaaa2 +bang +28091987 +020785 +morgan99 +080892 +01021992 +sweet4 +131092 +ladydog +rajarani +12071985 +pennywise1 +b1tches +gunner12 +05051992 +281092 +310387 +winning +vfvfgfgfz +bionda +passes +jesse3 +mykids5 +gjkbyrf +13071990 +19101986 +ronnel +anime12 +kkk111 +ducati996 +lilian1 +290390 +kelly13 +dominicana +gfhnbpfy +azteca +elvispresley +korea1 +09080706 +kaiden1 +daughters2 +15091986 +united7 +jolina +sambo +shorty18 +moonwalk +airjordan1 +8iIw4Ct9Rq +manzanita +stephanie7 +100791 +310784 +170387 +sierra11 +131192 +kayla14 +favorite1 +rainbow22 +popeyes +torero +piggies +laura11 +13031988 +161283 +easy1234 +pooh1234 +090991 +wildones +10221022 +moremore +050789 +cubswin1 +catalan +27031990 +bubbles9 +gilgamesh +nisha123 +medieval +timmy12 +16041988 +25041989 +200884 +marlee +25021986 +04071988 +qweqwe12 +irochka +class05 +fickdich1 +dallas7 +28021988 +george23 +PW2012yr +vergara +dicker +ugochukwu +shelbygt500 +aliens1 +faceoff +19061986 +buddy8 +220483 +conor1 +ira +belgium +robbie123 +311091 +20061984 +pedersen +hayden123 +01041991 +omar13 +samwise +blank +phantom2 +250991 +minion +wal +rahmat +pimpin09 +10091991 +angel2006 +30071987 +heather01 +daniel98 +zagreb +football58 +vfufpby +boondocks1 +yeshua1 +expedition +17101985 +iloveamy1 +eagles3 +020390 +lover24 +01121986 +zippo1 +240691 +fudge123 +smeagol +live2ride +1928 +joey01 +20051990 +flower21 +22031987 +butthead2 +26101983 +tigger06 +martin23 +151089 +pantek +helpdesk +a1234a +codelyoko +28031991 +amandeep +011086 +181182 +201287 +tata12 +Qq123456 +261182 +muffy +130983 +crazy15 +14081987 +estefany +joseph! +17041990 +amanda09 +mike101 +arina +gambler1 +chandana +060890 +200892 +iaminlove +kikina +198123 +yankees5 +aaron3 +1q2w3e1q2w3e +19866891 +021289 +sparkey1 +buggy +nena +16101984 +230583 +petter +270890 +18101989 +170784 +tiger77 +cutie8 +bulldog3 +mustang21 +hannah18 +17021988 +15101992 +11091991 +Audrey +pernille +grace01 +21091991 +010288 +grandkids5 +29121986 +171089 +280987 +halo13 +sarah69 +26121986 +26101984 +peoria +tigers! +poopie! +buddys1 +panatha13 +mexico17 +hollis +froglegs +190785 +seth123 +Raiders1 +nicholas5 +flygirl +170887 +25091991 +14101992 +magic13 +170390 +lebedeva +27071990 +2horses +hallo12345 +jonathan123 +170286 +Steelers1 +mom12345 +milan123 +tonyromo9 +halo360 +cook +bailey05 +bulldog7 +lemans +10081984 +access123 +tho +billabong2 +maddox1 +antonio10 +140885 +oneone1 +170186 +lbvfcbr +trevor123 +tunde1 +24041988 +brittany14 +antosha +210483 +150692 +semenov +69eyes +player10 +dipset3 +221083 +lfc123 +mustang4 +sadhana +cool01 +bulldozer +nick69 +hatice +17031991 +25071989 +airwalk +dozer +25071991 +inside1 +amaury +280891 +jr123456 +834001 +ellis +dnstuff +12011991 +cherry4 +A1B2C3D4 +certified +love_me +mamaku +gwendolyn +cupido +rock10 +241182 +12121981 +021285 +freespirit +musique1 +monkey26 +server1 +diablo13 +mykids03 +ransom +a010203 +kandy1 +superuser +NATASHA +Viktor +040589 +19031988 +lalala. +logan01 +jammer1 +mividaloca +P4vKINRw6x +louloutte +300889 +12041994 +230692 +03030303 +230782 +221984 +daniela12 +160891 +kellen +08031990 +soulmates +patches123 +CRISTINA +mj2345 +fin +suzuki750 +301080 +topaz1 +andrew19 +Friday +adrian10 +22051985 +click5 +INTERNET +sultan1 +14071990 +springtime +eagles23 +160491 +victoria13 +asskicker +hardcore2 +bichette +STEVEN +karina13 +anthony25 +pickle2 +lover08 +ballin24 +tyler101 +jenn123 +sexything +chino13 +mashimaro +3100 +hippopo +hanihani +280786 +hotgurl1 +15021983 +031287 +sleep1 +31051988 +yemisi +Kimberly +smokey10 +280587 +andy01 +pookey1 +Natalia +19141914 +181189 +191090 +delorean +abcdef2 +14051985 +jesus24 +mustang00 +rjnzif +weller +030687 +vampire123 +190891 +14051988 +qwe223 +140492 +john17 +adgjmpt +bug +FRIEND +back2back +memyselfan +toytoy +31101990 +primus1 +gurpreet +Jonathan1 +MidCont +tiago +toni123 +ferrari2 +maggie23 +ikillyou +18051989 +whatever22 +200287 +alyssa7 +gtkmvtyb +it +21071989 +football60 +020790 +ccc +tinker13 +02041989 +yessir1 +boeing737 +17091985 +sexy2009 +221292 +02101989 +22081985 +lisbeth +31011989 +11111988 +100481 +aman +260593 +sasha1997 +erevan +260189 +yahoo3 +hotdog11 +melmel1 +duke13 +love1997 +03031993 +251091 +261191 +05121985 +290786 +cordero +23101984 +fuckhim1 +010193 +diciembre1 +xchange +cookies5 +151191 +punk666 +01031990 +genocide +arrowhead1 +281184 +arroyo +pinky3 +journal +24051989 +1clen1 +gonzalo1 +daisy22 +mommy21 +261183 +melita +frost1 +generic1 +graves +1gangster +amor10 +03061990 +315023 +02101990 +homehome +120579 +rotimi +21101985 +nikolina +Shadow1 +197511 +25051992 +karatekid +411006 +persian +121212w +rollins +nikki01 +player4 +parsifal +yandel +rhfdxtyrj +group +29041988 +newyork13 +football67 +23081989 +westside23 +210000 +intranet +football70 +vbkbwbz +963 +25041986 +eeeeeee +Trfnthbyf +20111985 +setiawan +96969696 +26041990 +mariusz1 +princess90 +191187 +liarliar1 +buddy69 +maybe1 +werock +zaq +31121989 +trains1 +supersuper +edward21 +pinky13 +poohbear14 +bama12 +lucy13 +jordan95 +mike77 +segreto +josh18 +grace5 +100483 +zWN6Vbdvpj +puppie +23091992 +nigga11 +chris26 +Angel1 +221226 +21021984 +07051987 +teamo. +260987 +steve2 +melissa21 +16031990 +taylor. +08081985 +weed101 +dirtbike12 +yummy123 +220380 +gracious +gaara +22071985 +20031985 +shift1 +051286 +190000 +musicmusic +17061991 +11091987 +tj1234 +ane4ka +24031988 +21081990 +raiders5 +godsgrace +15051988 +120595 +SaUn +hoosier1 +george69 +katlyn1 +22081989 +derrick2 +ghost13 +hotty101 +sosexy +Awesome +akolang +11041984 +jenny10 +220881 +24121988 +cantik1 +baxter12 +vasant +yankees02 +ilovetony +pomodoro +270987 +560010 +180386 +040788 +030387 +560102 +london7 +puppet1 +cletus +000000m +lover. +stockton1 +050890 +mybabygirl +22111985 +flowers7 +101983 +241291 +attack1 +honey143 +choochoo1 +1liverpool +jamaica2 +16121990 +23111990 +danny14 +carlin +nafisa +mabel +290789 +grounded1 +hannah98 +18011991 +10021983 +f0rever +joeblow +booyaka619 +201191 +vipergts +sammie2 +250391 +harry7 +satanas666 +thedevil +18081989 +131213 +elegance +gracie3 +one1love +198505 +sexygirl10 +Elisabeth +hardy +201183 +parachute +240492 +magick1 +jerome123 +03051990 +johan1 +oscardog +18021989 +mimama +200684 +messi123 +191285 +180786 +135642 +pooface +princess04 +19021992 +missing1 +11071990 +demonic +region +buzzer +ryan16 +andrada +261192 +tasha12 +270586 +ford12 +251080 +19061984 +05061992 +ryan69 +ilovetony1 +31121984 +150883 +cubby1 +alleycat1 +28021986 +181287 +taylor04 +feliks +28021990 +31031986 +23071990 +dalejr1 +28111986 +lucas10 +041088 +basketball12 +chevy1500 +anhnhoem +11111983 +170191 +pimpin07 +dewalt +papa1234 +14081990 +10041988 +15011985 +booboo23 +nathan09 +liverpool3 +mars13 +zaebali +47114711 +onimusha +14061985 +akusayangk +130384 +19011989 +150191 +270388 +macska +001977 +sean1234 +jeffry +daxter +14111985 +maimouna +megamanx +10031993 +rodica +marshal1 +poppy12 +hookup +lordoftherings +class2007 +wertyuiop +19111985 +nokia2 +roadking1 +dearest +rockstar22 +sassy3 +lilman123 +190585 +14111991 +30041992 +buddy08 +tessa123 +16041990 +sasa1234 +vjybnjh +tweety10 +01011 +20071991 +13051985 +meggie1 +thatshot +181285 +seafood +skater01 +120978 +zhangwei +280885 +mnb123 +220192 +severin +heroin +kobe81 +amber69 +pimp00 +andrew04 +lovestinks +200186 +030888 +Rangers1 +level42 +joshua9 +21021985 +miamia1 +031088 +Xbox360 +0277127298 +rogerio +23101988 +31101988 +laugh +19251925 +mommys1 +feelings +ramarama +stokecity +shamim +mira +25031991 +abc111 +150482 +ABUSE_123456_ABUSE +baluga +n1cole +201182 +sammy23 +987654321s +petr +091189 +27051987 +100382 +19091987 +taker1 +190584 +mariano1 +alcohol1 +12341234q +master77 +250383 +michael77 +simon12 +jack69 +alabama12 +18111987 +16091988 +18121984 +myjesus1 +pappy1 +lauren14 +22041989 +Snickers +mylove22 +9itz78vUfW +d68pyfuH2V +peaches01 +hermano +akomismo +legoman +sahana +minino +colnago +odz1w1rB9T +linkedinpassword +patrick9 +master007 +check1 +22031986 +29031991 +liana +banana22 +120792 +060790 +141191 +300389 +301280 +superman25 +wallace2 +flower9 +pigpen +070792 +chicken10 +051285 +260484 +16051987 +lance123 +babyboy4 +aqaqaq +god4life +ronaldo12 +20081989 +14061990 +breathe1 +shelby10 +011287 +kilokilo +lildevil +03071986 +iloveme23 +26061985 +2107 +27021987 +worlds +sayangku1 +ragnar +pravda +golaso64 +pupkin +sno +2201 +20041989 +rex +10021993 +monster666 +taterbug +rfhfufylf +28121986 +green09 +16021988 +webmaster1 +31101989 +rfvbkkf +210781 +sharmaine +291284 +100881 +134679a +programmer +yellow14 +110581 +291190 +bell123 +cherie1 +fatboy69 +raindrops +100291 +bmw520 +thorsten +jacob4 +rock01 +1rabbit +baxter123 +008hotboy +saints12 +raymundo +gundamwing +redsox7 +271192 +yellow69 +lucas2 +250786 +Russia +monkeygirl +rosalie1 +moomin +shadow33 +17091991 +alex666 +nasreen +istanbul1 +destruction +gnbxrf +19121985 +251291 +calvin123 +160785 +roderick1 +173173 +13091986 +dogs101 +black101 +harmon +301182 +19011986 +mercure +killa23 +cameron13 +270187 +20011986 +29091991 +1bitches +snowy123 +198602 +lizzie123 +17071991 +son123 +Patches +16061991 +15061985 +sizzle +april05 +40404040 +180488 +alex33 +eskimo1 +damned +040688 +122345 +22101992 +zizou +magic5 +xxxxxx6 +a333333 +forgetit1 +dreamers +tgPw53j3kG +dalida +sweet101 +eric01 +amanda19 +02081984 +derby1 +nonloso +17091986 +jannie +221181 +ramon123 +tony15 +sai123 +henning +freesex +180486 +10291029 +venture1 +joker21 +yakumo +black1234 +181282 +madison09 +031186 +180290 +sucks +sampras +ford01 +flying1 +peridot +fluffy01 +tigers06 +kevin69 +29101987 +10101994 +sexy30 +daniel77 +davidm +asdfgh6 +sounds +aaaaaa123 +gaspard +170687 +hailmary +280286 +kitten3 +mimino +290586 +22061992 +lollollol1 +zxc789 +penny12 +faizal +tristan2 +arvin +151285 +dragonfly2 +alyssa5 +baby95 +180487 +continue1 +hotty12 +iloveu9 +10071985 +310386 +purple19 +prada1 +chobit +220189 +doofus +nestor1 +bunnie1 +tecnico +passord1 +hollyy +123213 +ciao123 +131184 +230682 +subhash +delsol +11101989 +tiffani1 +17111989 +9052950013 +beastie1 +210891 +ybrjkftdyf +mustang22 +christ123 +storms +250000 +ramkumar +paganini +sigmund +forever14 +j11111 +danidani +paakow +myrtille +135798 +27111985 +081289 +290992 +seagulls +weaver1 +luisfigo +0o9i8u7y6t +stephanie0 +emilee1 +blue12345 +conker +22442244 +baseball26 +myboo +03101991 +369874 +gabi123 +love54 +ilove23 +091188 +300886 +Sonnenschein +jesus20 +23121989 +197373 +dfczdfcz +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +maja +monster01 +29091992 +westside7 +280788 +bunnyboo +411411 +30071986 +1504 +valter +antwan1 +27081990 +13041989 +peanut09 +190786 +marito +23091993 +kimono +blbjn007 +31071986 +12stones +june04 +marie9 +aleale +Monica +arpita +bugs +02061991 +oneandonly +1bailey +naruto95 +Fussball +Tanner +15041986 +33 +therese1 +cheeseburger +nikki69 +ciccione +batman9 +020885 +godisgood2 +26061988 +27121990 +dance4 +15253545 +sexy92 +kornkorn +zurich +160484 +footprints +rehana +conquer +2105 +social123 +200987 +loren +joystick +bagels +fsd9shtyut +Nfnmzyf +babygirl45 +euskadi +25061989 +imyours +36987412 +carwash1 +general01 +198219 +291183 +sassy13 +21121992 +29051991 +lakers7 +alex1986 +291288 +21051985 +badgirl2 +actress1 +190687 +Forever +23011989 +23041988 +#1lover +070888 +1bandit +firestarter +sushil +Arthur +280492 +21111991 +stevenson +soyfeliz +zolika +kiwikiwi +dada12 +cutlass1 +198426 +orange44 +bateria +kurniawan +daniel03 +241283 +400057 +like +1301 +pickle12 +craig123 +пїЅпїЅпїЅ +mybabe +251191 +3000 +chicky1 +852 +gino +blast +ami +400002 +jovana +chatter +lidia +12051984 +matthew16 +daisuki +9inches +playground +hehehehe +marbles1 +computer22 +tonya +180592 +adadeh +hayward +310389 +dj12345 +ttr125 +lookin +bigpoppa1 +19011987 +geezer +ibragim +zachary7 +rc.itymrf +yyyyyyyy +23021986 +penis5 +13101991 +dima1994 +201282 +30121985 +18051985 +donald123 +26081987 +19101991 +07091988 +john1 +29061989 +180989 +scooby69 +spacemy1 +fallen123 +allure +021189 +killjoy1 +netnet +saffron1 +131083 +030587 +10061990 +13061985 +28021991 +250382 +160883 +100282 +rachel10 +sharif +orlova +wings1 +chiaretta +852963741 +14011992 +210784 +al1234 +25111985 +hannah101 +biedronka +skater22 +cassano +bulldogs2 +150683 +mc1234 +ilonka +atlanta7 +25081987 +ilovefood1 +otioti +22061986 +money06 +steelers07 +oluchi +brenda13 +parts +191287 +24021989 +patron1 +31071991 +280892 +freed0m +tweety! +321qwe +miami13 +ilovegod! +baseball05 +dulcemaria +streetball +avengers +nichols +shorty07 +delhi123 +120493 +mkmkmk +170692 +120593 +290986 +rusalka +210682 +rat123 +idontno1 +citadel +carl123 +Aa123123 +williams12 +12345@ +LztEz2xe98 +import +kids04 +270390 +reeree1 +godsgift +2332 +bilbo1 +1511 +dejesus +chanchal +21081986 +160489 +jerick +dimochka +riley12 +240583 +mariachi +02121988 +double1 +210285 +john24 +15021992 +sasha2010 +pepper33 +sarada +pollo123 +151281 +040889 +pedros +sammy1234 +school7 +dragones +patrick10 +27081991 +DANIELA +ctcnhf +hol +fuckoff11 +240387 +komatsu +raiders01 +chaparra1 +1love2 +21061985 +dragon19 +dididi +shiva1 +heavy1 +memole +onelove12 +solano +14031988 +morgan4 +18101990 +26021991 +burzum +simcity +moonbeam1 +19121984 +241083 +june02 +java +moneybags1 +tan123 +831001 +neo +01011973 +250505 +aaaaa2 +chandru +wendys1 +saloni +pistola +patita +souljaboy2 +spirou +4747 +220693 +199411 +nicholas01 +080990 +18021992 +norte4 +311283 +die666 +longbow +456963 +16031988 +260786 +patrick22 +mariateresa +superman17 +panchito1 +220791 +13091991 +140982 +lilchris1 +nigger7 +murphy11 +macaroni1 +deanne +2stupid +gemini12 +delphin +babigurl1 +four44 +theodora +02041992 +170892 +mcdonald1 +28081985 +bong +ajay +rockstar23 +cool55 +spider11 +cherrycoke +camilo1 +shippo +197100 +170290 +160690 +may2006 +pixiedust +161186 +tyler05 +snooker147 +baileys +daddad +bambush +scrapper +abcdefg2 +sclub7 +221986 +14011991 +wrinkles1 +devika +mamusia1 +yourface +121976 +nani +football87 +140483 +yahoos +29091989 +17091987 +Spencer +olegoleg +catcatcat +discount +win123 +2206 +badbad +Travis +14111989 +yourmom7 +190485 +scimmia +hawthorne +starsky +shortys +240287 +30031989 +dalmation +fuckoff420 +222221 +17031989 +absolute1 +homies13 +01091992 +sniper12 +01101986 +nicole101 +gardener +yousuck123 +nottelling +sydney2 +260783 +bartlett +a159357 +10091984 +20091986 +17101992 +001 +april06 +slipknot3 +butchie +mazahaka +harder +11223355 +schultz +pooja123 +yugioh123 +warwick1 +jonas101 +lbvf +1123456789 +defiant1 +mariaclara +199315 +gemini22 +naomie +baseball28 +031090 +pierce1 +230484 +210884 +24041986 +scorpio2 +muenchen +magpies1 +majeed +cheeze +settings +100million +aaron01 +scrappy2 +matteo1 +candy16 +24091987 +21081985 +24021991 +boriqua1 +30051990 +cherry23 +polizei +green44 +19111986 +alienware +google7 +301183 +lol666 +loveme9 +linksys +orange9 +turtle22 +hertha +jaimie +22071988 +emoboy1 +orlando123 +Thunder1 +jesus16 +17021992 +sokrates +zemfira +170788 +111974 +280990 +rolling1 +black09 +03101989 +cvbncvbn +seymour1 +bl +160284 +skittles3 +310186 +041286 +69love +lovergirl2 +paul11 +23061992 +yoyoyo2 +cherry21 +lenchik +1snoopy +neverland1 +070889 +4343 +190287 +kalle123 +210983 +230184 +delhi +different1 +291187 +sunny7 +skater32 +pinky5 +kotkot +clarion +11111990 +040691 +140582 +070783 +rosado +brian11 +MLqdakf8yt +fuck101 +qwerty86 +75757575 +yusuf1 +lilrob1 +230283 +Isabella1 +melly1 +nannie +29051987 +summer2006 +maxie +matt10 +170591 +121079 +lady11 +221082 +mavrick +rita123 +julienne +140684 +tes +shorty17 +fuck88 +141082 +021190 +18021990 +serenity2 +050592 +140282 +myspace89 +12481632 +001002003 +scumbag1 +12071986 +010686 +fontana +kaleb +uncle +jayman +150485 +03061991 +heslo1 +171184 +1vanessa +trythis1 +bichito +organic1 +andrea5 +555123 +molly1234 +fuckoff5 +cuties1 +p00kie +cosanostra +triton1 +qwertasdfgzxcvb +cfiekmrf +fericire +football73 +my1andonly +140494 +1badgirl +25021990 +fevrier +Brooke +300385 +traviesa1 +011090 +sophie! +231081 +270885 +welc0me +hello24 +pimp18 +12password +01101988 +roofer +ilovecody +091287 +crown +071287 +nero +style +shoes123 +131281 +adetunji +westside4 +kamilka +110580 +23051983 +140591 +rangers11 +02061990 +3141592653 +160583 +ilovemybaby +ja1234 +keepitreal +123789654 +030786 +carlos17 +kochamcie1 +eagles07 +nepali +giants21 +meemee +broncos24 +15111990 +30031986 +1pumpkin +ppp000 +girls69 +mymommy1 +mervin +01061983 +rickey1 +cathy123 +rennes +310584 +27011987 +ciaobella +my2dogs +1mylove +08021990 +killer07 +airhead +simon2 +elijah3 +agbdlcid +031290 +millos +small +10102020 +220892 +lynnette +zaqxsw1 +25061986 +fgrd58es24 +1304 +mike45 +dude69 +050687 +rose10 +candy1234 +medicine1 +05061985 +wingchun +STELLA +10051983 +01121990 +071 +198333 +milito +sarah14 +happy08 +balls69 +orange33 +nique1 +chiodos1 +pork +wonderboy +naruto16 +25071985 +16111990 +burgos +raffaello +mamalove +ashlie +240885 +270590 +pomona1 +thebeach +240887 +250290 +020988 +dietpepsi1 +21031989 +babu +rose01 +chambers1 +141283 +250187 +270288 +020787 +hockey25 +041291 +jj +180684 +29041986 +gemini11 +skate! +010107 +20101983 +santino1 +babie1 +imapimp1 +130292 +290985 +piloto +sunshine15 +dos +orquidea +mickey16 +060683 +ilovescott +280789 +badoo1 +angel30 +01021991 +300685 +royboy +khalifa +especial +1258963 +19491949 +21071992 +18121985 +17071986 +spain1 +qq12345 +mclovin +411048 +mojomojo +goodone +garland1 +reptile1 +tyson2 +xzxzxz +apple9 +190686 +myname123 +260887 +01071989 +17011989 +alvin123 +virgos +garfield2 +concon +southampton +041189 +14031987 +4me2no +kidney +alexis9 +aleman +1morgan +27061985 +02061985 +06061992 +1sammy +jeremy7 +pink19 +111292 +31101987 +110293 +fatboy13 +faith11 +tyler16 +normandie +04081987 +red100 +truelove2 +24121984 +anyuta +bismillah786 +vin +230882 +29031990 +21111987 +250191 +james33 +guess123 +23091988 +creation1 +july08 +7788414 +26041989 +babochka +051090 +Dmitriy +walkman1 +graphic +aurora32 +esquire +zaq123wsx +111zzz +parabola +basshunter +10021985 +wybe4591 +198918 +111281 +traci +estrelinha +felipe12 +Fuckyou2 +25081989 +6children +nouveau +3rjs1la7qe +1116 +kit +waylon +aguilar1 +sept12 +mahadev +monkey28 +091285 +chelsea14 +JAMES +iii +golf18 +scuola +linkinpark1 +13071989 +26081988 +orlandobloom +katekate +12021993 +klubnika +smarties1 +560025 +281083 +poop21 +cassius1 +bosco123 +slayer13 +vidhya +300985 +northern1 +mark21 +alladin +asshole01 +stephen123 +clapton1 +228 +chubbs1 +310889 +11041985 +220583 +pimpen1 +bogus1 +144144 +010586 +priceless +16121985 +james20 +ramadevi +jeepster +anonimo +9898 +polar1 +knives +babygurl07 +21041991 +04061988 +16081990 +nicole77 +amirul +sheckler1 +swift +chicago12 +alpha2 +joshua98 +12081983 +28121989 +10211021 +15101984 +shella +010886 +suisse +spock1 +skippy123 +kindergarten +d1amond +12021981 +donomar1 +198225 +gitrdone +raptor700 +198820 +30051987 +8x2h4Fddap +willow2 +rosie2 +08081992 +rock4life +260287 +hibernia +24031986 +greengreen +modupe +monami +babylon1 +iloveu6 +kasey9 +koolkool +GEMINI +kingcobra +29051986 +18111986 +15061991 +180884 +graeme +pr1nc3ss +saveme1 +fatdog +02011989 +gambia +paterson +berber +30101991 +cookie1234 +11921192 +fantasia1 +trotter +170690 +yankees09 +marlins +loveman +001974 +maggie99 +26121989 +angel44 +241282 +121095 +150287 +220384 +kfvgjxrf +tables +ashley25 +17071989 +5151 +2526 +snoopy21 +natura +130491 +skaters1 +19071985 +thriller1 +15111989 +oldspice +280691 +blahblahbl +231083 +171083 +miramar +lovely8 +2020fb +heather4 +gunman +number17 +alexis15 +23081987 +16061990 +kerri +darkness6 +leones +1593575 +Einstein +03121987 +tribal1 +India +040789 +85858585 +1zxcvbn +140391 +27041989 +6363 +tampabay1 +19061989 +milford +swerty +watsup +17061987 +hillsong +celtic1967 +hondas1 +amazonas +26051986 +�+��+��� +truand +slipknot11 +daniel26 +wangwang +rainbow8 +010179 +l3tm3in +250390 +lovemama +rockout1 +270786 +mywife1 +ryjgjxrf +170587 +darrel +coco23 +vampire12 +potter123 +cashew +55 +041289 +tyree1 +00009999 +160586 +bigdog69 +bailey09 +jackdog +diamond08 +gussie +trinitron1 +camila12 +password67 +vfhvtkfl +07071985 +revilo +sw0rdfish +munmun +kevin1234 +lenore +23111992 +290386 +211291 +calipso +amoretiamo +ronnie123 +sourire +Babygirl +frenzy +ocarina +douglas2 +feeder +041186 +jesus2010 +10051984 +steffi1 +@gmail.com.mx +sue123 +hunter77 +brasil123 +bellas +dallas3 +angels! +nachos1 +sergeevna +230492 +lolipop12 +061286 +140592 +VERONICA +analaura +199712 +stifler +panthers2 +17061988 +hang10 +mr +elvis2 +grandma12 +carole1 +deathstar +bhushan +zambia +tanga +sanjay123 +parasite +kwabena +doreen1 +emmanuel12 +30051988 +01091988 +smartgirl +pipicaca +princess0 +elloco +15011986 +farhad +seanjohn +kaitlynn +shorty08 +duchesse +26011987 +какашка +030392 +thomas05 +sexy2008 +tomjerry +isaiah12 +danielle5 +anupam +160789 +148888 +argyle +emily4 +temporal +05071990 +shinta +calvary +contreras1 +Zachary +160990 +loved +chase2 +zhongguo +ryan06 +29121985 +21111985 +01081986 +freshboy +getfucked +16051991 +sexygirl13 +21011985 +sports11 +myspace777 +goblin1 +fanta1 +130482 +123456me +poiuytrewq1 +291283 +spring12 +04061984 +ange +23021984 +25011987 +23051984 +051191 +bella06 +loveyou8 +27021992 +CHARLES +23041989 +millie01 +11011984 +doggys +21011989 +121296 +06071984 +220482 +250580 +underwear1 +safina +newyear1 +271182 +04061987 +bandit7 +bella21 +68686868 +03091987 +rediska +momo11 +horndog +28071988 +isabella3 +justme123 +lamar +luvbug1 +15111985 +loveme18 +110782 +26091986 +adidas3 +091186 +umesh +01011972 +flowers5 +200584 +nigger4 +vqsablpzla +12345678f +cookies7 +300988 +02071990 +29071987 +arsehole +Manuel +zoulou +werwerwer +100681 +291291 +123321m +040588 +26071990 +25031986 +agnese +150691 +01061992 +johnnyboy +030787 +18091986 +abdullah1 +1472580 +love1988 +apple8 +password04 +ADRIAN +kokoko1 +dustin2 +goldfish2 +labyrinth +rainbow9 +halifax1 +grzegorz +ticktock +miumiu +football62 +harman1 +15011990 +12111984 +02091989 +malandi +180191 +agassi +20091990 +270685 +video123 +libby123 +400013 +dancedance +23081986 +chris27 +blacksmith +240884 +agyeman +josue +10111984 +money2009 +11061989 +superstar! +wholesale +16111989 +percival +010990 +22071989 +montevideo +pimpin6 +lowrider13 +180689 +20121992 +calypso1 +sanjo408 +lala14 +justyna1 +22031985 +tanner11 +ou812ic +vette1 +suckmycock +pretty01 +tayler1 +perrine +210287 +101179 +13051992 +zxcvbnmmnbvcxz +alleluia +fuckyou33 +29061987 +joshua20 +05091987 +ubuntu +15031986 +mybuddy1 +17051985 +bracken1 +coucou1 +011289 +160791 +28031990 +14041984 +chico2 +dolphins12 +davion1 +010789 +e65r82kni2 +malin +peaces +toodles1 +jorden1 +beulah +stetson +trauma +tinytim +27061990 +281090 +paige12 +23061986 +ryan08 +evanescenc +yellow15 +sexyboy2 +260984 +21121984 +10091988 +nintend0 +Kp9v1ro7lH +polo1234 +1234567654321 +meow12 +diablo22 +1503 +belair +beltran +paparoach1 +berenice1 +antique +25011985 +football71 +jhonatan +caballos +nigga4 +strawberries +pipi +purpose +160591 +310885 +23051985 +darklord1 +08081990 +love1212 +kuba123 +271084 +iamfree +Chester1 +020891 +110693 +kenobi +houston123 +dogbert +28011987 +tarantado +213 +allied +danny21 +mitchel1 +jeremiah2 +02121986 +14071988 +03051987 +dakota5 +18021986 +02031983 +malaka1 +andi +ginny1 +harding +kipling +danielle10 +hayden01 +skadden +MARIA +baddog1 +negrita1 +300186 +candi +honda11 +articolo31 +bathroom1 +sparkie1 +topaze +dylan11 +ghbdtnekmrb +zelda64 +180385 +turtle5 +197346 +q1w +iheartyou +univer +23071988 +14031989 +whore. +ashley89 +sagesse +jessy123 +JESUS1 +butter5 +sept20 +23011987 +200500 +diosmio +scrubs +123123b +19371937 +cri +19051985 +sssssssss +hattie1 +10111991 +playboy21 +jerry2 +30041986 +йцукенгшщз +laura01 +13071985 +513513 +emily! +gr33nday +janie1 +11223311 +bird123 +awesomeness +210492 +a12341234 +loubna +goldeneye1 +01041989 +Natalie1 +ramiro1 +veggie +01031992 +mouse12 +clothes +Gabriel1 +vfktymrfz +davis123 +special2 +040492 +28081992 +25021991 +Marcus +170584 +narciso +putain +EDWARD +281285 +fucking69 +theduke +demolition +granger +max007 +raiders21 +24091990 +2wsx2wsx +261283 +14071992 +23031992 +nascar99 +395007 +Harvey +nutella1 +danny10 +vining1 +prinzessin +E +welding +170891 +ilovepaul +kaffee +pimp17 +bashir +jingle1 +magic3 +ashton123 +1940 +aq12ws +copycat +fortunato +lexi12 +jackdaniel +haroon +brianna13 +27041987 +bigblack1 +03041990 +Google +killer44 +chicka1 +dupa12 +77777771 +cowboys! +blackberry1 +yamakasi +manoj123 +280387 +drive +eyeshield21 +300787 +lavander +lacey123 +hottie18 +05081987 +akinola +bubbles09 +29121990 +omolola +171182 +25021992 +30041988 +orchids +paiste +ORANGE +230681 +200691 +12011989 +010100 +sternchen1 +maxcat +28101989 +02091985 +280191 +050583 +lllll1 +271287 +dallascowboys +lifetec +dragonball1 +joke +200284 +biggles1 +portakal +151083 +1peace +lookout1 +squall1 +211183 +1a2b3c4d5e6f +pimpin08 +carlos16 +26021987 +taylor69 +year2010 +cendrillon +29011990 +06071987 +SOLEIL +554455 +bandgeek1 +rebelde12 +playnow +michael26 +allalone +mamababa +navarro1 +football43 +04081986 +20081984 +23121983 +dexter11 +mather +alyssa07 +meandu +apocalipsis +sparky13 +pass-word +16011987 +140892 +bla123 +18111988 +abba +ponchik +trilly +aqw123 +16051989 +rulez +mexico09 +hockey30 +blackwolf +17081992 +tweety4 +26041987 +loveisgood +fucku5 +1stborn +31101986 +christian6 +blitz +Raiders +level1 +isabel12 +ridwan +athletic +17021986 +ramos1 +imran +raihan +130483 +201081 +151151 +marcelina +Pass12sa +shruthi +biblia +myangels +babbygirl1 +pink55 +20111984 +121094 +22041983 +money44 +560071 +inuyasha13 +osborne +asdasdas +VINCENT +tigers23 +rene123 +vasileva +19021985 +logan11 +15011991 +seadog +change12 +music6 +luke1234 +thebitch +pleomax +blackstone +alakazam +guru +150483 +8602229096klo +silver5 +mexico8 +13041986 +sonja +tania123 +vadim1 +ihatelife +hottie1234 +lachlan1 +marieta +1marie +061189 +12431243 +fool +radheradhe +mafia2 +dancer21 +tayl0r +16011990 +toonces +blueberry2 +246813 +05101988 +mama21 +270483 +whatitdo1 +199199 +130184 +teehee +crow +abby01 +football92 +Russell +ttt123 +17071992 +14011988 +1blessed +gun +25061988 +199123 +310583 +ilove22 +101990 +justinbeib +301290 +19031983 +fotboll +mylove4 +metallica3 +cookies11 +filip1 +310185 +katyperry +170284 +240886 +221081 +191989 +flakita +101979 +gwapito +vitalina +speedway1 +nightmare2 +985985 +pusspuss +29101985 +180883 +iloveyoumo +bethoven +160584 +161185 +endless1 +270286 +aisling +landen1 +250289 +270591 +28031986 +evans +56785678 +felixx +1redhead +dfkthbq +final7 +lafouine +femmes +superman99 +shiznit +tina1234 +lavanda +240692 +sunshine99 +wangjian +qwer789 +dinheiro +iforgotit +christoph1 +asdasd123123 +241280 +sasha2003 +alamakota +01021982 +miyvarxar +bayside1 +hardc0re +tnt123 +h1992iding +wwewwe1 +ab +280285 +Sarah +audioslave +jordan33 +andron +mariobros +lisamarie1 +cali12 +faith56 +180784 +281284 +koko12 +samba +tyler1234 +redwine1 +super13 +catdog11 +bestbuy1 +mollygirl +211083 +version1 +sexycani1 +vtuf36jhufpv +skylinegtr +brianna01 +onegod +260487 +230680 +300786 +france98 +fordgt40 +june05 +bears34 +041290 +poop666 +declan1 +199090 +cupcake5 +25121983 +ashley02 +mummys +Tiger +bubba10 +Dragon1 +25051983 +orangina +mnbvcxz12 +gordito1 +corine +horses13 +reggie31 +jj12345 +falling1 +samuray +starwars! +bembem +1234567as +michelle24 +warfare +130991 +guardian101 +littlemiss +poppydog +kobe23 +14031986 +260985 +basebal1 +loser45 +thing2 +anneke +040990 +120693 +tolkien1 +song +210183 +avefenix +031291 +12031984 +norwich1 +lor +sunnie +soldado +tink01 +260886 +ghana1 +ghost12 +korean1 +reggina +cookie16 +kinder1 +110982 +124578a +28031989 +fireflies +280190 +323046 +nathan8 +ochoa1 +ball23 +23071989 +dennis2 +iluvu12 +11051992 +tasty1 +19101985 +europe1 +pride +panther7 +melnik +leonleon +march08 +spierdalaj +reckless1 +jailbird +kl123456 +northwest1 +alyssa08 +28071991 +geraldo +dadmom1 +oscar10 +19101984 +121975 +happyone +31011987 +sirisha +181091 +band +21111990 +cordell1 +14011986 +maggie14 +23011986 +live4life +dallas9 +napoli1926 +fireworks1 +13091990 +111083 +310887 +1johnny +dabomb1 +300890 +181291 +041085 +200483 +atchoum +Golden +08081984 +stella2 +190889 +101177 +22021983 +yjdbrjdf +fashion101 +200384 +11011985 +11091992 +lisa69 +08021987 +020672 +danny23 +othello1 +chevy4x4 +scooby22 +10011983 +654321b +dakota22 +fercho +nacho123 +men +gosia1 +hektor +18041984 +fly +1406 +12091985 +05071988 +widescreen +jacky123 +13051989 +gr8ful +millonarios +steiner +19011990 +steven14 +click +jamie13 +micaela1 +maxman +katie7 +redlight +softball19 +alexander. +mohawk1 +����������� +almighty5 +courtney3 +catalunya +hershey2 +tigers5 +diavolo +marat +180485 +05071991 +Password1234 +28041986 +jobs4me +emmajane +18041988 +godfather2 +contact1 +020283 +24111988 +penelopa +4321rewq +03011987 +miranda12 +elliemay +jessie3 +family22 +bunny3 +inlove123 +labello +money00 +290991 +alex26 +280484 +25091985 +sexy56 +cimbom1905 +29111991 +28061990 +sunshine25 +23071987 +qweasz +110482 +njhygtfTB567 +080884 +28121984 +calendario +28081988 +130782 +rfhfrfnbwf +satori +asshole8 +clementina +210580 +7272 +destiny09 +christ12 +400052 +jasmin3 +1234567x +100782 +orchid1 +16101992 +241092 +сергей +22121982 +happy09 +apples22 +wolverin +19071986 +lovers7 +13111991 +frenchy1 +siddiqui +inuyasha! +231292 +hollow1 +220492 +100183 +Y +diva09 +shane2 +sasha01 +Metallica1 +smash1 +ty1234 +agape1 +moss84 +021282 +xj453CxDXQ +bonner +dumass1 +bloodline +01091984 +04071986 +28041989 +190487 +170385 +fruitloop1 +daddyo1 +flyguy1 +donner +mayra +1902 +20011992 +seniors07 +javier13 +270585 +terry26 +cortes +01091990 +300584 +tooter +41414141 +1bowwow +yoville1 +jumpman +dapper +26101991 +guitarist +devilish +vero123 +tasha2 +pal +logical +101075 +Galina +270886 +160781 +everyone +yankees24 +springs +kaykay123 +loveme15 +pretty21 +elegant +mother22 +Monster1 +061188 +darkness13 +thematrix1 +25121984 +107107 +010178 +barbara123 +29121989 +space12 +230983 +loveno1 +123456789! +170183 +06031987 +forgetful +255225 +01121987 +houston3 +200984 +aezakmi123 +mmklub +fortuna1 +rico123 +shadowman +05051984 +shaikh +13101985 +lissette +exclusive1 +411037 +koolkat1 +stepanov +24101984 +wateva +tryagain1 +fahrenheit +22071992 +gv5235523532 +100982 +jake21 +123abc! +190386 +lausanne +190390 +131081 +250682 +hon +jumbo1 +271283 +skittle +juggalo666 +Timothy +loveisblind +12hat93 +30101989 +02011985 +bee +311083 +monkey03 +02041984 +200583 +qwqw1212 +themaster1 +pinkish +100581 +seahorse1 +hubbard +123456abcdef +maranello +dynamic1 +g00dPa$$w0rD +barlow +310390 +24021988 +310588m +taylor24 +alexis8 +panther3 +beasley +turkey2 +js1234 +annina +debbie123 +music40 +antonio11 +15101989 +1a23456 +qwertyu12 +050889 +1478963250 +241080 +120781 +sephora +13021988 +22121984 +anna1987 +stone123 +password!! +010987 +kimber45 +wolves12 +russel1 +iceman123 +sharon12 +ferdie +skooter +logitech123 +money. +poohbear10 +asimov +230992 +sand +tiger45 +mission123 +johnson12 +secret22 +24081990 +horseshoe +puppy11 +juicyfruit +1booger +tuppence +megan3 +29051989 +13081990 +desant +autobus +hunter98 +270683 +26121991 +manusia +masterp1 +22041985 +p3rat54797 +who +crips +sexylady12 +123123k +pacopaco +03041985 +juliano +24061991 +redstone +909909 +solid1 +301091 +bigshow1 +morrissey1 +vovochka +FERRARI +12181218 +miguelito1 +13031984 +rockon12 +mtndew +150593 +metalcore +nokia6131 +30091987 +codeman +080898 +16051986 +17081990 +virus123 +robert8 +190187 +020889 +051085 +10z10z +purple20 +mouhamed +noviembre1 +02021981 +bingos +nathan02 +nemo12 +110992 +12011986 +magpie1 +architect1 +naruto8 +noah12 +131283 +070988 +n1cholas +atilla +oluwakemi +26121985 +urban1 +061184 +CAROLINA +24011987 +zombies1 +28051988 +Buddy1 +28061989 +hellsbells +05101987 +blueeyes2 +hotguy1 +12021984 +071289 +zxc5555 +shelby3 +26101990 +kisser +27031987 +hotass1 +yesyesyes +27101992 +123z123 +raju +iforget1 +snapon1 +14111988 +granite1 +pau +lililili +teresa12 +lifesux1 +270485 +18031986 +hayden12 +14071985 +041090 +24071991 +amanda88 +qweszxc +221180 +freedom8 +ski +gummybears +devious1 +jayden10 +cameron8 +surveyor +carrasco +altavista +25522552 +30091986 +lemah +bading +31031990 +marie19 +09092009 +wesley123 +cascade1 +546546 +31031989 +julchen +030288 +tycoon1 +161181 +gold12 +A1B2C3 +13081986 +benedicte +puta123 +shy123 +9875321 +tundra1 +kola +16071985 +24121981 +27111989 +trash +taylor98 +19081989 +g86ua5qsn5 +millions1 +oneill +24061985 +14041993 +babygirl98 +220283 +godess +bigboy10 +stunna +Parker +240290 +16041986 +monarch1 +27051991 +180491 +150682 +flowerpot +18091992 +a101010 +ilovegod7 +11051985 +pinto +16061985 +170383 +318318 +246810a +emperor1 +08091988 +13051990 +140691 +getmoney7 +sarkar +rororo +peace2u +lawson1 +danman +1233456 +soulja +nickel1 +090688 +412412 +25061990 +14091989 +120677 +crystal11 +goodgod1 +scampi +241191 +laurence1 +16091987 +champagne1 +101277 +200785 +takahiro +gasolina +260389 +25021985 +197912 +100992 +20011991 +megaman2 +tiff123 +24051985 +fucking123 +Adrian +keshav +tat +basket23 +filipp +ajajaj +tenshi +chuchu1 +ilovejoey +lemontree +baerchen +bakugan1 +23021993 +16051990 +kevin08 +bomba +monkey94 +gingin +bicycle1 +171084 +28041991 +torrente +03021987 +fuckoff6 +abhi +loving123 +16011986 +1920 +22091990 +skinhead88 +nathan04 +badboy01 +l0vers +maxpower1 +291082 +280483 +16041992 +101296 +lifesucks2 +batman88 +lilyrose +157953 +159753z +iloveu21 +sweetcheeks +23322332 +21091988 +playboy5 +tigger9 +180787 +winnie12 +19111990 +skysky +27071992 +baboune +pooh16 +blackstar1 +hottopic1 +peppy1 +year2000 +greenfield +iloveme22 +04061986 +26051988 +killyou1 +fartface1 +martin22 +887766 +tyler99 +pass123456 +110893 +kitten13 +amber15 +vfcmrf +haircut1 +221080 +250982 +speed2 +280186 +23091990 +karen13 +spark +movie1 +staci +apple! +28041990 +dragon45 +jackass5 +020489 +26031986 +25031992 +password-1 +truong +20051983 +raiders69 +allday1 +1307 +k43a5vZtoX +password84 +buchanan +iphone3gs +canelo +998899 +monopoli +government +matros +qwqwqw12 +05081989 +181084 +greenday11 +0204 +fuckit12 +250783 +anirudh +adewunmi +soap +allright +lukasek +windex +roudoudou +111280 +fabian123 +toyotamr2 +15081984 +Markus +01041984 +chickie +maria18 +m11111 +darek +sieben +231079 +dreamcast1 +autumn12 +1redrose +03101988 +hemalatha +17121992 +dragao +sojdlg123aljg +arquitectura +sprinkles1 +22111984 +amit1234 +kalamazoo +jacob07 +bomberman +12111988 +kaykay12 +techdeck +11love +navy +gladiatore +e10adc3949ba59abbe56 +600010 +chadwick1 +04091986 +04071990 +cheese10 +28071986 +chessie1 +lovers11 +football90 +06021988 +nope +golfpro +260585 +231986 +delarosa +270888 +spring01 +19091992 +passw +011288 +татьяна +arselect +foxyroxy +badgurl +2711 +niceone +rubyred1 +27121988 +27021985 +yamina +shammy +1trinity +cutie#1 +saturn5 +infosys +VALENTINA +Amsterdam +cannes +12011201 +coimbatore +amber22 +10031983 +ines +vfhbfyyf +v1234567 +07021987 +popper1 +oscar5 +godisgr8 +mybabies3 +tuffy +snehal +corina1 +derder +spring11 +orlando12 +courtney7 +180390 +honey6 +realdeal +Я +raiders#1 +kellyann +20021992 +11101984 +tupacshakur +loser9 +ronnie12 +100693 +blackhorse +magnavox +03041988 +sarajevo1 +18051991 +nicole33 +mylove23 +balogun +241180 +chaingang +02061992 +58666z +eliott +alex97 +280189 +29121988 +concha +HONEY +andrew25 +pizzapizza +patito1 +302001 +17111988 +07081985 +30111988 +051187 +shit1234 +22021984 +munchies +4yfb2S753C +24011989 +180882 +bestbuy +normal1 +270387 +agent1 +20081992 +sagar +maggie09 +killkill1 +celestina +ktyxbr +260186 +17011988 +2smart4u +matty123 +jessica99 +flintstone +luckey1 +28021989 +fuzzy123 +summers1 +� +28061988 +1234555 +alena1 +timothy123 +marshmallow +20111988 +siamese +jackets +030887 +ceecee +06031990 +180790 +mommysgirl +22121983 +150782 +140384 +16021991 +240582 +loxlox +322322 +10031985 +montpellier +20011984 +pitbulls +270686 +mara13 +19081985 +31071985 +bunbury +240491 +anasofia +332233 +02061984 +140485 +leann1 +100983 +211191 +confidential +010509 +22111988 +sexymami1 +heaven3 +seagate +181190 +exodia +osman +23111985 +1qaz0okm +therapy1 +10101995 +110880 +Precious +masamune1 +estelle1 +041285 +hihi12 +escada +mccartney +ardilla +plant +040687 +mignon +290787 +jamies +200784 +290888 +22031992 +recruiter +�: +saywhat1 +211212 +bub +121276 +110183 +lovers. +bobbobbob +dima2010 +010177 +flirt1 +090388 +247247 +ester +pokwang +mailmail +gabriel11 +rambo2 +7788 +topnotch1 +3daughters +alex2539 +999555 +hullcity +20051984 +goldstar1 +camcam1 +salado +31081988 +secret13 +auralog +220580 +160386 +10081993 +edu2008 +blood55 +austin15 +rose21 +ingeborg +nbvfnb +120380 +1901 +jason1234 +chester3 +30101984 +6Exe3Za97v +741963852 +skippy12 +legends1 +grandam1 +liarliar +raheem1 +121995 +110112 +220581 +rachel69 +AAAAAAAA +rascal123 +160692 +240191 +14121983 +cutiepie! +230192 +sexy31 +birdy1 +190583 +10301030 +13111989 +paolo1 +wg8e3wjf +lizzie12 +pastrana +recon1 +110680 +bullit +macmac1 +31011985 +monkey93 +02031985 +John7502gee +191190 +15091988 +twilight01 +06031986 +azsxdc1 +sassas +08091989 +Stephen +jacks1 +rubyruby +290187 +richard11 +101096 +150283 +livingston +artur123 +vicecity1 +04121987 +121078 +babygurl22 +smith22 +iloveu69 +reyrey619 +400049 +30101988 +icecream11 +250387 +230691 +inkognito +tiger55 +cronic +27111986 +101991 +2301 +kimbum1 +odyssey1 +220784 +120594 +America1 +fucklove! +16011991 +abbygirl +alexis04 +17011990 +110064 +tinker7 +tw33ty +ufyljy +guildwars1 +18011988 +chaparro +yahooyahoo +cccccccccc +88002000600 +darek1 +lollies +whatisthis +lazio1900 +catita +110980 +iloveyou55 +290983 +130581 +23091985 +hellcat +swift1 +lancelot1 +london08 +rolex1 +eduardo12 +13021992 +17081989 +getmoney23 +18071988 +Marlboro +jackson13 +171282 +18071990 +lovepussy +jade1234 +190684 +love.. +bubbles6 +yana123 +12051993 +sampaguita +dasilva +20071984 +110595 +260890 +tyler9 +pratama +123412345 +01031994 +jrock1 +toshiba123 +trilogy +ymhPnmJ733 +atybrc +200286 +eve123 +160384 +gio +ishmael +pretty23 +miguel01 +asparagus +235711 +marie69 +buddy! +sasha777 +johnpaul1 +luv4life +180881 +020386 +matthew24 +colossus +nikki5 +adejimi1 +giuseppe1 +loren1 +211292 +22091989 +270385 +money777 +21011990 +sharpay +ngentot +cherry16 +spaniel +talon1 +cirrus +yxcvbn +01071991 +bannono8 +nothing12 +panda11 +upyours1 +kelsey13 +officer1 +30121992 +Jason +280685 +bbking +minnie3 +subhanallah +300790 +matthew18 +28041988 +usuck2 +mariposa12 +01091991 +texas3 +20101982 +airhead1 +26101986 +ok +cheeto1 +billy5 +x0x0x0 +blitz1 +25121992 +a456789 +160784 +tiger24 +calvin12 +monkeynuts +260583 +nastyanastya +061187 +161280 +kuldeep +100792 +kids02 +xtvgbjy +18021993 +bullwinkle +111973 +rebel2 +moss81 +zxcvbnm11 +140683 +191085 +233233 +25091988 +Stefan +july05 +monique3 +blue321 +live123 +nafnaf +waco254 +140991 +150189 +2207 +270792 +crush1 +honeyq +kourtney +19081992 +10051992 +01love +190991 +scarface7 +100381 +texas22 +090992 +acdc12 +sawsaw +sept15 +121272 +cel +pizza13 +danielle4 +031085 +24051987 +gumby +daniele1 +seabass +260491 +caracola +greenland +hunter17 +120477 +27111990 +17031985 +serpiente +bunso +iloveyou44 +250884 +250791 +10151015 +daniels1 +spencer12 +asdfghj123 +14111990 +sunshine18 +1133 +071288 +250283 +michael89 +hasan123 +madyson +certified1 +300188 +shelter +skyline123 +17081987 +rasheed1 +260682 +surfboard +180880 +rewind +1й2ц3у4к +constanta +emilyrose +27031992 +2kittens +240891 +01041992 +280985 +240984 +09091984 +03051989 +iamtheman1 +boston5 +248248 +bat123 +benladen +brandon24 +24121992 +15041985 +290890 +harrier +helphelp +17061985 +dumbo1 +das123 +pharmacist +160185 +mexicana +30051986 +keens_1 +Fktrctq +firedragon +малышка +slapper +445544 +221280 +poodles +jurgen +ilovejeff +salman123 +lovely14 +sexy666 +hootie1 +14021983 +majiajun8888 +patches12 +redtruck +chatterbox +b1b2b3 +wheels1 +watsup1 +14091988 +angela13 +pipper +offroad +15021986 +198724 +olympiakos +200391 +buenosaires +520000 +131091 +190886 +amira1 +trails +050190 +brooklyn11 +marie93 +flowers! +scumbag +denmark1 +130982 +260584 +27031991 +03121990 +123e456 +onepiece1 +051087 +dionne1 +210192 +saddle +15061984 +diesel123 +13211321 +germain +hao123456 +150791 +04051989 +football29 +050787 +partytime1 +19101992 +110481 +day123 +240483 +sh0rty +110792 +sept21 +nowayout +triston +nando1 +190685 +26091991 +241181 +rock23 +071189 +14031985 +nicole04 +230980 +061291 +basilio +kitty21 +this +10071984 +zzzz1111 +pussylicker +31051985 +loving2 +lovergurl1 +coltrane1 +070785 +adidas13 +abuelo +manage +67chevy +tiktak +28051992 +davey +bruxelles +aaron7 +myspace66 +not4u2c +blinks +26021986 +290485 +emo4ever +251181 +honda22 +amber21 +woodpecker +150985 +111a111 +Vampire +southside5 +400022 +orion123 +carros +equityDev +030788 +maxwell12 +30051991 +14041991 +paperina +jonathan23 +restaurant +11121992 +rooroo +babyboy21 +100580 +140884 +020291 +opera +11011988 +18051992 +101099 +07071982 +buddy21 +amber16 +supernatur +ludwig1 +blondie123 +julia2 +blanket1 +bmw330 +habitat +123456dd +pony123 +010010 +bear69 +hartford +vasilica +winnie123 +levis501 +butterscotch +guadalajar +20111990 +breath +08081989 +070777 +200486 +dumbo +bethan +britneyspears +james99 +nesha1 +kickers +rock22 +surgeon +heather13 +shelly123 +freakshow1 +tattoo2 +280192 +kosova123 +lavidaesbella +111115 +blueyes +nacional1 +pisello +blazin1 +10081992 +loverboy69 +june03 +280880 +solyluna +tickets +010385 +bestman +nikki23 +george21 +19011991 +190387 +william14 +poopies1 +baby66 +swindon +01021983 +nokian97 +creamy1 +pebbles123 +james05 +sports3 +divinity +18011990 +fields +13456789 +17031993 +nada +2good4you +swoosh +181284 +05031989 +forreal +berlioz +Maxwell1 +280787 +hockey09 +wilbert +1hustler +250782 +niners1 +nicholas10 +300885 +130579 +amari1 +gat +2203 +strega +fktyjxrf +thick1 +260285 +cat101 +boogie2 +steveo1 +gotika +jaden123 +********* +muslimah +waldo +04081988 +catolica +wassermann +160482 +040886 +look123 +kissass +010887 +22021993 +19011988 +sandip +09071987 +14021402 +andrea15 +kitcat +1qwertyuiop +7532159 +lowell1 +010483 +110282 +buck12 +15061992 +16091991 +franny1 +azeqsd +8vfhnf +12071983 +300383 +cervantes1 +hanhan +melone +insanity1 +230982 +31081987 +janae1 +angwar77 +kitty1234 +5432154321 +..... +27101988 +donsun123 +samantha. +football68 +texas23 +tootsie2 +jayshree +batgirl +sept18 +20042005 +superdog +david20 +28061986 +151082 +24021987 +18031991 +200190 +sebas +password321 +7uqbwx8N4Z +honda2000 +30111987 +brett123 +emily6 +marky1 +cutiegirl +barbos +reyrey1 +31101985 +020382 +nikkie1 +281183 +gunsmoke +logan3 +erica12 +02121987 +music69 +kingman +09071990 +17011987 +google4 +a12321 +nor +19081986 +melissa4 +131986 +taylor00 +Ronaldo7 +17051989 +lam +tommie1 +190691 +july06 +leander +diddy1 +261081 +jade01 +matata +dredre1 +21111989 +03051985 +29051985 +takuya +fuck1you +06061984 +inuyasha11 +29101992 +lili12 +jeremy23 +qweasdyxc +antoha +helloyou1 +22091986 +290684 +lilsis1 +bree123 +240983 +23101983 +020484 +198606 +19031986 +pinecone +231281 +method1 +101278 +august07 +270482 +deinemudda +sunil123 +07041987 +dental1 +motherland +classified +kappa1 +Abigail +green19 +20071985 +Pass +avensis +elocin +nb +04061990 +triangle1 +frogman1 +saruman +�+�����+�����+���� +blunts420 +17051984 +redstar1 +install +m00m00 +07081991 +cupid +1dickhead +111178 +1derful +HuF7dkGd +27041991 +dentista +metalica1 +pooface1 +mabelle +kinky69 +MIGUEL +sunbird +dancer10 +sho +30061989 +14251425 +blue26 +ripper6 +rosie12 +йцукенгшщзхъ +volvos80 +kevin16 +rossignol +251081 +123z321 +DESTINY +swagg1 +150681 +310886 +170886 +simone12 +shaggy69 +starstar1 +13071992 +fatdaddy1 +� +nygiants1 +171283 +230483 +lollo +damascus +nicolas2 +03051988 +kamasutra1 +mamasboy1 +140681 +freddy2 +Lineage2 +10111982 +jeannette1 +14091991 +Rangers +s1s2s3s4 +250182 +A12345678 +bassist +290584 +dance7 +jess13 +03041989 +04071985 +badooo +james88 +black24 +dennis01 +orleans +05021985 +fottiti +051184 +27111987 +ash1234 +softball25 +apples01 +Fuckyou1 +QWERTY123 +ade123 +football63 +malabar +ten +ilikepie12 +25121982 +13011986 +012369 +cody14 +marcus3 +forgive1 +24gordon +11051986 +girlgirl +alinaalina +25111988 +marmota +letmein01 +lovely10 +giotto +nanna1 +271191 +lyndsey1 +florencia1 +2122 +010485 +17011991 +300991 +ktm250 +simona1 +carlos. +atreides +554466 +america100 +london09 +thekids +jeanclaude +hondacity +medecine +paulus +anthony20 +11081985 +moctar +maroc +150192 +070688 +greg12 +marianna1 +alex55 +01041993 +19061985 +220880 +bayside +28101992 +1welcome +16021986 +bilal +choupi +010785 +gaga123 +babygurl4 +love83 +16071991 +369741 +Dominik +molly22 +123456789R +191184 +29081987 +klara +matrix3 +demetrio +nakata +19031989 +metallica. +katie4 +baseball77 +starwars7 +kazuki +football93 +120894 +lothar +beyourself +VHBtH55jec +gato123 +fozzie +01012007 +connor10 +jobless +dylan5 +miespacio1 +ZRSzd9p238 +pink92 +was +300491 +17121983 +24101985 +220782 +rascal12 +10021002 +240584 +allana +11111982 +Shelby +integrity1 +ukflbjkec +bugbug +kiara123 +seasons +rjpzdrf +boeing777 +babypink +smokey5 +14151415 +111992 +97531 +lion12 +inday +230592 +fairfield +bunny5 +emily07 +090890 +jorgeluis +NOVEMBER +piotr1 +cleaner +199414 +180591 +24111986 +spikes1 +654321z +pooh01 +161281 +15121991 +diana2 +261291 +291084 +800000 +29091986 +bioshock +bitch20 +michelangelo +reina1 +02031990 +21111988 +mydarling +june123 +rockport +neworder +310582 +badminton1 +29041990 +1245780 +nicetry +kfgekz +tea4two +momo1234 +a123456z +201280 +loko123 +Scotland +elmer1 +mikevick7 +kuttan +bornagain +vidaloca +tar +26111987 +18111989 +spamspam +dino12 +19051984 +spooky13 +thebig1 +169169 +pokey +27121987 +120878 +analucia +romans1 +lucky1234 +19944991 +060891 +gamer4life +toontown +270384 +FERNANDO +remedy +27031989 +130192 +scooter01 +beasty +666hell +28081987 +mustang! +freezer +tiffany11 +thebomb +20011983 +190790 +19111984 +mike420 +friendster1 +player101 +hahaha. +18041985 +simple2 +heller +symone1 +220781 +19061992 +frozen1 +brandon05 +198725 +mojo123 +29101988 +mysp4c3 +1billion +120779 +tommys +23071992 +19041987 +murillo +ziomal +franki +arctic +vasya +121298 +070590 +goldgold +rapture1 +05031988 +zanetti +chukwuma +140482 +12081984 +bcnjhbz +aracely +03081987 +morgan6 +123498765 +micheal123 +06041987 +bigsis1 +giants56 +fuck!! +1705 +grandma7 +muffin3 +she123 +290490 +24111992 +071187 +iop890 +friends09 +130182 +waterh2o +1712 +salsabila +100393 +jackie7 +180988 +elmo11 +homo +flippy +gabriel5 +dima1234 +italiana +diet +290785 +09041986 +adedayo +carling1 +280792 +agnes1 +zH8o9ly3gI +marusa +papagaio +25021989 +05021987 +shadow25 +shannen +10041983 +030488 +230282 +19031992 +20111989 +120494 +31071990 +aaa555 +benito1 +mitica +rucaxefu +pepe12 +080585 +25071984 +190389 +division +asd123qwe +password97 +poopie12 +jolanda +041086 +040887 +rumble +11071984 +014702580369 +1hahaha +17031990 +diamante1 +canterbury +honzik +vanessa10 +200786 +11031103 +05051993 +bannana +cornholio +151092 +cuntface +murielle +jhenny +gitana +thumper2 +halo11 +morgan21 +scoobydo +cookie24 +110901 +nehemiah +password.1 +21071991 +tortuga1 +jake99 +nanita +13071986 +aravind +happy100 +andria +27021988 +210783 +chuchay +laker1 +jason08 +2469 +Welcome01 +wishmaster +faith07 +lucky09 +starla +duane1 +220592 +money45 +221093 +02041983 +boom12 +13081985 +satanic +giovana +lolo1234 +talking +benjamin3 +elevator +200883 +jigga +donnell1 +angel66 +dflbvrf +001975 +rikimaru +taylorlaut +brook +mixail +200282 +august06 +18081992 +bagpuss1 +pinball1 +shield +18071986 +thecrow1 +softball33 +kopa1961 +deathwish +complicate +120495 +pallone +amanda8 +copacabana +040686 +mature +freestyler +030692 +texas01 +red666 +bisexual1 +rajesh123 +25111990 +040587 +22071990 +030586 +friends22 +18031985 +shanti1 +19081987 +hummer3 +061087 +soares +samsung22 +katie! +919293 +red111 +surya +jennifer. +pomona +290783 +hawkeyes1 +hersheys +Marvin +vanbasten +idontknow! +ily143 +domani +andrew20 +single13 +baseball55 +quintin +2apples +football98 +030889 +babyboy14 +prince13 +050685 +saab93 +sanluis +21051992 +ikaika +starchild +cookie99 +15051981 +141092 +270582 +01121989 +john12345 +120478 +password_Rr +musika +adamant +usa12345 +31121983 +can123 +18101992 +tigers21 +batman24 +sevenfold +rfghbp +spirit123 +1346795 +labelle +joyce123 +serhat +bratislava +scarface3 +cornelius1 +shadow06 +020786 +01061985 +gibson123 +connect4 +harrys +160385 +buggie +rocco123 +lilboosie1 +nathan14 +w1959a +22011985 +140785 +licorne +ranjit +optic99 +class1 +23031983 +silvano +ophelia1 +01071992 +22122212 +buck123 +anjink +QQQQQQ +roselle +951623 +98mustang +EMAILONLY +spanner1 +tazzy1 +123123qweqwe +hayhay +lefty +djeter2 +tinker5 +lionne +commons21 +maisie1 +2404 +321000 +tiddles +bowie1 +09051986 +sexy123456 +18041986 +250483 +206206 +414243 +08121987 +holanda +ladygirl +pimpin4 +28031987 +disney01 +asdfasdf12 +heyjude +18091984 +tylerj +5girls +1icecream +anthony03 +25011989 +sarahh +mustang09 +tokyo1 +perrita +������+�+ +098 +01051989 +cliff1 +babamama +pilates +padfoot +rockroll +210692 +030585 +aspirine1 +08061988 +thaddeus +260286 +thesimpsons +chair1 +rafael12 +snoopy23 +jenny23 +daisy10 +alex91 +lala01 +031190 +18041989 +sluggo +lolipop0 +08031985 +twinkies +chilli1 +060696 +distance +giovani +jenny3 +31081991 +030384 +5alive +200202 +5fingers +british1 +California +nini123 +caligirl1 +matthew99 +enchanted +snowbunny1 +masha1 +1dakota +memyself1 +13071984 +4grandkids +nikita1998 +amarachi +party12 +walker12 +pinewood +23011992 +16071988 +wiseguy +true +25071988 +danny69 +travis11 +sean11 +1andrea +nokia6230i +greentree +110055 +1508 +12041993 +cutecute +220582 +standart +kristoffer +domination +lovepink1 +jean12 +280391 +starwars5 +redneck123 +antichrist +123589 +18031992 +1brooklyn +egypte +kroshka +sarah21 +bullet123 +19391945 +babydoll12 +sherrie +rebel01 +milena1 +14121984 +kibbles +31081986 +shiva123 +311084 +juve +nirvana! +kylie123 +���������� +28021987 +shakur1 +freelander +palestra +pamela12 +280187 +dimitris +cigarette +01031983 +150784 +kolokolo +0606 +parent +qwasyx +pashka +1234567809 +joseph09 +marvin12 +sarahb +pulpfiction +tyrant +kot +skidrow +babygurl23 +prizrak +Andrew1 +01101985 +longboard +hatebreed1 +1234zxc +marcie +picsou +ceecee1 +1234er +break +monolit +pfhfpf +123kids +whatever123 +carcar1 +ilovehim7 +mike12345 +nazareno +11111981 +181292 +innuendo +klokan +shady123 +budlight12 +sirenita +rebelde2 +16031991 +martin21 +carlos19 +booty69 +loveya! +excelsior +silvietta +05051982 +02071982 +171291 +25101983 +smokes1 +190489 +thomas9 +loko13 +23121992 +ositos +09041990 +kitana +Peter +trueblue1 +hellome1 +madison03 +170384 +jenny5 +070887 +horseman +23111986 +hello33 +4mylove +18061992 +Test1234 +08150815 +160685 +290686 +270684 +fermer +24121985 +01071984 +12061206 +brooke10 +monkey96 +cameltoe +120793 +15061986 +07051990 +dblock +DOUDOU +061086 +farting +salim +fishstick1 +bailey21 +mollys +morphine +maryjane! +swifty +luisangel +haley12 +toby01 +chicos +11021984 +strongbow +mybaby123 +021292 +160188 +140784 +FRIENDSTER +allfor1 +sweet19 +marcell +260681 +29101986 +brandon19 +261091 +villa123 +030785 +202202 +hotboy123 +24111990 +khulet +puppies3 +291089 +jimbo123 +truffle +t-pain +03011991 +080390 +04081990 +07831505 +ninini +bunny69 +123423 +03031985 +marin +tumama +Laura +estrella2 +chair +monkee +11031984 +savanah +1qasw23ed +yungmoney1 +robert25 +sabotage +kissing1 +adam22 +gismo +1324354657 +21011992 +153351 +raining +kali +kbnthfnehf +sweetbaby1 +sugarpie +151080 +deedee2 +20041984 +nicole95 +uniden +killa13 +bubba22 +rosary +fifa2000 +japan123 +dianna1 +03071990 +30011986 +baseball03 +volkswagon +220681 +FRI3Q9arjg +potatoes1 +rome +jakarta10 +654312 +14111984 +bluecat +fatboy01 +katasandi +121005 +sham123 +200383 +voltron +22101989 +05031990 +220792 +dipset23 +a77777 +myspace321 +courtney! +werty12 +nessuno +Speedy +2306 +110187 +050886 +neng2000 +080883 +tiger007 +17041988 +purple26 +baltika +schweden +31081989 +casper22 +fart12 +31051989 +goober2 +heaven07 +6letters +251082 +assasin1 +Hiuyt75f +da1nonly +one2one +metals +bigdick2 +amidamaru +wilber +marques1 +rams +safari1 +nasir1 +220382 +260791 +christmas0 +asdfas +burnley +reznor +05051983 +masaki +cartel +nightwing +king12345 +400708 +brittany5 +jamie11 +ebony123 +royale +20101993 +newyork! +lolz123 +f15eagle +1664 +Lindsay +enamorado +powpow +110780 +nigga7 +pepper99 +josh17 +moosey +20121984 +lauren6 +hejsan1 +warcraft12 +reunion974 +08031986 +20071992 +210582 +ghbynth +francois1 +030385 +MORGAN +fucker7 +hacker12 +11031992 +clean1 +toohot +biking +dogwood1 +fucktard1 +vans12 +12345678o +74747474 +skyline2 +valentino46 +26061992 +kayley +15061989 +cvetok +circle1 +ilovemylif +6669 +worldwide1 +26011991 +050786 +htown1 +altima1 +bigbass +carolina23 +glock19 +sczouvie26 +stronza +151280 +myles1 +margo1 +travieso +20041992 +1804 +16051985 +teaching +apteka +faggot! +mano +winter05 +animes +5bt2jtzTKE +dani1234 +jackets1 +19021986 +22558800 +muffin13 +jakedog1 +240681 +091090 +minnie01 +r3m3mb3r +28031988 +calamar +liberty2 +martin7 +abbey123 +161284 +180289 +03071988 +steelers09 +thomas24 +woodland1 +princessa1 +ZwJBVHy184 +18041992 +071190 +18081986 +magnus1 +polska11 +seun20 +schatje +skittles7 +root123 +austin03 +050582 +darkmaster +babygirl0 +6565 +farscape1 +charlott +24011990 +16121992 +deirdre +iloveyou32 +74a82s78 +nokia5228 +king88 +stars5 +reggie123 +badboy22 +15111991 +Florence +mueller +190984 +January +allycat +22101982 +skumar +31071987 +wojtek1 +SCORPION +25071990 +3214789 +efrain +140792 +lovekiss +270391 +spring06 +29081986 +Legolas +kronos1 +warcraft123 +05011987 +feefee +oiseau +teresa123 +jamesd +130692 +tootoo +daz3d +26081986 +300682 +221079 +joseph6 +eminem! +prettylady +belles +21041985 +geografia +01051991 +pitbull123 +25031989 +30101990 +090545 +playboy23 +darthmaul +19071983 +adrianne +break1 +300393 +AUSTIN +kane12 +retro +emeraude +1playa +20061992 +230291 +COOKIE +sakarya54 +familia123 +150491 +bianchi +141987 +25071986 +chaves +08051990 +modernwarfare2 +babyboy6 +delaware1 +15041992 +caligirl +12031983 +1spirit +4j9r4rnTtP +27051990 +single11 +march03 +24031989 +thrasher1 +14101990 +170991 +������� +12111992 +198327 +20011990 +khadijah +computer9 +palmira +ginger23 +mahmud +b0ll0cks +marcinek +040586 +ginger21 +luscious +mike99 +chikita1 +deniz +05021992 +26051991 +kaizer +fallon1 +shreyas +mannie +010885 +123456789zx +130392 +051183 +201180 +dragon08 +260289 +polkadot1 +oleg123 +rahasia123 +11091984 +trogdor +drywall +nezabudka +19121912 +260191 +061282 +230580 +sweetest +sexo123 +121000 +rastas +05041988 +godislove7 +m000000 +091289 +17101984 +scully1 +wes123 +nathan99 +29121992 +adriana123 +change2 +jordan96 +14051986 +greatness1 +12081993 +jets +30011987 +baseball31 +vyacheslav +5jN16uxpiD +ganapathi +my1234 +030883 +listopad +gather +kellykelly +stabilo +rama +destiney +ckiue73jp +karen2 +jenny14 +123blue +160887 +11011101 +almudena +16071992 +199211 +winkie +22011990 +buzzard1 +sk8er +060987 +maarten +parvathi +100297 +adelaide1 +dallas07 +250581 +babygirl33 +280385 +mufasa1 +05121990 +wwefan1 +amber10 +28081986 +1E +15091985 +santina +86402241 +baybee1 +boyssuck1 +xxxxxxxxx +cameron06 +yankees25 +Success +privetik +2143658709 +tweety06 +kruemel +danie1 +ginebra +matkhau +before +twinky +18061986 +chan +juan11 +200683 +030489 +290489 +1478523 +181183 +gjpbnbd +123bob +naruto. +panther5 +11071992 +002200 +19071994 +thunder13 +Bajaonel12 +77777a +prince10 +666xxx +eddie3 +03021989 +28031985 +cornel +lettuce +sexy90 +beautiful5 +sausages1 +170691 +cheerleading +20100728 +pizza! +coolio12 +duh123 +alyson1 +martinez12 +mit +aniram +1502 +ilovemyboy +26051989 +dancer09 +kirkwood +sexy93 +060991 +180286 +crabby +star44 +24091988 +ilovehim13 +baseball30 +1111111111111 +wingman1 +boracay +010986 +identity +stalker123 +301284 +27111984 +080590 +150981 +06081990 +070690 +27041986 +asecret +antonova +poppie1 +chico13 +nailpolish +superstar5 +2403 +calamity +10091992 +closed +zealot +01101990 +jacob08 +07021990 +haters123 +191284 +mark10 +270186 +chinyere +191189 +johnny6 +evgesha +02031982 +hughes1 +danuta +alhamdulillah +nmnmnm +macky +030379 +janessa +boyscout +010391 +dinamo1 +juneau +jessica25 +28111988 +cecil +��������� +050490 +melissa8 +150980 +snuffy1 +22061984 +sunnyd +cottage1 +lauren. +310192 +tokio1 +elmo1234 +7575 +grady1 +ALEJANDRO +13021985 +harley883 +football57 +familyguy2 +09121987 +26101992 +danielle22 +gajanan +#1mommy +petersen +17031988 +eee +iamsocool +bartman1 +piero +liliput +123rrr +irakli +happy2009 +29011991 +02121991 +chiquis +100879 +08031987 +Eagles +gloire +creed +1234pass +afonso +click1 +Connor +18051986 +15011989 +weronika1 +panther12 +131001 +021290 +beautiful4 +elnene +heather21 +thomas1234 +lacrosse2 +sz9kqcctwy +808808 +lila +marine12 +031087 +charmed123 +itsallgood +gangstar1 +ilovejoey1 +baller25 +Success1 +85bears +mensah +1lilmama +ggg123 +lilshorty1 +adeline1 +honda400ex +green07 +trey12 +lovers13 +keaton1 +erick1234 +051083 +sweetie7 +amanda20 +alkaline3 +luna13 +xiaoyu +15061983 +june2007 +271085 +ZLEnK77nge +sport123 +pink93 +420bitch +120596 +zaq1@wsx +13261326 +21091986 +morgan23 +22021994 +28462846 +31081990 +24051986 +28091991 +sheepdog +dfcbkmtd +789456q +barnsley +06021987 +nov +peace. +190486 +130880 +superfreak +Margaret +300789 +198702 +sarah23 +slipknot. +124578369 +103 +soccer#1 +babyboy10 +asdasdasd123 +170391 +nic123 +15021984 +loopy +smile23 +19021989 +5q2w3e4r5t +blanche1 +jason14 +loser15 +290683 +randolph1 +finally1 +music14 +hs +sto +21081992 +yamaha22 +12041983 +1,00002E+14 +yamaha450 +monkey98 +tiscali +angel86 +kodak1 +kitten! +55555f +120182 +19955991 +121974 +1236541 +20041993 +261282 +010386 +jessem1 +itsmine +240680 +qwertz12 +iluvu4ever +190189 +tempesta +09121986 +puffer +sevastopol +batista123 +andrei123 +maeva +singh1 +viridiana +150393 +26111991 +Fuckyou +florida08 +destin1 +15071992 +bball44 +dkflbvbhjdbx +12111989 +20202 +sadiemae +nights +brownie123 +killer90 +crash123 +2509 +nikki22 +1whore +lollipop9 +kankan +bastian1 +yoyoyo! +123456789qwer +defence +suckit12 +dickweed +shishi +24071992 +midwest1 +161182 +Harrison +30091988 +27101990 +homes +198402 +logmein +elshaddai +nike1234 +121178 +bluesclues +anna2000 +rebellion +jansport +111179 +michael02 +2302 +kappa +nester +1forall +060588 +mollyb +1a2s3d4f5g6h +boxers1 +260784 +110281 +mayuri +141080 +pericles +ballin101 +13081984 +julio12 +210581 +14011989 +gemini6 +belvedere +jackass7 +080688 +281187 +devin12 +badromance +peters1 +estudiante +a8675309 +050189 +mamedov +evolution9 +160682 +300189 +26011989 +dallas41 +sticazzi +saavedra +qwertyuiopasdfghjklzxcvbnm +120379 +090585 +jaz123 +adidas7 +july2007 +xiomara1 +270184 +271083 +love200 +0909090909 +050691 +crunch1 +26111986 +jacobs1 +130882 +jeffjeff +560054 +raiders4 +mylife123 +27021991 +dennis11 +150391 +170783 +westlake +temptemp +050581 +linus1 +nbnfybr +progress1 +haven1 +jackie5 +27121986 +10071992 +hamasaki +treysongz1 +fuckme4 +jack99 +bitchin1 +nation1 +111222333444 +brianna11 +anarchie +03051991 +nerina +100981 +ryan18 +loveboy +sanibel +28091988 +hockey66 +1020304 +16111991 +cexfhf +flicka +26071991 +190787 +idiots +tomatoes +bitch19 +041089 +faith5 +08041986 +12121994 +020983 +1969camaro +040689 +144001 +meadows +rustydog1 +explosion +motorolav3 +1w1w1w +jomama1 +071088 +210981 +25122512 +brielle +interior +newage +10101978 +07021991 +asaness +spankme1 +19071984 +holycow1 +270285 +misery1 +davidek +viorel +Matthias +punto +2cookies +1jason +30011985 +02031992 +farmboy +27091987 +jimjones1 +allison123 +melissa10 +fresa1 +211084 +m1m1m1 +Debbie +freak2 +tazz +Sophia +....... +goodday1 +jake08 +ybrbnrf +251281 +andrew03 +160886 +reds +austin04 +27031986 +bear10 +laker24 +scientist +sunflower3 +granny2 +tisha1 +aneta +miller11 +cookies4 +1dreamer +david05 +240184 +260582 +stolen +monica10 +21121983 +lulu22 +qzwxec +galleta +180484 +06081988 +411021 +blue28 +juandavid +216216 +190385 +galaxie +260483 +150595 +28091984 +mishel +good4me +blair +pass.word +crisis +tournesol +dirtbag +jeremy3 +barman +09071991 +12101993 +training1 +reason1 +12091984 +corky +09031988 +rhfcbdfz +loves2 +victory7 +Scooby +senhas +071089 +yan123 +medvedev +280185 +guy123 +081287 +17011985 +z1z2z3z4 +lild123 +poderosa +22041993 +150792 +littleboy1 +144000 +larry2 +09121988 +boston617 +dicks1 +150382 +lbvflbvf +lovely09 +siegfried +wertyu1 +231987 +matthew17 +7555545 +louise11 +bradpitt1 +onyeka +honda95 +clippers1 +mysp +daniel95 +04051984 +23021983 +cornwall1 +vasilii +issues +venise +nayana +iheartyou1 +123cool +junior19 +1q2w +katie14 +260683 +cappuccino +lucaluca +240684 +241986 +Nathalie +amor22 +141292 +egypt +17021989 +crystal01 +u123456 +david101 +bravo123 +karachi123 +030886 +ghosts1 +marissa123 +murphy2 +beryl +casita +260983 +100880 +dragon27 +screwyou2 +1angels +cowboys23 +kissmyass! +jerwin +hunter16 +yahoo13 +29041985 +busted4 +marie06 +030485 +terrorist +chesney1 +progressive +161291 +arquitecto +271082 +sick +nickie1 +08071987 +jh +purple44 +123564 +nigga69 +douglas123 +abstract +07071983 +freedom9 +marlow +290887 +naomi123 +12091983 +missy11 +17121993 +170782 +vandamme +19891229 +toothpaste +ghbdfn +17071984 +c44n6vijgc +301282 +qwerty44 +nicnic +may2007 +pizza10 +06071991 +112233123 +putanginam +honda150 +20041983 +slutty +hejmeddig +hennessy1 +lovers22 +05061988 +18121988 +04051983 +apples5 +bluedevil +westport +27061987 +sept13 +juju12 +fireman2 +pretty4 +livorno +26031984 +tina11 +chasse +Juventus +shift +04041994 +hazel123 +1710 +15121981 +300583 +passion7 +manhunt +motherlove +gericom +5000 +eastside2 +pieces +199595 +041091 +21061992 +olivia08 +mumanddad1 +020383 +ilovecandy +ichiro51 +amormio1 +Mitchell +peace22 +barcelona123 +qwerty91 +mahima +anna1996 +may1992 +cordell +03051986 +30051992 +310891 +jordan88 +11071983 +winter21 +lukman +jeezy1 +Chicago1 +100479 +jess11 +volcano1 +23121993 +ckflrfz +21071990 +amorzinho +powerpower +Vfhbyf +11101983 +marife +170884 +010790 +4everme +qwerty999 +marcy +patchy +26071988 +mitzie +magallanes +2405 +Claire +29051992 +mexico. +daddy1234 +29061985 +060490 +26121992 +ilovemax +music8 +karsten +palermo1 +gus123 +040988 +cameron07 +kelly01 +060989 +love82 +07081989 +walrus1 +preston2 +caddy1 +tigger05 +27071986 +lovee1 +janika +010685 +ilovedan1 +1415 +stylus +eminem8 +2beautiful +210392 +270991 +081090 +kelly5 +18101984 +patrick23 +bitch12345 +cdtnrf +gotigers1 +sept25 +bitch45 +bouchra +missymoo +bubbles08 +123qweas +god666 +jason4 +11081991 +homepage +cjcbnt +anna1994 +twilight08 +batman15 +130791 +313001 +greenday5 +09091992 +melove +sara13 +pinhead1 +megans +babygirl32 +060787 +redrock +sravanthi +nicole28 +carley1 +dizzle +skate10 +tigress +iamcool2 +08031991 +700064 +160285 +girl13 +sexyguy +150484 +barbie5 +nomelase +rachana +fidelis +baby44 +matias1 +200983 +jsmith +brisbane1 +jesuis +natasha12 +13091985 +whopper +020294 +fellowes +candy8 +colonial +210482 +allstar2 +midnight11 +beyonce2 +bankole +250881 +040989 +16041985 +197711 +07071991 +iloveyou94 +bootsy1 +020884 +asdqwe1 +prishtina +ruffles1 +612345 +30011990 +210291 +marley2 +poohbear! +02121985 +adeola1 +angle123 +03091991 +070588 +ghost2 +america23 +071186 +twilight10 +02031993 +Pass123 +maria16 +300492 +1604 +200292 +kick +1precious +02011982 +ashley04 +atlanta2 +bunbun1 +nic0le +ta123456 +67shelby +boo-boo +02011984 +09011987 +destiny06 +jayashree +benten10 +capricon +02081994 +6996 +009d9cc2 +05091989 +1nation +charming1 +131080 +sputnik1 +27011992 +twilight17 +blackbear +dragons123 +spenser +missy3 +thomas8 +neon +azazazaz +soccer0 +13051983 +Andrei +1bullshit +03091988 +123100 +gtxtymrf +murzilka +11011992 +zxcvbnm1234 +dr0wssap +monkey97 +05121989 +061284 +bailey23 +04051985 +cheerios1 +06081987 +12345! +appleseed +redrover +03021986 +nariman +17011986 +26091985 +1warrior +l0llip0p +casual +cowboys31 +purple1234 +060290 +pandey +26071987 +250183 +12091992 +240683 +greenleaf +yura +raiders23 +boating1 +catia +1593570 +250681 +nfyz +butt12 +clubpenguin +141183 +29081990 +sasha1234 +snake2 +1chivas +kbpjxrf +271180 +getmoney4 +124512 +13071991 +170882 +milou +781005 +fatboy11 +baby#1 +220184 +05011990 +footballer +12358 +23011988 +22011986 +180586 +lol999 +11051982 +23061993 +poohbear01 +jennifer123 +11111s +1shannon +196800 +marina11 +110294 +130580 +030985 +1success +taken1 +tiny12 +050986 +05111986 +271092 +broccoli +dthyjcnm +stimpy1 +carcass +coopers +10111992 +16081989 +fuckevery1 +america8 +123qw123 +160286 +bratan +yourmomma +30031985 +15011983 +mysister +15031984 +051086 +020691 +falco +04101988 +ertert +windex1 +fighters +dragons12 +23111984 +poops +nathanael +mackey +ecstasy +040787 +gobears1 +borges +flounder1 +2loveme +002002 +421421 +zxcvbnm123456789 +Monkey1 +10121980 +melissa23 +generator +caracoles +jayden11 +110184 +avvocato +janie +maxxxx +25111989 +getrich1 +crf250r +torchwood +casiopea +030790 +fuckyou!! +bedford1 +westside6 +281291 +15041989 +140584 +13pass13 +mechta +20011985 +honda5 +caster +23061985 +2324 +chilling +adamko +11091988 +poppa1 +Johannes +justice123 +25051995 +alex1984 +passsword +01071983 +2506 +02011988 +scipio +12345678v +taranto +king16 +jessica06 +bobo1234 +10071983 +28041992 +backup1 +121007 +vargas1 +federal1 +2cool4you +austin97 +needlove +dubai +19871015 +janusz +21091989 +kokain +starter1 +ultra1 +09071986 +06051987 +texas21 +chucho1 +anthony88 +411057 +barney11 +kjiflrf +03081991 +040790 +silver23 +dodgers13 +020392 +270783 +020886 +oreocookie +jc123456 +08091986 +philipp1 +19041985 +rjvgm.nth +coolbuddy1 +310791 +QWER1234 +batman1234 +nichole2 +291083 +120895 +mollycat +dylandog +kitty666 +qwsazx +puffy +27021989 +123456pp +01061984 +vallejo +2109 +2r97xJ3xEY +gunnar1 +131180 +pescado +010783 +jasper13 +260185 +28061984 +roxy22 +880088 +198324 +anna21 +789000 +cristian12 +-9 +1605 +beater +leigh123 +alchemy1 +nanda +aaron5 +12011992 +270486 +ronalyn +15071990 +chalupa +adrenalina +sakarya +Qwerty1234 +041185 +twodogs +28051984 +sales123 +aquafina1 +tiffany13 +........ +colonia +zzzxxxccc +longshot +hightimes +231180 +sadiegirl +bronx +hawaii12 +dawid123 +buddylove +29111987 +1810 +supermodel +longview +220780 +typhoon1 +honeywell +mushr00m +sunday12 +kissyou +12gauge +03021988 +18121992 +canada01 +11111992 +iloveandre +20111991 +ilovetom1 +elephants1 +QxXM93Js +reboot +08071986 +jetjet +mariposa2 +25031985 +310184 +thinker +lauren23 +3214 +honey08 +27021986 +26051990 +hater123 +padres1 +slipkn0t +1612 +Spartan117 +alien123 +21081988 +Panasonic +SPIDERMAN +illusion1 +6yhn7ujm +lighting1 +giuditta +noonoo +willys +05081986 +essj408 +budlight69 +toxic1 +dogbreath +zxcvbnm9 +element4 +ukfveh +recycle +qwerty1992 +caravaggio +amanda9 +18031989 +sept17 +ddddddddd +170982 +sarge +norteno14 +14071991 +funnyman +iloverob +271181 +110280 +mccarthy +1lovehim +120181 +jonboy +st.louis +03101990 +199415 +family23 +musicovery +catanddog +ginger99 +hayhay1 +03071991 +101070 +11051983 +25051993 +300489 +13101982 +topino +081190 +oliver7 +SCOOTER +asawaq +jackson22 +31051987 +123wwe +chicago5 +180185 +teddy3 +hawaii11 +06071988 +14071989 +14081985 +catrina +rishabh +24071988 +playboy14 +Jasmin +02091991 +samedi +140185 +pussy09 +05071985 +mary420 +jet123 +newlife10 +firestone +cantante +aniket +condo +aaasssddd +112358132134 +chisom +060288 +analia +shadow55 +plazma +victoria01 +2h7Vkzo266 +newjob1 +250680 +Barbie +lindsey2 +19071992 +cubana +Bradley +ds +carlos20 +camaross +pennie +rican1 +2503 +qwas12 +12021983 +lexus300 +chicano1 +bertram +ctdfcnjgjkm +091283 +aaa1234 +angelita1 +15111984 +document +morgan08 +philosophy +baller20 +05041990 +1qazxs +20081993 +04091990 +peaceandlo +mother! +190384 +linebacker +051284 +sept24 +peaches5 +loverz +thunder4 +august09 +270484 +79797979 +ANGELO +d41d8cd98f00 +codeman1 +momomo1 +120192 +smokey21 +160983 +300387 +rfpfynbg +precision +candi1 +15081992 +Lakers24 +090980 +140383 +gibsonsg +jade11 +03081989 +flashlight +Anderson +jackass13 +doomsday1 +islcollective +darla1 +2108 +forever18 +pilote +iloveu10 +24031991 +jada +google13 +mama123456 +06071990 +10281028 +29081985 +perrito1 +precious3 +�+�������� +element11 +scooter13 +floriana +tanita +25061984 +pickles12 +011286 +firework +gabe123 +29061991 +1776 +22101983 +07091987 +hayden2 +14021982 +030486 +mine1234 +onelove7 +grad2010 +020782 +hater +ss +0412 +dandy1 +emotions +taylor95 +azer123 +sexy6969 +inlove12 +rockford1 +mercedesbenz +070780 +05021991 +blueballs1 +mustafa123 +5121314 +600116 +rofl123 +jeremy22 +osito1 +200582 +nas123 +olivia07 +020293 +061190 +casacasa +04051991 +ilovedave +1naruto +cuore +bread +23121984 +bowtie +hellou +manual +korn69 +7f4df451 +hoodstar1 +`1234 +24111985 +sanglier +7788520 +05121986 +lateef +23122312 +jayesh +29021988 +11081984 +21021992 +jump4joy +dexter01 +25091984 +01061982 +velcro +051189 +joshy1 +montag +140782 +redone +bebang +linksys1 +pervert1 +pretty14 +watford1 +johncena10 +28111991 +strife +maldonado1 +16051992 +ville1 +202020a +P4ssw0rd +ilikecheese +josh07 +cestmoi +123max +hell0kitty +billy7 +titan123 +nathan6 +yahweh1 +12101982 +tweetie +hastings1 +vespa +maggie06 +130481 +mickey15 +adgjm +dima12345 +280183 +dance4me +hondacrv +24071989 +tendresse +22091985 +bor +samantha9 +edward5 +mylovely +vivalafiga +milo12 +05071989 +demi123 +29091990 +x123456789 +erin12 +280983 +061606 +azsxdc123 +blue89 +coquito +060889 +Rush2112 +dod +clipper1 +150185 +red101 +meghana +20021983 +ghjkl +burning1 +270190 +crafts +glock22 +takumi +resistance +daisyduke +febbraio +170791 +texas7 +anthea +jovelyn +saosin1 +270887 +zaq123456 +199112 +allahisone +24081987 +bukowski +merdes +09021988 +damilola1 +rohit123 +jazzjazz +vvvv +291191 +Password1! +16031989 +busybee +kartika +090983 +yourmum +crusaders +patel +isidoro +ondra +miche11e +28101990 +jeremy21 +bandicoot +bigboy22 +rebel12 +101981 +120377 +mirage1 +180285 +sooty +23031984 +titti +grenade +111193 +021184 +nokiae71 +01011995 +diablos +elefant1 +dumnezeu +buddy09 +confusion +28051985 +cute10 +317537 +controller +flocon +macchina +honeyy +sascha1 +vehpbkrf +delirium +ladydi +pft +walter12 +161183 +saber1 +05071984 +blessed09 +25081984 +199500 +heat +03081988 +150387 +mauser +160383 +girlsrock +asdasd456 +717273 +280591 +26051993 +indien +fifa2008 +cuddles2 +shahin +310892 +pdtpljxrf +perrin +molly6 +jamjam1 +21051989 +lalala11 +passwo +200191 +160982 +21101992 +califas13 +morgan06 +271183 +orange77 +11qq11 +2812 +gemini21 +150282 +11061984 +x1x2x3x4 +seaside1 +mestre +liverpool6 +040685 +cheater2 +lollipop! +hottie45 +291292 +03121991 +justus2 +02061983 +27091990 +21031984 +081089 +ballin10 +150581 +cheburashka +pan123 +l12345678 +jerjer +290387 +121179 +tyler03 +yngwie +trashcan +lovers23 +hotguy +fishers +forever17 +poopy! +ячсмит +woodrow1 +13051984 +jojo10 +020591 +hope11 +300692 +011091 +online12 +martin5 +ponce1 +17071988 +010203010203 +nuggets3 +19081990 +260991 +01031991 +25081986 +alex90 +lovelovelo +vjz +shannon01 +198502 +1409 +180991 +alycia +22011989 +st3v3n +mikey11 +kingsize +qwerty2011 +198627 +199292 +27041985 +060886 +iiii +29081988 +nummer1 +sexyme123 +vandal +rosangela +bears85 +290186 +cognac +ciaoatutti +babyphat2 +stanford1 +artyom +290581 +17101983 +03061989 +180892 +azn123 +25101992 +farooq +heavensent +juan10 +hotboys1 +110194 +bowler1 +rfrltkf +frolova +1258 +daddy14 +friday123 +matt15 +spook1 +meeko1 +852852852 +bonita12 +abcde12 +17061992 +020584 +306090 +babe14 +nomad1 +lilibeth +Tristan +020188 +candy9 +030989 +mymymy +benjamin10 +baller34 +190887 +chinaman +sS6z2sw6lU +020387 +vlinder +power11 +BOOBOO +schnee +270891 +platina +suckers +140682 +100110 +Sharon +kevin09 +12201220 +130781 +198618 +bubba4 +qq5201314 +saturne +111111k +campanita1 +05031991 +brooke! +mnbvcxy +260384 +a888888 +10121994 +austin69 +02021994 +vanessa01 +bigbro1 +29091985 +198615 +130682 +weed1234 +0210 +30071991 +26021989 +ilovesos1 +Kathleen +nicolas12 +2lovely +leonida +pearly +sven +movistar +160683 +skater23 +billy3 +1725782 +13121992 +1metallica +qweqwe123123 +jimmy01 +03081985 +tupac123 +muffinman1 +010791 +friendofThenext18peoplew +instant +amour1 +230781 +brizet07 +15935746 +011087 +13101983 +071086 +stoner69 +skater9 +NICHOLAS +reggaeton1 +southpark2 +twilight3 +joseph69 +junior05 +18091989 +ortiz34 +06121986 +manasi +hello77 +papabear1 +17081991 +jake69 +justus1 +10sne1 +alabama2 +ringo123 +ilove6 +robbie12 +17091988 +flower14 +talbot +whiting +197111 +123456yu +21051984 +170983 +241082 +blake2 +leandro1 +21101990 +babii1 +090587 +morgan14 +10031984 +061090 +kiera1 +26121984 +desdemona +myrtle1 +garcia13 +BEAUTIFUL +161082 +191192 +gfdkjdf +22091984 +lizette +candys1 +partners +Muffin +ali1234 +230981 +blackhawks +faith08 +george4 +celtics33 +232232 +john08 +24021985 +borman +qaz1wsx2 +rebel69 +tower1 +loko +lovell +ultimo +gold1234 +mal123 +biblioteca +earl +school! +infinite1 +091187 +newyork23 +2611 +171091 +506070 +timofey +jolie +0000000a +ford350 +27011986 +1honda +fuckyou19 +tara12 +lee1234 +forever69 +hotone +gilera +132103 +budbud +19844891 +ashes1 +patrick21 +roy +d2Tqqn28tC +05061991 +locust +allison12 +07061988 +fish22 +tigrenok +fdsafdsa +prancer1 +redsox08 +1711 +411004 +1shot1kill +29061986 +25081990 +troyboy +manzana1 +cummings +18071992 +199216 +doggie12 +07081990 +jaijai +winston123 +13091989 +20111992 +03041992 +131280 +741741741 +03011990 +chloe11 +080878 +blueprint +nana22 +rachel21 +bordeaux33 +qq111111 +05031992 +200982 +13051993 +18071987 +cntgfyjdf +trueblood +220982 +linkpass +dimarik +8seconds +soccer98 +celticfc1 +nokia5610 +thesecret +asdfg2 +cjcbcrf +pink94 +16031985 +malacka +890098 +23021992 +br5499 +jailbird1 +topaz.null +1939 +151180 +stella01 +witchcraft +scorpio69 +bella14 +110380 +13111984 +030391 +170392 +69 +viktor1 +fahjlbnf +crystals +roucky +210882 +15011988 +yankees8 +050188 +91827364 +jesus06 +dimond +eagle3 +18111992 +kamisama +rat +chatchat +taugamma +catsrule1 +g-unot +08041988 +redwings19 +shokolad +Yellow +17031986 +23121982 +180683 +96321 +cute23 +coolcat123 +050593 +500015 +09101986 +170883 +tommy5 +stainless +110579 +12345love +29081991 +epiphany +davion +310181 +140191 +01091983 +ballin08 +121077 +stitches +matthew15 +Med +hello16 +211092 +ginger08 +230481 +shawty12 +150582 +302302 +elsa +robert19 +Marshall +frogger2 +clemens +hallo11 +07041988 +16641664 +090982 +malika1 +zcegth +anil +ramil +ghtpbltyn +198526 +alyona +cara +addidas +16091985 +guitar. +ilovesome1 +13011990 +09021987 +monday11 +16111986 +famous13 +270791 +030691 +honda13 +dream2 +merci +vazquez +monster14 +sophie7 +aceman +its420 +225 +marocco +181087 +201291 +bratz10 +thuglove +776655 +qwerty54321 +25021993 +normajean +triston1 +werner1 +peeper +ningning +13011991 +13251325 +161191 +pasteur +hoppel +sassycat1 +1pizza +020692 +27051989 +18081985 +purple55 +valentine2 +gerbera +tarasova +mommy9 +menthol +lestari +26011988 +savanah1 +dragone +superman00 +beer12 +17061983 +10061984 +nickj1 +buster09 +197355 +rachel22 +inglaterra +christina7 +maryan +love<:3 +filou +090078601 +ginger9 +lolo009 +180584 +bulldog5 +180885 +alskdj +02021995 +05101986 +kings123 +tiger08 +test123456 +0123456789a +hulk +astronomy +sanford1 +estrada1 +juelz1 +georgia123 +karma123 +10081986 +05081985 +milky1 +20142014 +21071985 +lilmama13 +190784 +27071985 +vagina2 +fr +latasha1 +invisible1 +foreman +280292 +xfactor +19841985 +english2 +queteimporta +30041990 +career1 +anshul +norris1 +1newport +090490 +faizan +12051983 +jamaal +tweety69 +soccer66 +primo1 +18071989 +milesdavis +brian01 +hayati +football79 +125896 +santhi +destiny23 +bazooka1 +mookie2 +25081991 +babycoh +starwar +folake +polkaudio +shaq34 +21121982 +20021982 +251179 +29051984 +pisicuta +140981 +lady13 +27091985 +tr +27081987 +marryme +daviddavid +jorge13 +123@123 +need +21091984 +tugger +250001 +gforce +huang123 +140491 +bosley +15071989 +loka123 +melike +sexyness1 +290886 +forsythe +answer1 +fucker13 +12345� +1lucky +Veronica +rouge +salty1 +temitayo +19041989 +ballard +280589 +211281 +050580 +gwapings +greedy1 +31031985 +schnitzel +welcome! +210992 +rajeswari +Qazwsx123 +taylor97 +pencil123 +1catdog +nokian82 +qazedctgb +141281 +bloodyhell +240883 +defjam1 +destini1 +mother23 +060589 +justforme +jenova +190890 +reg +ludovico +ninja13 +291091 +2ndchance +280687 +a33k5Afgdh +02091983 +07121987 +134652 +jesuss1 +stephanie9 +thunder9 +optimusprime +michael33 +sagar123 +madalin +sexy111 +fuckitall1 +divya +bhavya +261181 +my1baby +bhbyjxrf +12011993 +07091982 +spanking +manitou +imtheshit1 +catsanddogs +MONSTER +garfild +spe +mimamamemima +hunter18 +120395 +alex1982 +allyssa +idontno +hot1234 +060783 +snoop123 +240992 +babygurl18 +banana01 +dragon87 +cayuga +vikash +qwerty93 +bobby69 +040388 +cammie +gilberto1 +zwilling +thepimp1 +maximo1 +2102 +redneck3 +170492 +shutup2 +stoopid1 +600034 +gunner123 +ballroom +iloveandy +jason24 +rockydog1 +combat1 +shazam1 +17041985 +richard13 +1luckydog +bigbad#13 +Formula1 +paulino +180291 +160186 +180785 +alameda +hunter1234 +291092 +1309 +1925 +1yankees +zombie123 +4ever1 +130181 +03061992 +alejandro. +katmandu +060391 +198501 +100180 +14101983 +ayoola +money420 +teddy11 +fluminense +BANDIT +07081987 +justice7 +061191 +suzieq +ringer +manifest +290891 +yingyang1 +hitman12 +mendez1 +intrepid1 +father2 +fajardo +gjrtvjy +mikey3 +120193 +power7 +cameron08 +22081983 +27061986 +06081986 +carmona +27081986 +1qwertyui +04071987 +revolver1 +veravera +niki123 +240892 +101978 +currency +missions +pain +julie12 +samtron1 +419419 +onlygod +241292 +luckycat +narutouzumaki +snooze +peanut14 +siva +slytherin +04041992 +171292 +lozinka1 +29071988 +sillybilly +everclear +threekids3 +dima1991 +francis123 +boohoo1 +алексей +ABcd1234 +Carolina +pink44 +250981 +250891 +playboy15 +bubba23 +dodge123 +210493 +140680 +010305 +sharapova +robert9 +encore1 +starwars77 +ronnie2 +181083 +67896789 +devine1 +batigol +08121986 +ang123 +martie +password82 +bunny6 +jamie3 +asdf0987 +kunimi92 +tae123 +chicago3 +113311 +070891 +hugohugo +cute16 +june2009 +132546 +likeaboss +1610 +july09 +Password3 +!QAZxsw2 +turtle! +edifier +destiney1 +slayers +berbatov +crazylove1 +classof05 +wladimir +180985 +matador1 +Regina +23051992 +230780 +pumas +30061983 +02051983 +platano1 +200692 +31051986 +correct +robert99 +07051986 +vwpolo +1597531 +160884 +281292 +dude23 +pentium3 +kinsey +280684 +26091989 +kiss11 +america21 +just123 +290591 +gryffindor +gustave +phoenix3 +kitten5 +tigger25 +babygrl +yourmom5 +kenyon +bangkok1 +nonnie +conor +sparky7 +28121983 +papera +jacob06 +elements1 +gregory2 +28011991 +181192 +30081991 +11111980 +pelusa1 +lauren4 +singhisking +tiffy1 +pepper21 +bollox1 +221176 +now +scarecrow1 +mattias +bocephus +janette1 +quintana +080388 +treefrog1 +226688 +logger +260882 +jason6 +sadie01 +123456gg +sanity +babydog +12456789 +kam123 +tongue +max123456 +aminah +gismo1 +020985 +silver33 +redsox10 +16121983 +07071993 +grace3 +Qwert123 +killer89 +gethigh1 +biggy1 +gathering +ilovejamie +220981 +rosebud2 +12081982 +05091991 +buongiorno +qwe111 +kissme69 +genesis7 +crazy08 +monkies1 +tyson12 +homie123 +sl1pknot +290288 +blazin +madras +starry1 +gordita1 +fashion2 +puppy10 +ayomikun +09061987 +13061984 +australia2 +lynn11 +221985 +070782 +4peace +canela1 +199494 +riquelme +30061992 +napster1 +alessa +johnny22 +spark1 +230892 +killer16 +i_love_you +aguirre +198922 +hollywood8 +795001 +mike00 +cigars +300484 +21031983 +fffffffff +10111981 +muffinman +caribbean +110479 +04031987 +harakiri +891 +Linkedin2011 +andrew00 +01021980 +sean21 +14101993 +09091983 +22121994 +17051992 +01081991 +kayseri +11051993 +motorhead1 +08061990 +municipal +zachary123 +booger7 +13141516 +260885 +jackson08 +tammie1 +30101992 +hashim +121996 +marie88 +Teresa +ari +16071984 +pratima +winger +010692 +shakespear +aleena +300386 +rogelio1 +cowboys88 +04121992 +michael28 +lasagna +290984 +rocafella1 +010683 +fifa +Summer2011 +poopy7 +jeremy! +962464 +maya12 +avondale +creed1 +awesome7 +morfeo +091087 +ac1234 +24091989 +moonwalker +29071990 +chris03 +4815162342a +gagagaga +191283 +golfvr6 +070791 +18111991 +daddy07 +xsw2zaq1 +250384 +caracas1 +s1t2o3n4 +180891 +asdfjk +ghjcnb +saudades +davon1 +007123 +joseph16 +batman101 +peshawar +25111991 +nielsen +fishing12 +180980 +15101982 +912401 +240481 +mazdamx6 +27071984 +sammie01 +sammy08 +199400 +danielle. +brutal1 +porno69 +dance10 +#1baby +honda750 +egorov +13071993 +enough +04041983 +zuzanna +210782 +mexico1234 +ryan09 +brittany15 +mammamia1 +ferrets +sevenup +jennifer14 +tomtom123 +aa11bb22 +kompas +100893 +everlong +goody1 +olifant +01061991 +411033 +1100101 +derp +22091992 +aaa666 +nov151963 +131517 +110678 +250393 +poppen +softball01 +jaymataji +corey12 +jimjim1 +daffy1 +garcia12 +isabela1 +dancers +badguy +104104 +hemligt +280582 +asdfrewq +careca +30061990 +123admin +aniyah +garner +kitty15 +crip123 +22111983 +cooper13 +151001 +16041993 +qwerty19 +24011985 +ingoditrust +weenie1 +191987 +04121985 +1805 +lonesome +funnyface +wateva1 +lifehouse +romulo +fkmnthyfnbdf +230280 +emily06 +joshua69 +010492 +westside14 +myspace26 +derekjeter +bored123 +1.23457E+11 +sexybitch6 +reader1 +125690 +ousmane +30041989 +400069 +aziz +10081008 +samson11 +21111983 +sexy2007 +tommy13 +Buzzer +020784 +26061984 +18071985 +baller8 +PlanoTX +qwerty2012 +metro123 +250480 +xfx3ayFJRK +171986 +09051987 +abulafia +red777 +1fatcat +10061983 +3334444 +seviyorum +09081990 +160783 +eighty8 +210292 +lucky27 +bambang +fran123 +yahoo5 +usuck +lol000 +110381 +brewers1 +����������� +wmilan +10181018 +fed +4646 +breanne +yohann +badkitty +fatty2 +020783 +08121989 +051291 +11081983 +monday2 +dixie2 +painting1 +fatass12 +16091986 +mariposas +mackenzie2 +shaggy123 +over2yangshuo +lima +bumble1 +1thunder +daedae1 +hardcock +13101993 +agent99 +141192 +conejo1 +robert1234 +pitufa +utjvtnhbz +kangoo +danielle01 +qwqw +ukflbfnjh +THUNDER +myspace93 +eastside12 +abgrtyu +26091990 +1506 +111222333a +160684 +batman. +murilo +031284 +monkey87 +reymisterio +jethro1 +030382 +180582 +040494 +jason07 +112299 +05021990 +beckett +monia +13021984 +fob123 +YELLOW +saimon +06051988 +gobigred +061287 +198718 +thereal1 +mikamika +04041995 +courtney11 +31071984 +ashton9 +lockwood +gogeta1 +Sample1234 +ringhio +ethiopia1 +baseball88 +sharda +maxmotives +26121983 +omega7 +prince55 +kyleigh1 +couple +2507 +29071991 +09081985 +23061984 +avery123 +sirene +0303456 +06060606 +cecily +17091990 +babygirl00 +dbrnjhjdyf +celtics5 +Tamara +blessed4 +17121989 +sagapo +devochka +raspberry1 +300983 +07041989 +230230 +27061989 +27051992 +mackie1 +31011991 +emma13 +bakery +rebel13 +28111987 +270192 +yourlove +25011984 +kaizen +shopping12 +otello +280682 +fnkfynblf +jiggaman1 +renaissance +ilovej1 +lennie +06041990 +aydink +198206 +04121986 +chante +06071985 +querida +28111989 +140881 +0411 +dhjnvytyjub +marillion +school13 +stella11 +25011986 +minamina +volcom7 +270491 +butt3rfly +knoxville1 +tommy11 +JEREMY +020384 +301082 +kia123 +bombero +1306 +wallstreet +199771 +gondor +150583 +11021983 +greene1 +graziano +merengue +20031983 +150284 +160192 +brat123 +lilmama09 +FATIMA +headshot1 +booboo6 +180593 +classmate +191183 +1lauren +luglio +444333 +azul +bootycall1 +spongbob1 +4128 +020887 +280184 +20061983 +carrefour +200893 +max777 +SILVER +atl123 +tattoos +hotmama2 +lookatme1 +andrea69 +lovekita +180984 +Cowboys1 +02081983 +toscana +28091989 +blackops2 +baby123456 +monthy25 +ashok +120995 +08061987 +burhan +tricks +040585 +www12345 +tarheels23 +290592 +denise3 +letsdoit +vanhelsing +das +omar1234 +fuckass +texas210 +azertyuiop123 +10million +alex87 +200783 +210880 +honey69 +master9 +starss +pockets +28081989 +29071989 +28071987 +29041989 +maianbinh +showmethemoney +12121995 +paul01 +foofoo1 +lovers21 +omicron +1234567890qaz +noway123 +quilting +colette1 +steph13 +webkinz123 +tartine +190987 +05101989 +100380 +silver99 +juli +asdfgh11 +confiance +joshua00 +Anna +thomas25 +guilty +volcom13 +11041983 +shelby7 +sonshine +cake12 +eric22 +windmill1 +lilia +300982 +16021992 +murakami +741953 +090686 +concac +s11111 +12345zx +15091991 +28111990 +misfits138 +SCHOOL +spencer3 +12161216 +thankyou2 +lozer1 +06021990 +santro +ligaya +saroja +ninette +kianna +221005 +volvo740 +03081984 +17051986 +calico1 +getmoney$ +mongo +honey14 +adriel +spring99 +10131013 +pekida30 +290383 +sabre1 +fastfood +280584 +flirty1 +computer13 +050892 +amber23 +princess55 +26071989 +passage +11021993 +strokes +21031992 +20051982 +pootie +if +dud +06021992 +onelove3 +iolanda +iamhot1 +j696969 +bounty1 +adgjmptw1 +270691 +redbull123 +draven1 +alicat +parishilton +mexicano13 +Katerina +eagle5 +medvidek +one2345 +william09 +19061988 +rickie +wonderfull +199191 +021183 +31P5WTDYG/WGQ +s654321 +iloveyou95 +191290 +forever08 +24121982 +stasya +ladylove1 +pacifica +1704 +benitez +kbytqrf +qwerty32 +gizmo13 +creepy +diva11 +02101991 +mojisola +witness +gayman1 +121111 +morticia +blessed08 +07051985 +asia12 +memo123 +19101983 +yadira1 +olusola +romantic1 +sound +metal4life +21111984 +271080 +09021989 +love40 +020992 +dandy +123999 +dede12 +198406 +091089 +homes1 +143637 +anderson12 +252525a +pass10 +diamond09 +angels22 +prettyboy2 +black08 +software1 +star19 +bella101 +merijaan +nanakwame +tiberian +jabber +backstab +natty1 +16011992 +06091989 +27061991 +121274 +04021986 +15041983 +wale +missy5 +capricorno +2fly4u +13061992 +baseball02 +1florida +freedom201 +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +011290 +cutebaby +bobby22 +23071984 +dutchman +danielle14 +231179 +010285 +yahoo1234 +stick1 +chandni +tennis10 +amma +stupid7 +sassy5 +05071983 +041287 +playboy01 +love2live +rtyfgh +wassim +kolokoy +29031985 +schwartz +07051988 +150580 +250692 +tweety8 +26091988 +130282 +200291 +brother3 +raiders! +88998899 +premiere +jamaika +kuroneko +071185 +28011988 +111994 +adele +seansean +goose123 +Rabbit +198605 +36chambers +biancaneve +021291 +159632478 +050187 +dancer23 +hermit +111279 +14101982 +goober12 +101008 +220992 +2309 +mimi22 +derick1 +handyman1 +taylorswift +merrill1 +tabassum +tater +20021993 +hemingway +1313666 +26101985 +buddies1 +07081986 +wendel +11121981 +zero13 +160892 +151081 +556688 +farina +trista +15051983 +rogue +120575 +ferrarif1 +mulder1 +antonio5 +killer17 +love< +121008 +31P5WTDYG +giovanna1 +maricarmen +06011987 +mohini +westfield +doncaster +jesse7 +182838 +younglove1 +camprock1 +orazio +indra +mierda123 +010484 +170582 +21081989 +fire13 +1938 +aladdin1 +zucchero +18011989 +runrun +23111991 +198226 +gjlcnfdf +karthick +05051980 +02081982 +290889 +corwin +170792 +forever09 +december08 +24061989 +Portugal +271081 +karate123 +181184 +workwork +141291 +advance1 +missy13 +05051994 +mironova +081188 +chicosci +survive +mexico69 +515515 +abhijit +23112311 +sept27 +master4 +020491 +retard123 +jasmine06 +iomega +sexybaby12 +Savannah +a87654321 +roadtrip +250593 +katy123 +anand123 +2810 +1martin +meonly +01011996 +prophecy +avisis7 +follow +biohazard1 +jojo15 +buster07 +270889 +240384 +money19 +carrier +14041985 +218218 +master6 +Genesis +01051984 +060389 +310383 +cowboy7 +samourai +12011984 +diamond14 +dumpling +pussyman +101074 +sagitario1 +gjikbdctyf +123123f +27091984 +piggy2 +030584 +21101984 +yasmin123 +stalker2 +kisses3 +granata +family1234 +180483 +brians +gateway7 +02111987 +pokemon01 +12071982 +gui123 +julies +jbgR3v7n3B +allstate +28051989 +harleydavidson +charli1 +090888 +dastan +19091984 +london07 +colin123 +cegthgfhjkm +280984 +krisha +lerato +diallo +15101980 +vanessa14 +tommy10 +juanca +autobahn +imgay +30071985 +allan123 +trini1 +martin3 +07021989 +hotdog3 +black07 +kobebryant24 +74gangsta +mariapia +molson1 +19171917 +joker14 +flashy +240791 +01021993 +13091984 +purgen +1q2w3e4R +28091986 +LqFg4HWt +binkie +centrum +nina11 +caboose +segundo +percussion +123321d +28051986 +kevin18 +tomek123 +291285 +400037 +nascar03 +14051989 +05021988 +landon2 +solstice +chica123 +120979 +pimp25 +iamno1 +pewdiepie +120577 +patsy1 +16011989 +at1234 +norberto +Ekaterina +musica123 +marcelita +08051991 +electronica +01051983 +220480 +myspace05 +tank12 +ironhorse +mormon1 +130281 +300887 +tristan123 +luxury +26071986 +040987 +barbarian +16031992 +borisov +cassandra2 +moose12 +30091991 +13091987 +goody +JASPER +qdyE17t1zV +161083 +2610 +02061982 +lfiekmrf +04081989 +06121988 +timtim1 +16081986 +24061992 +piglet2 +100780 +29081992 +181082 +babygirl28 +turtle4 +pea +coffee01 +duckling +26031992 +yahoo7 +123123j +280291 +skydive1 +gayass1 +04061985 +01041980 +xgx39zGISL +230479 +301283 +110578 +debbie12 +134109 +scarface23 +madison22 +198613 +paswoord +vivalabam1 +250983 +191083 +bresil +190791 +matute +260291 +dale03 +praisethelord +serenade +bart123 +18111985 +chiara1 +BAILEY +saritha +talktome +southside13 +261080 +bumper1 +16111988 +sheikh +neverforget +lalang +19855891 +angelbaby2 +bobby6 +neverwinter +babygirl91 +alexande +loveyou9 +01051980 +28081984 +dirt +dexter2 +020791 +lilbaby1 +cheerio +789852123 +5757 +han123 +07121990 +devlin +daddy0 +samsung88 +conman +11qq11qq +marisela +sexyeyes +03091986 +turtle01 +111111b +130283 +070488 +bush +warrior12 +150882 +1111111111q +310884 +yessica +scene1 +130881 +jordan101 +29111989 +hjcnbr +family. +cola +killer08 +159951a +280284 +brogan +230783 +junior6 +ton +banan1 +southend +jahbless +nicole86 +claire123 +cicciobello +slowhand +22061993 +020683 +28011986 +goirish1 +13111988 +asecret1 +ciara123 +morrigan +101294 +03071992 +global123 +14061992 +babyboy69 +speciala +greenbean +5.254.105.20:test1 +edward10 +28071989 +flute1 +300591 +stu +dance22 +eastside6 +spud +mathews +rainmaker +Pierre +matthew05 +hatelove1 +spanky2 +chevytruck +nick08 +histoire +170285 +florida5 +230293 +ed1234 +Panther +18091988 +whippet +exodus1 +rice80 +poopypants +tamilnadu +300384 +rossia +2307 +.kbxrf +oleander +emogurl +200680 +07031991 +manatee1 +roxana1 +share +pissed +sarah15 +faustino +arun +arsenalfc1 +122500 +butter44 +cherry1234 +spleen +150184 +smokey! +SEyxE44hca +fridolin +paddy123 +198818 +fire22 +ktyecbr +jolene1 +OLIVIA +buttfuck1 +08091991 +gators01 +coheed1 +27121983 +100579 +nicole91 +011085 +gerrit +1qazzaq! +passwordpassword +mama55 +limaperu +graphics1 +pescador +20041982 +fifa2006 +10121981 +06071989 +thomas19 +260696 +airforce2 +211987 +gangsta11 +bandgeek +27031985 +091086 +pussy10 +jesusteama +arlington1 +25061992 +am123456 +magic11 +081081 +superstar9 +100182 +kim1234 +contract +joking +walden +saliha +1allah +odeyemi +mylove21 +28061992 +16111982 +markos +qwertyas +1789 +polito +01061993 +soccer97 +110494 +300784 +katenka +robert20 +270183 +bokkie +260383 +appletree1 +1people +toyota123 +redhouse +j3nn1f3r +texans1 +joey22 +250482 +198227 +queer1 +13011992 +07031985 +redford +220579 +samantha19 +198713 +chesney +angela21 +031185 +lebowski +mandi +precious7 +emmagrace +kal +anna1990 +meandu1 +maggie6 +jaybee +Mexico +emily22 +alyssa! +anglia +merrick +270185 +21051993 +megan7 +260884 +31121980 +nostalgia +j0seph +trevor01 +taotao +141180 +290483 +987654321j +pitbull13 +ninonino +michaelj +1coffee +goku12 +061185 +aleyna +28121985 +grace11 +30081986 +11041992 +101195 +password83 +dounia +21011983 +gerry1 +check123 +03021985 +03011989 +tessie1 +melanie12 +pickles! +tyler69 +amritsar +marconi +adriano1 +lemmein +groove1 +25041985 +200782 +123hot +k1ll3r +bobo11 +john09 +18021983 +170188 +crayon1 +megan! +31071988 +26111985 +jonathan14 +191292 +redsox9 +198420 +151292 +letmein69 +250892 +mihaita +sergeeva +myaccount1 +simone123 +realtors +oldfart +27091988 +danadana +mya123 +haley2 +marcus23 +jonathan21 +payback +250380 +759153 +agape +1pioneer +stupid. +puppylove2 +jagdish +alex28 +ashley00 +SEBASTIAN +301180 +180189 +brittani +30071992 +soccer30 +29111988 +danielle21 +pagedown +hope1234 +tiger07 +ytyfdb:e +070989 +toctoc +181283 +mexico08 +utopia1 +21121993 +carlos25 +199313 +christi1 +240183 +040783 +football41 +school4 +olivia06 +usa1234 +kalinina +iloveyou03 +admins +1z2z3z +ihateyou3 +gjhjctyjr +kissthis +youwish +lolito +700000 +280986 +dipper +rocky1234 +aayush +olivia7 +kvartira +papasmurf +Nelson +secret5 +141084 +chris02 +kaylin1 +tor +def456 +may1993 +auxerre +020583 +good4now +saosin +0203 +physics1 +56tyghbn +gooddog +ninja636 +02061980 +julian13 +alicia01 +smile01 +fernando2 +19041986 +290385 +191988 +faggot123 +josh08 +ggggggggg +slam1984 +260182 +221291 +shadow19 +24111991 +yourock +golden2 +190582 +150392 +415415 +021186 +uncle1 +jacket +dreamtheater +20051994 +wow1234 +cooper10 +raikkonen +roygbiv +246802 +15071984 +enforcer +kayla4 +logistics +benz +123456789love +number01 +123qwe! +mobil1 +25021983 +blahblah! +q121212 +michelle88 +210791 +13071994 +jk123456 +reilly1 +231985 +05021986 +1crazy +130883 +teddybears +kristof +ratdog +mychem1 +serpente +02091984 +Stalker +010684 +badgurl1 +lois +66669999 +nothanks +050683 +giants25 +tripper1 +michelle25 +200185 +sch00l +anabela +bryan2 +patrick6 +120195 +naruto96 +rae123 +gameon +not4u2no +gallego +bigman2 +me4life +28091990 +210380 +12pack +wesley12 +electra1 +1hundred +monkey32 +funnygirl +030290 +CARMEN +020385 +yeahright1 +081088 +nokia6680 +goleafsgo +19922991 +sc0tland +yellow24 +al123456 +101194 +2123 +kerstin1 +spades1 +28111985 +hotdog69 +apple14 +04021992 +simonetta +shonda1 +180791 +vincent12 +lover18 +malkin71 +080809 +junior25 +ferrari12 +rod123 +minimi +oscar7 +mousie +nfnfhby +season1 +okechukwu +tyler02 +ololol +tirana +a234567 +biotch +goldensun +06091987 +05011989 +ukrnet +sonechka +MADISON +steelers11 +1sunflower +football61 +order66 +hbk123 +karandash +qzwxecrv +24071985 +951753456 +21061983 +040892 +montecristo +03011986 +christ01 +sarkar123 +081286 +211080 +muhammet +catholic1 +karthi +270287 +frankie7 +240284 +250492 +qwert789 +harley21 +199217 +02071992 +registration +jacob14 +manning10 +05081992 +manchas +maple123 +06021986 +stroker +258147369 +12122012 +justin98 +050987 +SABRINA +6464 +trooper2 +devil13 +260592 +180287 +marley11 +jacare +198717 +revolt +omgwtf +dogfish +brittany16 +angles +j0hnny +30051984 +180184 +johan123 +pizzaman1 +19111992 +30111990 +400086 +beeper +scanner1 +rowdy +060985 +4sisters +080486 +silva1 +22051984 +people5 +040786 +qwert7 +circa1 +200493 +280180 +bella6 +10031982 +05041991 +facebox +220493 +bmw318is +400055 +short +midwife +130492 +texas08 +baran +06091991 +civicsi +300691 +18121983 +teddy5 +26081981 +110879 +terry2 +shorty8 +yankees4 +lele +rtynfdh +jungfrau +183729 +greenfrog +saleen1 +mandingo1 +thomas20 +maggie8 +image +080881 +51515151 +ewq123 +190391 +q7w8e9 +cra +lovers5 +03101984 +28121991 +lovely16 +single69 +robinho10 +bailey14 +TravelmoleOptin +1zg1H9suza +orange15 +88 +music15 +babycat1 +thankful +12071993 +black16 +lovebug3 +independence +098765a +080787 +master55 +pixie123 +160191 +ladylady +pass13 +ihatethis +24081984 +ryan17 +05081991 +890123 +12101983 +281080 +281192 +310883 +101069 +ass12345 +sarah1234 +cereal1 +iloveher12 +pelado +supercool1 +kimiko +forever15 +mousey1 +27121985 +30061985 +27101991 +291182 +090981 +301192 +260382 +olympe +buttsex +197272 +Raymond +25071983 +140182 +thongs +angus123 +James1 +giant1 +tabby123 +lick +gedeon +tiger09 +030507 +20121982 +45m2do5bs +190491 +251092 +jose16 +vagina123 +mithrandir +cecelia1 +000000z +24021992 +Spencer1 +seville +070781 +blackpool1 +pussie +young12 +vika2010 +shakey +jetset +09011991 +re +311291 +271193 +09041985 +contador +Deutschland +evangelist +bitch0 +culinary +543543 +1936 +compass1 +29011988 +babygirl77 +picard1 +jojo14 +purdue1 +pottery +crystal5 +Jackson5 +wallet +08071985 +05071987 +akon123 +brunos +already +tequieromu +divorced1 +Carmen +freedom4me +levski +august01 +fedex +nirvana666 +amina1 +hokage +140791 +superman0 +alperen +198022 +yulya +060488 +kundalini +kevin17 +synergy1 +fullback +femist22 +cheese21 +blueice +201181 +passwrd +danita +07061985 +jonnie +lollypop2 +mary01 +kinkin +shadowfax +���+����+��������� +keebler +bass12 +120293 +betty2 +winnie2 +froggy11 +pip +maggie05 +josemiguel +060504 +fdsa +amorypaz +belgique +union1 +13041992 +04091989 +patricia2 +778877 +rapid +16081987 +counselor +010170 +22061982 +08051987 +young2 +00000000000 +100781 +07041992 +zaizai +INJECT +leilei +hotass +L1nked1n +110995 +zoo123 +nicole85 +kik +210592 +tam +peter11 +30081990 +22081992 +racheal1 +eastside3 +20071983 +14081408 +ianian +1707 +mich +micheal12 +kevin4 +vaz2109 +pizza7 +rfvtgb +584201314 +shannon13 +qwertyuiop0 +siracusa +15091984 +nepenthe +16011985 +westside18 +mylove7 +cupcake4 +2233445566 +hatteras +chiller +010292 +entertainment +kevin6 +eddy123 +28071985 +park +jeddah +fl0wer +03121986 +whitedog +000aaa +люблютебя +13011985 +090590 +04011991 +280592 +21061993 +196000 +150292 +wildwood1 +08031988 +24091985 +240385 +20101995 +120280 +gusano +290191 +lovebugs +lovely08 +sw705547 +kenzo +ichiro +matt6288 +opelvectra +qawsedrftgyh +loveher +050887 +28101983 +huggies +28121992 +fordmustang +dominic123 +31011992 +denali1 +290982 +lopez13 +owned1 +mountainde +just4now +jayjay11 +gametime1 +playboy6 +030487 +150150as +13661366 +mjolnir +040380 +123sam +123321w +portia1 +12345678912345 +060892 +gokart +hbxfhl +wsx123 +whywhy +mart +jahlove +red333 +sid123 +max101 +hs: +yamaha01 +hawaii123 +shifty +30121991 +bradley123 +bubbles15 +screwu2 +morbid +breanna2 +30121984 +jordan2345 +191182 +25031984 +jenna12 +1403 +18081991 +getlost1 +hiroki +LAUREN +betty12 +foxy123 +amen +badboy5 +08031983 +sup123 +26031985 +brittany01 +06051991 +270687 +trekker +corey2 +taylor96 +gray +15111992 +14051992 +130893 +sonnen +austin96 +ratatouille +199513 +141181 +jack1 +naruto90 +ohbaby +27041992 +black18 +Rainbow1 +sept10 +cheaters +110033 +mark69 +070892 +larry12 +17111990 +Serega +Cowboys +baby2000 +ballin4 +cupcake22 +candybar +400081 +16071990 +301281 +kiss1234 +200881 +cashcrate +240383 +pimpster +20121994 +sherly +040188 +leoleo1 +sailfish +jasper10 +070290 +170187 +kitten69 +101076 +1811 +tastiera +jamaican +140190 +bitch55 +111080 +150982 +24041984 +curitiba +rincewind +logan13 +130191 +cooldude12 +belen +03101987 +doggy5 +nana14 +proteus +021283 +26091984 +07101987 +haggard1 +041288 +mickey09 +holycrap +andiamo1 +nokia3220 +30071990 +11021982 +matrimonio +money2010 +aloevera +shanty +28011989 +corazon2 +221988 +summer98 +120808 +livefree +sonofgod +jonathan19 +737kkbLskV +chelsea22 +warrior7 +10081983 +mononoke +prince23 +486486 +baskets +Zxcvbnm1 +marzena +halliwell1 +chester11 +guitar6 +brand1 +jakob +030289 +toyota2 +22091983 +damnyou +sexy95 +godisgood7 +nanook1 +160992 +18041983 +shuriken +Hd764nW5d7E1vb1 +futurama1 +fuckme13 +17081984 +sonora1 +jackrabbit +250292 +godblessyou +lavieestbelle +myspace198 +1323 +saoirse +150480 +27091989 +yxcvbnm1 +branson +blabla12 +casey11 +19011985 +05091988 +100679 +s666666 +198706 +131179 +axlrose1 +dima12 +nestea +dickhead2 +pussy420 +260891 +#1cutie +zhanglei +20061994 +emma22 +travis13 +300684 +chaotic1 +ogechi +manohar +weekend1 +ilovekatie +loser09 +fis +15101983 +vinita +skate14 +analla +titotito +williamson +sissy2 +charlee1 +181281 +ilovemywife +aaaabbbb +yankees10 +samoan1 +rodgers +roger01 +110192 +samantha6 +Scarlett +jasmine18 +saltydog +061186 +170981 +199613 +260282 +jor +SOCCER +konrad1 +198921 +lildevil1 +140280 +honeyz +24101992 +050692 +vfifvfif +020190 +010384 +luv4eva +reward +QWEASDZXC +SMOKEY +linalina +daisys +annika1 +1881 +567891 +mockingbird +florida11 +pepsi11 +2710 +120180 +01012006 +17011992 +14121993 +barnabas +100194 +countrygirl +nike22 +560079 +03081990 +dieumerci +chriss1 +black88 +qwerty08 +monkey34 +101992 +zenzen +fatjoe +30111985 +stylin1 +kirstie +030986 +jehova1 +10years +rallye +1blunt +corrine +manouche +joshua. +juan14 +ok1234 +500004 +dickweed1 +120977 +120777 +getmoney10 +sexx +zx1234 +karatedo +hogan +24101983 +071284 +stripe +cranberry1 +EMINEM +serafin +pdiddy +25071992 +3737 +123masha +linkedin2 +freeport +sickness1 +diocane +poop12345 +june1986 +sweetie! +xcountry +mack123 +24091984 +900900m +30011991 +dropkick +quake2 +626626 +olesia +tristin +w1958a +123456789987654 +pop12345 +enfermera +cmoney1 +246 +pizza101 +030891 +superstar8 +24071986 +hairspray +210792 +yellow55 +11081982 +spike13 +forever16 +greenwich +270584 +gab123 +tink14 +05091986 +kalimantan +28021984 +andreas123 +iamhot +200880 +Slayer +07041990 +matthew. +160392 +police2 +04091991 +riffraff +654321d +screamo1 +style1 +fastcar1 +02041993 +senna +mariagrazia +15071983 +270782 +vagina! +271291 +dashenka +190286 +oddball +mantle +12345qqq +tulip1 +210680 +030885 +gannon +austin16 +lauren16 +silver10 +gnomik +CASPER +manutd11 +devilmaycr +250392 +honey4 +sweet01 +crap123 +26111992 +ricky13 +hatchet1 +16031984 +12021982 +kimba +starz +pardon +aidana +19071993 +longtime +210283 +000000s +linkedin2010 +alley1 +jimmy6 +password007 +110002 +evans1 +ukraine1 +1timothy +lulu1234 +030684 +dfgdfgdfg +ajibola +empires +creativity +300592 +shanel +hottie06 +alayna +198405 +metallica4 +1q2w3e4r5t6y7 +0511 +25081992 +superpower +030991 +rebeca1 +11aa11 +time4fun +guy +newyork22 +love_you +26011986 +heather22 +17121982 +1trouble +06071992 +29121991 +22031983 +24081992 +therasmus +duke23 +12111982 +letsrock +lbyfhf +beata +lilwayne5 +newborn +danny1234 +damdam +250882 +timmie +8008 +babcia +hotgirl123 +rockstar14 +qwerty100 +theblues +100480 +Bella +23091982 +sdfghjkl +dea +010891 +rap +ltleirf +07061991 +menorca +pasha1 +loveme07 +destini +flyguy +pepper69 +07021985 +lon +volcom3 +18061983 +imawesome1 +metallica123 +sweetpea12 +analuisa +230880 +butter3 +silver6 +water4 +shyguy +200791 +forever10 +140392 +terminator1 +26071984 +190983 +watanabe +newyork21 +putamadre1 +sadist +strategy +07111987 +kelly69 +peaches11 +adelia +volcom11 +26081985 +redmond +igetmoney +fluffy13 +orange24 +kabouter +29031987 +system12 +Passwort1 +Georgia +130577 +17061989 +10051993 +petals +25011992 +samantha23 +yellow16 +020189 +03071984 +kaktus1 +210881 +holley +whatnow +nickey +allahuakba +171192 +160291 +gwen +hardwood +penguin3 +dirtysouth +raider12 +kendal1 +basher +dc1234 +gratitude +kids12 +300992 +17111985 +qwerta +claudius +naruto09 +18081982 +210693 +12121977 +friends07 +password#1 +14101410 +kingsley1 +plaisir +macman +gecko1 +pablito1 +malutka +liverpool. +danny15 +zanessa +mimi01 +120696 +03081992 +baba12 +p3pp3r +scooby10 +31081992 +baller101 +&3 +buster6 +300782 +gotti1 +mamasboy +genaro +sweet9 +09041987 +38special +rajaraja +mylove1234 +1703 +261180 +09061986 +290979 +12581258 +pimp33 +DGf68Yg +m00000 +211181 +31101984 +260782 +sk8terboy +26091987 +s0cc3r +coimbra +doodoo2 +michael04 +pumpkinpie +jaquan1 +batman18 +zara +patch123 +thenumber1 +120877 +270983 +02041982 +24021993 +131079 +20091983 +21061984 +djhjyf +black17 +250992 +pika12 +ovation +sexy911 +yourname1 +kas +conway1 +moosie +sugars1 +comrades +666123 +fedora +petrucci +3@p@g# +way2go +drandreb +blackbeauty +winter22 +kid +jack2000 +qwerty07 +dmitri +ihate1 +star12345 +19091983 +jesse11 +tenten10 +19031984 +26081992 +14011985 +molly4 +ladybug13 +mybaby3 +carlos4 +charm1 +01081992 +pam123 +15121993 +skip +14091986 +artiste +apostle +19081983 +brady123 +razorback +lilmama3 +booboo14 +pianoman1 +jordan32 +tiffany01 +07051991 +31122008 +lovestory1 +212224 +001989 +agarwal +1steelers +565758 +neptun +edward14 +ashley03 +210780 +depeche1 +29071985 +gfhtym +ghbrjkmyj +dorothee +20062008 +sexy94 +wildrose +uniden1 +artart +rebecca7 +preppy1 +millonario +johnson5 +denise11 +yijeong +enduro +loveme33 +260292 +badong +201179 +taxman +baby_gurl +cassis +30111989 +031192 +300883 +seinfeld1 +islamic +acura +flowers4 +160483 +lakers22 +record1 +kristen2 +191084 +231177 +laughter1 +aol.com +mario7 +reggie5 +carlos6 +egghead1 +060888 +b1b2b3b4 +31031992 +hartley +warsaw +king77 +cielito +pimpshit1 +13121982 +26051992 +201091 +pass22 +nahuel +31031991 +italia90 +12101981 +110979 +timoteo +pangetako +13581358 +23081984 +ruby1234 +rangers9 +buttercup7 +Maximus +michael03 +31081985 +lan123 +lokiju +itunes +alchemist1 +lacrosse12 +manjunath +alyssa4 +lynn13 +tt123456 +unicorn7 +07031990 +16111985 +darkwolf +davidc +torres123 +meaghan1 +1pookie +197612 +truck123 +uniform +04061992 +troy12 +23081985 +180783 +greatdane +100281 +bubble3 +seashore +lucienne +04061983 +lol123123 +ricardo12 +moppel +06121991 +antman1 +hoova52 +ivanhoe +12061980 +tennis7 +tigger02 +dakota07 +29011985 +030791 +canada2 +angel31 +canberra +run123 +30031984 +061283 +19051983 +edward4 +wetwet1 +110679 +0212 +123123qw +emelec +olivia5 +Winter +gogo12 +jeffhardy2 +26011985 +171281 +tankist +suckme2 +83773049 +astrid1 +love2 +fatdaddy +1401 +kenneth12 +gators12 +dima777 +14781478 +123456yy +passme1 +angelo12 +lovers01 +mickey8 +shanelle +0211 +161092 +bestbest +biotch1 +161290 +Bond007 +nikita11 +31011988 +23041993 +dededede +784951623 +snowbell +fuckoff4 +270392 +daniel28 +280493 +got2go +tartar +lesbica +miller01 +03121985 +lolly123 +goldrush +pedigree +johnny21 +nineball +angie2 +geometra +12121979 +230993 +30091984 +120994 +090288 +18031993 +gocats +scottish +baller08 +pink27 +poppys +florine +30091985 +crusher1 +010110 +060188 +16091990 +123456cc +unicorns1 +111111w +1501 +brother123 +bailey6 +niko123 +070886 +thatnigga1 +claudia12 +RAINBOW +lovelace +missile +mylove69 +220381 +blo +snowflake2 +bobby01 +badboy21 +Oksana +punani +nathaniel2 +soccer90 +123321zxc +sw3434! +198228 +290790 +akinyemi +chelsea09 +bratz2 +080789 +sigrid +ilovejack +stereo1 +crossfire1 +180284 +money0 +251093 +laura10 +vfif +amazone +wrench +mydestiny +cats1234 +125874 +beefy1 +heygirl1 +220293 +26111990 +mike55 +henry8 +1southside +fuckup1 +maurice2 +pimpin. +mamounette +den1ks +cooper22 +kilo +tay +ritinha +bunnyboo1 +badboy10 +sesame1 +gianni1 +tommylee +987654321k +spanky12 +111993 +patrycja1 +27011989 +01071990 +ladybug5 +qwerty1231 +chicken01 +300884 +bahrain +myspace92 +gayguy1 +samarinda +omooba +coraline +fal +181280 +copper11 +030380 +kaka1234 +ghetto2 +time123 +041192 +tikitiki +280883 +25041992 +LOUISE +as123123 +03091985 +steelers5 +brooke7 +kiersten1 +250291 +210381 +daddy! +dipset12 +nokian72 +direktor +240482 +solid +sebastian0 +16121984 +rere +vectra1 +flossy1 +sneaker +superbad +sandra10 +dunbar +delgado1 +polka1 +tiff +nick07 +foolproof +PEANUT +cosmic1 +paige2 +dragon420 +090785 +29101989 +john07 +REBECCA +klm123 +nunzia +celebrate +spongebob. +05041985 +buttons2 +tristin1 +040986 +teadoro +starbuck1 +05101985 +sugardaddy +198701 +princess87 +bloodhound +milkmilk +sammycat +samantha22 +zzaaqq11 +dfczcghjcbnm +191991 +chanti +1234563 +bama +martin69 +fermin +stupid01 +cowboy13 +buddy15 +albert2 +kjkbnf +uuuu +08051985 +bandits +monster. +charlie15 +lovely9 +09021990 +newcastle9 +administra +11121983 +tianshi +tiffany! +hickory1 +gatitos +78kdow9sPF +06091990 +richards1 +knightrider +523456789 +tiger33 +0310 +lolita123 +hardball +0.0 +260392 +jackie22 +steeve +01121985 +teamo10 +jac123 +baby29 +987654321d +010584 +hjpjxrf +1234554321a +pozitiv +010175 +03021984 +22071983 +talia1 +katherin +111082 +jackson8 +georgetown +230480 +tuttle +198705 +25102510 +blaze2 +04071991 +anaheim +pooh10 +01101989 +soccer91 +pacifico +cool1 +18121982 +112266 +bacteria +050388 +chartered +jenny15 +lisa13 +football96 +lovemusic1 +enriquez +andrey1 +21011984 +sel +14111983 +gumball1 +Apollo13 +danny6 +undertow +1507 +08081983 +cfif123 +flameboy +220593 +monkey56 +160882 +america! +suzanna +7654321q +br1ttany +3838438 +25031990 +boston3 +jordon23 +gothic3 +30121990 +gangbang1 +crazy16 +bonds25 +pepsi3 +chula123 +kishor +kayla08 +ilovepie1 +bella2010 +protocol +Spartak +joao123 +anthony99 +6767 +apsk0518 +harrington +redcross +21091992 +20071982 +kameleon +211182 +flipside +170781 +netgear1 +joakim +17091992 +050891 +skater4lif +27031988 +pudge1 +snowing +060680 +екатерина +03021992 +francisco2 +/.,mnbvcxz +promises +cory123 +010984 +100980 +fyfyfc +lennox1 +trampoline +ponyboy +leighann +04051986 +baseball0 +20031993 +marketa +Jeffrey +12281228 +411040 +reinaldo +homebrew +skydiver +simonka +090687 +4getit +travelmate +basia +mawmaw +praveena +nadya +noble1 +milwaukee1 +babygirl90 +Bianca +25051982 +abigail3 +918918 +isuckdick1 +120794 +05061984 +rapid123 +booboo21 +nancy12 +2308 +flamer +270777 +21091985 +billy69 +woodwind +ihatemen +silver77 +sergey-ivanov +sammy9 +15031983 +qazqwe +tamale +culito +29021984 +Sakura +robben +usajobs +1611 +07101991 +twogirls +dima1993 +170282 +vanessa5 +basket101 +padilla1 +farid +andrejka +300981 +lopez12 +spider7 +kyle01 +30061991 +royals1 +892 +mikey13 +Daniel1 +13081993 +boyssuck +060492 +sadie11 +ilovesean +dude01 +17111982 +salman1 +23111983 +2468013579 +fuckyeah1 +230183 +babygirl97 +maiyeu +google22 +26021992 +1maryjane +05091990 +marino1 +666999666 +girlsrock1 +choudhary +holycrap1 +rocio1 +02101981 +pakistan1947 +bummer1 +yfdbufnjh +ninja7 +hoffnung +dudedude1 +070486 +2707 +lunallena +021092 +anna23 +30071988 +BLESSED +samson2 +bugman +080589 +angelo4ek +reaper13 +brian69 +apartment +wicca +1qw23er45t +pazzword +zubair +020685 +240693 +barker1 +300683 +bitch77 +google23 +09061988 +summer101 +240882 +beachbabe1 +states +babatunde1 +4success +baxter01 +bhardwaj +23011984 +sweetcandy +16061983 +gracie08 +assilem +available +031091 +100694 +011089 +hunter25 +123456789_ +gostoso +silverchair +table +28061985 +benjamin123 +hermoso +050885 +cenerentola +03041984 +1kevin +oliver99 +kaylee2 +100181 +1cookies +u1v7hHh7eF +fuckme11 +peace10 +whoknows1 +290685 +03071985 +17061990 +19861010 +metal4ever +killemall1 +110193 +lovingu +YAMAHA +callum123 +annemarie1 +glendale1 +yy123456 +julita +schroeder +8xxg4Gcc9q +parker11 +29031989 +minnie11 +python1 +megan5 +religion +mexico99 +selene1 +khalid1 +nicholas13 +07091992 +24081989 +16061984 +thomas02 +oliver! +redsox01 +oladipupo +03031981 +rissa1 +qazwsx12345 +pembroke +221178 +240392 +whore2 +az12345 +langley +10071007 +23041984 +hfvbkm +05091985 +gerger +20021980 +black99 +strat1 +janejane +130780 +rufina +28041984 +grandchase +obrien +bvgthbz +01021981 +trogdor1 +shan +chorizo +mafiawars1 +010884 +adrian3 +солнце +270707 +grandma123 +198198 +010194 +29071992 +china12 +honda4 +juggalo2 +hidayah +morrowind1 +morton1 +180392 +wildcats12 +14031984 +moni +130382 +nikki21 +05021989 +pinacolada +120294 +jeremy69 +cbhbec +011285 +stupid5 +30011989 +redwall1 +barbara2 +jamesdean1 +090984 +30011992 +140281 +dupa11 +bills1 +abigail123 +darkelf +mymommy +071291 +091290 +onmyown1 +18111990 +29031984 +chandran +08041987 +united11 +26081991 +luis21 +lovejones +200581 +katinka +fishsticks +100993 +19001560 +hotgirl12 +bastards +piotr +30081987 +alliecat +130679 +happy07 +18051983 +030190 +s8krIl9u4F +superdude +12345678u +marcus22 +gateway3 +zxcqwe +070188 +150992 +02021979 +12345611 +luis01 +chester5 +f5GhyjqHAv +apple69 +Pauline +25101982 +farter +joe12345 +2911 +198202 +14081984 +brandy13 +yaq12wsx +vincent7 +srikrishna +scooby5 +02011990 +tarpon +300580 +151192 +tito12 +switchfoot +drummond +sasha5 +lovelyme +icecream5 +091185 +09101985 +pol123 +13041993 +250180 +140992 +420man +251193 +buttercup3 +12111983 +ching +partyboy +charan +yupyup +121484 +joeyjoey +260183 +portugues +ritarita +willow11 +300187 +fordescort +560004 +fjfjfj +kayseri38 +newlife07 +ak47ak47 +666666m +123456_ +110182 +ятебялюблю +jasmine. +deadpool1 +Helena +sandra22 +noel123 +young10 +cytuehjxrf +sheeps +Samson +brutis +abc1231 +kaktys +triana +600073 +291282 +19121983 +06071986 +chacha123 +iraira +pecker1 +bedroom1 +jamie01 +dragon44 +angela22 +14061983 +22041984 +060681 +zzzzzzzzz +150695 +minolta +maryline +slonko +fuck99 +280808 +youwish1 +matthew69 +dallas88 +kulit +11061983 +frida1 +imissu2 +shann0n +comets1 +farside1 +black25 +31051992 +pantera2 +111278 +081085 +jesuschrist1 +tanning1 +Letmein +tigger. +18101993 +brownies1 +auntie1 +estefani +090287 +lupin +nnnnnn1 +asdfgh. +150892 +250381 +9749676621ok +kitkat2 +071285 +peace01 +hewlett1 +1808 +jessie7 +chevyman +sperma +horror1 +30121989 +tonymontana +08091987 +lovesux1 +210382 +120694 +brave1 +jesusa +comeon1 +123bbb +abe123 +stokes +bubblebutt +zoomzoom1 +bureau +310393 +chris92 +snoppy +velasquez +healer +honey10 +qwerty45 +211082 +samantha123 +220481 +farm +romuald +12041982 +11223344q +tennis3 +blanco10 +tazdevil +sovereign +message1 +FRANCIS +legend123 +samir123 +savage12 +nathan15 +kirk +ladybug4 +victorious +hulk123 +sophia01 +shimmy +legia1 +harley4 +200183 +241178 +london21 +whisky1 +alex1981 +centre +13011984 +smackdown2 +ilovemyindia +cowcow1 +196500 +joseph18 +pipo +wangjing +bear23 +030491 +131279 +06061983 +190783 +07091990 +semeolvido +jackie23 +adrian23 +marie95 +felipe10 +killer420 +motorcross +24011992 +2199127551 +barbie22 +mookie123 +nine99 +241078 +24111984 +street12 +victoria5 +il0v3y0u +tigger101 +260284 +sondra +���������� +231293 +111972 +72chevy +03021990 +08061989 +031084 +Wilson +170192 +20091994 +10091989 +28091985 +xxxzzz +pollock +bur +christina3 +creative12 +russell2 +deepak123 +28061983 +aa111111 +aaliyah3 +ilovetim1 +registrati +07041983 +11011994 +fylhsq +aquaman +31121982 +minami +08031989 +boys12 +Siemens +ontario1 +wallpaper1 +110993 +b00mer +haters2 +violino +050386 +babygirl03 +solution1 +180983 +ichunddu +poopsie1 +19101982 +refinnej +sookie +rbh.if +arturik +autumn2 +johncena11 +samantha16 +01071982 +180692 +raul123 +01011960 +pinpon +sparty +caca1234 +october08 +tajudeen +260787 +19041984 +TWEETY +250594 +bittersweet +25091992 +21101983 +17011984 +Spirit +rkelly +godsent +27111991 +flower69 +serenity7 +111092 +chili1 +binder +130980 +nataly1 +addie1 +bocajuniors +02081992 +hpl +outside1 +victoria! +happy4me +atkinson +770077 +05121988 +rfhfcm +monkeys7 +bartolome +cathrine +mustang96 +DECEMBER +mylove08 +tehran +slipknot5 +020191 +peter5 +u6e6r9hwix +banban +darkman1 +element6 +door +zachary5 +socks123 +0312 +060390 +bandit10 +030984 +dallas69 +05101990 +hottopic +q2q2q2 +223 +guismo +12021980 +zoom1234 +25031983 +sebastien1 +051084 +100394 +king25 +20061982 +29031986 +qazxswedc123 +randy12 +rocky101 +30081989 +1pokemon +marco12 +telefonica +ge0rge +boswell +240480 +330330 +soccer29 +021082 +brandon99 +hit +crip13 +sanju +260883 +1qazxdr5 +030884 +147852zes +miruna +important1 +11021994 +babies4 +militaire +011188 +eliseo +svenja +audio1 +fengshui +brian5 +198025 +makeitso +14022009 +06021989 +prospero +171180 +single3 +busta1 +tori12 +011011 +malou +bintou +mounette +holymoly +sonic3 +123mmm +210284 +peepers1 +sandoval1 +princess34 +10031981 +060287 +inicio +pop1234 +rasta123 +passwort12 +katya123 +chelsea07 +1234567899876543 +tweet1 +sophie22 +mitzi +240192 +yomama! +061182 +milacik +2200 +190484 +watkins1 +230581 +teddybear7 +550055 +20021981 +102030102030 +nicole96 +nissan123 +bambam11 +123456789qwertyuiop +shyann +joshua25 +haikal +22081984 +emiliano1 +K9g2xpce1E +crossover +Dominic +021185 +198401 +Leslie +barrera +powerpuff1 +171280 +official1 +jaydon +02011983 +denise13 +spring123 +1qazZAQ! +27081985 +500026 +manutd10 +05121987 +261193 +m0rgan +andre2 +111293 +041292 +01121988 +8675309j +phoenix12 +hun +29011992 +symone +ilovebrand +titten +ajhneyf +gunawan +denver7 +babyluv +peanut8 +13591359 +171191 +fireblade1 +milanac +carmen01 +rocky23 +mike6453 +salsal +pink05 +10111980 +meatballs +devil12 +charles5 +steven15 +shan123 +210793 +sundin13 +prime +miniman +poopoo22 +140581 +180383 +magoo1 +17021985 +dale123 +giusy +asddsa1 +sacred1 +03071989 +04101990 +jacek +arafat +bebe01 +08091992 +1702 +a7x4life +humphrey1 +10051981 +vanesa1 +doogie1 +outlaws1 +jackie10 +demon6 +killer18 +pissed1 +Hamster +imhappy +07051992 +amedeo +carlie1 +1l0v3y0u +mirek +asdfghjkl. +rjyatnf +13121980 +142536a +06101987 +beehive +sexy91 +bandit3 +islanders +125125125 +catfood1 +morgan07 +freeporn +220680 +superbowl1 +hotbitch1 +romans8 +04101986 +gramps +198707 +summ3r +superjunio +18021985 +BEAUTY +momo13 +1fatass +las +y0y0y0 +137946 +ingram +1tyler +rosalyn +elevation +29081984 +wendi +081189 +shaina1 +Baxter +09051990 +redroses1 +1scooby +snake12 +spicegirls +iamblessed +100478 +310183 +rfhbyjxrf +padang +08041985 +hannah17 +yang +puszek +1425 +sebas123 +smash +reggie2 +shaaba +04011989 +chevy88 +qwertyui12 +poppy2 +300185 +chastity +05051995 +07061984 +090788 +love999 +djamila +19101993 +linkedin99 +010493 +aaron10 +imsingle +lucrecia +kupal +18021984 +280683 +nicolae +400061 +ert123 +171181 +13081992 +jose17 +monk +10101979 +060885 +070585 +underwater +30101983 +15041984 +dctktyyfz +12abcd +timothy3 +04011988 +222222q +Dortmund +artemon +society +sherpa +pepperoni1 +lulu11 +nicholas4 +25041984 +weezie +berkay +geegee1 +miomio +nathan03 +04121990 +mariguana +jacob6 +1jeremy +sammydog1 +dinger +bellaboo1 +jlbyjxtcndj +chelsea21 +25121980 +costa +110781 +blondie7 +nsync +16081985 +steven18 +21031993 +strato +198603 +05031985 +helpmelord +07021986 +only4u +wooster +090586 +cookie88 +continental +dolce +18051984 +grandkids6 +mecanico +hammer2 +110795 +frodo123 +impact1 +217217 +david99 +auditor +SANTIAGO +081091 +shinhwa +jeanmarc +06041988 +090487 +22071993 +28011990 +football83 +fifa2009 +21071984 +raiders10 +yoyoyo3 +rrr +pool123 +27091986 +lady1234 +07061990 +sandhu +821010 +antonette +killer0 +icetea1 +nina1234 +myspace95 +iglesia +rfvtym +lord12 +simens +katie10 +frfltvbz +awsedr +500008 +16111983 +landon06 +emily23 +langka04 +bandit69 +blacknight +cookie07 +22071984 +10081982 +winters +admiral1 +jjj111 +cute15 +riches +shkola +blondie12 +zidane5 +140183 +austin00 +ромашка +wouter +chauncey1 +06091988 +198122 +negra1 +bebebebe +anna10 +doodie1 +080591 +181081 +06101988 +2222221 +coolkid123 +annabel1 +07021992 +191985 +190001 +221192 +thebear +17091982 +04081992 +galapagos +celestino +trouble3 +07091989 +230679 +babyboy15 +firestorm1 +gary12 +vatoslocos +inflames1 +ALBERT +letmein7 +oliver5 +slurpee +sonja1 +sasha1994 +040482 +0246810 +makaron +football86 +1forme +18091990 +wizard123 +india@123 +151986 +pyramids +bala +090979 +adam23 +angel#1 +gblfhfcs +manimani +batman77 +redsea +Simone +youaifa569 +wilson11 +669966 +smarts +10031995 +nfymrf +12101994 +20101994 +game1234 +layton +chandrika +adolf +tweety18 +slamdunk1 +lyon69 +dogbone1 +osito +26111984 +020991 +everlasting +wenef45313 +birds +26081990 +26111988 +1champion +hector12 +26061993 +nitrous +ibm +13011983 +hunter55 +ivan1234 +210883 +iceman69 +haydee +09111987 +06041989 +010287 +fodase +garrett2 +1penis +hotline +w1957a +29111985 +red123456 +manchita +rascal2 +ilove11 +fucktop8 +300382 +mobbdeep +familia5 +toothbrush +caro123 +lauren18 +dupa1234 +totally1 +enjoylife +hawaii2 +051283 +emelie +wootwoot +gil +Genesis1 +iam2cool +phi +satine +sandy01 +29111990 +170293 +18011985 +ainhoa +jr12345 +pippo1 +qwertyq +013013 +environment +chris143 +161161 +samsung13 +14071984 +050287 +louisa1 +panthers89 +brit123 +358358 +sabedoria +123456789ab +breakdown +410410 +070390 +29061984 +lubimaya +opaopa +buddy9 +looloo1 +bernal +slut12 +baby2011 +76767676 +210577 +alyssa06 +230582 +donut +mouloud +070689 +12qw34er56ty +200909 +coco14 +alex1983 +jesse5 +daisy4 +cool24 +richard! +ASSHOLE +pookie7 +boomer13 +francis2 +13041985 +020582 +kona +gabriel22 +khan1234 +311281 +lupe123 +�+�������� +aleksej +63636363 +cobblers +04031989 +16081983 +joseph07 +akhilesh +thisisgay1 +chaudhary +athens1 +lovingme +steve01 +binweevils +dipset123 +130185 +241081 +27081988 +playgame +bayliner +biggun +katharina1 +fancy +2811 +bigboy21 +octopus1 +1Qaz2wsx +1269 +piano123 +caceres +asshole101 +travian +trevor2 +basti +purzel +mario23 +mic123 +kyler1 +glock23 +RACHEL +20091992 +killer25 +candyass +Montana +16091992 +05051981 +211081 +peaches4 +n12345678 +tobias123 +03061984 +yamaha11 +foreverand +dfghjkl +191817 +tigres1 +090908 +nirvana12 +malaikat +zac +iguana1 +cottoncand +match +matt16 +allmylife +2502 +110051 +rosa13 +daddy8 +orange16 +070793 +chelsea15 +13101310 +2580369 +prettyboys +31071989 +kahne9 +sixsixsix +260184 +united12 +dylan07 +slipknot123 +onyx +robocop1 +hujhuj +7777771 +301301 +23021994 +boudin +skate69 +281084 +motomoto +beleza +jeepjeep +ячсмить +horses01 +161080 +feanor +fatboy3 +cheese8 +come +050991 +anna1997 +010583 +kozlov +madarchod +jade13 +100179 +football94 +robertino +CHRIST +010782 +09101987 +boston7 +198205 +miguel11 +navyseal1 +azul123 +Darling1 +2802 +10061994 +randi1 +050684 +delia +woods1 +tdutif +05121991 +uytrewq +inshallah +poop01 +david77 +sparky69 +jasonb +tacos123 +27031984 +crazy1234 +carisma +starfox1 +windy1 +30101982 +izabella1 +12121978 +071283 +kris12 +10091982 +2209 +garnier +rugrat1 +08071988 +papamama1 +tiancai +HEAVEN +modesto1 +trilli +27051993 +bigman12 +woogie +270580 +02101983 +drew22 +16111992 +123man +violence +chrism +240285 +Angel123 +over9000 +changeme2 +21041993 +retirement +winner11 +SEPTEMBER +frank13 +180583 +duckies1 +tobago +06101989 +rai +cody10 +199393 +vc123456 +26031993 +sept19 +doggie123 +12081994 +tyty +ellada +mylord1 +aarons +69966996 +nicolino +fortis +26051985 +03081993 +26041985 +karlmarx +skipper2 +sugar11 +500033 +jannik +charmed2 +callahan +leona +alex111 +m1ch3ll3 +2112rush +199515 +070289 +03101986 +teamo14 +naruto94 +17111984 +070389 +741852a +que +eastwest +sundevil +fuckoff22 +789521 +08051989 +29051988 +liverpool09 +hemlock +Katherine +zero11 +12011983 +04101991 +evil123 +050783 +rocky21 +010383 +jamaica123 +johnny4 +zhuzhu +071286 +godsfavor +bandit22 +elina +brinkley +140781 +ninja11 +pretty15 +blue777 +yellow88 +alexander12 +07071994 +leeryan +22051983 +sonechko +231178 +sammy07 +froggy13 +20101981 +120875 +mariokart +000069 +cellardoor +angel34 +peaches69 +juanjuan +05061983 +thomas89 +yfcnz1 +nastya1 +22011993 +260482 +seeking +marina13 +00000008 +batteria +chris. +bogie1 +10031994 +w1955a +12213443 +socool +anna1995 +westside21 +peanut06 +basket11 +unity1 +07041986 +midwest +crazycat +bahagia +011084 +thebest99 +27061984 +Pebbles +081087 +honda98 +040885 +1234wert +ilu123 +karol123 +hisham +101012 +199311 +oaxaca +mitten +010171 +turkish +260680 +290884 +12081981 +junior9 +09031987 +199611 +montblanc +15021993 +JMFxL78nhe +250193 +branco +alianzalima +england7 +roxy10 +1f3Q8AunKE +casper69 +comandos +001972 +selamat +tinkerbelle +eclipse2 +eddie13 +pirulo +sharad +190591 +02091982 +aaaassss +200381 +070885 +frederique +vvv666vvv +porcupine +samuel13 +03081986 +spookie +998998 +24seven +girafe +bj1234 +33103310 +naruto24 +butch123 +mancha +homeless1 +gabby13 +14031992 +player15 +200810 +maddie3 +s1s1s1 +cghfibdfq +william16 +10011993 +jarrett88 +21041994 +tiara +sardine +trucking1 +TPklmQ9668 +mindless1 +11111aaaaa +300482 +trinity5 +amanda06 +estefania1 +fernando9 +rideordie +molina1 +16051984 +dancer16 +202 +Toronto +stephanie8 +florida09 +fuckoff9 +griffon +sasanext +summer89 +13041984 +comedian1 +manuel01 +500050 +fotball +bankhead1 +060887 +751953 +carter01 +198203 +140192 +04011985 +01051992 +scooter4 +16071986 +parfum +270284 +newhome +lemonlime +marie89 +alannah +raiders81 +a1a1a1a1a1 +chris04 +311280 +03011985 +pringle +professora +sandi1 +sexy03 +saintsrow2 +sangre +ryan24 +keziah +maple12 +daniel96 +invader1 +loulou123 +kayla15 +170283 +andone1 +master101 +fktrcfylhjdbx +diva101 +080292 +2ps5wLc4xQ +060609 +Kenneth +uchiha1 +toxicity +200482 +11111k +jonathan8 +student123 +lauren15 +lovemylife +ginger6 +1chick +170992 +brian23 +mikey7 +180682 +allahu1 +2277 +lsutigers +22061983 +kiefer +michal123 +heihei +171080 +ginger14 +kristofer +chad85 +280282 +07081988 +god4ever +museum +jeff11 +25041983 +jo +06081984 +jamaal1 +manuel11 +24071984 +reddevil1 +Lindsey +siberia +anna1998 +leto2010 +boss1234 +11101992 +nimrod1 +nuclear1 +scotch1 +mando1 +poohbear21 +04031986 +tuna +060388 +051182 +1606 +hamster12 +14051983 +10111993 +1234aaaa +21101994 +121096 +27071983 +24011986 +090290 +savannah3 +26031989 +joao +rdfhnfk +anime101 +09071988 +270583 +vivi123 +030591 +harry11 +bujhm +butterfly123 +220882 +love50 +mylife12 +amber08 +domingos +nixon1 +07121986 +qw1qw2 +super69 +hokies1 +lola13 +pancha +horses7 +sat +191086 +sexymom1 +kcchiefs +04021990 +ksooz +fishin1 +250481 +2552 +230182 +160481 +lanlan +greenville +teamobb +ivan13 +09091982 +goofball1 +montana123 +jerusalem1 +cookie18 +melissa9 +alessia1 +awsome123 +14041982 +leslie2 +nihongo +bleach12 +1988comeer +yoville +southside6 +291081 +ja8yc8uxsx +17111991 +05041989 +09081988 +marley01 +DsmWssR955 +jomari +eeeeee1 +manhater +06101986 +10041982 +tongtong +070489 +2606 +nothing! +14081992 +friday12 +Elaine +starman1 +amanda25 +0410 +maicol +nails1 +170292 +151985 +daffodils +lele123 +08021992 +vanina +06121985 +270982 +redwolf +davidj +145263 +140580 +donald12 +22041982 +261281 +100578 +ace154ever +041083 +cheeta +fernandito +18011984 +nana23 +jenny22 +alalal +aolsucks +vitara +kevin! +400604 +09101991 +110394 +mani123 +3105 +serendipit +emma07 +loveguru +spacey1 +shaquille1 +pasha123 +5starg +zamalek +100677 +187 +310384 +reaver +porno123 +123234345 +romanista +132333 +newlife7 +booyah1 +skaska +iloveu15 +mustang94 +wolves123 +race +overload +william06 +220578 +rodriguez2 +steven16 +monkey78 +atanda +zooropa +flavie +theone2 +love1111 +babe01 +14091985 +08101991 +david. +050291 +hannelore +hollister6 +galang +siberian +140295 +050387 +200480 +sashas +jayjay13 +123pimp +gemini23 +12345698 +nassau +kitty16 +08011990 +gopher1 +220183 +luke01 +eminem5 +blue29 +whodat +memo +babylone +money2008 +invaderzim +unleashed +imbored1 +choco123 +basement1 +money$$ +factor +1thuglife +12501250 +250781 +198427 +jayden04 +wayne3 +190282 +favorites +050785 +01081983 +08061992 +skate4ever +heater +guitar4 +party2 +merlin11 +02041980 +24031985 +akinwale +060785 +kai +bigboy14 +Sebastian1 +123happy +19851986 +prince21 +25021984 +110577 +jason18 +lavida +hoobastank +18051994 +steward +adi +221989 +shannara +260892 +boulder1 +intense +zasranec +1pickle +diane123 +milhouse +210681 +27041984 +ilovem3 +hairy1 +shutup123 +180293 +qwertyuiop1234 +jimihendrix +huntington +sniffer +summer17 +RiversideC +jazzy13 +mikel1 +rage +eden +groundhog +08021985 +nfqcjy +1144 +sundari +9379992q +computer8 +poiuy6 +hello45 +poissons +1923 +newyork10 +160991 +fkbyf001 +flathead +grad08 +010881 +Mark +04011987 +300192 +baggins1 +31011986 +05121992 +07011988 +rachna +charchar +09061990 +alanis1 +010283 +navigator1 +lastfm123 +puta +mostro +adeleke +lis +stafford1 +10051982 +159357q +classof12 +010286 +171082 +1236540 +kitty08 +b111111 +1321 +yuiop +170382 +rainrain +flashback +selena2 +flossie1 +mookie12 +131984 +wizards1 +janani +boone1 +hammad +UGAuG55jdb +barbie69 +22101993 +bonou2 +060489 +joker22 +balla4life +haribol +dr4life +mclean +15121994 +halliwell +dirtydog +buster15 +20031980 +pitbull3 +pratap +18061989 +striper1 +jackhammer +ginola +nyq28giz1z +longdong +solare +amethyst1 +10061993 +brittani1 +jordy1 +160493 +301191 +g00ber +iseeyou +bitch89 +1goddess +guitar22 +cheese6 +dallas24 +240981 +Yfnfif +brentwood +margarita2 +2323232323 +2406 +travis3 +roses123 +favored1 +300891 +single10 +160782 +blow +love1985 +090488 +night123 +alejandro7 +tiesto1 +kinetic +purple28 +010892 +Gordon +06051986 +26121982 +cupcake101 +usa +apple99 +packers04 +cassie10 +08101986 +sarah08 +lexus123 +24051993 +adam21 +25081985 +31051984 +liljay +spider01 +250780 +atlant +anjing1 +peejay +dolphin8 +alegre +trevor11 +dirtbike2 +babolat +120394 +masahiro +170483 +yourmom11 +lampard123 +falcons2 +24031992 +18101983 +lapins +hateyou2 +blue05 +wijaya +hanuman1 +wang +frenchie1 +050491 +bet +180681 +090189 +vivitron +knight123 +bakla +00000o +mansion +paralegal +060585 +one1two2 +voetbal1 +21041984 +jager1 +lugano +328328 +cleopatre +gfgfgfgf +gabriell +280782 +manilyn +tigger33 +codydog +kizzy1 +cb1234 +victorhugo +000003 +tuananh +renzo +020592 +imhotep +177177 +garry +shadowcat +mariafernanda +weareone +fernand +280287 +010106 +2hott4u +doutdes +chinita1 +iluv69 +samy +23071982 +j7777777 +231278 +cadets +requin +lmfao123 +Lincoln +jonnyboy +mefisto +shannon11 +01051982 +firehouse1 +killmenow +tennis13 +Feder_1941 +blondie3 +fresita1 +1chevy +traxdata +198607 +marcos12 +151987 +4848 +pele10 +krakow +210593 +24121983 +mahler +22111982 +blink183 +123mom +080389 +10101977 +julian11 +register1 +caralho1 +water7 +1gabriel +21081984 +princess29 +01031993 +tomtomtom +doorknob1 +131987 +1please +051082 +liverpool11 +melissa. +rc.irf +stupid4 +olivia4 +adrian08 +asdfgasdfg +ak123456 +500062 +orphee +06121989 +jonathan4 +lafayette1 +dinodino +jack08 +26101993 +nikon +02061981 +03051992 +190382 +180186 +040891 +sweetlover +harajuku +chelsea. +ilovemymother +cameron9 +password2010 +sponge12 +babyboy! +serpico +sammy69 +fakeid1 +aly123 +benjamin7 +26091992 +pipopipo +joseph9 +goodyear1 +nasfat12 +jenny69 +steven4 +deinemutter +abcabcabc +catgirl +04091988 +heydude +naughty69 +pollyanna +braydon +arenas +daniela2 +freak12 +7979 +контакт +11261126 +blood4 +pooh08 +16021982 +040583 +Brenda +fletch1 +200492 +asqw12 +fkbcrf +130480 +151181 +pantera123 +jo1234 +04031991 +26041983 +110594 +alinutza +maciej +pimmel +gofast +190581 +christen +getlikeme1 +3004 +bharati +katorse +13061983 +101276 +horses5 +2bigtits +201988 +100493 +redeyes +1houston +everybody +ethan3 +brianna10 +11112 +26071983 +getmoney07 +198224 +satoshi +aaaaaa. +ajax +26061983 +16031986 +197411 +cool69 +251079 +01071993 +kayla07 +sebastian3 +190885 +burak +060592 +pacers1 +kayla22 +300882 +221279 +saltanat +110277 +qweasdqwe +199218 +270182 +1pothead +delbert +delivery +2407 +infiniti1 +ramses1 +duckman1 +chocolat3 +110694 +louane +shayan +yamada +Walter +youandme2 +eminem23 +kisakisa +040291 +cacapipi +13031993 +290691 +charlie16 +drawing +7angels +jake15 +04031988 +surekha +12051994 +tijgertje +ilove14 +95mustang +superman33 +19041982 +whatever8 +victor7 +1112223 +160492 +020984 +episode1 +hobo123 +qwerty20 +sekhar +harry5 +02031995 +xavier11 +20071993 +12345678aa +gallagher1 +kitten01 +meduza +ethan06 +garfield12 +26081989 +1w2w3w4w +skoda +jennifer6 +17051993 +annaba23 +darklight +marie25 +ipanema +04051992 +020186 +2525252525 +chakra +14061984 +orders +minombre +gwyneth +papillon1 +fordman +a11223344 +29091984 +renault19 +photon +250693 +24031984 +111222q +5353 +02091992 +rfhnbyf +keerthana +19081908 +pencil12 +penis11 +shital +anaheim1 +marie20 +178178 +hanover +gibraltar +mary22 +joshua88 +titanic2 +619 +rocky69 +daniel92 +darkhorse +arrakis +140780 +21091982 +scuderia +sophia2 +ainsley +belkin1 +15011984 +Brianna +fireplace +16041984 +edinburgh1 +141986 +rjnjgtc +jonathan16 +191986 +061084 +monkey04 +199696 +1922 +01061980 +audition +���������� +23091984 +troia +anabella +080290 +300680 +29121984 +breakdown1 +pompon +04040404 +descartes +amanda1234 +golf11 +30091989 +060786 +beaver69 +260591 +16041989 +mylady +cowboy10 +leonardo12 +1423 +031282 +bluefire +nadanada +wander +08081980 +buttbutt +bombshell +madyson1 +arcadia1 +maryjo +28031984 +p455word +roxydog +lovedove +nigger9 +blood6 +bloodlust1 +number33 +monkey420 +180283 +smiley3 +xpress +20051980 +08021984 +1malaysia +donatello +goofy2 +deathrow1 +babala123 +kaunas +vtkrbq +harry01 +a7xa7x +jake101 +lisandro +gunblade +600033 +july02 +bizarre +kourtney1 +salem123 +elbereth +babe23 +ripdad1 +197512 +kaulitz1 +ladydog1 +clare +Happy1 +zhjckfdf +4thekids +290491 +241987 +xpressmusic +caroline2 +coaster +25111992 +��������� +191291 +naruto0 +240792 +djdjdj +smiles2 +28071990 +0812 +4xxlqU94yO +143341 +candyapple +31101992 +#1daddy +159753852456 +jubilee1 +123pop +courtney13 +jesse01 +nomad +121177 +232 +12081980 +sticks1 +1933 +sniffles +21071983 +240781 +420pot +pato +04021991 +0512 +400021 +324324 +negros +client +010203040506070809 +lovers09 +140883 +raymund +samsam123 +30041984 +ANGELICA +internal +bubblegum3 +030381 +280783 +123452 +1231233 +paintball3 +asdffdsa1 +honey8 +271280 +schoolbus +251985 +imran123 +dillan +summer24 +mewmew1 +waffenss +princess44 +TrustNo1 +wazup1 +lovely18 +pebbles12 +japan4 +daewoo1 +Steve +yourgay +felina +lifeguard1 +Johanna +studly +dark1234 +fiona123 +19966991 +leonie1 +090289 +bballer1 +emmalou +kissthis1 +dragana +bobsaget1 +slutface1 +battousai +198207 +manuel10 +7845120 +290582 +fhnehxbr +breebree +mylove09 +i4gotit +tigers4 +gatekeeper +55555s +02011991 +lunarossa +1452 +jupiler +1alyssa +251279 +170481 +deuce1 +bumerang +inverness +22121993 +vfhnbyb +122000 +messer +010291 +081086 +juana1 +keira1 +normajean1 +Vfrcbv +kiki01 +131989 +265349 +30081985 +020684 +htrkfvf +07091991 +kaibigan +ibukun +sargent1 +beer4me +lemmings +03121988 +041281 +17111992 +amoremio1 +pitbull12 +open12 +oracle1 +newuser1 +77 +jaclyn1 +250282 +shelby! +charlieboy +gabriel08 +sushmita +marsupilami +montoya1 +08051986 +manny12 +elijah07 +tommy69 +260492 +teddy13 +155555 +01031982 +Rocky +198507 +170393 +thelordisgood +buster9 +23041982 +020492 +rachel24 +elephant7 +john33 +50 +gofish1 +19021984 +segovia +Dragon12 +anjela +solosolo +440010 +milion +martin06 +polite +fulton +purchasing +telecono +28011985 +lunatic1 +280992 +1a2a3a4a5a6a +perro123 +302004 +lilman3 +adagio +cece123 +hardik +yfltymrf +sexxxy1 +sept26 +pthrfkj +weedhead1 +Hello1 +bkmlfh +071282 +spicey +jacob9 +021281 +spock +256buoWriZ +16051983 +1212qw +20081983 +babycake1 +040682 +denice +Alicia +malmsteen +1savior +1popcorn +motleycrue +fishcake +18dummy +chelsea23 +dylan10 +maria6 +qawsedrf1 +201079 +wolfpac +jb123456 +ihateyou7 +lucky! +buccaneers +160282 +1letmein +01101983 +maldini3 +freiburg +02121992 +040591 +18071984 +ratboy +161192 +270594 +050985 +deutsch1 +jessie! +123.123 +darcy +rediff +196700 +06121990 +Money123 +virtue +blah22 +yeah12 +15321532 +kasia123 +ted +killer34 +fender69 +guyg56fghf +010784 +supply +elijah08 +01101992 +rimmer +dominicano +190483 +panda5 +07121985 +nowhere +030492 +Abigail1 +andressa +2712 +mugsy1 +071192 +21101993 +magique +021192 +azerty789 +sanders21 +18081983 +18081984 +athletics +bigdog11 +03031980 +xantia +qasdfg +rainbow23 +lynn22 +fucklove14 +papero +master15 +football05 +mohan +harley77 +15071982 +tempo1 +taipan +121299 +surfsup1 +300582 +1brianna +newark1 +600078 +cococo1 +three6 +230381 +nasty69 +pimpin22 +lupita12 +*love* +infinity8 +05101991 +260283 +fuckme666 +pretzel1 +daniel97 +skittles13 +230180 +110878 +210695 +vasanthi +scooters +070985 +gene +17071983 +nunzio +cazzarola +bb +ulrike +ducati748 +pimp20 +vvvvvvvvvv +christal +liebe1 +021083 +kaitlynn1 +270884 +28021994 +vaness +gus +dezembro +alberto2 +aftermath1 +pharmacie +anhyeuem123 +kinger +pooh09 +10021982 +kazama +treetop1 +02031981 +pancho123 +02111990 +sexybitch! +12345lol +cynthia2 +06031988 +sleepy13 +colonel1 +magiya +newlife11 +joseph. +cheer22 +welcome4 +piglet12 +201293 +dreamy +07081984 +hockey26 +nyjets1 +music9 +popsicle1 +201093 +nina13 +270495 +deluxe1 +loveme17 +190291 +c.ronaldo7 +678901 +shadow02 +chargers12 +trendy +jm123456 +191181 +antonela +vivek +raffy +joann +fuckme22 +04091987 +formentera +1qa +harlequin +salisbury +150780 +sept14 +13071983 +22111992 +201281 +love1998 +thatsme1 +06021991 +loquesea +marilia +chachita +vivalabam +dikoalam +sadie3 +lolol123 +30011988 +daffyduck1 +190481 +190191 +shivbaba +qweqaz +junction +sanches +16111984 +150680 +cxzdsaewq +nitsuj +nkechi +130183 +305mia +eagles06 +ambrose1 +newmexico +chiave +19071995 +comercial +d111111 +seven07 +mellissa +mich3ll3 +nassima +zachary11 +cometome +krisna +goalkeeper +mihai +diego13 +nothing. +071191 +290682 +ronron1 +qwertgfdsa +sk8ergirl +mother6 +derby +miranda3 +parkside +weezy123 +ditto +salasana1 +ingles +anthony101 +08091990 +chucknorris +slavka +ireland2 +040190 +31071992 +golden11 +mabel1 +hustla +197810 +1singer +19111989 +19841010 +ersatz +111111l +maria17 +osbourne +allsop1 +psicologa +27121984 +011092 +240493 +cash1234 +brand +kubrick +thanhcong +600024 +chinook1 +13021302 +melocoton +090591 +090789 +290885 +fuckit13 +26091983 +meatwad1 +dillion1 +logan07 +3grandkids +marissa12 +Cthutq +yahoo10 +i123456789 +hihihi123 +kenken1 +030309 +baby67 +merdaccia +devin2 +311082 +#1baller +farmville +06121987 +ahahah +ilovemom12 +whatislove +los +kahina +mojojojo1 +aries123 +210394 +trophy +hoi123 +sagittario +baby56 +ferhat +hummer123 +kamelot +hiawatha +onedirecti +goldfish12 +302020 +30061984 +flasher +13011993 +15121980 +040191 +400062 +sasha12345 +240881 +chaotic +08021989 +26071985 +apocalipse +20081982 +13031983 +kaylee123 +hooters2 +chicken21 +sim123 +love2fuck +09041991 +210480 +xavier3 +AZERTYUIOP +peace23 +personne +Winston1 +16021984 +121012 +tucano +illmatic1 +140481 +111081 +12061993 +neopet12 +orlane +060791 +09051983 +squid +rollin1 +demon12 +1803 +chivas21 +football91 +06091985 +gfhjkmxbr +inuyasha7 +heloise +sarah16 +faustine +ybnkoia569 +november08 +remember12 +beba123 +newdom +ad1234 +bmw330ci +23021980 +hiphop7 +hilario +1212qwqw +200781 +angela7 +240292 +highfive +fabietto +06091986 +bruno12 +560003 +Packers +keepsmiling +100894 +04071992 +keines +driller +310385 +love4real +15901590 +net123 +25031993 +abc123!@# +july01 +150693 +emily08 +baba1234 +abcd@1234 +skyfire +bellbell +academic +katies +06011989 +26051984 +131293 +feliciano +pretty09 +qsefthuko +clockwork1 +kelly3 +i.love.you +cosworth1 +bernardo1 +lovesux +27081992 +yuvraj +fuckhaters +whatever10 +almaty +slappy1 +160592 +clean +diver +Chicken +loveya12 +restless +041191 +kaylee12 +aikman +j3nnifer +810810 +razzle +123012 +myspace28 +pretty8 +241279 +brittany8 +140293 +bofo100 +jesus316 +10061980 +rempit46 +coronel +2805 +130000 +azteca1 +cacamaca +nani123 +austin24 +karebear +serega123 +011189 +jangan +1098765432 +melissa14 +0912 +qqq222 +toto12 +m666666 +missy7 +hooter1 +241991 +thebest12 +lauren8 +123578951 +east13 +kaka10 +limited1 +toiyeuem +23071993 +szkola +04071989 +090689 +28061987 +orsetto +alivia +basketbal +yflt +07051984 +blood7 +birddog1 +trafford +XJCrI66kfd +202001 +kodaira523 +220879 +soulfly1 +ward86 +je +slapshock +alexis00 +graduate1 +colts88 +driving +15081983 +cre +1509 +22051995 +phillip2 +17091993 +12091994 +hihello +180282 +040481 +020391 +pepper14 +brian21 +27011990 +scrabble1 +05111987 +kiki22 +040290 +16091983 +2million +brittany18 +newyork8 +200792 +jacoby +16121982 +focker +08031992 +7777777z +theking123 +norway1 +25011993 +southeast +Millie +15041993 +1tinker +zoccola +250679 +mart1n +231193 +muffin7 +kathy12 +27051984 +georgia12 +naruto93 +gabriela12 +kenseth17 +chels1 +05041987 +nanana1 +wolfen +031184 +220182 +canon123 +yankees! +30091992 +alex1980 +spanky69 +heinz57 +dempsey1 +zaqwsxcderfv +24061982 +061192 +15091992 +allah99 +child +fellowship +k123098 +050288 +energizer +05121984 +18031990 +cynthia123 +bitchin +2143 +130479 +130981 +qwerty765 +07061987 +02121981 +160792 +240782 +alexis16 +america15 +lokomoko +171081 +secreto1 +asdflkjh +baseball29 +yomomma2 +220393 +lakeland1 +123456ad +rileydog +250878 +yugioh12 +250192 +25111983 +motard +chessmaster +08061986 +luis18 +1231231230 +11271127 +29111986 +mybrother +PUSSY +alpha1906 +benjam1n +150182 +mamas1 +05041986 +notyours +11061981 +1qa2ws3ed4rf5tg +number18 +03031994 +michael00 +200392 +centaur +marines2 +yell0w +06031985 +whatnot +08021991 +scott69 +09051984 +280182 +230881 +marcus13 +hari +fallinlove +brenton +wootwoot1 +aymeric +lucas01 +13091992 +indy +teddy7 +thething +star20 +blanah +peanut15 +bikerboy +randy2 +brokencyde +05111991 +kool-aid +precioso +charlie17 +qwerty1990 +dianas +annelise +260981 +300191 +joey23 +332335 +ashely1 +kinga +iloveu4eve +meeting +junpyo1 +choppa1 +100495 +adolfhitler +polizia +natalija +kathmandu1 +24061990 +061183 +gauloises +nighthawk1 +112131 +08021988 +mommy2be +1larry +fartfart +hot4you +200681 +application +catdog3 +bubblez +bianca2 +charlie24 +sem +250792 +cosenza +111970 +18011992 +tink08 +scott11 +010592 +040189 +180382 +ypt123 +breasts +roxie123 +290184 +ava123 +skunky +198515 +040883 +abccba +chrispaul3 +22121981 +tro +huevos +baby87 +251194 +041190 +121973 +meridian1 +mag123 +9086916264 +vauxhall1 +ducati1098 +171987 +02061993 +iloveyou04 +peanut99 +coco69 +diablo69 +jonathan! +04121984 +dracon +1802 +040483 +20051981 +grihan +hat123 +��������������������-����� +3344 +lookup +ana1234 +170682 +2408 +Alexandre +wealthy +06041991 +11011983 +walker123 +270592 +caleb2 +040785 +1jackie +eeeeeeeeee +150378 +190592 +bellamy +1fineday +07031987 +9988 +natalia12 +14041994 +jaxon1 +21091983 +tBFj7No671 +guzman1 +rfczgecz11 +bayram +iceman23 +teddy01 +sugar3 +zoey12 +power13 +iloilo +pimp45 +rfhectkm +asswhole1 +ytgfhjkm +q1111111 +tourism +10091983 +poopers +07121989 +tivoli +11121993 +skorpion1 +babyboy22 +School +april2008 +sasha10 +tiphaine +lotion1 +jasmine17 +310882 +15011992 +joseph8 +arequipa +brian22 +Marianne +08021986 +puppies! +301092 +lucy22 +lovejoy1 +platoon +5grandkids +211293 +090787 +0612 +bigdaddy3 +210182 +songs +money247 +zxcvbnmzxcvbnm +genesis123 +180992 +04101984 +oklick +fuck999 +mopar +22021982 +miss123 +sa +cowboy21 +27041993 +sierra13 +20304050 +calliope +me4you +250980 +020693 +030680 +pandit +23091983 +boston10 +08101987 +nikki14 +brielle1 +obvious +fluffy! +brownie12 +ihateu! +23081983 +07101986 +junjun1 +123456kl +aparecida +christine3 +lilwayne13 +skorpio +skater6 +rockstar01 +bulldog11 +timeout1 +robert77 +09081989 +15111983 +rhianna1 +jerk123 +mmm666 +letsgetit1 +kzkmrf +trickster +tw +280991 +juehtw +telefono1 +barsuk +sweeper +giugno +katie22 +yellow17 +27111982 +rockstar4 +azeaze +james77 +01121992 +29111984 +301083 +majestic12 +15051993 +250284 +dragon26 +honda69 +melchor +niunia1 +julija +saber +27101984 +himura +bunny01 +havana1 +fuckyou87 +290384 +oxnard805 +chiens +potatoe +28011992 +130593 +leapfrog +211111 +novembro +040288 +311292 +240980 +fairydust +5zgb2T764B +ass1ass1 +820820 +19051995 +08101990 +261092 +korede +zoolander1 +070794 +humanity +200980 +julie2 +22011984 +superhuman +09101990 +horses4 +fucku4 +stargazer1 +fregis +anna1988 +2601 +hjhjhj +newholland +NO +twilight14 +07031986 +vbkkbjy +campanilla +band12 +241193 +20111983 +121269 +123456789abcd +elle +metal6 +24091992 +digital123 +220991 +10011980 +hannah97 +Spiderman +wetwet +smack1 +sergio13 +cheerleadi +LUCKY +3010 +poopie3 +jack5225 +buckfast +donnell +grounded +noentry +halina +06081985 +200184 +jessie10 +marine01 +missbitch1 +bambus +trashcan1 +curley +andrea16 +301081 +GFHJKM +66666a +rachel14 +huangjin1987 +murmansk +000111222 +bunnys1 +ditto1 +letmein3 +niniko +010691 +1sweetpea +abigail12 +199117 +bhavna +199010 +topgear1 +14021995 +kzueirf +230379 +krokodyl +teremok +kiss13 +water23 +30121982 +cartel1 +1drowssap +ayinde +1apples +1scarface +marmalade1 +amadeo +123india +martha123 +11091983 +gitler +robert06 +2funny +braulio +12345678abc +gazette +nike21 +06011986 +evidence +04121991 +151079 +15001500 +review +bf4ever +lampard08 +2604 +free4me +raistlin1 +cmpunk +foreveralone +sassy10 +anajulia +armelle +15101993 +jazmyn +whateva +skoal1 +gdn7414 +8585 +jagannath +carrington +lottery1 +june1987 +sammy! +charliebrown +130193 +12041980 +100280 +bahamut1 +230382 +warden +2741001 +shoelace +perfect2 +101176 +110379 +crystal69 +01011965 +240893 +drew11 +neha +gundam01 +miguel23 +161988 +lovesex1 +040791 +161292 +1johnson +mickey18 +anne12 +z111111 +bmw320i +minimal1 +29101984 +jake07 +sarthak +jayda1 +padmavathi +forever9 +101097 +09031991 +Bentley +29031992 +hobart +$hex +strat +02011981 +jennifer9 +mistress1 +fuckhoes1 +30041993 +stef +kayla09 +naruto18 +25112511 +270481 +newyork4 +160283 +shotgun12 +lara123 +228822 +dima1992 +021284 +soccer4lif +tester01 +moomoo22 +nicetry1 +residentev +140882 +19111988 +darksoul +polka +31011984 +AaVlG728 +college2 +montagna +230577 +gabita +my2boyz +sajjad +171092 +pooh07 +getmoney6 +surf123 +greater +03091984 +akucintaka +emilyann +ekx1x3k9BS +golfer12 +rose15 +gigigigi +222999 +nt +greenday10 +020880 +annalise +rich12 +1346790 +14021993 +220980 +hahaha11 +abosede +cdtnkfyrf +kayla! +dragon92 +destiny! +zeke +eureka1 +pokemon21 +rad +boost1 +peavey +cecil1 +school09 +mercredi +sally12 +latisha +lalo +custard1 +loislane +britney2 +22111976 +woobie +sept28 +beaute +1603 +flora1 +leighton1 +isidro +kennyg +221001 +tinker10 +bubbles16 +bmw318i +tokio +chris#1 +palestine1 +ricardo2 +a123b456 +17021984 +12345Q +slater1 +03041993 +smoky1 +naruto17 +ara123 +jai +disc +playboy22 +iloveu1234 +helloman +abcdefg. +198309 +14011984 +198506 +bopper +xk55xDxCYR +maxell1 +030394 +steven17 +erfolg +05011991 +china2 +03051984 +danielle8 +homestead +hoanganh +012345a +diamond! +craft +03031995 +kindred +booster1 +donald2 +panda3 +199020 +05081984 +170684 +ali786 +ishtar +adrian21 +oreo13 +sept29 +lauren99 +kratos1 +boxer123 +water22 +200192 +gifted1 +demarrer +chad12 +hamida +cicamica +PLAYBOY +nikki8 +150395 +lytWa813iB +caspian +010195 +puma123 +dkssud +7896541230 +141081 +alesia +22051982 +310392 +nakita1 +DENNIS +juergen +chloe5 +patrick14 +estopa +cancer7 +halowars1 +pitcher1 +29011986 +mack11 +excellent1 +2pSXVVd7 +09121985 +19281928 +09081984 +23091994 +310792 +optimistic +paokara +11101993 +dirtbag1 +06011988 +alias1 +alejandro3 +gothic2 +ncc-1701 +27101985 +help911 +mariel1 +bolivia1 +school1234 +59piru +aspirina +youandi +hakim +kardon +carlos24 +171984 +agata1 +21121994 +1sexyman +punkrocker +198314 +boogie123 +dexter21 +kloklo +010681 +calamaro +15111981 +corona13 +mikey5 +29041984 +1soldier +160880 +22071994 +1456 +hotspur +mexicali1 +mybitch1 +sen +lashae1 +tweety101 +jordan93 +121202 +chichi2 +071085 +fourboys +myonly1 +178500 +140208 +myspace90 +belly +rayquaza +stratus1 +060784 +alesya +rangers1690 +170170 +28101984 +1babydoll +olivia! +1qwerty7 +�+��������� +wolverine2 +lololol1 +carbon12 +02111988 +assassass +molly101 +jordan94 +21031980 +diogo +250579 +brothers3 +salam1 +230281 +stephen12 +ethan05 +161081 +junior02 +dogs11 +22101980 +27011985 +jared12 +komo123 +dumitru +addicted1 +020680 +30031993 +anacleto +candy09 +wolf11 +br0ken +290492 +050489 +emachine +opensaysme +khairul +kalima +dominican2 +06051989 +finder +escorpiao +myass1 +23101993 +ilovejose +25011994 +jeremy10 +bagpipes +rafal +12061983 +xdf65b6666 +150193 +clinic +443322 +mamoune +angelina2 +brisingr +07121984 +taobao887 +spike11 +mylife09 +154263 +iluvjesus +harbor +santos12 +1barbie +wel +erika12 +ljames23 +jacob! +sybil +rakizta +120396 +mommy24 +031182 +lindsay2 +170893 +08091985 +kamryn +speakers1 +shovel +030189 +twentyfour +16031993 +stomatolog +protect1 +010176 +10101996 +yahaya +cincin +natalie5 +igorigor +spider69 +viper2 +cupcake10 +Corvette +putter1 +301181 +cheese9 +11041980 +cumberland +stephanie! +altoids1 +280482 +dario1 +bigtruck1 +girls4 +200993 +chrysler1 +marcel123 +gizmo3 +071184 +27111988 +emmett1 +06031989 +pariss +010792 +basspro1 +26011993 +dylan7 +123123c +45683968 +kamille +climax +1marcus +jeffrey123 +380009 +qwerty98 +1aaliyah +poohbear08 +abaybay1 +doradora +solar1 +131078 +angel4ever +198413 +241179 +star89 +121266 +19021993 +15081982 +venus123 +babyruth +play12 +madurai +4815162342q +dunkin1 +400000 +09081986 +churchill1 +hola11 +05101984 +25101993 +hayden08 +radios +homestar +dakota4 +nightingale +01041982 +140692 +skillz1 +sys +Minecraft1 +man1234 +sluts +skater16 +simplyme +111277 +nemanja +joselyn +may1990 +hakan +fraser1 +dicks +linkedin1234 +18121993 +rascal01 +poohbear15 +1panther +football97 +windows8 +laura22 +15061993 +codybear +shaun123 +genevieve1 +dehradun +compaq01 +010591 +cherry8 +198221 +karan +honda97 +lucila +fender01 +240494 +trinity01 +02121982 +danilov +041183 +moschino +22101981 +210993 +111111c +131093 +waylon1 +8rlB9l1sqU +579395571 +charlie18 +eatpussy1 +lovehim2 +flubber1 +06051983 +280383 +mollie123 +198714 +deangelo1 +chatham +tommy01 +morita +25011983 +martinko +123123aaa +chanel2 +buffy2 +autumn11 +england2 +redfox1 +polar +04011990 +drumnbass +isaiah123 +65432a +malakas1 +17051983 +knight12 +08041984 +guessthis1 +261280 +1420 +babyface12 +blanquita +casey7 +missthang1 +camila10 +150880 +lovesucks! +shah123 +legenda1 +faith13 +14041983 +gin +penguin11 +alex2011 +tombstone1 +suzuki600 +shippuuden +jackson9 +godknows +emily14 +231078 +15031992 +raster +020281 +270682 +metallica5 +charlie05 +vlad2000 +meditation +09031989 +robert88 +19011993 +vanechka +560027 +Heaven +korn12 +020580 +199316 +eminem21 +vfr800 +marlena1 +pussy9 +portugal7 +27011984 +marzipan +dirk +army12 +15041994 +codename47 +hooligan1 +hajduk +penney +postman1 +redsox21 +110894 +queen13 +moon1234 +jeremiah2911 +777222 +mann +apple24 +chapulin +asus +kokos +frankfurt1 +opportunity +zepplin +tristram +smiley7 +fedorova +kjv1611 +bill12 +250879 +777123 +03041983 +anitas +vegeta12 +nigerian +1teddybear +samuel7 +2100 +18121981 +23031995 +junior. +bosshog1 +20011982 +16091984 +rebecca3 +methodist +nine +mariarosa +pretoria +ribery +199514 +qwerty76 +Thomas1 +smith12 +lluvia +darshana +cicero1324 +nick17 +lemonhead +jeferson +anna14 +smokey23 +asdfghjklz +badass13 +dragon007 +andrea! +shaila +170482 +11061993 +jacob09 +lifeboat +1q2345 +turkey12 +03111986 +lupin3 +alicia13 +vasquez1 +gocubs1 +toenail1 +danielle23 +lumpy1 +Welcome2 +aaaaaaaaaaa +virgil1 +111122223333 +224224 +moonman +victor3 +25111984 +06091984 +100395 +010387 +death5 +marieke +bmw316 +23081992 +boogaloo +lou123 +07081992 +291280 +090191 +josh101 +616263 +2612 +lancers +lucky25 +muffin22 +javier2 +04021988 +alexis17 +jojo21 +loveyou23 +smoothie1 +pirelli +160393 +0305 +Nintendo +lyrics +saints123 +fenerbahce1907 +braces +21011993 +stephen7 +kyleigh +dallas81 +gamestar +xi345BJFVP +edgewood +18051993 +groningen +13111992 +moonlight2 +chienne +iloveubaby +2muchfun +frechdachs +251986 +newera1 +jenny21 +forever27 +12011982 +anyway +15031993 +10031003 +chato1 +150481 +crazy09 +baguio +iloveyou29 +saddie1 +merlin13 +nexus6 +chapis +199018 +230493 +282930 +permata +16041983 +sandy7 +198616 +220679 +DDDDDD +tam123 +bugmenot +banshee350 +doggy7 +djkrjdf +lovemenot +juandiego +letmein11 +678876 +sexygirl69 +03011988 +seekbang1 +040592 +198328 +alevtina +sarah17 +160984 +babydog1 +bobdog +030191 +deb123 +password54 +08051992 +horses10 +1hotchick +sudoku +porsche9 +01091981 +090589 +09041988 +johndoe1 +07101985 +2sexy4you +06021984 +nanonano +12345678ab +1z1z1z +332332 +24061983 +27061983 +midnight01 +sommer08 +asda +s55555 +06091983 +010985 +prabhakar +yourmom13 +rockstar15 +serrano1 +baphomet +blackie2 +30091990 +iceman11 +fred22 +2541435 +13121981 +305305 +190186 +24051992 +rafa +vitali +adinda +03111988 +happycat +kjgfnf +vista +lala21 +janka +21041983 +lovepeace +1234567892 +dayana1 +aqua +samantha15 +bondage1 +14021994 +deerhunt +050390 +040409 +06071983 +92631043 +linkedin10 +14011990 +ultima1 +loser8 +021191 +daytona500 +198916 +21091993 +kk +000420 +leopold1 +250880 +spiderpig +peach123 +080588 +04101987 +8888881 +svetlana1 +albany1 +15021982 +casimiro +tahoe +07051983 +ihave3kids +greenman1 +macherie +231093 +babyboi +playboy16 +payday1 +juicy2 +ivette1 +010482 +socialbook +doggone +coheed +05081990 +04021985 +morgan09 +124536 +240580 +antonio23 +branch +560064 +old +malysh +monster99 +kazbek +cooper7 +pasodeblas +10011982 +ganda1 +tomkaulitz +weezy +timofei +gbaby1 +coupons1 +gokhan +1cutiepie +070987 +blessed12 +roleplay1 +100193 +gemini123 +johnson3 +hellomate +������� +shopaholic +1726354 +pineapple3 +stressed +11051994 +denver15 +0214 +SCORPIO +max2010 +1iffQb66tW +foufoune +24071980 +bungie +golfball1 +freedom6 +lild12 +00001234 +anna1991 +150380 +takeover1 +kailee +carmen13 +12051982 +m55555 +060984 +jonas13 +crusty1 +ramstein +honey07 +kir +170993 +nick09 +vfvekbxrf +eminem22 +bozkurt +gordis +04041981 +tetsuo +ness +JEROME +04081985 +030892 +220392 +220793 +sorento +567 +270292 +f0lhVBoK +23081993 +2muchmoney +dududu +nightowl +greygoose1 +castaneda +scopare +billy11 +nayara +280982 +190383 +qqqq1234 +вконтакте +bestie1 +02071981 +tunnel +hellobaby +rockhard1 +25061982 +teddyb +140993 +spike3 +dumass +casper7 +economist +therock2 +green27 +stylist1 +pokemon14 +leonel1 +1921 +091292 +11122233 +02121990 +lennart +exbntkm +spartak1 +29121983 +james. +ankush +hood +charge +caramelle +160691 +13641364 +12071994 +best12 +613613 +magazine1 +27121992 +cristel +1qazxsw23edcvfr4 +baby96 +stitch626 +xiaofeng +telekom +xavier07 +krishan +dipstick1 +141093 +199600 +danilo1 +bhabie +241079 +lena12 +mudar123 +fpna23aAS1 +animals2 +jesus001 +chloe06 +221992 +jerk +29041993 +reseau +cody22 +280583 +honey16 +penguin! +160382 +13061982 +lioness1 +400056 +2401 +29021992 +kabayo +biscoito +moonpie1 +JORDAN23 +210481 +dreamer7 +dark13 +pensacola +hoffmann +amber4 +301291 +02121984 +roach1 +cabeza +ROBERTO +in +lawman +ashoka +17081993 +wolf1234 +princess30 +mughal +noynoy +17091989 +080986 +18111983 +04101989 +cute18 +asm +05041984 +yahoo. +Cheyenne +Donald +joshua1234 +050883 +slave +vampire6 +piercing +05061982 +cas123 +121212z +brittany17 +sophie5 +chayank +251278 +100695 +02101982 +1608 +brother12 +sports5 +araujo +jasmine101 +sanrio +double2 +131985 +sammy8 +198403 +100678 +laulau +camille22 +toyota12 +book12 +salsa123 +123456dm +198503 +avokado +booger11 +14091984 +44554455 +02051992 +linkedin13 +eagle12 +miangel +sheshe1 +dabest +andrea17 +brooke5 +02031980 +polipoli +scruff +Happy +X15piq8snJ +200992 +m7777777 +loveme88 +tatenda +caboose1 +00007 +25011982 +ilovesean1 +151291 +asd111 +archie123 +7123456 +singlelady +relientk +tink10 +mama14 +mexico16 +malfoy +fdhjhf +manutd07 +slick50 +karin1 +22102210 +03101985 +240592 +establish +anahi1 +hanibal +030292 +random2 +passwordnew +domino123 +lovemoney +bonnechance +191082 +kumars +whatever9 +google10 +qwerty92 +pookie69 +010392 +tdws011286 +pigeon1 +misspiggy1 +madison02 +1ranger +bobita +ashley95 +61616161 +22081980 +09041984 +ladyjane +22031993 +iwillwin +avellino +021091 +microwave +heart5 +happy24 +newmoney1 +07031989 +charles01 +piglet123 +ilove8 +051091 +chiboy +monina +26081983 +02091990 +sept30 +zkmxbrbcbkf +bailey04 +catfish2 +kayla16 +pimpin14 +2705 +financial123 +nicholas9 +latina13 +Q1W2E3R4 +iloveit1 +130992 +patitofeo +1single +zamora1 +04101983 +chester01 +080192 +crispy1 +030395 +jemjem +summer33 +hancock1 +aaron07 +disney11 +nadira +04111988 +fuckit. +petros +151178 +24121980 +1denise +snakeeyes +120795 +020792 +box123 +251984 +cheese14 +EMMANUEL +01091980 +paarden +ethan07 +matthew02 +table1 +nectar +jammie +alexander! +198125 +joplin +love789 +duval904 +1stephanie +18061993 +02101980 +numb3rs +080689 +badass3 +samsung9 +198223 +200900 +gladstone +28101982 +ashland +1801 +150679 +123456xxx +16011988 +sk8123 +printesa +cavolo +myloves +818283 +apokalipsis +121297 +spencer7 +sophie08 +plankton +emma2007 +mexico07 +ilovej +121203 +d1d2d3 +040584 +112233445 +ranma12 +flip123 +141280 +panda7 +natali1 +badshah +11121982 +emily05 +280283 +sexygirl11 +zse4rfv +mj2323 +casper3 +210193 +quack +rennie +chocho1 +hiphop3 +Blondie +281093 +lorna +sampath +teach1 +bully +400077 +bonny +softtail +06061980 +280384 +180893 +shithead12 +zxc456 +poopy5 +sundown +niccolo +06101991 +091085 +patrick15 +27121982 +221293 +eloise1 +qweqweqwe1 +biquette +280878 +desperado1 +kika +080391 +161986 +220394 +j3nnif3r +vbitymrf +tooshort1 +pimp88 +popkorn +vfieyz +bettina1 +olivia05 +zarate +billy13 +03011992 +beerman1 +mickey17 +240282 +myspace94 +24061984 +110101 +volcan +summer1234 +060484 +dallas8 +santiago12 +allstar12 +logitech2 +azn4life +cristianor +fordranger +toasty +girl101 +hockey87 +140880 +1245789 +031191 +iloveemily +011190 +asawakoh +30071983 +steve13 +ravipass +ktybyuhfl +winter5 +17081985 +198715 +150579 +res +11041993 +abcdefg! +28041994 +isabelita +201294 +29111983 +raghavendra +iamking +maranda +doo +pepper6 +shorty9 +swe +desktop1 +qq +prisma +direct1 +nicole0 +090190 +porque +kokomo1 +puzzola +millie2 +topdevice +ashish123 +truckdriver +dan1234 +kalvin +pattaya +336633 +djghjc +jason25 +omfg123 +05101983 +t5E1q9shfD +tracteur +mickey24 +07041985 +snowman12 +cornerstone +cdznjckfd +abgos999 +CountyLib +allison3 +198608 +protozoa +010883 +01051993 +120876 +yoda123 +040991 +marshmellow +thebomb1 +rafale +30081984 +foggia +EFB +02051980 +single07 +alikhan +120378 +andrea4 +11051105 +119110 +gutter +vlada +harley88 +171989 +die123 +bobber +talent1 +teamojesus +machines1 +leboss +09031985 +yamini +yu-gi-oh +197910 +bigdog13 +198127 +311080 +johncena5 +bigdick12 +060884 +cthuttdbx +nathan16 +101274 +230893 +pimpin9 +11061980 +070189 +y123456789 +21012101 +01081993 +johnathon1 +santos10 +1monique +celia1 +chickadee +crawfish +iloveme09 +201292 +02091981 +rawr1234 +yahoo22 +nice12 +tiffany5 +Bailey1 +Qwertyuiop1 +290189 +190883 +19111983 +homer2 +rootroot +abcdef3 +barry123 +230277 +peugeot1 +harmonia +napoletano +vladut +15061982 +chonchon +detective1 +kayla6 +memoria +vfrcbvjdf +nicholas8 +Pw898klkaG +devon12 +231279 +mummydaddy +280881 +loka13 +180187 +gunit2 +141141 +240593 +alfaomega +tishka +lex123 +hunter20 +dope +hailee1 +2402 +светлана +lizzard1 +anarchy666 +112233z +myspace32 +pussy1234 +1slipknot +11119999 +innova +15111982 +peinture +imperio +anna1993 +stapler +120695 +300483 +13021983 +hotdog7 +230181 +lauren08 +sexybeast2 +broken12 +21061994 +james27 +200491 +88keys +metalman +nikole1 +backyard +ask123 +08071992 +09051988 +sillygirl1 +fktrcttdf +19121993 +528528 +700029 +23101981 +cecille +dav123 +17111983 +chupamela +alaska2 +superpuper +05021984 +gabriel07 +12345671234567 +sweet8 +annies +deepa +gusanito +PASpass1234 +devil2 +adriano10 +soulreaver +albator +poopoo! +eightball8 +liverpool! +bigboy9 +snoopy14 +210579 +08071990 +lovefamily +batman00 +j123123 +1iloveme +junglist +4monkeys +070288 +021182 +tevion +mm +20061980 +corona12 +14091992 +ilovemen1 +Maximilian +151279 +16061994 +16071993 +manis +domenic +2356 +lufthansa +01111986 +arizona2 +buthead1 +lindros88 +extra +29101983 +rfpfyjdf +28021983 +beautiful6 +infirmiere +ferrero +030484 +kiekeboe +floris +07011987 +06051992 +marcelo123 +gitano +100595 +vandam +04031992 +smiles123 +worldofwarcraft +youtube12 +020280 +01101982 +rose16 +hammarby +09011990 +30111986 +120505 +rudy102 +sharlene +anthony04 +maravilha +nhfnfnf +chloe10 +bella05 +16021985 +peaches22 +sandiego13 +198917 +02071980 +snickers! +Daisy +leona1 +megan10 +genial +girija +chloe07 +romantica +shopping2 +dewa19 +741000 +010201 +monique7 +230995 +moriah +el1zabeth +couture +Warcraft3 +jerk77 +ladybug11 +20111981 +oceanside1 +nursultan +linkedout +polkadots1 +mak123 +07091985 +560011 +terry12 +mixtape1 +tacobell2 +avrillavig +egyptian +marlowe +xavier13 +aventure +04041982 +1bubba +080488 +mishka1 +sexyako +050594 +paco12 +frog11 +dawn12 +02081993 +050791 +160391 +02041981 +160184 +110181 +dorothea +redsox3 +ostrov +15051995 +20011994 +fordgt +ganesh1 +24051984 +08011991 +13091983 +london2010 +bassett +falcon16 +14021980 +fuck15 +198513 +emma2006 +harley00 +vitaly +01101993 +xdxdxd +qn4KBWv559 +bourne +050784 +ben12345 +nene13 +angeldust +facebook2 +98765432100 +jackson23 +sandy13 +askimaskim +kaitlyn2 +pogo +p1mp1n +pokemon. +0510 +bulldog13 +balikpapan +leo1234 +sociology +090786 +122188 +marshall2 +a456123 +marine2 +ellipsis +310783 +07091986 +friends23 +200682 +1brandy +rabbit11 +country123 +mosaic +05031993 +100793 +lollipops +17091984 +noneya +27051985 +shyann1 +gizmo11 +bonita123 +mike44 +thegame2 +06111990 +ilovedylan +laure +23061982 +gerasim +290292 +hijoputa +ambot +zodiac1 +sarojini +doc123 +20101980 +scotty123 +godhelp +daquan1 +whore12 +invasion +dem +myname2 +catalog +hearts! +140707 +luke11 +stanley2 +260380 +04111991 +ikarus +06101985 +02111984 +bigtoe +azertyuiop1 +tinytim1 +100percent +power4 +noone +200283 +topmodel1 +qwerty1234567890 +02111991 +dolphin11 +mikey01 +umpire +lilbitch1 +poipoipoi +longjohn +090486 +rugger +trust123 +johnny08 +140206 +rjntyjxtr +poohbear23 +3838 +michi1 +tony16 +gotyou1 +greeneyes2 +06041986 +bigjim +adriana12 +201061 +earthquake +pitbulls1 +guitar10 +kri +baboshka +qwaszxerdfcv +240381 +peanut24 +060189 +02051982 +071087 +andrew27 +100878 +msn123 +jason! +07021984 +somalia +cassy +280485 +260606 +26011992 +zuzanka +01031981 +ilikeu +fidele +josh09 +jt1234 +pepsi5 +06031983 +banner1 +mum123 +110278 +gizmo01 +ooooo1 +dd +azerty13 +antonius +legion1 +051192 +kumaran +mark14 +14031983 +boogieman +012511n +natedogg1 +rere123 +bubba21 +instinct +bar123 +hockey55 +jokerjoker +bella2009 +jackass11 +motherof5 +bella! +fallen13 +thehulk1 +pearljam10 +taylor1234 +unicorn2 +pretinha +�����+������ +190982 +boknoy +200280 +190381 +02040204 +180182 +nicole29 +joseph19 +110060 +shepherd1 +111234 +happy88 +friendsfor +17031983 +170594 +0104 +bagger +310781 +196400 +trick +advertising +frazier1 +260581 +caritas +newtown +buster1234 +martinek +corsa +blacky123 +chilango +tanveer +hammy +karabas +barnett +green. +shitbag1 +aaron22 +2hot2handl +2605 +love345 +hello25 +080190 +30081992 +anna1992 +10051995 +marecek +holder +jamari1 +widzew1910 +red555 +110777 +Killer12 +231984 +03031982 +strings +sabrina7 +marcus21 +latisha1 +angella +magnetic +050389 +berlin123 +b8cA6yz1nJ +hollywood5 +woods +05011988 +darknight1 +freebies +yyyyyyy +1lovee +ALEXANDRA +sverige1 +spotlight +johnny10 +jadore +dragon95 +logan10 +57575757 +yyyyy +fylh.irf +ralphy1 +nazarova +franchise +kambing1 +180394 +19071982 +gabriel4 +taylor101 +031283 +tommy22 +dubstep +homeschool +corleone1 +march07 +07021988 +4g3uvrXn7W +rainforest +kohinoor +Robert1 +michalek +24121993 +king17 +101072 +1234567890d +trinity12 +10081994 +freemail +kyle22 +171293 +l0ll0l +200879 +chloe08 +angel333 +frankie! +pepper9 +17031984 +hhhhhhhhh +lada +wingnut1 +27101982 +sweeney1 +imhere +memyself&i +messi1 +scarab +12901290 +brandon101 +smackthat1 +senators +banana10 +jakejake1 +06031992 +roblox +copper01 +persephone +paulette1 +a1b2c3d +spiritual +19081984 +lovers08 +Black +Iloveyou1 +200678 +310391 +230193 +72727272 +blackass1 +290781 +623623 +galata +HvqJvxVb76 +servis +farhat +guitar101 +redsox09 +samarkand +artem1 +0112358 +alexis98 +271984 +fuckyou25 +cameron! +191091 +cathleen +123abcde +mariaeduarda +jesse14 +160582 +laurent1 +madiha +220193 +260982 +jones12 +05021993 +BUBBLES +ktyecz +marie1234 +pink95 +120194 +23041983 +030681 +slutbag1 +29081989 +friends21 +cha123 +03091990 +211192 +230380 +chase01 +46and2 +hx28o9e646 +070592 +trinity4 +pretty9 +rtrtrt +31101983 +erdbeere +twokids2 +icare123 +jason09 +day +eggplant1 +fit4life +1butter +13631363 +cristo7 +19861212 +joker15 +bartolomeo +0304 +1500 +glock45 +landon08 +poussy +vanilla2 +protein +28071984 +duke21 +blonde2 +whyme123 +020781 +maison1 +1314258 +alabala +eric21 +secret. +adidas23 +17121981 +iubita +honey15 +apple15 +nelly12 +babygurl19 +bibi123 +271091 +221179 +inuyasha3 +anthem +quintin1 +bigman123 +zaq1qaz +pitbull7 +3103 +sunkanmi +illini1 +sasukeuchiha +maharot +7sfqc8zI5D +22011983 +holden05 +bmw320d +faithless +Alexandr +natalie01 +01234560 +18101982 +rui100 +123fuckyou +cavalli +22061994 +jeremiah29 +fremont1 +noonie +Freddy +soccerboy1 +290484 +sebastian7 +genesis12 +161987 +parking +ilikegirls +fietsbel +godrules1 +1loverboy +Montreal +donegal +sample1234 +ilovepizza +06081989 +123123456456 +ibrahima +091191 +cutie17 +123456zzz +28121982 +Dustin +magoo +16061982 +1602 +2486 +300184 +tabasco1 +staystrong +armonia +16071989 +260381 +neisha1 +hateu2 +novell123 +laralara +drewdrew +198121 +050285 +230294 +montague +congress +b43m6xhiee +19821983 +griffey24 +denied +paloma123 +starling +capoeira1 +ryan05 +alyssa14 +170777 +mybabe1 +mustang93 +airman +celtic7 +21071981 +gasoline +marleen +031092 +seraph +money34 +maddie13 +asshole10 +tigger00 +collier +galatasaray1905 +060289 +pooh21 +epson1 +140381 +password36 +liberation +mariner1 +danni +ammukutty +08051988 +sebring1 +kirstin +dsdsds +lilpimp +godlove1 +chevy07 +190683 +andrea18 +06051985 +ninjutsu +falcon123 +sweet09 +mausi1 +514514 +11031982 +rocko +emma2005 +30031983 +170593 +220993 +290192 +triste +26111989 +olivia22 +adrian7 +sorokina +ficelle +dwade03 +emmalee +130381 +chevy3 +blondy1 +asdasd12313d +grenada +guard1 +mamamary +oladele +mario22 +nemezida +hondacr125 +Jaguar +imbored +max111 +142142 +lolipop2 +PAMELA +willie01 +marcus10 +fatty12 +castaway +08121992 +mithun +smiley! +020681 +09061984 +SPIDER +twinkle2 +stratos +251251 +friend5 +manzano +071183 +finlandia +loulou2 +198907 +recon +17041984 +14081983 +brian14 +091284 +cutie1234 +dragonfly7 +natalie11 +04081984 +12051981 +121075 +hounds +bigboy6 +090592 +19051994 +10041994 +260992 +Emmanuel +123Qwe +654321l +footy1 +mello1 +400006 +nikki10 +210479 +091184 +shake1 +pangeran +rockers1 +kurakura +rawiswar +av8Ygj1f2U +rfrfirf1 +miguel14 +iloveboys2 +india1234 +drum +1travis +21312131 +claudia2 +trill1 +260781 +lkjhg +peanuts5 +autumn123 +four4444 +killa7 +07101984 +vbhjyjdf +30051982 +199118 +abdul1 +saskia1 +dragstar +111969 +07061986 +prashanth +10041993 +magnum44 +mim +fire666 +210980 +jonathan15 +123700 +123sss +monkey100 +10021995 +kiki10 +231194 +emachine1 +brooke22 +guineapig +071090 +scholes +soltero +ramramram +25121993 +111194 +fairmont +190185 +mimi14 +lithuania +p12345678 +198019 +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +riley01 +bassist1 +dakota08 +reflection +3500sucks +operator1 +bluedevil1 +tktyf +050983 +02091980 +tekiero1 +jeanmarie +090683 +password72 +abbie123 +love79 +020882 +25051980 +060590 +jesus007 +Harley1 +titi123 +hh123456 +stetson1 +burgundy +creative123 +gangsta14 +apokalipsa +faiths +CLAUDIA +hoover6 +greenbean1 +1realnigga +euro2012 +ghostface +0405 +malone1 +sharon01 +diva13 +valparaiso +cute1234 +25041993 +whopper1 +Godislove +231195 +12031994 +magnat +07111984 +130380 +mustang87 +raven666 +050984 +24031981 +home11 +19851010 +420bud +19041992 +makeme +green20 +london13 +080492 +090485 +connor3 +hottie911 +pisang +princesa12 +cigar +gembird +07061989 +10141014 +brenda01 +franchesca +anu123 +18021994 +shadow92 +130493 +stanton1 +kool11 +nena15 +redeye1 +shepard +renee3 +newyork9 +da123456 +horsey1 +harlan +will1234 +abcdefg7 +direngrey +251177 +asdfghjklzxcvbnm +sexyme2 +cuba123 +tamuna +backspace2 +haleluya +katya1 +14061982 +carlo123 +11041994 +chopchop +19041993 +021280 +newspaper1 +21051983 +sexylady2 +macbeth1 +ilovejeff1 +mandy2 +eatme123 +biarritz +ronny1 +116688 +18011986 +lollipop7 +schule1 +08011987 +ostrich +abhilash +15071993 +girassol +280580 +25021982 +adeyinka +2223 +maquina +iloveanime +290481 +qaz123wsx456 +ILOVEYOU1 +tyler04 +123123as +sektor +pascaline +johny1 +357 +shannon5 +love37 +natanata +8899 +03121984 +serial +watcher +ADIDAS +14121994 +lalakers24 +shorty24 +jonathan6 +040286 +finland1 +william15 +ilovejustin +chanelle1 +muhamad +amanda99 +benjamin01 +ciccio1 +jason15 +cindy2 +fanta123 +trailer1 +strongman +talon +houston13 +echo123 +030286 +shilpi +newfie +casper10 +linares +15121512 +14071993 +061083 +23071983 +swords1 +shodan +Cjkysirj +270494 +vfhnby +tennis22 +dustin01 +211277 +maint +291281 +sexisgood1 +allycat1 +roksana +newmoney +anna12345 +07101988 +WWWWWW +julia11 +luntik +costel +5225 +thegame123 +3friends +081092 +honda94 +aaaa0000 +marcus5 +orlando7 +salesman +147258369q +iloveme14 +26021984 +qwerty27 +juicey1 +freedom22 +031083 +scorpio8 +puzzle1 +luckylady +kenton +mynumber1 +innocence +pimper1 +dancer07 +29121981 +dancer15 +dragon777 +280785 +stup1d +deer123 +nitin +021985 +21031994 +bonnie11 +arabian +interpol1 +aaaaaa7 +07051989 +horus +bayley +08071991 +booger! +230879 +apple101 +lklklk +iloveluke +eagleeye +antonio9 +19041983 +sulochana +160681 +max2008 +STEPHANIE +amor1234 +London1 +ASDASD +mantas +redred123 +ashton2 +101197 +130578 +122009 +adrian22 +ukflbfnjh12345 +golosa69 +070284 +elenberg +040480 +25051981 +cutie18 +rasmus1 +rahayu +gattone +jonathan22 +sophie07 +bear21 +jadejade +vineet +cavite +everafter +slawek +005500 +dragon90 +itsme2 +compras +pinky11 +30111984 +eduardo13 +08091984 +monaro +momoko +09011985 +anna1986 +Qazwsx +Chocolate1 +christos +pot +savannah7 +180492 +slideshow +753dfx +021987 +fuckme7 +24011988 +were +dakota06 +110895 +Douglas +cloudstrife +evicka +valladolid +file +31081984 +we +yahoo23 +austria1 +08041992 +centauro +stink1 +210194 +260481 +lollol11 +naz123 +11081993 +Sommer +531531 +Isabel +get2work +jose20 +181987 +turtle69 +pepsi101 +051181 +250394 +billys +solsol +fallen2 +friends14 +squire +831011 +hotstuff! +28zxrpvNFA +240391 +killer19 +camel123 +mujahid +140193 +vanity1 +ice-cream +julio13 +opera1 +19121994 +210495 +30111991 +steven8 +031082 +lisa22 +10061982 +30011983 +bul +159987 +shit666 +53535353 +11041104 +jesuslove1 +corpse +pa22word +:tytxrf +11111993 +221278 +majesty1 +198628 +formel1 +orbit +travis! +mati +fuck00 +dante666 +tickle1 +ilovelisa +irving1 +091183 +nigga. +richard69 +abdelkader +03061983 +nikusha +sec +060587 +tink22 +191281 +tacotaco +031280 +boarder1 +22031994 +supermann +220678 +200600 +aerospace +aissatou +fratello +popapopa +mortal1 +hilda1 +mylink +abc124 +400028 +chris28 +ewelina1 +topmodel +198716 +06031984 +dumbass! +17021994 +abcdefghijkl +xiaolong +farts +stress1 +loveyou14 +thomas77 +1freak +14091993 +060191 +sandor +saratoga1 +ryan99 +alberto12 +199700 +#1babygirl +thestrokes +pomona909 +aj123456 +scorpio13 +gethigh +su224466 +1806 +us7860loans +bently1 +hippy1 +kubota +060986 +faggot. +food11 +gentry +#1player +miketyson +rajaram +130594 +tippmann +tommygun +manish123 +tigger27 +witches +beast23 +123456S +12051995 +ozzy12 +noriko +dudette +shante +kamkam +babygril1 +investor +fifa06 +hunting2 +MEXICO +291080 +nirvana. +walter34 +21081983 +racers +tweety24 +24111982 +050682 +boss429 +torque +jessica0 +2flowers +080882 +caca11 +twins12 +070388 +yessenia +pink02 +24031983 +30121983 +rangers2 +jazzy15 +jaeger +neverguess +190782 +070587 +danny4 +Minnie +pantyhose1 +25061983 +doroga +Bubbles1 +schooner +skate1234 +wipeout +111093 +tamayo +brandi2 +ratbag +coolwater +chris4ever +050286 +aceace1 +190183 +CAROLINE +11eleven +jack14 +sum41 +penguin13 +rice +04061989 +1580 +forever6 +adam10 +novasenha +420666 +06101992 +lgkp500 +a147852 +arthur12 +20032004 +16011984 +orville +david26 +30051983 +160581 +sasha_007 +fucku23 +saranghe +pimpin420 +olugbenga +753951a +buckingham +2603 +silvermoon +jessie22 +klop +tranmere +110087 +janell +grillz1 +alvina +211093 +wayne23 +30101980 +bayonne +091084 +Asdfghjkl +familyof6 +heather23 +221193 +saqartvelo +v647947 +27111992 +oceanside +080386 +260192 +armagedon1 +DANIELLE +snakeman +13021982 +kenny7 +izzy12 +shuffle1 +master2006 +1arsenal +22121980 +grandprix1 +cosette +vista1 +031292 +gulshan +456456a +chang +teste +summer55 +cleveland2 +dfkmrbhbz +darkblue +back +second2 +blackwhite +zoubida +shiznit1 +090993 +lover4life +vik +buckmaster +honor1 +270882 +pops +sana +dima1990 +faith22 +jojo07 +palito +14071983 +kenyatta +hitech +armaan +uzumaki1 +gallardo1 +latinking1 +nikprommet +kibbles1 +michael101 +crispin +020581 +denver303 +asdfghjkl4 +070591 +17101994 +adrian5 +lingerie +delia1 +kayla23 +jump123 +cnthdjxrf +vascodagama +buburuza +150183 +monica69 +jandi +darkone +vfr750 +iloveyou96 +timothy12 +aidan123 +10091993 +81726354 +123poop +02021977 +9696 +kekeke +matematicas +fallen12 +myspace78 +tr1n1ty +bigboy01 +fresas +euro2008 +15011982 +rabbit69 +203203 +15421542 +multan +luna11 +060491 +26041984 +05011985 +tweeling +12021994 +cupid1 +nash +171991 +edward1901 +07041991 +florecita +193728 +ilovemen +sickboy +scratchy +nasty123 +04021989 +glock9 +06061982 +300792 +08121990 +munch1 +333555777 +071182 +31051983 +bean123 +calling +15041982 +080308 +13651365 +america4 +doubled1 +26011984 +060190 +474849 +abiodun1 +05071992 +q12345q +august88 +happy15 +hello44 +2808 +neogeo +120993 +poopoopoo +shower1 +butts +ninjasaga +06031991 +16101983 +geneve +tylerjames +shadrach +26051983 +lovely24 +sarah6 +01081982 +zxcvbnm1234567 +graceland1 +lebedev +05081983 +snooks +kangta +macdre +courtney10 +198509 +maneater +tomodachi +13121993 +bleeding +Moritz +cherry9 +twist +venom123 +steve69 +salome1 +123angel +inlove08 +pheobe +emo1234 +25121981 +supercat +munchy +416416 +tunde12345 +020393 +laguna2 +030683 +13071982 +290382 +grandma6 +mossimo +180183 +198609 +140593 +sabino +speedster +gumption +hemicuda +citizen1 +kurapika +qwe123456789 +bloodmoney +kiana +linda01 +1234589 +19011984 +gardner1 +6dnwch275049 +charisma1 +130793 +aqwaqw +211278 +15241524 +think123 +170184 +loveing +beyonce123 +giant +248655 +29061992 +numerouno +fable2 +honda100 +youngman +weg63TT243 +elvis12 +180579 +west1234 +toulon +tosser +shithole +whitesnake +Viktoria +breezer +tomiwa +lorena123 +superstar4 +030187 +animals123 +110478 +zaq123edc +13121994 +07031988 +gkfytnf +tucker22 +120177 +jacob23 +061085 +gopinath +blessing12 +011083 +angel4life +24081985 +splintercell +cassia +Hershey +karina2 +transalp +tony24 +tigger1234 +yfcnfcmz +krystle1 +bambam3 +config +220280 +jordan27 +ani123 +010284 +mascha +12332145 +05121983 +correo +thuglife7 +amorosa +lulu13 +killer33 +01111985 +100777 +david2008 +246812 +indeed +iamalone +lollies1 +controle +bonobo +050184 +sixflags +racine +CANADA +199413 +anthony27 +86868686 +28021995 +301194 +rollin20 +cutie45 +harry6 +dominik123 +candygurl1 +jesus4u +11031981 +akshaya +motoguzzi +potatoe1 +success12 +quack1 +231077 +happy25 +04121988 +modernwarf +bossbitch1 +96385274 +210393 +patrick69 +jovita +sketch +Buddy +ishita +070586 +dabaddest1 +heather16 +010983 +boggie +mrniceguy +coco21 +twins02 +pumas123 +kenguru +01111991 +040187 +sumathi +befree +tea +lonelygirl +scholar +kaushal +aztec1 +951753a +270981 +mama15 +evamaria +farley1 +bootie1 +carmen11 +schiller +19041994 +23121981 +torsten +harshit +mysore +04111987 +02081980 +spectra +miguel7 +jason8 +12345tt +baybee +shakeel +eldorado1 +money666 +4568520 +140793 +my4sons +dominic3 +waheed +elephant3 +sabrina11 +wanshuai198202 +03091992 +lola22 +mika123 +gabby11 +tommygirl +chrome1 +venecia +041284 +07101989 +rowland +crafty1 +03121992 +12345688 +20111982 +102000 +carver1 +jennifer20 +20091993 +qpalzm1 +batman07 +devonte +300984 +alright1 +yankee12 +face123 +vimala +august05 +icebaby +ubvyfpbz +longisland +21061982 +bautista1 +disaster1 +04081991 +290681 +jack03 +jayjay3 +1927 +jackdog1 +310580 +misiu +happy2010 +peace09 +asdfasdf123 +010491 +dontcare1 +flopsy +stonewall1 +16101993 +27041983 +honda06 +23031981 +2804 +wentworth1 +tombrady +hugo12 +hobo +complete1 +feathers1 +310595 +130280 +stoopid +lilmike +lover17 +cygnus +edward15 +1qaz2ws +pa33word +crystal! +120202 +kel +joey101 +orange17 +pioneers +dortmund1 +warrior123 +emma08 +drama101 +fucklove3 +boyfriend2 +09071984 +impulse1 +carlos9 +maxi123 +london23 +06011991 +030481 +30041983 +051081 +aaliyah123 +iamwhatiam +looploop +210395 +la1234 +070387 +jochen +slipknot0 +1234rt +230894 +scamp1 +puppy13 +kikka +170480 +22091993 +jesusgod +lauren07 +101977 +12101980 +bendover +pikachu12 +amelie1 +jaimito +josh19 +bijou +katara +human +southside7 +stupid13 +11291129 +04101992 +fede +lovekills +miroku +1courtney +20112012 +alskeo +breanne1 +noemi1 +alicia11 +07121988 +ecapsym1 +asmita +Midnight1 +500013 +230594 +11051981 +198604 +23061983 +mickie1 +Summer01 +bettie +040582 +benelli +andrzej1 +maxdog1 +05011984 +purple06 +samsung10 +iloveamber +280784 +ryu750103 +1united +8765432 +patrick17 +hfpdjl +2904 +071092 +joseph24 +120708 +fucker666 +renee13 +sandstorm +sayang88 +bhakti +28041993 +gitarre +may1995 +19081993 +libido +251293 +0811 +basic1 +201178 +illidan +64646464 +miaumiau +tekken6 +04111986 +191092 +fizzle +lasalle1 +jazz1234 +maikel +08091983 +06081992 +wiktoria1 +123qwerty123 +197712 +19091993 +15051980 +blue100 +jojo99 +041087 +jenson +021181 +060192 +franklin2 +198703 +g76t94prm4 +25051994 +bella15 +199812 +perugia +050982 +diosmeama +hermie +chris2008 +diamond07 +rudy12 +22tt22 +19421942 +doggy69 +08101988 +quarter +vaz2101 +sid +Mar +rembrandt +Destiny1 +breaking +gbljhfc +161079 +dance4ever +Hollywood +1daisy +juan15 +pink90 +hbw +211279 +redskins89 +09101988 +21032103 +wine +04121989 +industry +courtney5 +skater21 +180181 +1907fb +030188 +hello17 +cuenca +gtagta +28111984 +ecology +hockey08 +jackie! +devil69 +sensual +lovelife! +080879 +061082 +omarion2 +198825 +qwertyy +luvluv +makena +playa2 +muhkuh +13091993 +198823 +lorin +tarantul +hor +3011 +11071993 +mol +fatcat2 +renoir +thunder8 +bryce123 +280481 +eminem01 +shroom +charlies +22071982 +power10 +030693 +sasha1993 +iloveboobi +texas09 +laurinha +aaliyah7 +nicole97 +nirvana94 +110053 +harley6 +boogie12 +191282 +brigitte1 +6262 +07101983 +1maria +family21 +198028 +mardan +flower1234 +werder1 +160981 +mogul +140184 +09081992 +160047 +wal-mart +25111980 +06111986 +thomas03 +timeline +030783 +narasimha +121997 +maria24 +debbie01 +ashley92 +210678 +swedru +pierino +220694 +dusty2 +playa12 +rudolph1 +gardens +violon +pasaway1 +specialist +real12 +piggys +ktyf +leonessa +aaron23 +123456852 +mother. +froggy69 +mecanica +girl10 +godloveme +ilovesara1 +pumpkin5 +shawty10 +ashley87 +weird +130779 +16021993 +03051983 +katja +Fishing +polikloh00000 +1husband +diegos +240783 +hottstuff1 +anna1989 +valhalla1 +jayden03 +rfn. +vonnie +www777 +070986 +bandit1200 +dummy123 +13101981 +alyssa22 +100779 +311081 +120496 +slunce +2121212121 +aaron21 +060792 +ballin14 +12031982 +purnima +holy +breana +bananas12 +sembilan +ginny +jack15 +dreams123 +150879 +emma10 +ashton12 +winner01 +dauren +jackson09 +ruby11 +1qazqaz +ou8125150 +02121983 +chloe13 +13221322 +jakub1 +Azerty31 +081290 +smile10 +0103 +ghbdtn12 +122448 +jack06 +myspace420 +operations +chivas99 +06051990 +nicole30 +198709 +smoochie +230579 +coolio2 +maria69 +corpus +241984 +diva01 +Michel +greenlight +qwertyuiop123456789 +28041985 +08031984 +stepup2 +24111981 +14031972 +brianna6 +1silver +justdance +frog1234 +151093 +apples7 +cunt666 +kol +fagget +ilovehim4 +sevendust +sammy15 +noregrets +zamira +candy08 +denisdenis +9yQss2h9uB +melody123 +charlize +SLIPKNOT +01071980 +18071983 +rosella +oksanka +2boys1girl +pluto123 +2pac4ever +mambo +BANANA +150991 +caonima123 +cronin +redblue1 +chileno +1chrisbrow +diego2 +lyrical1 +nokia6700 +verdes +05031984 +01021995 +bipolar1 +30081983 +20061981 +kanyewest1 +aida +freedom06 +arnel +2236 +29121993 +monika12 +matrix7 +04041980 +100593 +flyfishing +ferrari430 +dinero1 +america14 +ashtray1 +centro +08101985 +rintintin +198999 +writing +09071985 +barbie101 +040680 +n0vember +b1x7qN2tuG +rocker2 +stephie1 +090389 +21222324 +born2run +tony07 +qaz2wsx +babygirl34 +29051993 +fuckit3 +16121994 +iluvher1 +251178 +colorguard +calinou +25172517 +24051983 +citation +444444a +victor22 +soulman +abeille +raymond12 +stussy +230793 +dubai123 +infected +twilight21 +Simpsons +87654321q. +190292 +broodwar +09031990 +cleocleo +me123 +smile. +cobra2 +05071982 +270593 +07091984 +23111993 +030581 +Handball +playboy101 +funky123 +crystal21 +imation1 +200494 +281181 +05051978 +dreamteam1 +meiyoumima +bobthebuilder +09051991 +lindros +honda21 +121207 +181990 +18111993 +19051981 +190289 +150493 +18041982 +121196 +juno +guapo +Yamaha +Ireland1 +halloween3 +sinterklaas +smiley01 +30061981 +jayjay7 +xena +motmot +manu1234 +09101984 +code123 +pheasant +abdoul +12111993 +september11 +brewers +london5 +angela3 +stevevai +2234562 +warehouse1 +hiya +laser123 +ama123 +babyface2 +jordan26 +010282 +vfrfhjd +sarah4 +hotdog! +bubba14 +101000 +jennylyn +09061991 +1917 +mariette +21111992 +women1 +Mozart +05031986 +Buddy123 +88mustang +197919 +050487 +19833891 +pretty16 +princess101 +plasma1 +nascar14 +02468 +spike01 +lisalisa1 +marti +marina01 +italy123 +boston01 +johncena3 +butkus +199410 +l0nd0n +cooley +456rty +franta +Agent007 +newyork08 +gfgf +bandit5 +katrine +11101982 +595490067ua1 +pipeline1 +geniusnet +gator123 +starscream +sasquatch1 +chilidog +2806 +nigger666 +cyjdsvujljv +300693 +assa +nyquist +timoxa +dodge01 +treacle1 +tennis! +antiflag +160993 +exploited +gbljhfcs +buffet +ranking21 +steele1 +nabeel +envision1 +pantalon +pferde +122133 +honeybaby +brooklyn23 +starwars4 +martijn +cody15 +2704 +180384 +sammer +herobrine +only4you +411052 +kettle +francky +as123456789 +200677 +100594 +simbas +carly123 +199215 +arsenal9 +gfnhbr +mikee +railway +181991 +joey10 +sonu123 +deathangel +23242324 +14101981 +bantam +170680 +110378 +kennedy2 +16081992 +Nokia +jessie21 +maegan +slankers +03021991 +600091 +560005 +penis3 +vianney +15011993 +0321 +1357910 +masterone +060187 +halo03 +241177 +asdqwezxc +196868 +pirates2 +sexxy6 +06011990 +250779 +LEONARDO +riptide +230693 +sexy2010 +17051982 +petrik +blonda +godlike1 +171985 +W45bj9upkZ +may2009 +lolalola1 +asshole666 +wyvern +chopsuey +kiffen +love001 +ilovekim1 +Pakistan123 +37gudoplfs45 +retard2 +search123 +maxwell3 +12332 +vedant +vince123 +04091992 +ilovebeer +newcar +10031980 +tight1 +liberty7 +060292 +30031982 +gangsta69 +Martha +graywolf +ballin15 +23051994 +26101982 +adriana2 +playboys +020682 +20012002 +wobuzhidao +280392 +030983 +pinoy +1234789 +cajun1 +lilsis +salgado +170381 +181988 +22061981 +kelly22 +270180 +051282 +batman17 +richard23 +buster101 +playas +11021981 +nitrogen +101976 +heavens +Lh6RjX44qb +1580welcamino +mnbvc +honda07 +lacrosse22 +theman11 +baby002 +vovan +yoyoyo12 +duster1 +burton13 +michelle06 +14121981 +mamichula1 +trace1 +boozer1 +yeehaw +biteme01 +115511 +Borussia +bacardi151 +10051994 +baldur +310782 +19051980 +kieron +sexygurl12 +pookie! +chupachups +danielle15 +squirtle +condor1 +lovinlife +bandera +291192 +brick +Rhbcnbyf +kimball +17021993 +198119 +260880 +scooby23 +26111983 +super4 +porky +honey18 +holstein +любовь +221983 +mathematic +john20 +johncena9 +davidlee +strangle +oladapo +sunny11 +steelers08 +cheyenne3 +storage +faker +babyjay1 +dinamit +170291 +julian10 +ABCabc123 +slut101 +963147 +Trixie +christine7 +29091983 +kitty07 +17081983 +sicily +chocha +mustanggt1 +110978 +mirasol +nina01 +wallis +princess31 +www.com +03051982 +05041983 +goethe +custer +robert0 +faith09 +pandemonium +gembel +pinto1 +basket123 +fire69 +peter01 +galaktika +canuck +kawasaki12 +123456286 +hondacr250 +05101992 +crunchy +18111984 +070984 +qebEfcz3yx +sheryl1 +single22 +saiful +britt13 +190884 +stayfly1 +asdzxc12 +220281 +suesue +198407 +nurse123 +star66 +fade2black +12345678qw +01121983 +janaina +broken13 +Oblivion +ilovehim11 +110037 +minstrel +mineral +run4life +waterfalls +password76 +madhatter1 +walter2 +27011993 +1122334455667788 +resource +zachary01 +benjamin11 +102030405060708090 +love81 +romantico +handy1 +081183 +austine +kairos +11051979 +braydon1 +Buttons +olushola +dickie1 +160182 +vampyre +yahoo9 +piolin1 +221010 +squeaker +str8edge +ronald123 +emocore +kingtut1 +warzone +senior11 +070884 +1192 +vball12 +whatsup2 +28031983 +2288 +170880 +peaches13 +700016 +aa123321 +monica3 +techdeck1 +190184 +damsel +nemtudom +Chicken1 +03111983 +jennings1 +04031993 +gotham +regina123 +stavros +12991299 +adam69 +filipino1 +jeepcj7 +consult +080987 +lalala99 +3101 +marina2 +wkgMkjH623 +vaz21093 +040692 +shereen +tmobile +lollipop123 +010907 +jordana +victoria8 +alex86 +woaiwoziji +bobby18 +iglesias +minute +13111982 +funeral1 +freedom21 +joseph17 +31051994 +portis26 +polisi +231294 +226226 +290583 +200281 +beef +mana +kevin06 +amalia1 +shangrila +bigpapi34 +22091994 +casey01 +06041984 +031281 +20031982 +hunter. +doomed +kaykay2 +nightrider +aw96b6 +kisha1 +ame +borisova +1gateway +26061980 +f76t93nqk3 +mexico6 +antonella1 +graceful +beretta1 +angela10 +matysek +networks +barrister +061092 +youare +121076 +lakeshore +03071983 +barbie23 +150180 +ganapathy +rfnz123 +coupon1 +pedrosa +rusty01 +hamid +kiska123 +poiupoiu +buzzbuzz +198617 +king05 +195555 +080288 +16061993 +19091982 +060883 +03121989 +cold +hearts3 +t666666 +KIMBERLY +poseidon1 +14121980 +symbol +ballers +12051980 +lollol2 +chapin +09021985 +fuck18 +burberry1 +ceaser1 +bob666 +147001 +123321asd +maeteamo +081284 +110076 +connexion +convict1 +lemondrop +010581 +steinbock +08061985 +pretty22 +20121980 +sh123456 +Allison +271281 +28071992 +spank +20041980 +hangman +12171217 +marianela +010682 +d11111 +10121979 +125634 +sammy16 +bill1234 +people4 +16101982 +180192 +drumer +040881 +bite +doctorwho1 +saidov12345 +5555551 +monica22 +100477 +thisismine +zigazaga +17021983 +logan7 +mexico19 +malini +200481 +161193 +wangyang +09091993 +pepper88 +creampie +juan01 +snowman123 +dove +ablegod +sugar5 +0205 +weddings +29071983 +aria +tiger25 +oreoluwa +balrog +rutherford +08121985 +rockies1 +edwige +pucca +hopehope +24061993 +scooby21 +rebecca11 +31031993 +500035 +sweets123 +311293 +10071980 +please! +jesus69 +you&me +yogyakarta +joanna123 +wonderwoma +03021982 +matthew25 +teddybear5 +gayness1 +starboy +shortstop1 +SWEET +31011983 +lifeislife +laddie1 +gemini7 +ghjcnjrdfibyj +xt: +doodle2 +amor14 +stryker1 +08061991 +101974 +theodor +june1988 +20041994 +10121996 +060385 +05041992 +198404 +141293 +LIAISONS +04091985 +nana15 +180581 +approved +17091983 +pindakaas +05091983 +25061993 +alohamora +homebase +michael29 +anewlife +196300 +lover07 +09011989 +bonfire +198808 +stanislas +lovee +240780 +momma3 +tom1234 +stephanie5 +devotion +lokomotiva +sonrisa +warner1 +tonton1 +ataman +dimas +puppy6 +1478965 +clooney +1snowball +sallydog +poohbear09 +sceptre +03081983 +ilovedance +522522 +nooneknows +gloria12 +megaman123 +22091982 +Pascal +dead12 +121412 +29101993 +dollarking5 +master14 +auguste +1314159 +edu +south123 +dignity +04011992 +250893 +kunkle70 +260780 +dixie01 +rangers12 +sisters4 +bebe10 +garena +pippa1 +trixie123 +lar +09091981 +savatage +abhilasha +nokia1234 +290792 +31051993 +hanter +rosiedog +sexyness +snowbunny +razorback1 +04051981 +bree06 +261986 +03011984 +joselin +530530 +nikiniki +gingerbread +robot123 +fleetwood1 +answer3 +nani17 +drummer123 +kingfish11 +shithead! +maritime +fordman1 +Harry +blackgirl1 +sweetheart1 +ahmedabad +06041992 +190682 +chance13 +987654321b +yondaime +P@ssword1 +praxis +convict +edward69 +morgan15 +dillon12 +puddle +anna1984 +Garrett +janjan1 +BADBOY +ashlie1 +monkey91 +cardinals2 +grandkids2 +mets86 +081285 +bloom1 +dillon123 +sweetpea3 +31123112 +dragon86 +poohbear16 +09041989 +baby34 +120196 +patrick. +cabrera1 +gingging +amidala +050579 +silver88 +110677 +12345rewq +01121984 +chika +keluarga +romantik +gonefishing +oasis123 +neruda +201307 +hurricane2 +198126 +ALEX +time4me +210282 +tink23 +caleb12 +160980 +28111983 +sextoy +betrayed +061091 +JESSIE +09071992 +777aaa +booboo8 +200777 +������������� +HEATHER +llama123 +02021976 +utahjazz +sdfghj +applejack +andros +holidays1 +fffff1 +azerty0 +250575 +skye +melville +bunny101 +sex4life +toenail +antonio21 +blooming +trinity06 +197999 +180381 +17061984 +148148 +010380 +firefire1 +spinach +pedagogia +harley8 +14101980 +pumpkins1 +199213 +11031980 +godspeed1 +mamere +02111986 +deerhunt1 +cantona1 +1texas +coolman2 +Danielle1 +Disney +sexymamma1 +nightfall +197312 +021081 +beast2 +nargiza +290883 +faraway +161180 +love47 +domino12 +h0ckey +yummy2 +gordo13 +razor123 +271178 +ishola +naruto89 +dreamer123 +666444 +120178 +gangster3 +11091982 +league +250577 +maria4 +toyota01 +jordan2323 +july2008 +kevin9 +30011984 +bambi123 +04081983 +smoker420 +doodle12 +hateme2 +fhifdby +mangalore +Maddie +easyspiro +123434 +anika +james89 +jazz11 +221195 +love46 +macleod +samuel3 +linkmein +lala15 +smartie1 +louise22 +Stanley +travis7 +03121983 +010880 +jerome2 +1penny +single23 +galloway +310581 +reyhan +280491 +14061993 +honeylove +kari +13601360 +sakura2 +kocham1 +kasparov +270291 +jones2 +glider +280193 +081291 +120778 +3001 +isuck1 +141278 +080289 +21071993 +practice +vita +nevaeh2 +pescara +plastics +17121980 +mikela +blue03 +23041996 +messier11 +materazzi +sunshine27 +connor07 +pilou +milaya +METALLICA +23041980 +071986 +partizan1 +sublime2 +tony09 +financial +african1 +220495 +050488 +060387 +emma06 +01021994 +mikasa +golfer01 +bullshit12 +baldrick +19061993 +robbins +kingdomhea +harry3 +thunders +mexicali +jonas2 +8787 +198201 +ivory1 +cronic1 +enfield +manali +ledesma +brad12 +259421 +calavera +rebecca01 +manwhore1 +P@55w0rd +gingersnap +elnegro +200578 +riorio +rockbottom +monette +lemonhead1 +assaassa +qaVcx411 +14061995 +natalia2 +february19 +oneblood +outlawz1 +boston23 +230979 +dayday12 +270492 +270692 +197346825 +tink15 +nana09 +sports7 +shantanu +131277 +VFvihss591 +killer95 +summer78 +170681 +jojo69 +120277 +animation1 +Qwerty123456 +030185 +gina12 +2703 +17101981 +iloveash1 +katalin +gasper +seesaw +29041994 +thesexy1 +paintball7 +elsie +eagle7 +il0veme +relentless +beaubeau +kreator +seniors +linda13 +636322 +june1990 +ufkfrnbrf +sasikala +251095 +ghfplybr +delta9 +daidai +mayflower1 +absolut1 +evgeny +onfire +040183 +tatum1 +white12 +cassandre +parents1 +28091993 +somerset1 +1122qqww +spam123 +1010220 +rjyjgkz +hunter33 +israel123 +linked11 +chapel +sansone +gr +sugar7 +rocafella +210694 +peugeot306 +13201320 +08121988 +30091983 +momma123 +Tiffany1 +11111d +baller09 +patrick16 +swanson +sharon2 +12343412 +dardar +061292 +198409 +fridge +chelsea69 +angel85 +natalka1 +hartman +16021983 +tyler17 +flame123 +thurston +may1987 +woodson +andrea08 +03111989 +14071981 +050681 +ellen123 +pepper09 +templar1 +muhamed +230779 +dolfin +29091993 +seawolf +may1989 +nikki09 +chomper +aeiouy +easy12 +murthy +samuel22 +locked1 +01111989 +problem1 +CAMERON +dalton12 +riddler +jane12 +sdf +10071982 +aaron15 +23031994 +020483 +qazwsx741 +281081 +olympia1 +nana08 +mahalaxmi +chicka +coca +windows12 +hatchet +pizza23 +030784 +14011983 +tweeter +11021980 +faith4 +surprise1 +swing +171279 +kickass2 +honda450r +beto +pak123 +hussain1 +claire12 +highway61 +muscat +dolphin4 +natalie13 +198302 +itunes1 +quilts +100778 +1angela +mb1234 +andrew33 +seanpaul1 +dakota05 +16091989 +fast123 +kiki23 +privado +31121993 +130993 +savina +02121980 +cubano1 +spot123 +Sabine +kalhonaho +1corvette +happyme1 +pegase +whatever0 +orione +vol +28081983 +198726 +pilots +nanayaw +steven08 +eric69 +11111m +singsing +sanmartin +nokia11 +termite1 +joemar +bitchplease +weed23 +buttman +apple25 +smiley11 +harley23 +tiffany21 +041987 +blue72 +100300 +thuglife13 +21021994 +070686 +backoff +bisola +powerrangers +omotola +090885 +dragon91 +050709 +198901 +thewho1 +17071993 +09081987 +cobalt1 +negra +suns13 +djkrjlfd +bariloche +jeepers1 +140579 +tissue +fender11 +spiderman12 +hannah24 +04061981 +123456ww +vfnhtirf +blackwell +looper +pollita +squid1 +already1 +bellota +challenge1 +analuiza +Staff123 +121206 +faulkner +gears1 +milk12 +polosport +skate22 +delta5 +tattoos1 +sexygirl3 +cartoons1 +mike143 +kurama1 +oioioi0 +199210 +24021984 +booman +seabee +0220 +nestle1 +bigal1 +tuxedo1 +speckles +24111983 +morningstar +aaron14 +hounddog1 +folder +bobina +broncos2 +wwjd +elpapi +adidas22 +chu +CAMILLE +LLE1234 +ijfrnhf7yhcy54bhy0cd +sandiego61 +twentytwo +july03 +rfkmrekznjh +shutdown +modest +kuba12 +killer20 +iloveu08 +swastika +11071981 +nicholas22 +monkey67 +11061982 +irocz28 +paranormal +payaso1 +bluegreen1 +heydude1 +booper +240993 +nano +babyboy9 +aaaaaaaaaaaaaaa +23021982 +colores +addiction +engel1 +manu12 +hans123 +270779 +millers +23101982 +150994 +170581 +240382 +cthlwt +sarah18 +monkey29 +owen123 +number1fan +mau +16071983 +mango12 +07121983 +smilesmile +frannie +24081993 +030186 +141989 +56chevy +sometimes1 +king18 +onelife +241985 +johngalt +jennifer15 +05091992 +dakota! +afireinside +fucking2 +23031982 +07111986 +260293 +1807 +nivedita +dagreat1 +montana12 +rosedale +demon2 +mexican3 +yazmin1 +sandy3 +ilovedick +100278 +james26 +cool45 +adamson +herbal +dominos +withgod +magician1 +ryan2008 +bill89 +aaliyah12 +sloppy +CHESTER +flutterby +linda10 +barron1 +stevo1 +150379 +231989 +superstar6 +pookie22 +banker1 +122007 +angels27 +cntgfirf +100378 +jolanta +reset +d654321 +myspace? +rachel5 +tosin1 +10102000 +gayASSfagpastebinleaks +mostar +cfvehfq +12071207 +yeahbaby1 +123poi +chris95 +asher1 +shubhangi +240281 +qazwsxqazwsx +CHRIS +01041981 +dezember +1qa1qa +omega2 +rac +Schalke +nigga14 +harley14 +cocoa2 +200182 +alyssa03 +25091983 +sveta1 +07011985 +090692 +crip +jobs123 +03091989 +181094 +lily1234 +190580 +d-block +uthvfy +13101995 +220181 +redeemed1 +120476 +06021985 +willian +jude +ybrbnbyf +quepasa +falcon2 +cutie24 +010693 +daniel90 +121209 +puebla +zephyr1 +210696 +dtlmvf +justin26 +cris12 +03091983 +afterlife +Michaela +266469 +johnny99 +elvina +yummy! +fatcat123 +06061981 +salsero +eagles! +xthtgfirf +property1 +kitty09 +222333444 +katie6 +chevy08 +22051980 +04071982 +100979 +w1956a +honda08 +anu +malakai +abpbrf +0809 +yankee23 +19051982 +18031983 +tiger18 +1177 +22041981 +15031995 +kacperek +070285 +ronin +16121993 +monica7 +juice123 +kaboom1 +jameel +cute101 +141985 +BARBARA +99mustang +submission +17081986 +210879 +thomas33 +darren123 +angel2005 +pink12345 +395009 +290791 +links234 +jujubee +sara22 +300791 +egoist +dodo12 +08081994 +cinema1 +winter77 +billgeitslox +pic +maggiemae1 +cookies13 +hindustani +140140 +assistant +literatura +avengedsev +tt1234 +99bottles +07031984 +evertonfc1 +OCTOBER +abbigail +kevin8 +soviet +030582 +jihoo +gibsonsg1 +12031995 +tata1234 +minnie13 +270581 +25111982 +251277 +mimi10 +bibby10 +14071982 +121972 +nigger6 +09011988 +260494 +POD-FIF +wrxsti +needle +220695 +matches +Hunter1 +Dragoste123 +sunshine00 +love75 +380054 +05111990 +Warcraft +230279 +bandana +ferdinand1 +kdwcNpA362 +031183 +20052007 +Willow +fuckme5 +barbarella +hai123 +4242564 +maimuta +12345ty +061281 +29061983 +666222 +242628 +disney365 +abelardo +limited2 +maryjane12 +ryleigh1 +Mercedes1 +ttttt1 +110023 +run +bicicletta +alyssa05 +myname12 +123489 +sara01 +081192 +wizard12 +emily15 +maryjane7 +dylan06 +070584 +hummer12 +pridurok +1941-1945 +14091983 +070983 +09021991 +malik12 +masmas +240283 +04071983 +mubarak +28091983 +bitchpleas +sabrina3 +kakashi123 +union +050292 +stacey123 +richard8 +170579 +fener +11041995 +bowie +m1ckey +008800 +sruthi +tutu +baywatch +punk4life +haveaniceday +160693 +bignose +1benjamin +andrew98 +hunter45 +240479 +08041991 +dances +awesome13 +donkey69 +peewee13 +admin123456 +chelsea16 +thirty +gun123 +booger3 +march09 +070490 +310394 +140279 +twins22 +23101995 +carlee +mickey9 +moondog1 +nicholas! +1tigers +0852 +20011995 +10081981 +chef +amor69 +145 +alpha06 +25012501 +19841020 +bailey02 +killme123 +iloveme21 +venom666 +aslan1 +finley1 +200379 +jose19 +lalo13 +EDUARDO +1twothree +jacob05 +superboy1 +.: +pimpin10 +200479 +orlando3 +wilson01 +docteur +sandie1 +nad +monoxide17 +090889 +14111992 +joshie1 +koikoi +whitewolf1 +garion +master17 +stoned420 +020187 +080685 +snoops +bugsbunny2 +manutd01 +010808 +23562356 +william17 +chippie +gracie07 +ljhjuf +daisy101 +babynames +appleton +yaseen +vanshika +pussy14 +jose69 +ranger22 +hello07 +kayode1 +jack05 +sexbomb1 +198518 +diana11 +keith12 +sandys +brandon20 +26031983 +therapist +BISMILLAH +goldengirl +blahh1 +xfqybr +upgrade +3155530 +jacob8 +06121984 +bingo2 +sum +21011994 +020883 +040285 +05061993 +15081981 +allahswt +edgar12 +21041981 +01081981 +kissme22 +dylan14 +22091981 +123ewqasd +monstr +severino +maria08 +bitchface +qNxE66l7or +747400 +delete123 +castrol +pineapples +nicol3 +buffer +elmo14 +01121980 +nikki15 +reaction +thinkbig +060678 +wanita +benny2 +18121980 +290183 +110493 +02021978 +w12345678 +26081982 +heather8 +cyberonline +thisisit1 +taxi +whitney2 +301292 +040681 +0258 +041182 +gracee +bartek123 +cutiepie01 +castelo +180981 +lars +18051982 +2905 +iloverock +number25 +110877 +willie3 +tamara123 +fastcars1 +animator +pretty08 +130678 +bear14 +23051993 +stormie +789456123m +15091993 +john77 +maria8 +15031980 +password@1 +040185 +18011993 +naruto00 +526526 +vieira +16121980 +020481 +carter11 +swimming2 +angel001 +gotcha2 +gangster5 +30071984 +tonka +eusebio +lovelost +aryan +141279 +eric23 +300892 +rosarosa +10071981 +farting1 +452010 +tomasko +eagles24 +agamemnon +jhoncena +chris420 +leelee123 +fucku6 +12121996 +chrisi +vitor123 +16101981 +markymark +sexpot +ohio +27011983 +calvin2 +cooper24 +cookbook +230395 +fordmondeo +password111 +christina0 +butternut +pyramide +160793 +nick99 +pimppimp1 +kwiatek1 +maggie69 +seifer +rockstar9 +cbcntvf +samsung21 +thomas00 +10661066 +081292 +charlie0 +140980 +erlinda +brittany4 +bailee1 +montessori +alcala +god4me +hesloheslo +kinglove +michael87 +16081984 +tomoko +Buster1 +forgotit +dragon93 +elektrik +cassidy2 +devin11 +arowana +060286 +macintosh1 +smokey4 +pumpkin13 +310182 +251078 +qwerty098 +granada1 +130879 +fatal1ty +bugsy +rockabilly +lilgirl +corazon12 +090491 +leeanne +lovecraft +0208 +eduardo2 +danzig1 +p7678287 +chiken1 +17011701 +777555666 +1й2ц3у4к5е +saravana +26041993 +1472 +08111987 +220477 +13041983 +Start123 +swarna +tallinn +030682 +300880 +20071994 +18031984 +Francis +samsonite +lilmomma +ranger69 +ace101 +spartan2 +chika1 +081084 +qaz111 +dudes1 +0408 +Swordfish +809 +081184 +rod +dreamcatcher +rawr11 +081191 +sapana +nick24 +petruha +smulan +07121991 +011185 +karateka +080490 +13021993 +120376 +turkey123 +Michele +23121994 +02121989 +moveme +04011986 +QAZwsx123 +toulouse1 +johndeere2 +chen123 +040880 +creosote +jackson! +lucy10 +albion1 +27051983 +15101981 +gaara123 +popcorn13 +number69 +070779 +dima2000 +290284 +1234126 +050693 +greatone1 +greenday. +qazsedc +saputra +shikamaru1 +jimboy123 +bitter1 +0508 +040784 +Shadow12 +09021986 +zaqwerty +muscles1 +amor11 +sumatra +140480 +3005 +booby1 +bajskorv1 +Grandma +10101975 +jaspreet +cum +spongebob123 +789654321 +695847 +09021992 +assinantes +transform +piligrim +04031985 +jessica89 +08011992 +admin@123 +33223322 +smack +february2 +26021993 +061293 +130293 +figure8 +boricua2 +jamel1 +basketball11 +110377 +20121993 +paul13 +extra1 +100379 +09031986 +hfrtnf +00233 +pooper2 +Fender +cfymrf +24051994 +freiheit89 +030287 +050880 +whatever23 +crabtree +boots2 +top123 +290993 +fab123 +chester! +magnum357 +mike05 +vaishu +ben1234 +senegal1 +08051984 +oscar1234 +babydoll13 +juggalette +bionic +190393 +deepspace9 +cuthbert +mee +199510 +oldham +0506 +butter4 +junior1234 +19231923 +29011989 +270892 +defense1 +cheesey +180982 +wang123456 +gnocca +kalash +01061981 +isaiah3 +zse4xdr5 +dad1234 +brianna9 +catracho +sexosexo +260379 +richard4 +david2010 +hollywood9 +bruno2 +www222 +fruitloops +brittany6 +010105 +shadow05 +steven6 +1qazxsw@ +270181 +100977 +gorges +matita +propaganda +circus1 +sean01 +mylove5 +northstar1 +slider1 +cesar12 +goober123 +boby +letlet +password50 +morgan05 +simpsons12 +chris00 +vince10 +antonio01 +10011994 +alteclansing +paulin +Number1 +prostreet +hotmom1 +060682 +frolov +27121980 +jahjah1 +tucson1 +985632 +050679 +enterprise1 +ankit +eszter +chivas17 +petpet +eastcoast +brittany21 +160479 +211280 +reallove1 +edIz27v1kQ +dominate +260193 +sweetlady +161078 +lamination +12261226 +huahua +Microsoft +zaheer +schneider1 +lilromeo +ilovehim09 +solotu +casio1 +nguyen123 +charlie101 +eindhoven +qwertyuiopasdfg +211180 +mpower +040287 +pogoda +moomoo11 +ojitos +plop +23121980 +radha +247365 +9ac9hb7vVX +kelsey7 +danielle19 +fj5tx19HiT +raven11 +jimmy23 +59fifty +oscarito +tigre1 +1church +falcon01 +abigail7 +681774 +DSK4R9bskh +21101982 +stormie1 +check +tweety17 +198727 +nextage +nagel +jeremy5 +righteous +marokko +bitches. +081185 +anna2009 +qwer0987 +Password10 +120179 +chicken101 +stinky2 +030882 +12021996 +frankzappa +shadow27 +090484 +martin14 +09121983 +spring10 +211988 +mumdad1 +0lHhNw3v +haters12 +pakpak +batterie +tonto1 +sunshine06 +bike123 +snickers7 +24091993 +06011984 +idiot123 +89moocows +prada +vfiekmrf +12031980 +fhbirf +guruguru +deluge +acapulco1 +stern +akshat +hellodolly +qetuo +bnfkbz +andzia +1sarah +023023 +persija +blackfire +chicano +francesc +number32 +daddy15 +olayiwola +casper21 +111195 +famous23 +hatfield +090784 +mickymouse +samir1 +eitaeita +poppin +09051989 +hayward1 +barbra +syl +austin95 +060591 +Undertaker +songoku1 +bliss1 +�������+�� +helper1 +snakebite +220478 +algarve +37213721 +dell23 +fucku11 +hoodrat1 +101102 +r4evc8d8VS +newlove1 +080894 +freetime +121212qw +xsplit123 +smother +mario1234 +nichelle +botany +johnrey +perry123 +100295 +peterbuilt +senna1 +Hawaii50 +TOYOTA +181080 +flavor +alejandro9 +ctvtyjdf +myles +jackie69 +Precious1 +30033003 +cameron05 +texas713 +newyork01 +mama2009 +2522 +pacheco1 +mybirthday +death7 +160580 +290780 +torrie +shopgirl +mustang90 +CHARLOTTE +powerstroke +windy +westgate +horses22 +150181 +teatime +vincenza +daniel94 +welcome9 +02101992 +02051981 +horny123 +bella17 +banan123 +billybob2 +31031984 +SSSSSS +pinky22 +310593 +04091984 +reliable +080586 +18081993 +08041989 +benhur +ball4life +161985 +guapo1 +jamesbond7 +soccer31 +ingres +honda92 +update +gracey1 +godgod1 +ilovecock1 +number19 +theboys2 +281278 +jacob21 +055001984 +vanquish +22111993 +0122 +198516 +kenshiro +24041994 +loveboat +princess* +210379 +monica23 +penis. +loveland +240293 +powerrange +vinograd +pearson1 +toyboy +linked4me +201077 +snowboarding +bhabykoh +omgwtfbbq +dudu +raja1234 +31415926535 +school22 +shaggy12 +sexie1 +stroke +19461946 +271179 +landon07 +babygurl20 +iluvme123 +sophia11 +hollywood! +sidonie +lanie +1juggalo +199800 +blender +030184 +nazarov +june2005 +kurwamac1 +sparky10 +il0vehim +sexy87 +torrie1 +karolek +gepard +150494 +daisyduke1 +gamegame +198456 +29051981 +shadow20 +looking2 +alkohol +14love +casey3 +400018 +methos +15091982 +07041984 +07071981 +chopper123 +sexylove2 +lipgloss12 +191984 +30111993 +esperanto +ville666 +blessed5 +moncheri +kjyljy +shivaji +011283 +070386 +senior05 +cuevas +789632147 +1mercedes +kumara +114411 +200382 +gummy1 +jazzy14 +12111980 +27091993 +vampire3 +blue30 +manfred1 +johncarlo +147895 +booboo09 +190892 +actros +we1234 +aston1 +marthe +paul69 +qwerty456 +141991 +sunny13 +lax123 +110195 +richard21 +apple12345 +11071994 +240181 +casillas1 +lauren69 +tiger16 +654321k +astronaut +113 +08011988 +250379 +pimppimp +loveheart +110779 +198614 +Brian +Pokemon123 +spider5 +honda23 +rjcnzy +eager +280581 +bodrum +196565 +nintendods +david33 +09051992 +alekseeva +reina +elijah06 +mothers1 +andrew77 +deere1 +hawthorne1 +rc95kzbJ1V +19011983 +landscape1 +braindead +121098 +darien1 +maria25 +James123 +198415 +boulogne +saya123 +24101995 +chynna +nascar29 +lauren17 +tigers15 +winston12 +bhumika +bailey8 +crunchie +chris55 +pimp90 +durian +mandarine +shade1 +lantern +070391 +focused1 +patti +gfkmvf +070286 +diamond69 +071091 +wakefield +imgay69 +04101985 +volleyball1 +kitty17 +1adam12 +111294 +210978 +molly07 +281294 +forgetme +brian7 +shandy1 +13111983 +11223456 +22224444 +realnigga +fquekm +runescape123 +oliver4 +150280 +vanessa22 +nico12 +stepup +02111985 +znt,zk.,k. +021095 +198023 +easymoney +kookoo1 +131178 +alex1978 +portishead +whateva1 +wildone1 +brooke4 +1woman +fastrack +tur +b654321 +010580 +beth12 +240291 +gbolahan +kropka +ilovekayla +henley +sunshine0 +modesto209 +solita +ilove21 +Crystal1 +schnulli +01041994 +justin27 +nikolai1 +mustang97 +198307 +dragonmaster +santo +kpkp1ee9W +basia1 +cornelia1 +coconut123 +love57 +frontier1 +040389 +aishah +haha13 +hell00 +kingdavid +farmers1 +lalala7 +dragon06 +ramses2 +111111r +seneca1 +verunka +123456789qqq +mets1986 +unlock1 +2n66xG2zIU +15021995 +thechamp +140693 +lazarus1 +30071989 +daniel87 +pendulum +lillo +oyekunle +elfenlied +babi +mishutka +13051994 +speedy13 +14051984 +snowsnow +marymary1 +moneytalks +styles1 +nicole98 +clarity +buster88 +bodyguard +yozgat66 +sweet08 +020482 +tommy6 +remix1 +arthas +SUSPECTS20 +sally2 +dbyjuhfl +jerseygirl +alterego1 +260980 +cutiepie7 +danielle16 +albert01 +mania +08101983 +31031983 +bros4life +030285 +010293 +scrubs1 +winter2011 +texas214 +a00000000 +jaimee +giants11 +asdfghjkl! +davido +kimberly3 +11081994 +defiance +mizio970 +wee123 +011191 +justin33 +whites +freddy13 +rdfhnbhfyy +anthony0 +krypton1 +anto +froggy7 +rubberducky +molko24bog +28071982 +genoa1893 +060485 +freddo +08101989 +clusters +newyorker +24041982 +boston33 +011292 +joey69 +husqvarna +mamabear1 +chevy12 +020894 +luchito +staind1 +jaylon +santarosa +phone2 +crazy18 +121270 +dana12 +01071981 +kev +spagetti +bella18 +118218 +honduras12 +hotty2 +02111992 +b55555 +krystyna +18021982 +198303 +PRECIOUS +bigsis +luckystar1 +help1234 +purple00 +jujuju1 +babygirl30 +andy22 +16121981 +29041983 +tazzie +eu +vvvvv +kingme +alloallo +buster24 +magic101 +28121993 +131294 +brunswick +kelsey! +golf69 +aston +todd123 +shannon! +ville +partner1 +billy01 +mo1234 +ayesha1 +comcom +14081993 +raymond3 +tattoo13 +autumn01 +united01 +oliver21 +3215987 +globe1 +brian3 +nissan350 +aq123456 +blessed01 +01091993 +22011982 +23061994 +peace420 +dogs1234 +icecream4 +dil +janica +peterburg +040289 +21031995 +190500 +smukke +callie12 +bluebirds +dance08 +jonas! +290580 +22051993 +jose25 +london06 +09061989 +080691 +malgosia +1chicago +pinkerton +urmom2 +123iloveme +051280 +RANGERS +hayley123 +10111994 +wester +lombardi +theresia +eastside21 +married08 +mj123456 +lasers +3012 +darkfire +220677 +hungary +meemee1 +thuglife12 +obiwan1 +peanut9 +gladiador +snowboard2 +caillou +critters +souvenir +king33 +21021983 +jiejie +extensa +preschool +peruano +121211 +pa55wrd1 +design123 +adoption +phatty +17011993 +13621362 +13111981 +skanky1 +vbvbvb +030792 +Cheese +sweethoney +frankie4 +181092 +alternativ +201295 +1rebecca +cookie77 +1house +fairies1 +cayang +100grand +motocross2 +peabody1 +123456789qwertyuio +bebe15 +lostsoul1 +Death +olasunkanmi +091291 +040493 +toolman1 +jamie69 +skateboard1 +avadakedavra +26061982 +rainbow21 +l1o2v3e4 +pink26 +220494 +isabel2 +anemone +safeway1 +other1 +free23 +shrikant +112300 +25041980 +240694 +fourtwenty +platini +198817 +sagarika +Green +adrian07 +190979 +Spiderman1 +000000j +cojones +ford69 +lockhart +welcome99 +anthony26 +portillo +jarek +123wee +sandro1 +laura5 +daddy9 +landcruiser +virtual1 +21021993 +pirouette +p.i.m.p +chelsea25 +edmundo +090999 +pretty18 +jose123456 +aneczka +Germany +CHRISTINE +grunt +greatwhite +wachtwoord1 +081186 +berta +28011984 +260594 +mickey06 +parsley +iamcool123 +abby13 +17021995 +tubby +06041985 +ilovezach1 +streets1 +pickle3 +moonstar1 +10061981 +270781 +070291 +blackbox +Blue +cuckoo +alfaromeo1 +sarah07 +dereck +negrito1 +zack1234 +100577 +parana +boss11 +09121984 +tigger55 +10021994 +040781 +011080 +17051994 +newhouse1 +Sierra +080687 +09081991 +15051982 +500009 +cartouche +lthgfhjkm +onion1 +carthage +hana +17081982 +251983 +power1234 +steven09 +merry +lenard +jamesm +lyalya +waheguru1 +260881 +mike26 +britt2 +zachariah +stanly +mvick7 +Scorpio +13021995 +rainbow10 +john25 +microbiology +220295 +115569 +bratz11 +chili +101998 +17101982 +hulkster +100494 +010393 +asdfgzxcvb +alison123 +ridebmx1 +dimond1 +1601 +crystal10 +31121981 +alexalex1 +spicy1 +may1991 +chase11 +090386 +211178 +boston22 +bench +19201920 +124001 +redrobin +23021995 +daniel93 +gigante +reverend +27101983 +lagoon +heehee +midnight! +skippy2 +yagmur +mantle7 +29101982 +161293 +111971 +090781 +italiano1 +sweet24 +270283 +197171 +adarsh +07011989 +bruninha +julias +261093 +asylum +laundry +sialkot +shade +francisca1 +summer25 +08121984 +fernando123 +28071993 +1london +enter2 +hugues +mibebe1 +slasher1 +070708 +ava +boomer7 +sportsman +moneymike1 +sexymomma +021193 +061181 +13461346 +08061983 +loveel +aaliyah22 +2doggies +devan1 +03111984 +lothlorien +linkedin22 +xinxin +jordan77 +20041981 +maxime1 +nogard +iloveyou90 +07011990 +198909 +010982 +1qazXSW@ +again +дмитрий +orpheus +231980 +240579 +alibek +jackson07 +barbie4 +chaucer +dreams2 +warszawa1 +09031983 +shingo +198416 +Robbie +26121994 +dragon78 +310881 +240581 +chomper1 +080587 +fourkids4 +stephanie4 +yupyup1 +element! +lolade +575859 +bwFqjpF +encyclopedia +lucas13 +jacob1234 +08031993 +swagga +godtime +dodgers12 +290482 +hebrides +bob123456 +my6kids +putita +frankie5 +lovely15 +dilemma +curtis12 +16041982 +earnhardt8 +tot +maricela1 +261987 +trouble123 +star00 +198305 +maconha +valverde +sexo +hyphy101 +azizah +blader +06111987 +Berlitz +mayara +jamesjames +mexico20 +sadiedog1 +everton1878 +150893 +steven07 +sabrina13 +mike34 +bebe23 +angela69 +chupacabra +emily8 +cute08 +jamaican1 +380007 +makulet +gearsofwar2 +080383 +888333 +donthate +azerty69 +brahma +lafamilia +290784 +lunetta +03101992 +angie13 +ladybug8 +catdog7 +070883 +eric14 +07101990 +bartsimpson +cuteako1 +twinky1 +mitchell12 +flower15 +merkur +honda90 +akoito +vfhufhbnrf +gothica +cre8tive +310382 +lolo11 +121271 +morgoth +vitalya +hollydog1 +friedrich +3sa8xK4xDZ +28zxrpuNFA +167167 +danijela +021065 +zayzay1 +iluvjesus1 +dance5678 +7676 +241988 +denise23 +pichon +cowboys69 +hagrid +columbo +29011982 +bugbug1 +1597534682 +oriane +arnaldo +bob420 +technics12 +boo1234 +dani13 +senior2011 +david27 +29011984 +250493 +fyfnjkmtdyf +wolf69 +carlos09 +dis +030881 +birds1 +valentina2 +dianochka +131094 +051180 +070482 +kolya +antonio. +09091980 +punks +0123123 +snow11 +milord +mama20 +chicana1 +killa6 +Linkedin123 +09061983 +2608 +alex29 +missey +apples. +ilovehorses +sharpe +15111980 +050191 +getit1 +go1234 +arturito +diesel12 +antalya07 +09061985 +99999a +itiswell +081082 +photo123 +hajime +151293 +sugar13 +kokopelli +300993 +29121982 +24081982 +125000 +261278 +35793579 +blue82 +310780 +loca +archived +love52 +numark +joey21 +goodstuff +rowan1 +061080 +peterson28 +matthardy1 +198527 +sammy09 +061985 +051985 +chris111 +chelsea6 +080790 +maggie24 +uthvfybz +26081984 +rowell +dicksucker +12091981 +310381 +felix2 +flicker +290880 +volker +sully +213243 +jadzia +031081 +commodore1 +esther123 +123asd88 +montana7 +tenerife1 +1rachel +seaworld +1oliver +bigbro +yourm0m +megmeg +anderson2 +swordfish7 +jojo01 +100600 +101975 +oldskool1 +casandra1 +16031983 +010593 +fuckya1 +marie33 +honey09 +newhope1 +hermanos +258046 +batman007 +26031982 +shivangi +samantha18 +tink07 +miley2 +30081982 +driven +lucky20 +mercado1 +753951852456 +mallorca1 +papaslexzy +toscane +antilles +02011980 +jess22 +travel123 +11331133 +unitedstates +homers1 +290981 +azucar +kamara +29091995 +roxy14 +relax +210979 +wiosna +westend +max666 +13081981 +whyme2 +123321abc +cathedral +021080 +buffie +roots +d1i2m3a4 +scoop1 +cherry18 +sunday2 +suicidal +coldfire +steffen1 +021293 +300581 +11071995 +091282 +karlee +berries1 +CRYSTAL +milestone +pangit1 +11011982 +14071995 +jesus247 +love1984 +423456 +110296 +danny08 +imback +rafaella +Charlotte1 +middleton +bmw323 +fatman2 +600044 +mexic0 +m3tallica +faith101 +prisoner +13031980 +gabriel8 +7758991 +enters +300392 +sandra23 +198708 +06121982 +12111981 +vasilev +13081982 +123mnb +26071992 +6031769 +munch +200579 +160193 +outlander +okay123 +waller +19011992 +cocoa12 +axeman +1609 +pacman123 +ripken8 +342001 +angell1 +luckyboy1 +010209 +alysha1 +arevalo +310380 +briones +1234567890k +mamanjtm +��������� +sexygirls1 +g1nger +jesus2007 +rhfcysq +oreooreo +27021984 +01081980 +03021983 +281094 +JaspyB1990 +jake06 +300481 +passion12 +aa11aa +30031995 +280893 +kc1234 +411016 +jabulani +20061995 +rainb0w +281293 +11081981 +iwantsex +5101520 +Robert123 +prestigio +carlos07 +996699 +justice12 +maxtor +ufhhbgjnnth +angel32 +2409 +dickens1 +colombia2 +namibia +011082 +1155 +houston12 +42069 +181195 +apple33 +bobby10 +pinoy1 +jake5253 +12041981 +sobriety +190392 +beasty1 +vale123 +beebop +fenice +parool +year2009 +29031993 +destiny22 +30624700 +nesrine +625625 +joemalyn15 +170592 +050391 +charlie88 +peter3 +olivia99 +easyrider +susi +190482 +1234567887654321 +ashley94 +deadline +201278 +hunter44 +love76 +letters1 +zxcvbnma +060880 +10021981 +clavier +741369 +wambui +xfiles1 +fucker6 +loveyou21 +280281 +forever01 +dayday123 +tsv1860 +11november +131076 +nfbcbz +independiente +200793 +whatever6 +alexa12 +nastya1997 +jagr68 +jp123456 +toupie +cute22 +devante1 +hahaha7 +trafalgar +humaira +butterfly12 +firehawk +02111989 +nayeli1 +01051981 +zepplin1 +f12345678 +180808 +felicitas +190881 +bayer04 +cats11 +konfeta +hjvfynbrf +mystical1 +batista2 +booty12 +trece13 +sweetie11 +banger1 +broken123 +forget123 +beautiful. +boober +soldiers +13041981 +under +usher123 +william18 +sunsh1n3 +nokiax6 +5647382910 +phatfarm +investment +123321k +01121991 +hamzah +rfvxfnrf +gizmo7 +nikki9 +love4love +texastech1 +trueno +chick123 +hotrod2 +penguin5 +pootie1 +29071984 +030993 +sempurna +080686 +210477 +nissan12 +12300123 +brandy7 +pooh17 +090808 +199711 +271987 +kaylee01 +samantha20 +14071994 +skyhigh +26011983 +farfar +andorra +Trinity1 +marko123 +6cs2huAULF +oliver08 +vanessa23 +151179 +babycakes3 +nifemi +kjkjkj +petete +100794 +123456hh +johnson7 +winner2 +100279 +gangsta21 +creative2 +yellow09 +year3000 +111094 +nigger13 +mcqueen +bonjours +burunduk +babe69 +dochka +iloveyou66 +kirkland1 +fuckyou20 +daedalus +Master123 +brooke08 +HAPPY +sponge123 +himera +280680 +pimpin8 +degree +kansascity +taylor93 +123test +rosalinda1 +abdul123 +shippo1 +190182 +campione +shellie +arseniy +langlang +chris45 +newlife123 +070795 +papa11 +lovely07 +teamjacob +sexyblack +theboys1 +�+���������� +310880 +060693 +luckygirl1 +081180 +15061981 +riley3 +18111982 +TERESA +230994 +kon +01061995 +040386 +frank11 +screen1 +raiders08 +12071995 +tanman +ihateboys +222223 +bianca01 +280381 +khongco +hotdog22 +kot123 +kiki14 +27031993 +21011982 +black77 +121970 +15031994 +booman1 +doom123 +sweeties +navneet +beans123 +logan06 +090489 +too +060982 +Allah786 +020480 +chigozie +sherrie1 +lanegra +270493 +drink +michell1 +worldpeace +04021983 +malick +20302030 +nam123 +junito1 +copperhead +denise22 +ctht +kiwi12 +101073 +soccer100 +vball +10121995 +scooby! +241989 +mickey99 +ginger8 +cupcake21 +1800 +monkeys11 +danger12 +122008 +woodwork +charles11 +306306 +150281 +03051993 +gfhjkm1998 +iloveu16 +ilovejon1 +17031995 +sasha2000 +gallery1 +111079 +joker777 +290391 +bigbass1 +dagwood +holla12 +popcorn4 +irish2 +110180 +hawaii07 +mahoney +sameer123 +Packers1 +14051993 +070685 +heather10 +marquette +troubles1 +ethel +fatima12 +qwerty85 +wedding08 +dolphin9 +fuck77 +borneo +snookums +iloveyou45 +050392 +serduszko +crystal4 +grey +isotta +mcflurry! +270992 +mama09 +coastal +kelsey01 +lingling1 +200679 +peanut05 +imissu1 +zxcvbnm. +270980 +070186 +raptors1 +hakeem1 +billygoat +717717 +18071994 +hopefull +number41 +aaabbb1 +nigga6 +09021982 +pepper08 +cory12 +maxwell7 +280593 +110696 +debra +speedy11 +asd222 +zouyong +single21 +death! +123star +19861122 +160680 +capitals +elessar +cherry09 +samrat +13101980 +kiss22 +babygirl55 +family14 +23111994 +theking2 +01121982 +football37 +gia +yankees01 +goodbullet +lasagne +tujhjdf +38gjgeuftd +number44 +forever24 +Awesome1 +reno +201078 +bmw328 +snaiper +skinhead69 +101297 +1chester +As123456 +fucker22 +glassjaw +acting1 +income +enemy +12031981 +sexylove12 +orange55 +210494 +199017 +corrado1 +ball11 +babygirl29 +joseph99 +governor +poppin5 +45674567 +delta2 +lov3m3 +03021993 +ruffryder +3108 +serval +provider +kipelov +naruto97 +sillygirl +logan08 +imrankhan +marty123 +raptor22 +davidg +198802 +titty +partyone +mira123 +asshole0 +loulou12 +120676 +ferrari7 +Liberty +lovelife12 +030592 +77585210 +odunayo +1lovemom +brilliant1 +padova +iloveshoes +Summer09 +rosered +sonic5 +bolbol +mobile123 +0011 +23111982 +220595 +28051981 +kings10 +556699 +charmin +snappy1 +mary23 +199110 +rubies +komarova +09011984 +crystal9 +06071993 +19021982 +maravilla1 +160579 +papacito +taytay11 +romeo7 +archery1 +alex45 +23011993 +02031994 +free2rhyme +ellaine +LETMEIN +F00tball +larry33 +06101990 +12q12q12q +shumaher +explore1 +skrillex +091182 +10041981 +allstate1 +180595 +calvin01 +tammy2 +wasup1 +loveme4eve +sassy6 +13031981 +whoareyou1 +drew1234 +chelito +19992000 +spook +seaweed1 +delima +evangelina +200981 +panther123 +bimba +fatkid1 +linkedin7 +sanders20 +26041994 +fuck12345 +connor13 +saitek +tulips1 +fuck09 +silent13 +123056 +13031994 +25071980 +midnight5 +789456321 +29011993 +gaypride1 +jimmy22 +210679 +Kawasaki +Gregory +steamboat +120278 +lilsexy +061280 +andysixx +smile1234 +130494 +all4jesus +240495 +warriors12 +kukareku +280692 +28081993 +mazdamx3 +07061983 +emma2008 +justin77 +jesse101 +serina +pookie23 +awdrgyjilp +210180 +roberto12 +reggaeton +entrance +bigdog3 +tripoli +120475 +BASKETBALL +lildude1 +business12 +honey! +#1sexy +821128 +myspace197 +nandita +killerboy +1shelby +wilton +holycross +micros +fatman123 +qw +wuchun +omega13 +christian. +gerard! +yfcntyrf +winnie01 +030982 +01011968 +dopeman1 +713713 +saiyuki +loomis +broker1 +molly08 +holyghost1 +sebastian123 +bradley12 +harryp1 +secret23 +suleyman +cooper08 +250181 +smile21 +cronic420 +wat +270393 +131988 +221277 +vfvekmrf +shelly12 +dick1234 +160280 +02081981 +craiova +panthers11 +nascar09 +jarell +Krishna +23101980 +17111981 +090906 +zadnica +050780 +may2005 +KARINA +odin +abacaxi +mellie +13101994 +gibbons +29061993 +886886 +browneyes2 +160594 +080788 +beauty01 +240979 +milky +110794 +televisione +O +eatmenow +1country +natawa +verity +Kitten +miller69 +001907 +puppyluv +hecate +28041983 +07011986 +gintonic +280395 +sexybitch0 +alonso14 +instrument +raimundo +#1angel +hillcrest1 +240879 +11281128 +leonardo123 +051080 +legolego +rico12 +DENISE +morangos +visions +boston24 +280693 +19841025 +190283 +m3lissa +reindeer +030893 +dustin13 +ethan08 +serafima +myspace87 +197311 +08091993 +hund +HwrIwxWc76 +billionaire +123q456 +1death +moondance +mimi23 +richard10 +katie69 +seznam +tiger17 +4077mash +legia +201987 +christian123 +elvisp1 +25892589 +maria9 +12091995 +FLOWERS +musicislife +tekken3 +100877 +01051979 +element8 +198027 +lovelylady +millan +christin1 +12071981 +050680 +peewee11 +munira +alex78 +Holiday1 +brigitta +11011993 +moneyman12 +crip12 +1hater +always2 +02021973 +iloveyouda +success11 +lea123 +methodman1 +vergine +141988 +verto00q +uliana +151078 +packers2 +190692 +froilan +antrax +wonka1 +bella16 +pimpshit +tbaby1 +080189 +dressage +kelly10 +fuckfuckfuck +danny16 +080387 +000000p +30061993 +04041993 +mama69 +nono123 +kitten22 +rockman1 +ami123 +qwertyuiop123456 +301078 +jason33 +mega123 +twilight22 +dundee1 +rattlesnake +getaway +qwer56 +220878 +kasimir +sepultura1 +140294 +qwerty1! +apples4 +realtalk1 +zebra12 +boombox +wanjiru +281180 +15121995 +040292 +21091994 +fenris +23011981 +blaze12 +moppie +sonne123 +brianna8 +ganteng1 +26101980 +renault5 +dominic12 +20011980 +2801 +6point +121194 +xxx000 +alexandru1 +09111990 +moscow1 +chris93 +syndicate +joker101 +191982 +pilgrim1 +22031982 +samoa1 +myspace02 +june1994 +??????????? +vampira +08081982 +starwars10 +ilayda +yflt;lf +shopping! +hutch1 +070589 +18021980 +zcfvfzkexifz +slaughter +gandolf +18041980 +antonio22 +max2007 +ladder1 +080984 +sweetlips +vantage +iloveyoutoo +lucky33 +10121978 +felix12 +buster06 +spacebar +26041992 +wewe +erreway +books123 +haseeb +hunt3r +jenna2 +noAccess99 +treetops +119900 +wonton +841029 +killerman1 +vermillion +03031979 +aggroberlin +4password +260393 +13579q +majmun +huggybear +999991 +as12as12 +291093 +doordie +quagmire +ilovetaylo +luciole +lame +mossyoak1 +260678 +keesha1 +diplom +america22 +dakota21 +yousuck12 +tatarstan +400102 +q777777 +blackdevil +Guitar +Hercules +12qwert +lacrosse3 +mydogs +13051980 +01091994 +ratrat +draconis +blue94 +Lisa +nittany1 +25031994 +01011966 +bizkit1 +300681 +elvis1977 +navyblue +30011993 +alan1234 +knuffel +chanel123 +prank1 +godrocks1 +ilovebilly +210378 +birdcage +not2day +010694 +191081 +Sasuke +klmklm +1809 +killas +jessica05 +162636 +300180 +divorce2 +oscarwilde +400025 +600094 +������������ +shameless +ganggang +madison23 +200505 +kan +saysay +221969 +020185 +123181 +p@$$word +crystal8 +ryan101 +prov356 +aachen +bhargavi +neymar +dream12 +ginuwine1 +091092 +231095 +wanglei +290193 +morgan8 +davidh +06111985 +1sayang +baller6 +09121990 +151278 +19091979 +suckadick1 +15081979 +211986 +05052005 +kiss69 +nerissa +littlestar +demi +jacks +18091982 +shedevil +kaylyn +1justice +bootleg +theedge +redtube +sasuke10 +kartoshka +charizard1 +backflip +meltdown +JOHNNY +170580 +milenka +9999991 +meat +01061979 +12280202 +little3 +xavier08 +020295 +Baby +ouk29q6666 +wtpmjg +ihatehim1 +robbie01 +08121982 +sasha7 +matt18 +1sweety +290692 +killaz +ccccc1 +gibson12 +aabbcc1 +giggles13 +123411 +111996 +fynjybj +190281 +danny101 +14121979 +12347890 +13091994 +123mama +anders1 +jitterbug1 +canito +27011991 +blue95 +1qaz2wsx3 +skate23 +raf +fakebitch1 +tramp1 +softball27 +151177 +bentong +brunette1 +hahabitch1 +base +nathan18 +children6 +bubba6 +tristar +12345tgb +wcdd93H9pQ +moonraker +rhfcyjlfh +0070 +poohbear19 +111111t +svadba +pratham +danielle08 +1929 +21021981 +24011984 +080592 +10071993 +sexy78 +Butterfly1 +lolita12 +m0t0r0la +rockyboy +adrian14 +murcia +zelda2 +klizma +thebest2 +monisha +fernando10 +20011981 +bomb +katastrofa +loquito +827ccb0eea8a706c4c +thunder! +honey25 +04031990 +0708 +24101980 +faget1 +198320 +happynewyear +070991 +luka +chance3 +19101910 +poltava +Iceman +elanor +the69eyes +verify +twilight. +02091993 +lazarev +whatever21 +crack123 +july1987 +060983 +59635963 +ifycjyhekbn +captiva +nubian +utjuhfabz +nascar123 +600083 +0105 +hasan1 +irish7 +thehulk +gioia +mustang91 +123qwe4r +13021980 +081083 +icebox +jahoda +001969 +bobby23 +kirana +spanish2 +freedom23 +135791113 +220978 +jokerman +manitoba +hilda +271293 +16071982 +frank22 +linda11 +kimani +131095 +10041980 +0507 +j000000 +110108 +dairymilk +pepper8 +02021996 +mandalay +boy1234 +zenaida +29091994 +timebomb +happy777 +poopy3 +040683 +1child +qwezxc123 +shaggy2dop +050183 +07071980 +connor05 +steffy +cocacola0 +446688 +19980621 +kalashnikov +eryyv588 +honolulu1 +forbidden1 +060405 +6868 +0611 +purple45 +kurwa123 +jason17 +200380 +291178 +alabama123 +adeniran +881988 +rich1234 +vanessa4 +scheisse1 +harvey12 +esposito +19372846 +110596 +455445 +parkview +william24 +18011983 +markel +09021984 +kingswood +werdna1 +elguapo +15021994 +hiroyuki +vegeta123 +271292 +grant123 +ivan1990 +33334444 +120896 +041280 +300783 +12041995 +311279 +secret21 +198418 +Bayern +rana +delonge +jesus88 +sp00ky +jackal1 +198306 +moon11 +alyssa99 +pippa +df +karaman +031987 +caocao +ilovecock +rayray13 +1fish2fish +10061977 +flyfish1 +pohekale +penfold +love2002 +nevaeh08 +emily09 +donkey11 +hothead +08121991 +florida07 +13031303 +10101974 +198801 +duc +papi12 +30111992 +reuben1 +sriganesh +clermont +jazzy3 +sw0rdf1sh +pjkeirf +maryjane3 +ceasar1 +lineman +turbos +mishmish +sydney10 +28061993 +11011980 +pp123456 +jamess1 +baudelaire +people! +123passwor +pornostar +angelina12 +reo +myfuture +password79 +nokiae51 +bigblack +labella +lfif +fender7 +050575 +jayjay23 +alena123 +clelia +Carter +osho +1love4u +leo123456 +emily9 +creepy1 +elijah11 +070797 +17021982 +samisami +24021994 +080693 +laszlo +deeter_1 +160480 +ch33se +squalo +classics +01111988 +candra +boniface +nigga22 +zak123 +18011994 +meline +july1990 +30061994 +butter! +giggles2 +040893 +terrace +fcbarca +alize1 +eminem10 +1olivia +adnan +fluffy7 +imaslut1 +julia13 +farming +jessica101 +senerity +223qwe +rigger +maria20 +sandy5 +13081983 +2smooth +kevin24 +qwepoiasdlkj +iceman22 +350350 +insecure +011284 +080785 +260280 +070487 +coolman12 +arsenal08 +pippone +pinky101 +cheer15 +carabinieri +timetime +NATALIA +280480 +peace69 +keys +valente +m1dn1ght +candido +1357902468 +carmella1 +luna1234 +pumas10 +140694 +barney5 +amanda00 +lexa +090682 +timon +784512963 +matthew03 +v12345b +11114444 +191990 +ranger00 +woshizhu +juan22 +meandu2 +merritt +remark +enjoi1 +hallo2 +said +просто +555555555555 +lethal +georgia3 +eternel +20111993 +salcedo +0112 +050882 +030709 +JAYSON +vera123 +13681368 +samples +olivejuice +rabbit01 +03041982 +leo12345 +deville +23061981 +221199 +123boy +cooper5 +130995 +1346 +mason3 +198528 +22031995 +140893 +jennifer18 +justin96 +melissa15 +20021996 +cjkjdtq +Internet1 +black! +cfhfnjd +everyday1 +jeremiah12 +Rocky1 +loveu4 +checking1 +Playboy +16051994 +allahoakbar +giddyup +hotboy3 +saurav +120101 +25031982 +12061981 +daking +decode +050289 +peachtree +loreta +ronaldo2 +2q87xI3vFX +jasmine05 +palmetto +rosebuds +oswaldo1 +soccermom +121232 +QWERTYUI +sandee +chloe4 +19851216 +farts1 +190700 +lordshiva +volcom69 +06071982 +eraser1 +211094 +07101992 +24101994 +sheppard +gemeni +220979 +asdfghjkl7 +ashley27 +�������� +mounia +080188 +louanne +11031994 +paramount1 +cristy1 +100795 +AVM6Ubdunj +kesha1 +02031979 +bing +player24 +delrosario +yellowdog +3008 +mazda323f +alfaro +ALBERTO +021986 +21051981 +manila1 +gamecock1 +goheels +deaddead +soccer87 +byabybnb +bonjour123 +iloveme18 +tools +19841007 +123645 +money27 +kahraman +15071981 +yandex.ru +mammoth1 +29111982 +08091982 +poops1 +17031982 +starwars13 +awawaw +fkbyf +cutiepie5 +Blackie +springbok +pocoyo +john123456 +asante +papamummy +jack101 +pumpkin! +millioner +311092 +chrisbrow1 +060882 +13561356 +raindrop1 +060695 +william99 +24hours +hayden07 +hoang123 +ad +1926 +stinky123 +repsol +21041982 +08121993 +020396 +cerberus1 +ilovejack1 +159654 +tanushka +11081108 +panda10 +deerpark1 +qqqqqqqq1 +jamal12 +firstborn +redd +28011980 +mama777 +homedepot +josh24 +23081980 +spider22 +Franklin +ethel1 +11301130 +mohsen +kigali +26051982 +smellycat1 +ignition +naruto666 +scooter! +coccodrillo +teapot1 +040391 +199811 +fuckthisshit +29091982 +jack09 +123001 +1516 +mytime1 +tigers24 +zippy123 +200606 +brittany22 +hollowman +matveeva +juarez1 +15101510 +jolie1 +13041994 +19061982 +arsenal8 +11101994 +11091109 +monkeys5 +020394 +141421 +plm123 +090584 +fantasy8 +transit1 +14021978 +sparda +peace14 +17041983 +02061979 +vipvip +051987 +station2 +400079 +mahmut +ryleigh +midland1 +sutton1 +yourmomma1 +050385 +aaaa12 +18041981 +andrea09 +bond0007 +140181 +ashley98 +school. +retail +Dragon123 +matt24 +hotel1 +03061993 +2500 +boquita +khurram +mehmet123 +valdez1 +tyghbn +071082 +redsox22 +struggle +fgh +dakota14 +mckinney +13041982 +dcshoes1 +tinman1 +12091982 +ninja5 +anabel1 +180679 +manuel23 +26011994 +010382 +ireland7 +prayers +28101981 +beach12 +130794 +iloveme69 +youngbuck1 +bigbitch1 +shelby14 +31031995 +daisy6 +25242524 +librarian +20071981 +helder +nitesh +klavier +250280 +1amber +poop14 +160183 +205205 +jada12 +051193 +iloveu01 +thug123 +solace +flash3 +punksnotdead +bananaman +452452 +nikoleta +honey24 +060291 +haylie1 +kamina +frisbee1 +curtis2 +08021993 +12061982 +100895 +smallfry +cruz +1kimberly +2523 +charles4 +27091983 +rambler1 +GvqJvxVb76 +400099 +oddball1 +dakota04 +261279 +jarred1 +220893 +2609 +premium1 +01071994 +05011986 +07121992 +09041992 +tarragona +kondor +1bastard +tickles +fucktard +03061982 +21051982 +030579 +cradle1 +jacob99 +15935700 +nandhini +lialia +15121979 +powerup +0011223344 +198508 +dunno +cnhjqrf +080385 +madinina972 +libellule +keshia +041282 +timothy7 +eusitu +331331 +olympics +s00000 +050485 +wizkid +1935 +skittles11 +policja +fragile1 +gznybwf13 +sergey1 +selma +mmmmmmmmm +161279 +jonathan20 +23051995 +ortiz1 +sexybitch3 +140879 +nikita1997 +220777 +tomasa +globe +maddie10 +HPH2N89qif +elijah7 +110395 +nichole12 +21101981 +imgay2 +genetics +budlite1 +amber! +sexme69 +sweetass +151077 +lauren09 +15243 +x72jHhu3Za +09123456 +takeiteasy +sweety7 +31081982 +britton +3578951 +830830 +01021978 +slim123 +loveyou10 +24122412 +090391 +ilovenick! +23081982 +16021994 +lupe12 +eR2SizO241 +231277 +kaylah +majka +290782 +clinique +221982 +29091980 +lexie123 +nike14 +zacefron12 +mypassword1 +soc +shitass1 +2425 +lover25 +31103110 +june1980 +rachel18 +lildee +150978 +Frederick +1A2B3C4D +270780 +america09 +shit22 +199416 +18street +13091980 +janeway +jackblack +cassie22 +dragon28 +221194 +technician +roro +bryan13 +26041982 +10191019 +070982 +rachel16 +holly7 +090791 +momentum +babygurl17 +mayfair1 +270680 +interest +29081983 +linkbuild +������� +tokyo +121415 +angels21 +030992 +280679 +miguel15 +18031982 +560048 +281279 +38383838 +france123 +edgar13 +112008 +madison99 +21071982 +19041995 +jacob15 +20011993 +17041993 +school6 +cameron09 +cakes +octavio1 +bebert +bulldogs11 +06041983 +1hollywood +optiquest +250895 +rocky8 +rockout +2326 +17061982 +ilove10 +nijmegen +bosshog +volodia +sing +23021981 +subaru555 +laverne1 +071181 +19041980 +kisa +041082 +praisehim +bhavesh +bienchen +22041980 +lombard +150293 +cowboy3 +11091993 +apollo123 +pooch1 +h80lsa +littledog +dog111 +poiuytrew1 +vanessa21 +sasuke3 +gopack +flowerpowe +kevin101 +class2006 +020982 +minecraft12 +teamodios +02071993 +08101984 +181180 +runner12 +a66666 +haylie +ilikeyou1 +topman +sanderson +270383 +sp1der +260693 +anthony28 +110778 +261079 +241277 +171988 +15091983 +nopass1 +516516 +hotboyz1 +198215 +punkpunk +kate11 +17081994 +polo11 +060482 +bellagio +0907 +asas1122 +cherrybomb +love2003 +fujitsu1 +198504 +mommasboy1 +1snickers +edvard +sommer09 +270193 +tyler24 +1234ss +181279 +Brigitte +28071983 +ferec +babygirl04 +27091992 +irene123 +richard22 +skooter1 +boring1 +davidbowie +270793 +alexandros +kenny13 +babajide +lovebirds1 +lucygirl +070185 +ginger07 +strummer +25101981 +iloveme8 +sutenm123456 +Qq123123 +nosferatu1 +teamwork1 +080491 +ars +fuckoff8 +mohammed123 +beauty7 +jake17 +190284 +am +buffalo66 +babe1234 +camryn1 +mommy14 +master09 +sometime +201277 +andreika +16051982 +190681 +omsakthi +juventino +lavina +imaloser1 +240194 +honda88 +edward101 +kurtis1 +asdf45 +25081982 +offline +heinlein +docinho +iluvmyself +rincon +plplpl +black20 +quasimodo +pickles3 +snoopy4 +136666 +okinawa1 +javajava +harrystyles +missy101 +quintero +sports10 +gadget1 +King +cachondo +01031978 +eightball1 +14111982 +ring +Colorado +11111979 +nana07 +bella69 +11011981 +duffman +cle +loveme20 +ponyboy1 +040884 +060782 +12011995 +hated1 +09011992 +mangal +demetria +vtufajy +kuchen +kaduna +samantha08 +siddhi +ch3rry +school08 +jamie5 +isaiah01 +300595 +omaromar +130978 +tartan +quigley +041084 +bambam13 +171193 +chelsi +07031992 +090978 +ebay +pepper. +osvaldo1 +defleppard +160777 +gotmilk2 +pablos +vampire7 +barnes1 +02011992 +haiti1 +missmolly +05111985 +hottie92 +jlbyjxrf +thomas27 +151989 +fasttrack +2369 +120798 +Feuerwehr +chris87 +iloveyoual +jackass4 +021984 +kittykat12 +23041981 +makcim +lero4ka +rufino +dartmouth +pissedoff1 +19071981 +babygirl31 +02081979 +pattycake +19101981 +buster8 +cacatua +kangar00 +mamanjetaime +775577 +250978 +Jordan1 +lilylily +raven7 +alecia +141008 +230195 +shelby69 +nicenice +ybrjkftdf +claudita +mason01 +babe22 +240894 +hooch +05111988 +310592 +maria19 +Lawrence +moneyboy +anna15 +mistigri +phiphi +barbie21 +bhutan +munkey +26111982 +201094 +shelby5 +silviu +200779 +qqwwqq +160381 +norwood1 +smokey6 +zamorano +090188 +acdcacdc +tina01 +taters +breanna12 +041279 +shreeji +098098098 +fordford +falcon11 +budweiser8 +shelby22 +rianna +mistery +fine +goodlooking +anna69 +mkomko +pe +granit +july123 +coqueta +victor21 +18031981 +superman27 +Joshua1 +curtains +ocean12 +isabel01 +plaster +1penguin +lena1234 +291181 +123itsme +kings5 +fuckoff0 +151983 +fruitloop +29011983 +segreta +sexy4ever +andres13 +05081993 +cheeseball +marcial +parkway1 +041283 +20021995 +morgan69 +mc123456 +veneno +qwertyqaz +loser55 +09121992 +aggies12 +pecora +laposte +ilovebob +sweetsweet +girl23 +camello +jayden23 +270893 +supergirl2 +160893 +f1f2f3f4f5 +selamanya +geelong1 +panthers09 +230877 +bernabe +pennys +dheeraj +261985 +sinclair1 +160379 +lizzie2 +justforyou +twilight5 +17071982 +looklook +xh246AIGUN +98765a +queen3 +1290 +mathieu1 +bball8 +ribbon +DALLAS +panatha +player9 +abc123321 +noncapa09 +21021995 +Pamela +filthy +hiroshima +maslo +codeblue +131278 +stars13 +13579000 +oakwood1 +angelica2 +nirvana3 +852456852456 +spooky2 +333123 +display +888222 +POLICE +KENNETH +football59 +pet123 +jennys +pizda +02071979 +barley1 +030508 +kitty24 +vbnmrf +empress1 +08081981 +060694 +050185 +221078 +260878 +lena2010 +198807 +ell +bears2 +poontang1 +baller07 +police9 +240380 +luqman +devildriver +emergency1 +babyjane +spears1 +realmadrid1 +vermilion +sparky3 +09081982 +pimentel +joshua77 +sweetie5 +paperboy +22021995 +cheat +rose24 +skeeter2 +antwan +06111984 +kangkang +rosenrot +mariposa11 +230694 +tyrone2 +games12 +234234234 +141178 +music88 +figment +zimbabwe1 +douglass +krzysztof +dylan4 +301179 +robert33 +101996 +joelle1 +carrie12 +precious01 +lool +school8 +170693 +ARTHUR +martha12 +ryan1 +briana12 +21111981 +198124 +troll1 +honeydog +texastech +Arschloch +popcorn22 +katita +ponies1 +temitope1 +160293 +25021994 +audrey2 +familia4 +sQ8Hm7l4 +enter12 +180693 +terrie +04061993 +ylenia +britty +1237890 +nightmare6 +touareg +7734 +$HEX[687474703a2f2f616473] +mhinekoh +admin1213 +gastone +28011993 +john99 +231176 +splodge +maruthi +06121983 +00070007 +manikandan +qwerty65 +600096 +21021980 +salinger +tinker4 +sam111 +seth12 +godrocks +Master1 +guitar21 +24081983 +190480 +beckie +help12 +1234567890v +13121979 +lollipop3 +monkeybut1 +scotty12 +minako +jinkazama +asian123 +020892 +mystere +zaqzaqzaq +alyssa04 +elnumero1 +29061981 +240677 +wiley1 +28121994 +jess21 +jonbonjovi +nicole84 +sesese +nolwenn +090185 +garth1 +180380 +moskow +31051995 +one111 +ercole +Linda +999999999a +081280 +texas07 +hoho +112311 +gaston1 +cocoon +271093 +fynjy +06101984 +artistic +marie92 +21091981 +17071981 +rocket11 +matrix13 +janosch +brussels +jesus19 +mistrz +lex +luis22 +blomma +gabrielle2 +22081981 +hen +mark18 +gangster10 +cookie25 +harlee +110994 +0741020 +19021983 +tiberium +royroy +19121980 +doriane +4xeaxR653E +monster101 +180482 +activate +pussy8 +011081 +crazzy +alex44 +acissej +170493 +baloo +cowboys07 +mamang +Dragons +aimee123 +deeper +nonoy +snoopy6 +ghjghjghj +drama123 +blake7 +11121994 +killer187 +45 +king45 +halo3 +pooh18 +180479 +pangetka +hotboy23 +24102410 +1granny +andy21 +1zxcvb +vinoth +nicholas6 +decatur1 +8181 +199214 +230578 +deamon +29041982 +090886 +dri +spring2 +31071983 +270381 +kovalev +29051983 +291293 +141179 +fuck08 +joecool1 +foxfire1 +ginger09 +salento +tane4ka +kabuki +poser1 +tinker14 +secured +10011981 +aaaaaaa7 +130677 +marine123 +harika +jackie14 +therock123 +blackpower +011093 +jennifer09 +henri +miller22 +c0l0rad0 +eggroll +alex1975 +neutron +nathan9 +aleluya +123zxcvbnm +020993 +260480 +habeeb +gangsta. +nevaeh07 +1706 +lenin +doom666 +Spider +jonathan18 +joker6 +naruto25 +lilypad +ramani +080291 +240877 +16021995 +050792 +robin12 +cricket12 +110808 +alina1998 +140382 +mahesh123 +lagartija +051986 +sexy04 +thunder01 +bubbles0 +060586 +cyclops1 +diana15 +panic123 +ilovematt! +star56 +schweiz +101993 +112009 +bochum +mikki +tony18 +clarinha +120176 +nikki16 +michael30 +fuckstick1 +estrelas +mack12 +0306 +pen123 +celestial1 +leon1234 +onelove! +160881 +nicknick1 +sweet20 +090187 +mateusz123 +beach2 +state +rockit +159159p +30111983 +rockstar8 +pissedoff +131990 +fatso1 +mirtillo +1234566543 +jasper3 +7410258 +09011986 +mnbvcx1 +faceb00k +apologize +pamela2 +500047 +kometa +08041990 +hornet600 +500073 +dollarbill +access12 +killa187 +ruger +brittany19 +24051982 +z11111 +130195 +13051982 +444222 +270281 +crossbow +ahmet123 +sonicboom +26011982 +JACKIE +271271 +28031993 +love900 +400074 +luis17 +jacket025 +2titties +helene1 +200979 +december07 +Music +sparkle2 +pookie10 +13031982 +party69 +victor23 +friday2 +chloe7 +prdelka +sagopa +golfpro1 +matematik +kara123 +liberia +10021980 +botswana +boob123 +randal +tomfelton +23111980 +qwerty80 +vito +gangster7 +Loveme +10111995 +22121995 +vengeance1 +2pac2pac +handicap +198417 +nikesb1 +734992 +070190 +loveya123 +yellow1234 +30041982 +159753258456 +gilmour +shinee +misaki +bigpimpin2 +270883 +edward. +Winter11 +csillag +hondaaccord +poopoo11 +doggy3 +dinky +snowball3 +bigpun +iloveandy1 +0101010101 +159369 +141195 +manu4life +143baby +darby +ISABELLA +fredo +maluco +humboldt +30061982 +seema +steelers01 +17031994 +arsene +050893 +biotechnology +deleted1 +frankie13 +230978 +london77 +tigers14 +julian08 +28101993 +julian3 +weed14 +chalupa1 +june1993 +101994 +260580 +alyssa02 +malaki +teddybear4 +bungalow +surf4life +sagara +bonethug +dejavu1 +010992 +qaz12wsx +rhenjq +songohan +baster +skills1 +iloveyou91 +bluecar +alyssa09 +04111989 +sweetwater +maffia +1vagina +holiday2 +moulinrouge +combat18 +711101 +gioconda +rousseau +christina8 +05031983 +200393 +marina10 +dixon1 +carrera1 +piaggio +Goldie +1cecream +030981 +180780 +260181 +pass@word1 +mentari +Nissan +Banana +haritha +h2oh2o +291177 +891011 +grace13 +speedy01 +extension +andrea07 +bhebheko +thc420 +nike24 +panthere +250993 +scampy +paulo1 +london3 +vampire69 +xyj44pe3GV +woody2 +111199 +buddy06 +baldeagle +belova +andrian +70707070 +carolina10 +cambodia1 +boarder +chris34 +cherry08 +hung123 +akash +scary1 +nelly2 +15061994 +Fishing1 +130979 +pene +gloria2 +ortega1 +bnbnbn +fiddler +budlite +sasha22 +libertine +dominus +37373737 +negative1 +niallhoran +hottub +seattle206 +kingdom12 +091180 +highlands +011184 +matt07 +220202 +werty12345 +23081994 +man123456 +eminem88 +11223344556677 +281193 +shamar1 +anissa1 +tinker22 +101071 +edhardy +Valerie +03041980 +radiator +thando +aastha +fastlane +bettyboop3 +drink1 +thejoker1 +balls12 +060487 +bob1 +butter7 +amber17 +Theresa +201177 +rainfall +200010 +1butthead +assmonkey +bellamia +01111987 +marcell1 +йфяцыч +coolpix +beezy1 +10091980 +031180 +120408 +pussypussy +goliat +oldtrafford +tel +jza90supra +Roland +tippy2 +130695 +omgwtf1 +huggies1 +lidiya +090583 +FuckYou +160281 +2030 +20042008 +19031980 +beaner12 +14051982 +beasley1 +planb123 +01477410 +wilkins +08101992 +hammer69 +27051981 +bricksquad +Fabian +nokia6280 +brutus12 +500036 +mariami +181293 +311277 +tumbleweed +130194 +2602 +cherrie +29031983 +topmost +198101 +20152015 +�������+��������. +19101994 +cassie7 +shanks +1hateu +080992 +1kingdom +070691 +yanks +funhouse +england12 +mamaia +wethebest +nsync1 +laurita1 +probation1 +922i4Deebm +hiphop13 +aaa999 +061081 +shabba1 +01051994 +280791 +videogame +04081993 +200181 +lovechild1 +sivakumar +macbookpro +11041981 +03111982 +pass4me +avril123 +oficinag3 +938271 +parker3 +050879 +270282 +blue98 +friend3 +145236987 +peaches21 +demond +55555r +hyperlite +Summer12 +prettyboi1 +naruto92 +260676 +09061992 +fdfdfd +01061978 +smooch1 +wolf666 +danny17 +ibrahim123 +stinky12 +bigred2 +ambiente +two +miami2 +piggy12 +1hiphop +bizzy1 +rocking1 +willie11 +happy111 +hammer11 +ajay123 +brutis1 +123chris +230595 +tee123 +151980 +mumumu +mariah01 +140380 +patches01 +password2011 +03091993 +butterfl +fifa11 +jazzy01 +lisa23 +131077 +2580852 +did +liverpool1892 +uni +sandra7 +maxthedog +bruninho +220995 +23101979 +gf +jonathan. +ancuta +123qwaszx +ourson +rap4life +261179 +19121982 +jerica +pancho13 +maria. +270993 +charle +05071993 +180594 +yankees08 +121998 +ionutz +Whatever +panic +050384 +pumpkin11 +dfdbkjy +18031980 +daisy! +kinderen +nobita +28091982 +fatcat12 +cassie4 +05061981 +211985 +jerome12 +141078 +3kitties +cs1234 +290181 +cabriolet +jason16 +school101 +08081978 +philomena +weezybaby1 +lyric1 +mrcool +destiny21 +goldwing1 +11111111111111 +print +fantik +jakers1 +football#1 +flashman +19861020 +dallas99 +lthtdyz +fishka +saab95 +27051982 +kirill123 +viorica +maggie15 +playaz +daisy14 +secret007 +larrybird +simone01 +nitin123 +201279 +battleon +allezlom +24041983 +worker1 +coolbreeze +9YUE27RI +04121982 +dannys +290680 +230295 +evil13 +654321t +goodison +16061981 +kungen +brandi12 +ghjhjr +lordjesus1 +tinkerbe11 +brown3 +21081982 +06041982 +frank01 +inlove3 +april2009 +kemper +ihateu123 +recherche +eugenia1 +ephraim +030482 +ninja9 +adebisi +1lovelove +Forest +chains +mouse13 +bricks1 +208001 +connor06 +261294 +ivan1980 +050483 +Pantera +09091994 +280181 +19851212 +joschi +pepsi7 +friends4li +nascar9 +04111992 +cassie! +24091983 +Tiger123 +thereisnospoon +islandgirl +giacomino +03061994 +09101989 +guntis +Charles1 +malamute +mooseman +161095 +gilligan1 +naruto77 +edition +lukaluka +lamer +curry1 +meme13 +vivamexico +gracie13 +dipo01 +efrain1 +Cowboy +vitesse +abc987 +crf150 +KRISHNA +tamie +thuggin +kerrigan +taffy123 +victor5 +260479 +527527 +040392 +300380 +150477 +24081994 +21121980 +leipzig +dispatch +27041982 +carlos8 +luigi123 +180294 +cmoney +tylerb +noggin +1Password +as12df34 +rafal1 +517517 +09111988 +301177 +jesika +max2009 +lutscher +cjrjkjd +sushila +010582 +16881688 +552233 +hakuna +180393 +reception +kl1234 +denhaag +zorglub +7070 +201095 +angel78 +25031980 +maryjane4 +220180 +sheva7 +muddy1 +machin +scorpio3 +sawdust +joseph05 +keroppi +lynsey +mollymolly +messages +150979 +cassiopeia +fgdfgdfg +700017 +suman +ak47 +01021996 +twenty7 +barnie +pippo123 +lisichka +liberty123 +wise +kanpur +08031980 +050486 +levani +sardor +kawaii1 +mercedes123 +sallyann +250194 +stefani1 +viktoriy +1488ss +asha +nick18 +23061980 +borris +shadow94 +our3kids +PartSites +1911a1 +mama08 +yankees9 +pupp!e +kyle10 +dogmeat +pepsimax1 +fuck_off +25081983 +steelers! +24021983 +daniel33 +bitch44 +porsha1 +matthew04 +three11 +iluvhim2 +emmalee1 +4043vd +300679 +200400 +021988 +jose24 +123786 +24041981 +sonoma1 +tumtum +84848484 +hotstuff69 +martinez13 +ciaooo +loveline +123456hi +orbit1 +lover4ever +23051980 +198728 +20092008 +8wwH19duyJ +ilovepaul1 +050393 +q112233 +kira12 +seo21SAAfd23 +28011983 +progamer +courtney14 +hailey3 +14041981 +pianist +mustang64 +louise13 +zaharova +mississippi1 +cyclones1 +14021981 +temidayo +miniclip1 +projects +22091980 +ladeda +jak +SEXY +gangsta01 +amor23 +walker2 +18011982 +moncho +pizza1234 +yoyo1234 +lady22 +cnjvfnjkju +MARIE +playboy4 +prettypink +170695 +natalie4 +casa1234 +Shorty +bling123 +pavel1 +diesel01 +13521352 +andrew26 +chomik +crazy9 +mike89 +1982111 +09031992 +galaxy123 +LORENZO +mario15 +112500 +rachel23 +Duncan +june1985 +barcelona0 +lenny123 +1sandra +asdf321 +uIS9Zdgysn +190777 +258013 +djkujuhfl +1188 +tevez32 +061987 +zaxscdvfbg +yoteamo +pinkpanthe +pawel123 +SHANNON +schmetterling +sergey123 +arabia +puppylover +alexandra7 +travis21 +050992 +jkzjkz +littlered +latinlover +090685 +vfkmxbr +lollipop11 +mypass123 +surabhi +danny07 +lucie1 +pisser +jimmy10 +loll +psycho13 +220577 +october06 +babyg +zeus123 +bebe14 +charger21 +bubblegum7 +11071107 +17061980 +thanos +divers +06011985 +buddy111 +pineapple7 +171179 +wenger +redneck13 +210596 +morgan02 +teddy10 +08011986 +Summer10 +frogs123 +poopers1 +19851225 +280681 +11111994 +paola12 +minimoto +11051995 +251176 +200707 +8i9o0p +peperoni +hiphop11 +112112112 +310579 +journalist +ghb +gangster! +175175 +sweet1234 +m2YdEgkDws +110000 +04051982 +candy18 +carambola +kimberly11 +amor01 +narcisse +sasuke22 +rayyan +lechuga +24031993 +jacek1 +���������������� +dkflbdjcnjr +usnavy1 +260180 +ramone1 +craven +254254 +fish13 +pathetic +god1234 +25111981 +vsevolod +floare +04071984 +anaelle +kis +nordic +october07 +seppel +shredder1 +between121 +victoria4 +dashboard1 +romeo13 +sloboda +canyon1 +gunit12 +winter2010 +241293 +081282 +030780 +brainstorm +05mustang +abbygail +silky1 +mother21 +bloodline1 +27111983 +1982gonzo +gollum1 +paul22 +211294 +rezeda +lilmama23 +toto1234 +miercoles +198428 +blond +baby32 +130295 +4949 +10051980 +wawa +777jesus +spike7 +fashion12 +z1122334455 +higher1 +disney411 +gjikbyf +221294 +1samsung +ballin09 +CHICKEN +22021980 +bulldogs10 +babys +wahaha +jayman1 +getfucked1 +angel1995 +ladybug! +derek12 +amber6 +jenny16 +harerama +add123 +02111983 +kittykat2 +brindle +tiffany22 +secret6 +04051993 +fluffy3 +sarumi101 +nd2Ia8v8aZ +nelson2 +02061995 +197222 +3009 +24101993 +hyrule +Timothy1 +eliana1 +24101982 +06051993 +folk74 +crossword +3366 +192939 +naruto08 +domi +sims +20031995 +lovepeace1 +zach11 +040792 +26051981 +12011981 +10051005 +amber18 +belize1 +heart3 +121074 +180792 +punk11 +goldie123 +2xtreme +otherside +198816 +0000011111 +240678 +deerpark +fldjrfn +Ateneo123 +babyluv1 +500044 +190193 +kaydence +greenie +121205 +grace4me +emeralds +james420 +200577 +lyndsay +06091992 +booboo16 +333eee +david28 +fbobh_ +chivas18 +eagles81 +111175 +alma123 +danger2 +150993 +lucky19 +17061981 +blackblack +semperf1 +kanwal +27021993 +nabil +jasper7 +1320 +likemike +kallie1 +Apollo +br00tal +batista12 +gnu +nikki08 +sosodef +1323456789 +192000 +0o0o0o0o +20462046 +04031982 +dagestan05 +andrea6 +mcgregor +050981 +753214 +witspass1234 +1lovelife +ilovemaria +041092 +leumas +batman25 +040477 +spiffy1 +11071982 +mikimaus +zxcdsaqwe +iceman01 +prueba +swimming12 +15041980 +jayne1 +car1234 +jamila1 +RDxyD43hca +kitesurf +2706 +nathan17 +shadow93 +dethklok1 +rahrah1 +121176 +toy +lawless +playboy18 +bigboy15 +061093 +051281 +chummy +25091981 +03091982 +rbrbvjhf +boscoe +jorden23 +05111992 +19091980 +maitai +eric15 +Napoleon +mybaby! +twitch1 +kalinin +aishat +pou +14051981 +060780 +210707 +helives +mars123 +alejandro0 +inlove09 +10041979 +volvov40 +370000 +spiker1 +happy4ever +brandon25 +220794 +020780 +naruto88 +rupesh +25091993 +123456789az +goldenboy1 +lynn01 +666666d +qwaszxedc +deer12 +NIRVANA +151193 +mentiroso +hunters1 +zkexifz +vlasova +george14 +040393 +masterplan +666777888 +gri +love2001 +ja8yc7txs8 +31031982 +mariah11 +maggie00 +notrust +getlaid +mario14 +1samuel +43434343 +princess86 +ilovejay1 +amitkumar +chicken14 +cutiepie14 +huseyin +010480 +198923 +memek +yesica +1001001 +vicvic +5251410 +050793 +080985 +raiders22 +120295 +trixie12 +theboy1 +jezebel1 +diversity +160160 +sexygirl14 +ascona +050782 +coffee3 +Trouble +doctor123 +03041995 +bowman1 +korokozabr +vfvf12 +neversayne +812812 +8282 +roberto2 +30071993 +jessie14 +28081982 +michael92 +���+������� +110331rahili +cloudy1 +leeds123 +25101994 +bullet12 +jazzy11 +131995 +katkat1 +06011992 +physio +farah1 +darker +bitch66 +030781 +02051994 +lucka +shearer1 +flower101 +199314 +otters +wildcats2 +281280 +jaylyn +redsox23 +151984 +alina1997 +cheekymonkey +warrior3 +maria12345 +ilovedanie +usuario +guwapo +sp +sti +sebas1 +huawei +luis16 +271279 +passing +RICARDO +dancer8 +adadadad +godloves1 +mobster +amor21 +21031982 +27121994 +seagull1 +n1rvana +travis22 +free22 +jerrys +22121978 +honda05 +zach1234 +lemming +Charly +chayanne +wasabi1 +lindsey12 +louise3 +29071993 +cambria +05061980 +gecko +2909 +070287 +11121980 +jackie4 +tomtom2 +lover55 +05021983 +danie +250281 +cheering1 +skin +noproblem +1234anna +5121472 +18041994 +grace08 +Norman +24021982 +011282 +reed +shadow91 +arianna2 +libra123 +1softball +08081993 +junior20 +17041980 +13091982 +k.,k.nt,z +080286 +barbie14 +290994 +020893 +zarema +hlubkoj1 +alicia3 +fabian12 +ugly12 +malina1 +neslihan +cupcake23 +username1 +14031980 +janssen +0610 +wrestlemania +sombrero +bigdaddy01 +belial +springsteen +brenton1 +anita12 +marylou1 +good123456 +180000 +13qeadzc +141980 +gixxer +chiva1 +jes123 +saad123 +cheese1234 +14011993 +camels1 +15091980 +tylers1 +100195 +25041994 +gmail123 +linux123 +280994 +hfytnrf +110996 +hydro +peppie +anvils +200593 +forensic +Valentin +skates1 +ludmilla +060608 +sledge +daughter2 +04200420 +mary10 +MAHALKITA +cvcvcv +avocat +miller3 +161179 +faggot69 +denisse1 +alex85 +arsalan +vanessa15 +weed21 +nigga21 +michelle0 +komltptfcorp +r2d2 +filipina +19121995 +karens +220875 +shenlong +69qd5CgxhU +daddysboy1 +15071980 +180193 +sexi12 +godzilla2 +collect +161984 +teamo3 +artwork +lakeview1 +gilang +muffin69 +040992 +260679 +cypher +140677 +sex69 +pepsi13 +cute01 +harmony2 +super23 +kushal +loklok +chris32 +brebre12 +mawmaw1 +doors1 +thatcher +261177 +biteme3 +81818181 +postcard +010309 +21111980 +curtis123 +greater1 +060781 +babie +250979 +jabroni1 +15071994 +jack00 +1myspace1 +lakers5 +fenton +hannah69 +nicusor +120996 +jump23 +d666666 +prince5 +annamarie1 +AnneA +99990000 +happy16 +peanut. +mommy06 +28021993 +renae1 +vinter +gamma1 +230678 +inuyasha123 +logcabin +manuel22 +lab +athina +dave69 +220994 +vinod +Blacky +031181 +titouan +karabo +junejune +ilovehim14 +17121994 +020679 +050884 +1934 +198128 +glock +hayward510 +prateek +divino +flyleaf1 +147896325a +smoke14 +22051994 +monkey12345 +kayak1 +garnet1 +nathaly +blbyf[eq +20021994 +discipline +910910 +may1994 +fredy +thunder69 +�+������+�� +ilovejosh! +a321321 +playing1 +prerna +12091993 +peter1234 +25111993 +westbrom1 +greatgod +chula +800020 +denver3 +17061993 +harley98 +brat12 +bigdog01 +11021995 +tanner10 +zack11 +1jessie +161093 +milo1234 +walton1 +070492 +cola123 +nathan00 +chewey +cinderela +smasher +brebre123 +chiquitita +branson1 +hippos1 +12340 +1night +25121995 +010579 +lamejor1 +shimmer1 +babyboo13 +24101981 +lensois +050578 +rfktylfhm +181989 +rising +190992 +sophie99 +291180 +maxim123 +400007 +110793 +10071995 +qwerty4321 +turtle21 +201193 +02051978 +lebesgue +johnathon +ялюблютебя +301178 +20031981 +erine! +16051993 +290579 +121204 +corinthian +05031981 +Wolfgang +johncena13 +shaka1 +swiss1 +mindy123 +197412 +lauryn1 +daria1 +120800 +koko1234 +savannah01 +shilo1 +blabla2 +08041983 +getmoney! +authentic +Slipknot1 +STARWARS +230477 +1325 +brayden2 +amber07 +bakers +robina +white2 +sakic19 +argento +03061980 +farthead +cerebro +MARIANA +240393 +150894 +kaspersky +tweety9 +a444444 +repbyf +Hammer +jughead1 +free13 +140477 +250578 +gemelos +130279 +point1 +petike +mary15 +southpole2 +10261026 +mike27 +fy +sealord +10071994 +030583 +grinch1 +hbk169 +20000000 +sponge2 +03101983 +cannibal1 +dragon2000 +081295 +130596 +3.14159 +semen +tony17 +omglol +maramara +seafood1 +kickit +crapper +ginger. +pepe1234 +doggys1 +lkjhgfds +coco15 +tryme +nicole90 +eggnog +moneyman2 +kevine +wexford +130595 +25091982 +188188 +ross123 +marvin01 +chester13 +pockets1 +riley08 +champ12 +carneiro +kamal1 +bigred12 +denilson +040984 +bullet2 +190492 +candy17 +hollywood0 +14121995 +joey14 +pass_rRR +worcester +Bernard +frantic +november07 +ras +mmmmmm6 +171983 +pimpdaddy2 +michael200 +plato +19031994 +love888 +rani +stephon1 +diosteamo +250178 +20022003 +spirit7 +bebe1234 +azure +elefante1 +Pumpkin +blue1 +fanny123 +angel321 +987654321l +141177 +2912 +110179 +tigers05 +091987 +busdriver1 +boludo +elephant! +2021 +lily11 +111968 +290182 +jonas11 +sekolah +ooooo0 +07081982 +barton1 +nikki07 +bit +bella8 +1eagles +yoohoo1 +matias123 +sd123456 +wisdom123 +fenix1 +bcgfybz +1523 +080786 +cool90 +fangfang +26021982 +bebe22 +111176 +13081994 +alex1979 +26081993 +19081982 +bbb111 +azbuka +irfan +county1 +paris13 +150278 +14701470 +toots1 +oluwaseun1 +123w123 +inlove13 +DAKOTA +197610 +recoba +mariomario +fatema +july2801! +vologda +interesting +biteme11 +boluwatife +batman33 +rfvbrflpt +iceland1 +29081982 +love2004 +kyle21 +blueangel1 +bvgthfnjh +pac +9632587410 +chelsea26 +cinders1 +insomniac +05021981 +140979 +ninja3 +hollywood4 +19411941 +041181 +aristide +flapjack1 +301079 +nokia73 +220778 +полина +lillypad +06081983 +roger12 +102080 +adriane +margit +qwerty34 +090387 +loveme143 +nintendo12 +14091994 +20051993 +141079 +sukkel +270382 +07101962 +mellisa +huguette +19031982 +pattie +19831984 +ckflrbq +vjkjltw +kanchana +july2006 +200780 +Creative +naruto98 +05101981 +cookie33 +merced +sparky22 +scott13 +831220 +mollie12 +mari13 +torrents +hotdog5 +incomplete +evh5150 +0712 +chip123 +280879 +armyman1 +fabric +press +groucho1 +woo +121273 +141077 +phil123 +universitario +parker9 +nita +hooters69 +generallee +damien666 +pentax +release +ironman123 +611611 +winky1 +choice1 +080683 +180481 +playboy10 +artemisa +child1 +anna1999 +gesundheit +shop123 +gothic123 +goodgame +prestige1 +bubbles07 +thug101 +pooka1 +25041982 +harleyd +panthers10 +270480 +bhagwan +feuerwehr1 +jake05 +lilo +boyz2men +p0kemon +09121991 +families +gfhjkm13 +102090 +colts123 +daisy07 +june1991 +101110 +the1ring +sexydiva1 +12345678910a +150478 +15081980 +jamie7 +27071993 +smurfette +199202 +karlita1 +8thgrade +supersexy +thunder6 +darinka +designdeal +david2009 +scooter22 +bigbucks1 +nyyankees1 +strauss +frighten +magic8 +gumdrop +dreambig1 +922i4Ceebk +poop33 +danny18 +04071994 +poopstain1 +homedepot1 +padmini +greg1234 +7777777m +271983 +jasper22 +cowabunga +sayang12 +hello2you +kisses4 +198828 +archimede +240779 +niceguy1 +superstar0 +he +feedme +16091982 +daryl1 +19921993 +nala123 +catsdogs +k123123 +24121994 +baby2005 +student2 +19861987 +08091994 +jeremy14 +031293 +buddy99 +innocuous +magic23 +drinking +020981 +111111e +jinky +sillygoose +billyjoe1 +cutiepie4 +BRANDY +27101980 +edi +hatred1 +ravenclaw +marijana +thanhtung +scooter10 +summer18 +240578 +010991 +010794 +031985 +fallenange +jeannot +020694 +garrison1 +240180 +runescape5 +saltwater +damn123 +24041993 +valerie2 +sasha3 +090892 +roma1234 +emily21 +daedae +sweets2 +lovebaby1 +purple95 +19071980 +spider23 +1521 +223856 +loki123 +210478 +mother13 +snoogans +heather9 +198301 +marmaduke +pregnant1 +christmas! +diediedie +patti1 +minemine1 +lilly01 +tumble +1357924 +geranium +07111991 +31051982 +anna16 +30121993 +sweetone +qwertyui9 +trupti +shakir +madcow1 +dude14 +jeeper +mamamama1 +anthony77 +spongbob +lovebug7 +canddcard1 +01101981 +kingfish1 +zahra +darth1 +abd123 +june1995 +miller5 +horse3 +tinka1 +rolly +Stargate +nokia7210 +180878 +freedom77 +malcom1 +hailey06 +moh123 +120806 +765765 +perfect7 +seahawk +123456da +papaji +amauri +king20 +jamie23 +brittany9 +negro123 +deangelo +love65 +3kids4me +booger5 +hanahana +123321l +vishenka +sasa12 +quetzal +6060 +251988 +redsox15 +sanane1 +07031983 +marinero +kiklop +remy +baby321 +ventana +27061992 +070182 +020493 +colacola +David1 +holly11 +010394 +0666 +66668888 +sl1pkn0t +skater. +231990 +kayla21 +16111993 +05031982 +170879 +302021 +060793 +angel420 +allstar123 +070880 +Brianna1 +17021981 +ara +akucantik +25021981 +florinda +191983 +20091981 +advent1 +clara123 +brittney12 +rusty11 +robertson1 +sissy12 +sayangmama +010882 +belle2 +anjinho +kevin20 +route666 +baker12 +09081983 +13061995 +melissa6 +030483 +090684 +eric10 +caneta +171990 +taras +purple66 +22011981 +619619619 +240793 +191280 +cindrella +mugwell15 +260493 +1casper +071084 +tangtang +fisica +Knight +frog13 +sanchez123 +katushka +august04 +uandme +woshiwo +angel84 +pavani +kajtek +amelia123 +tamiya +fifi123 +ghislaine +19822891 +titanic12 +melissa16 +stardoll1 +riders1 +050507 +miguel22 +fktirf +toy123 +layout2 +190882 +elendil +20081980 +nikki18 +mate1.com +03101981 +jay12345 +blackass +sports23 +notice +sugar01 +Molly +sayang89 +07021983 +zcfvfzrhfcbdfz +xxxyyy +logic +shireen +alb +lilmama08 +fouzia +victoria21 +gooner1 +07011991 +address1 +fines +65432100 +vladivostok +foodfood +17071980 +01011969 +plonker +chile1 +0307 +261094 +0406 +junior03 +thiago123 +zxcvbnm123456 +shearwater +210677 +anastasiy +dreamer12 +AAAAAAAAAA +yorkshire1 +1joker +jacaranda +courtney01 +saxman +060679 +26111981 +140180 +130977 +player6 +18051980 +miko +fandome1 +180280 +199610 +keke11 +manorama +burgers +forest123 +favola +04021984 +loser08 +21071980 +satya +17041982 +andy1999 +god12345 +200477 +qwerty1991 +heyhey! +sammyboy1 +goonie1 +aa1122 +cjymrf +020408 +skater17 +master! +dylan05 +morocha +bum +199122 +12304560 +qaswed +moonie1 +fernando13 +caren +darling123 +21121981 +310879 +berkley +19061995 +379379 +catwalk +lorena12 +panther11 +shorty19 +killa11 +monkey86 +buenavista +010280 +swim123 +091192 +cuddle +pounds +mantap +orangejuice +010174 +08021983 +25052505 +albert5 +yomoma1 +491001 +121099 +12091980 +acer1234 +22101994 +vangogh1 +28061982 +danilova +fubu05 +110977 +mirjam +sugarray +mountain2 +helium +angioletto +090284 +alaska12 +2607 +051279 +s1lver +Toyota +singer123 +amruta +nurul +pancho12 +dominguez1 +belinea1 +20101979 +fantacy +Sabrina1 +01031995 +chrissy2 +140393 +020881 +enculer +coquelicot +060285 +anthony200 +199219 +1607 +rvd420 +117711 +zion +280781 +020381 +mk123456 +290380 +annie3 +assmonkey1 +jessie5 +pink87 +20101978 +bpvtyf +zhangjian +anjing123 +samreen +Miranda +george99 +phoenix5 +chucks +240404 +leonidas1 +121969 +22111981 +scarface69 +15051994 +santos14 +daisy8 +samatron +nigger22 +112123 +missy22 +ethernet +karpov +caramelito +oscar23 +isaiah07 +141978 +15251525 +02111982 +andy23 +traxxas +karate12 +biggy +viktoria1 +cheeba +09111983 +bball101 +orchestra +mazda123 +allmine2 +05081982 +112277 +beerpong1 +justin89 +bohemian +classof2010 +nantes44 +yaya12 +teresa2 +03071993 +22041994 +assault +pusher +alaska123 +wright5 +acer12 +1979pool +vulture +070187 +0206 +stjohn +210779 +azerty00 +caridad +millenium1 +cookie45 +cheesehead +raiders8 +211177 +124421 +evan11 +whatever01 +keri +23081981 +13071981 +mortadelo +150793 +treehugger +tink09 +260478 +black19 +random! +peace4me +meme1234 +daulet +12011980 +20081994 +1318 +170793 +determination +tripod1 +2803 +galinka +siete7 +teamedward +rashawn1 +30011980 +daniel30 +10fingers +20111980 +adam14 +azeqsdwxc +jordy +kak +monimoni +08081979 +redmoon +football48 +zaharov +kenneth3 +Newyork1 +keagan +198925 +timeless1 +18061980 +020278 +paige3 +boston13 +anytime1 +02022002 +jacoby1 +060593 +yourock1 +numbnuts +030782 +198629 +yatra +a1234b +stanley123 +marshall12 +twista +2rOH8tl433 +greenday4 +gfhfyjz +loveyou6 +machete +220296 +bootcamp +150677 +solcito +jalen +12121975 +140493 +14031993 +shasha123 +sk8erdude +011985 +jaychou +bigdog23 +100476 +caballero1 +srisri +leah12 +june1989 +luciana1 +lorenzo2 +streets +universum +7171 +eagles4 +Beatles +luckyy +140203 +gabby10 +oxymoron +9uzp9jEk3F +Dolphins +160178z +31011994 +babyboy16 +ranch1 +230593 +freepass +godzila +041081 +pilipino +brent123 +081293 +mikejones2 +1357913 +18091993 +vfnehsv +spartan300 +bubby123 +15231523 +barbie8 +walkers +brina1 +26101981 +jackass23 +17101995 +milos +09110911 +xavier23 +060185 +160394 +21051994 +playboy09 +SyncMaster +buttermilk +lawnmower +wertyui +blast1 +290493 +goncalo +killas1 +evan12 +sweet07 +02101995 +driftking +marc12 +dolce1 +27081993 +traveler1 +matthew19 +flower16 +fenrir +sumitra +ll123456 +katharine +tiffany8 +261077 +p00pp00p +Cdtnkfyf +konichiwa +0207 +198204 +bubba1234 +100196 +sweetness3 +28051980 +Maverick1 +besties +basta +burlington +dro +220396 +hater12 +michae1 +02081977 +lowlow +lightblue +26071993 +niceass +moosehead +081283 +kenny3 +fungible +130696 +elixir +totoche +dimaraja +199022 +19071996 +buddy16 +mishanya +vaz2110 +james03 +18101994 +games2 +teaser +kanishka +jake16 +fuckingshit +alayna1 +darkness7 +150394 +mul +casino123 +mother10 +101200 +valentines +2587758 +babyjack +dreamer8 +sexme +dal +mate123 +b123123 +pappa +honda91 +june1982 +lola01 +sleeper1 +zabava +harvey01 +lover33 +sunnyside1 +12051978 +13061981 +tomass +141277 +2thick +bebegim +manjusha +adrian15 +vanessa! +sonic10 +salas831 +dank +xzsawq +james02 +cabaret +froggy5 +frenchfry1 +lovehurts! +joshjosh +triple7 +solomon123 +sandeep1 +mini12 +compaq6720 +djamel +1love1life +champion12 +kingdom123 +abu123 +19031981 +stacy123 +hotti3 +01061994 +02051979 +060584 +olololo +klaipeda +gangsta9 +angels10 +dragonite +SERGIO +101275 +80808 +bazuka +karla12 +030479 +jaguares +geoff +140679 +dateme +poipoi1 +eadgbe +buddylove1 +musicas +260978 +25041995 +banana. +0302 +papoose1 +tonio1 +roza +sigmachi +mariah13 +myspace91 +281988 +196600 +10271027 +198408 +020980 +blackdeath +utrecht +271177 +kristina12 +220279 +david02 +polochon +04061980 +kx250f +091988 +marie26 +hayden11 +raju123 +fisch +bobby21 +aladino +0p9o8i7u6y +mario01 +farmers +252 +thunderbir +sportster1 +usman123 +010780 +topography +shanda +elmo22 +napolean +05011993 +sidewalk +promise2 +valiente +marcel12 +steffie +sravani +shanker +d2xyw89sxj +bahamut0 +joker10 +swed420 +vagner +01111990 +miranda13 +caspar +honeyhoney +Denver +18081980 +16091994 +sonyericson +grocery +marimba +merlot1 +smalls1 +chris2007 +ohsnap1 +john19 +gamestop +redneck101 +like123 +kimberly13 +z1x2c3v4b5n6m7 +marinochka +160292 +05011983 +1yahoo +kolo +furious1 +13051977 +rosey +coondog +aman123 +04081982 +426426 +1248 +madsen +080792 +patrick09 +luansantana +552211 +lecturer +cindylou +kamel +antonio4 +gigi12 +joker420 +1animal +flash2 +stratton +jayjay10 +cardona +190192 +spiderman. +jumanji1 +coolme +30031981 +gemini5 +xiaoqiang +mickey101 +touch1 +reese123 +magistr +yesiam +151294 +jason06 +mama33 +LOST4815162342 +nasigoreng +bogey +katie16 +17051980 +december09 +sonic11 +annaliza +281194 +987654321p +161992 +kimberly7 +27101994 +781028 +329210b +kevin19 +sp0ngeb0b +adolfo1 +slipknot10 +300980 +jumeaux +mission2 +cardio +sebast +564564 +08031982 +pAss2244 +fuckstick +pumpkin8 +300879 +mark15 +missy10 +surinder +celebrity1 +samsung. +jackie21 +canadiens +kisses13 +070582 +240182 +hubby +jazzmine1 +comet123 +sexi +shadow66 +meatwad +190880 +hell12 +medvedeva +666aaa +25011995 +healing1 +starbucks2 +876543210 +lovinlife1 +12e456 +metallica666 +thunder22 +charmedp3 +fadila +785412 +290392 +08011993 +puppy9 +k1k2k3 +gouranga +griffey1 +serser +03111991 +xpr4Bf29uX +dima1987 +adela +padmaja +21071994 +150678 +a1z2e3 +29071982 +1924 +bear2327 +mamateamo +123451234 +31415 +swiss +02051993 +da1234 +a123789 +period +kamilek1 +justice3 +000000l +QWERTY1 +froggy3 +sss333 +montez1 +iloveboys! +jeremy07 +Ricardo +juliya +texas817 +newboyz +ghzybr +coracao +firewall1 +skate15 +medusa1 +12345678999 +jordie +katerine +sexygirl5 +Jenny +1029384756q +210594 +04111985 +28011981 +june2003 +RJGo7We138 +18121995 +calgary1 +801018 +uyqlvip773 +huy123 +joyous +valeria123 +nirvana13 +brooklyn10 +casper23 +lissa1 +30031994 +jeremy08 +shoe +020579 +mykids123 +01011967 +halfpint1 +261292 +max1992 +tomislav +sunglasses +cali22 +timelord +08061984 +sassy69 +naynay12 +toonarmy1 +270191 +nowayjose +guru1234 +1savage +housing +ilovejen1 +kickass123 +140297 +cocky1 +28011994 +kayla06 +balerina +081080 +gardening +killa21 +bigdave +hello08 +040882 +rebekka +DsmVssQ955 +life1234 +cuddles123 +elijah05 +computer0 +200978 +1234aaa +eeyore123 +brooklyn4 +moon13 +kristen123 +cubbie +gaysex +25081993 +loveyou69 +bunker1 +gunner01 +safiya +271986 +george08 +seba +renee11 +25632563 +burn +dnflwlq +kal-el +steelers13 +audiq7 +05121981 +25052005 +woshishei +250479 +271295 +smelly123 +handy +198313 +311079 +jess14 +yellow18 +19081980 +gordo12 +11111w +veronica13 +e6pz84qfCJ +pinoyako +playboy8 +bffl123 +061294 +cubanito +040983 +15031982 +fofinho +love74 +cameltoe1 +030306 +100177 +14041980 +198688 +azert123 +mur +31121994 +maximus2 +aen: +alpha12 +fucku666 +tomcat14 +star27 +070283 +440022 +steph11 +chelly +mandie1 +teleport +bluebear1 +bassbass +bluejeans +music16 +spaceship +pookiebear +sanchita +godblessus +1234567890. +link11 +02031978 +boricua12 +ranger13 +pachuca1 +070687 +240679 +cdexswzaq +08011985 +791028 +198308 +cutie06 +drummer7 +enzyme +sloneczko1 +12021995 +seashell1 +59595959 +nusrat +js123456 +maxwell11 +danielle09 +600006 +min123 +100377 +purple34 +nino123 +unfaithful +lalo12 +27121993 +040693 +shannon69 +killer56 +14785 +2525775 +crazyfrog1 +13121995 +neville1 +050186 +03111990 +zamboni +cunt12 +060392 +krasavchik +babymomma1 +CUTIE +041184 +vander +fatboy5 +hello89 +centrino1 +081182 +3stars +ss23081937 +dragonbal1 +beccaboo +amazing! +24252425 +angeline1 +dravid +310893 +12345678A +16041981 +jennifer08 +norfolk1 +candycandy +20071995 +mimi15 +hotmails +14031981 +130180 +251077 +11001001 +mathew123 +w1lliam +icanfly +tempus +colgate1 +ohyeah! +170979 +031080 +apple16 +17101980 +kamari +royal123 +asher +rodolphe +21061995 +23121996 +060386 +amylynn +130877 +aggie +scareface +babyblue3 +stillwater +15021981 +diamond16 +john88 +281990 +20121981 +louann +mememe! +16031982 +icecream10 +31101982 +scubadiver +baobei +patches3 +huckleberry +kbpfdtnf +happy18 +buster00 +meow11 +090384 +edward09 +aniya1 +270380 +mouse3 +111111prof_root3.sql.txt:, +monolith +qwerty000 +tattoo69 +markanthon +feefee1 +junior99 +habib +danny! +Phantom +leoncino +anarchia +amazing123 +laura21 +prieto77 +adelina1 +France +abcd11 +seychelles +redhead2 +270280 +emily99 +trustgod1 +guayaquil +firman +bulgaria1 +q8a74IppxD +23111981 +230878 +monster88 +1289 +coolchick +250495 +30111982 +cat111 +zxcvbbvcxz +lucerito +schwanz +kokoloko +pink03 +22111980 +02011993 +robert27 +hartford1 +robbie2 +rascal11 +gianmarco +price +fencing +130694 +what11 +cuban1 +fairfax +hortense +katie8 +112001 +straight1 +25362536 +brenda11 +squeeze +14091982 +vipera +cardiac +qawsedr +pass99 +28031981 +hellya +07081983 +virgola +411030 +toolbox1 +141094 +norcal14 +170395 +david007 +menthol1 +luscious1 +mansfield1 +040780 +secret4 +nikita01 +herminia +221295 +werthvfy +kubus1 +huhu +mallrats +020378 +jack2008 +300480 +emirhan +czarek +henry5 +theater1 +BqkTqqN844 +touchme +asdfghjkl;' +bitch05 +dragon32 +champ2 +09111986 +lilly07 +530016 +120474 +petrol +delano1 +1element +170181 +tamarindo +sur1313 +081187 +050980 +drumandbass +oskar123 +67chevelle +teresina +match1 +kokowawa +points +anna2008 +marhaba +devilboy +mylove10 +dirty69 +198213 +040608 +040387 +diamond15 +volvofh12 +2234 +kaligula +290393 +dylans +marvin2 +patrick18 +psycho666 +garret1 +budwiser +antonio8 +sasha1999 +110196 +HGxnewx11 +India@123 +matheus1 +jazzbass +david777 +13081980 +georgia7 +shoaib +june1992 +310194 +checking +rock21 +peugeot307 +amin +daddy24 +imfake1 +1runner +ivanko +number16 +godsgirl +070383 +199121 +31081993 +pizza4 +daydream1 +dillion +concert +270681 +tigger03 +23071980 +samvel +110295 +ast +19061980 +230896 +courtney4 +mai123 +trollface +veterok +xswzaq +tucker10 +310195 +chamber1 +227722 +04121983 +mcfly123 +brooke14 +665566 +100178 +yfnecz +gabby7 +Caroline1 +oilers1 +silk +isaac2 +gemini3 +323 +purple0 +diva10 +06121993 +seduction +400400 +dogdogdog +12041996 +Vincent1 +barbie09 +12071980 +06041993 +grad09 +wheelchair +0910 +jackson21 +12061996 +salvador13 +righton +miguel3 +09876543210 +amaral +orbita +mylove12345 +hottie33 +lucylou1 +katyakatya +040479 +damir +1211123a +varvar +mk1234 +13051305 +sandara +09031984 +law +080991 +fkkjxrf +anastasija3010 +ridley +samantha09 +pussy24 +nika135 +24051995 +doggydog1 +froggy! +21031981 +redsox18 +271094 +inmaculada +iloveu09 +061278 +mynameiskhan +pulsar150 +04051995 +09121982 +sunshine89 +Tyler +chase3 +pippi +alexis18 +sydney99 +mollymoo1 +200101 +23051982 +080489 +cancan1 +valent +130693 +vincent3 +selassie1 +SAKURA +kyle14 +poooop +281179 +sadie7 +matej +trewq +211179 +jeck23 +071083 +iloveshane +cannonball +MARVIN +gemma123 +18041993 +asdf1 +clare1 +julieta1 +freewilly +allstar7 +sucker123 +010680 +kaname +kaycee1 +19841012 +dcshoes +3e4r5t +ceramics +183183 +271985 +06061979 +150381 +brian10 +25101980 +tibia123 +goyj2010 +fff111 +salina1 +swamiji +���� +22051981 +meena +woof +tabaluga +beanhead +sexsex123 +bauer +persempre +elcamino1 +buddy24 +shadi +baxter11 +Yvonne +scoobie1 +130179 +070483 +janina1 +matrix22 +passwort123 +09091979 +super9 +ferfer +asdf22 +ppp111 +simple23 +jewell1 +cacaca1 +mychildren +spices +28031994 +janek +sleeping1 +040390 +savage123 +cassie14 +ichiban +madhavan +party! +fake22 +14111411 +sweetp1 +verde1 +louna +newme1 +rattler +sneaker1 +0609 +05021982 +bos +katrina123 +111174 +211295 +280579 +03031977 +monica21 +denise10 +mortis +dodge2500 +chivas19 +pinkstar +maggie33 +mybaby08 +jamaica12 +kaydence1 +alexis24 +domina +12011994 +icehouse1 +amor18 +sucka1 +timileyin +angelidis +241077 +buster55 +oliver23 +29031995 +joedirt1 +laura7 +jayden5 +stacey12 +fuckyou92 +keren +fishies +matrix99 +070882 +joseph06 +eazy-e +peace21 +bitches4 +21101980 +2910 +200908 +money32 +400070 +daniell +261178 +9009 +missyou2 +banana23 +jasmine99 +14071980 +227227 +g-money +jh1234 +a4s5d6 +08071989 +jennifer17 +kexifz +merveille +capricorn2 +jayden4 +10011995 +iiiii +guadalupe2 +�����123 +aishiteru1 +0407 +27041994 +220377 +joseangel +120375 +cupcake14 +juniors +lalelu +Paul +peanut16 +salimata +321789 +mother02 +bluesea +150505 +16031981 +omowunmi +obama2008 +llewellyn +hello666 +1472583691 +nikita13 +mariah3 +otter1 +gato12 +derrick12 +andrew101 +30091994 +joesph +chola13 +khmer1 +travis23 +nikita1996 +alisa123 +bratty1 +babeth +ac123456 +Larisa +rocket2 +gage +20121204 +bakekang +bringit +12345ta +woodchuck +15101994 +arsen +pepper07 +angelfish +28111980 +110807 +jordan92 +september21 +2loves +shenmue +cowman +nicholson +ellison +iwonka +ghbrjkbcn +2521 +270579 +07111985 +sizzla +01081995 +michael93 +nonlaso +dog4life +sorokin +seeker1 +trouble12 +marcin123 +15031981 +090292 +weed4me +numlock1 +ramzan +donomar +22021996 +16031994 +sexymama13 +boncuk +frenchfries +aigerim +eyecandy +120576 +meghna +tomate1 +atharva +08111986 +freak101 +cooool +reggie01 +01091982 +230179 +dumbass123 +natalina +ballin69 +rebecca13 +260579 +laura15 +batangas +lj +aurinko +belfast1 +yayaya1 +snoopy8 +samuelito +phoenix11 +lorene +rfvbkf +122100 +vikings11 +omari1 +candybar1 +argentum +orange25 +zebedee +hatter +skate. +dream7 +audrey12 +FrqNj0Zf5P +hawaii5 +deedee3 +ulysse31 +181093 +hector13 +naruto69 +lydia123 +180493 +610610 +111211 +070485 +babyboy06 +moonspell +hellbound +kayla69 +010809 +3825 +197410 +starshine1 +debby +taylor20 +dodgers2 +560070 +sprocket1 +booboo15 +tino +script +kikito +dragon05 +Dkflbvbh +albert11 +AAAAA +ed123456 +omshantiom +qqqaaa +matt101 +3Odi14ngxB +251195 +friendofEarning$1 +has +pickles7 +faggot2 +gracie06 +170380 +666666666666 +zucker +carlos08 +biskit +iloveme08 +matrix69 +peaches8 +imcool! +123231 +22081994 +orangutan +100994 +090385 +bulletproof +lucas11 +thirty30 +huang +pilar +booo +olimpia1 +sole +10091981 +trewq1 +allstar3 +7things +chaos2 +daisy21 +131992 +ALICIA +salamsalam +windows95 +blood59 +27101993 +filthy1 +schuyler +strela +stiffy +princesse1 +devon2 +parovoz +telemark +agriculture +31071982 +180480 +anamarie +chilango1 +peapod +party101 +210377 +anacarolina +casey13 +kolovrat +010894 +glory123 +God +shadow44 +monique13 +proute +queen11 +petrenko +jack12345 +asas12 +katie101 +cogito +micorazon +flower99 +travis69 +06111983 +29041980 +megan22 +369123 +fgntrf +total +02041979 +12gage +april02 +blackgirl +crjnbyf +barbie15 +mylove07 +iloveallman +281986 +buster33 +1345 +idon +080706 +bulldog10 +cradle666 +cashmoney3 +przemek1 +ernie123 +bluejays1 +280294 +co2006 +bree +novosibirsk +mike2008 +jason9 +bartok +Maggie1 +356356 +fucku8 +20011979 +ilovechad +kupa +14021996 +16031995 +michigan2 +ilovegod12 +i4IfBinFyu +10161016 +Beatrice +katrina2 +jennifer16 +tanmay +philip123 +deadspace +30081994 +170195 +surfer12 +iloveyou34 +chivas4 +a99999 +darkdark +sanmarcos +sadako +wipro@123 +Falcon +suzy +5times +vacaciones +19861120 +fuckaduck +wallace3 +ihatemylif +ethan04 +tigers8 +coolboy123 +blade3 +holaquetal +dimdim +ajnjuhfabz +137955 +scrapbook +FTrCVh5732 +06111992 +tirupati +interface +mina123 +june1984 +151988 +asad123 +pearls1 +09071989 +alyssa23 +ranger5 +tennis23 +pinkys +11121995 +aenima +paolina +pinklover1 +maggie02 +nafanya +sage123 +captain2 +goonsquad1 +pimp32 +apples13 +verona1 +44 +071281 +rostislav +cancro +nokiae63 +amos +mercedes3 +jesuslord +ksyusha +bermudez +123@abc +sundrop1 +misato +cdtnf +051292 +chris94 +ashok123 +january01 +jose12345 +071985 +wendy12 +granville +diana10 +леночка +281178 +dummies +11091981 +loveme89 +400610 +pilsner +holybible1 +domini +afdjhbn +arnie +biglove +Yaorqw12334 +m0ther +1930 +puppy4 +rainey +180782 +disturbed2 +tipsy1 +mosdef +likehouse +030809 +narkoman +gypsy123 +050809 +marcus07 +:lol +capri +27121981 +lelele +gibson2 +29101994 +Trevor +tracks +master24 +400026 +deathstar1 +171992 +lorikeet +darkdragon +papers1 +megan14 +storm12 +catracho1 +221077 +denis1998 +pacers31 +jazzer +wewewe1 +ohmygosh +forum1 +1adrian +23071981 +alemanha +coffeecup +12021979 +17031981 +lucia123 +qwer5678 +pinheiro +500017 +principe1 +greenday21 +zebra3 +neelima +brittany. +chelito19 +13061993 +14081981 +020380 +milford1 +ploplo +vlada1206 +181179 +gabriel9 +elrond +03071982 +whiteangel +01081978 +Exi +sprint01 +guitarist1 +svetochka +messier +cheer16 +Howard +stephanie6 +peace15 +220977 +mermer +monster24 +7777777d +151194 +250195 +30031980 +kasiunia +19111993 +getreal +aol1234 +151276 +091280 +fred13 +fish01 +yfl.irf +wiggins +star1 +12061995 +jimjam +maggie9 +Guinness +iloveme10 +yellowbird +booba +managua +130394 +miguel21 +12121997 +godsgift1 +13061980 +soccer56 +bitches7 +281177 +198915 +poolpool +mustang86 +qureshi +tooltime +chatty +411013 +010695 +perritos +loser0 +isabella7 +frankie11 +love213 +mickey77 +1hotmail +yelena +chile +lilmama14 +1q3e5t +cherry17 +rickross +shootingstar +1234567890abc +boomer22 +bintang1 +bubblegum! +220479 +330033 +rebirth1 +puschel +fortytwo +123123t +protected +cable1 +jetski1 +17101993 +arjun +brandonlee +tretre1 +colby123 +14101994 +kittens123 +pollard +giovanni123 +popo1234 +300391 +nikki101 +mirjana +000023 +initiald +viktory +24071983 +hailie +crawling +skater1234 +polaco +makarenko +sunny3 +ambers1 +myemail +061180 +24051980 +astaroth +ace1234 +03071980 +laughing1 +160894 +ghost666 +shovelhead +dirtbikes +nascar17 +steph3 +18071981 +jeffrey12 +21081980 +coolcat12 +thenewozer +gatubela +gladiolus +198517 +29121994 +munchies1 +borrego +anatol +chris91 +boondocks +$HEX[687474703a2f2f777777] +17111993 +070583 +computer6 +alex4ever +blinkme +whatnow1 +shotgun2 +konfetina-kis +meesha +nokia12345 +geujdrf +qazwsx3 +barracuda1 +fester1 +79641777070 +nothing7 +xavier10 +lulita +198001 +Ferrari1 +15041981 +musicislif +sillyme +110279 +dasher1 +cyecvevhbr +natala +060193 +love121 +killer94 +pus +ganesha1 +nintendo2 +chandler12 +duisburg +scott23 +hunter19 +v00d00 +01071977 +pukimak +sukabumi +bashiru +guitar23 +1a2345 +potato123 +anna1985 +february13 +barbie16 +tralala1 +010409 +pixies1 +juicey +010578 +jack77 +fannie1 +270794 +conner12 +151277 +omgomgomg +mullen1 +professor1 +22111979 +pollos +crowley +daddysgurl +26121980 +mikki1 +pepper101 +afbic +tafadzwa +afreen +050894 +iloveyou87 +madden11 +001971 +pigs +qweasdzxc12 +holdon +iloveashle +070993 +03011983 +wales1 +brandt +quan123 +elsie1 +crapule +birdy +17091981 +judyann +317317 +molly14 +iamsocool1 +washington1 +nnenna +himawari +money4life +surfer2 +654321r +izmir35 +murder187 +21091980 +manojkumar +nadroj +03121982 +mustang200 +mariana12 +230394 +mama1 +k654321 +radiology +com123 +mangos1 +3107 +loveyou +122017 +woaini1 +01011961 +qsefth +Thailand +Margarita +jimmyboy +221076 +flores123 +jealous1 +12041978 +dragon94 +victoria19 +leet1337 +120796 +pantat +javito +250179 +dannie1 +270693 +jordan28 +papoose +123eee +enrica +summer2012 +maverick2 +fam +desertrose +uruguay1 +121315 +amalie +laura23 +hammer01 +612612 +manuel21 +legaspi +maggie16 +torrance +proutprout +martel +orange20 +delicia +41563445 +sexton +120573 +grandchildren +spencer5 +delacruz1 +500060 +redlion +060583 +nika123 +theanswer +samantha69 +villanova +h4ck3r +killaz1 +21102110 +jesse10 +qwerty26 +fountain1 +130177 +!@#$%^&* +basketba +ru4real +skullcandy +110120130 +1sophie +humanoid +14725 +��������� +140277 +happy2day +unclesam +090891 +qwas +fresh13 +vatoloco13 +pookie5 +05101982 +lover19 +9xx7c8GseB +110699 +rangers01 +ibookg4 +angie01 +jessica27 +tiffany6 +198903 +candy24 +boutique +june2010 +qwerty2009 +tony08 +heccrbq +meerkat +triforce1 +efsane +321478965 +130878 +250478 +armyman +rockstar6 +fordfocus1 +2517 +lablab +070807 +070992 +duke3d +chips123 +122016 +kitty99 +junkmail1 +140878 +soccerboy +omsainath +820919 +hardcore88 +eulalia +26011980 +popov +1q3e5t7u9o +197211 +lakehouse +untitled +pimp89 +tawanda +199321 +spaceship1 +forfun1 +cherise +zxcvbn2m +191193 +bella24 +ghghghgh +whiterabbit +19021994 +orange1234 +21011980 +althea1 +14011982 +stuntman +baseball45 +qwedsa123 +driver8 +imposible +dance07 +180295 +dotdot +cobaka +ladybugs1 +Julia +pillar +mikey23 +gabbana +vfrcbv123 +longlegs +06091993 +140577 +mckayla1 +bouba +michael94 +160395 +3007 +ready123 +080187 +14011981 +smokey14 +bunny22 +pussy08 +sur +pouetpouet +rey +Assassin +boriska +babaloo +qwerty83 +astra123 +rushmore +01101980 +tranny +bandit600 +hea +161989 +241095 +09111989 +050283 +haynes +gotmilk? +adewale1 +auggie1 +010104 +myfriends1 +02091978 +regency +amitabh +buttplug +rastus +barret +mcintosh +354354 +28031982 +020877 +saphira1 +17011983 +sakura13 +chicklet +101100 +vyjujnjxbt +leoleoleo +112567 +needles +04031983 +ashley91 +211078 +johncena7 +260194 +candycane2 +sheltie +jupiter7 +27051980 +260281 +movement1 +1golfer +411045 +220877 +slapshot1 +angela23 +carinho +myhoney1 +Shadow123 +30081993 +petrovna +20051997 +roxy21 +mester +samsung23 +231983 +musa123 +koketka +198209 +scissors1 +surx13 +october09 +richboy +hammie +heaven! +amanda89 +lily01 +pete12 +applemac +taylor94 +giggity +lkjhgfd +cocopuffs1 +150881 +29031982 +rodman91 +dragon85 +supported +lax4life +bloodbath +dfymrf +233391 +tiffany23 +philips123 +123qwezxc +king123456 +jack2007 +fowler1 +manuel3 +yesican +198913 +balzac +babyboy8 +ratfink +remi +melanie3 +21081993 +fantastico +mes +zmodem +classof13 +shrooms +210396 +stars7 +boner69 +31101981 +iluvhim +230777 +hophop +q654321 +beatbox +joanna2 +yeayea +butter22 +march06 +fatjoe1 +blues123 +badgirls +calvin23 +maruja +fgtkmcbyrf +031986 +080487 +ashley96 +06051984 +123321r +17111994 +asdfghjkl3 +misia +scotty2 +trista1 +9000 +y3p32FtrqJ +0308 +shrestha +sarahi +ksenya +26101994 +190380 +170182 +starship1 +quinten +130994 +mommy02 +pookie21 +hipolito +supersexy1 +zhangjie +quatro +100277 +010893 +trailblazer +nastya1998 +1willie +19011995 +wee +kulot +mulligan1 +060384 +jeeves +massilia +bootymeat1 +robin2 +vvv +zapata1 +bubba15 +sarahj +1233215 +BROOKLYN +jman123 +13021996 +shorty06 +121268 +10111979 +30041980 +ggunit1 +justin28 +doherty +011987 +okmijnuhb +dickhead12 +200693 +selfish +2legit +fnaf +v1ctoria +mondeo1 +16061980 +rose18 +160181 +billabong7 +playboy07 +fyfrjylf +liverpool08 +!!!!!! +wicked2 +alvarado1 +testaccount +michelle27 +dell13 +azxcvbnm +234wer +iloveyou1234 +bigbig1 +darrin1 +sexymama3 +cole1234 +dctvghbdtn +337337 +ladybug01 +070692 +wannadupe +serega1 +myspace1! +28111992 +asterisk +somewhere +boubou1 +perpignan +241094 +28041982 +lovely17 +Fernando +belladog +killer92 +20052008 +thirty3 +fhntv +11021978 +fuckya +dan12345 +siesta +05081981 +katie23 +010995 +papa01 +bubble! +tina13 +041180 +dakota09 +smile6 +primavara +linkin123 +22031980 +5tgbnhy6 +burbank +ddd111 +loving12 +martin16 +sayank +uk7860loans +140695 +qazws1 +081985 +03081982 +maratik +fuck33 +abhi123 +070385 +06061994 +187211 +a1z2e3r4 +michelle33 +marsbar +Melanie1 +15101996 +katie07 +170394 +reanna +31081983 +110576 +qwertys +rjpkjdf +compton13 +fred69 +jazz13 +270395 +leprechaun +150377 +Power123 +tolik +lorrie +allalone1 +jumping1 +water! +skeleton1 +halcon +everquest2 +azert1 +hotboys +22061980 +123451234512345 +giorgio1 +08111984 +20051995 +27081983 +190493 +farah123 +111111prof_root2.sql.txt:, +26021983 +260793 +081281 +dewey +vorobey +182blink +plokij1 +22071981 +h0ttie +regret +kristen12 +07860786 +chardonnay +silencer +q12we3 +purple94 +cookies22 +cristhian +gotmoney1 +twister2 +Calvin +scoot1 +cabbage95 +32503250 +gemini01 +kobra +esperanca +sprite123 +passworld +dawidek1 +12101976 +16031980 +/.: +arrahman +cabral +isreal +500020 +rianne +05111982 +21041980 +stylist +legal1 +kenji +lauriane +030283 +21061981 +vanita +lemon2 +251096 +nathan69 +280293 +ma123123123 +014014 +payatot +Lucky123 +schoolsucks +821016 +021179 +youcef +widder +0607 +haohao +vacuum +muffie +05091994 +�+��+����� +123454321a +daniel91 +bluenote +buthead +theband +bogus +dthjybxrf +07111983 +mare +butchy +bigcat1 +teamo18 +shoot1 +mavs41 +mm12345 +071292 +afi123 +juan21 +lovelyn +conker1 +katie21 +jenny6 +terminal1 +angel56 +27071982 +kyle23 +fighting1 +ghblehrb +bsd +edward16 +russ +31071994 +powered +rooster2 +publicidad +chopper12 +k111111 +dfktyjr +080980 +bonilla +17091994 +adam1 +fuckyou +dooley1 +garrett12 +genoveva +770770 +011182 +redboy +121255 +rockyou1 +debbie2 +dany123 +happy55 +second1 +kazakov +Dolphin1 +Network +blue93 +bigdaddy7 +good11 +chaman +SPARKY +14411441 +mironov +07121982 +goldie12 +westham123 +240594 +123654z +26011981 +bunny10 +silverfish +01051978 +rehjxrf +punk69 +Buffalo +apolo13 +valerka +170280 +bianca13 +leszek +jiggy1 +22221111 +chris30 +hayley12 +ihateher1 +faith23 +19061983 +samhain +mahatma +101068 +cupidon +micky123 +blue2000 +19851120 +jasmine24 +gofuckyourself +ooicu812 +hg +andrea20 +howie +070292 +selfish1 +qwerty84 +200595 +joke123 +babyboy18 +200180 +05101993 +corn +tolani +pillows +sasuke7 +slava123 +minakshi +120908 +10111978 +MMMMMM +playboi1 +16081993 +051984 +170780 +iceman21 +351351 +fazer600 +nj9st4ye3f +fatma +robbin +swati +master33 +vega +JMFxL78phe +13011995 +198029 +cm1234 +denise21 +fukyou +hola123456 +carnell +snoopy101 +womanizer +110976 +elmo23 +naruto07 +chablis +yjdsq +aaliyah01 +14111980 +vodolei +1234567qq +gandakoh +alivia1 +concerto +151990 +micheal23 +201303 +joanna12 +rocky07 +20061993 +4shizzle +hershey123 +mp3mp3 +kiki09 +flute +cheer05 +14081982 +120296 +mamani +linda5 +060383 +andrea88 +matrix007 +hall +eastside02 +babykitty +19041981 +brooklyn71 +24041980 +15011980 +kevin12345 +240295 +andy69 +baby78 +bombay1 +envelope +comment +footie +year2008 +glaiza +130379 +tormoz +mariza +fagg0t +aprils +master. +290480 +kasturi +a111222 +dani11 +04061982 +master08 +fish23 +19091994 +shortys1 +28031992 +squad1 +parish +15101979 +february23 +flower24 +belgrano +miyaka +060284 +mullins +asssss +saviour1 +drizzt1 +30091980 +15161718 +suppandi +alegna +cmpunk1 +��+����������� +king4life +nbvehrf +butterfinger +edward18 +fan123 +rfnfcnhjaf +12041977 +applepie2 +cooldude2 +210994 +solidworks +popo00 +cassie5 +idk1234 +040186 +locomotive +rainbow. +1472583 +110119120 +CAMILA +darren12 +24692469 +peewee3 +joejoe2 +maria09 +020695 +anatomia +0000aaaa +printemps +06061995 +platypus1 +kingdom7 +peter13 +rooney123 +4forever +Barcelona1 +mediterraneo +090884 +frasier +07011992 +adam2326 +schlampe1 +esercito +rockstar09 +Daniel123 +eddie01 +30061980 +martin18 +deadwood +minimo +13011981 +sexy321 +0liver +bigger1 +bobbi1 +23012301 +1418 +kill1234 +shanny1 +marwin +javier10 +dylan22 +keyword +18081994 +11101980 +000000d +100202 +tty +heaven17 +10101970 +tribunal +gladis +schoolboy1 +14201420 +123kdd +123456789ABCDe +rafinha +135790a +dessert +ilovekelly +livewire1 +09021993 +sheep123 +08061993 +091984 +letmein. +banana99 +jadawera +monster09 +200994 +turtle10 +flavius +chicago11 +20091995 +fatboyslim +marifer +jarek1 +bonita2 +imabeast +1savannah +mybaby01 +bubbagump +cheetah2 +court123 +footloose +220808 +1internet +kitty77 +skank +policeman1 +commrades +bradley7 +nikka1 +life11 +erik12 +kaliman +change09 +19871010 +7thgrade +westbrook +liljohn1 +flashpoint +calderon1 +pornos +lauren88 +lilly7 +09041983 +13061994 +w2w2w2 +spacey +mark16 +boromir +group1 +trigger2 +280793 +keeley1 +talavera +london1234 +mylove. +1111117 +haddock +1um83z +011186 +javier01 +rachel6 +rundmc +12061994 +21021982 +buster77 +TIFFANY +restinpeace +vikas +cessna1 +doomdoom +197888 +kotopes +teamo16 +270479 +maryam1 +sevilla1 +ivonne1 +harry13 +shawshank +crystal23 +password100 +tarasov +michi123 +blackjack21 +091082 +noah01 +alice2 +latvia +toots +zoom123 +amber101 +wade123 +fuckoff21 +26061996 +forever07 +1932 +552200 +dancer18 +hallihallo +computer23 +kayla9 +briana123 +14091995 +pimenta +28061994 +trinket +eminem14 +hipopotamo +211079 +blacklight +7Fxf3Jaa7u +eggs +chocol8 +sonic7 +baller44 +coneja +dianadiana +karadeniz +familylove +takayuki +beaufort +tiger44 +livia +serbia +desirae1 +180781 +planta +Snickers1 +кирилл +qwerty1987 +ursula1 +vanness +james111 +Felix +leoncito +Killer123 +hayate +cnhfyybr +j55555 +518888 +see123 +bonnie10 +joesph1 +28051983 +guessit1 +adebayor +neopets10 +141200 +olarewaju +favourite +mama88 +broomfield +manuel14 +patrick08 +holden01 +04081981 +babydoll69 +daboss +babygirls +lampung +thespian +mecca1 +tami +Miguel +5633634 +islam123 +ja8xb7txr8 +brunito +28051982 +justme12 +malinda +050881 +bigtimerus +riverview +lizzy12 +champion2 +wisteria +bangla +lovesyou +lilacs +siddhartha +thechamp1 +superman32 +snook1 +master25 +qwerty7890 +essential +girl1234 +coconuts1 +erikas +zoezoe1 +12041979 +lucatoni +arwen +zaq147 +26121993 +may2000 +denise7 +coolie1 +ass666 +iphone4s +paris10 +22091995 +240880 +booboo08 +stiffler +rajinder +andrea99 +shell123 +jaykay +number88 +triplet +131991 +shamar +credit1 +MAGANDA +31011995 +farmall +frontline1 +balla12 +daffy +papercut1 +280479 +150279 +166166 +mondieu +vasanth +2bfree +15111994 +20041995 +180793 +sonumonu +password75 +olaide +31011981 +nomercy1 +25061980 +2night +scooter8 +24031982 +titanic1912 +mango2 +rayan +derrick123 +220278 +spider10 +nutter1 +241278 +11041979 +slimer +albertina +brenda10 +210893 +erica2 +040495 +plants1 +esteem +kittiwake +chula13 +jake24 +yogita +TINTIN +turtles2 +reinhard +okmnji +luda +wowowee +Victory +ncstate1 +03051980 +titititi +joojoo +198906 +coolkid2 +porsiempre +master8 +pink28 +xingxing +tucker13 +02031977 +100976 +dallas4 +lm292979 +butthead12 +080981 +210878 +jonathan9 +abc-123 +dorotka +totito +rusty7 +racecars +airmax95 +golfr32 +parkway +14051405 +johnwayne1 +05011992 +jessica87 +yakamoz +hope22 +09071983 +////// +hulkhogan +minister1 +leslie01 +ja123456 +obvious1 +compaq3 +18031994 +retype +canucks1 +080285 +696 +lambchop1 +291986 +natanael +080908 +tigger20 +sorcerer +3211 +leomessi10 +mike007 +redsky +matt08 +barclays +goaway! +emma2004 +080682 +lal +nana21 +daddie +600015 +thug12 +06031994 +silly12 +vishal123 +sunder +badboy08 +fillmore +chalet +paintball9 +josh06 +sabre +keneth +tiffany14 +longwood +12271227 +vaz2114 +longlive +210578 +versatile +bakabaka +superman89 +schnauzer +keith2 +gracie7 +010103 +sarahm +1horses +kelsey3 +grisette +blueman1 +biteme13 +mamka +cupcake8 +jackster +maldita1 +rick12 +31071981 +15021980 +jessica02 +301279 +123454321q +blood15 +waterman1 +197070 +LOVELOVE +filles +diggler +auto123 +nana16 +SCOOBY +squeak1 +05121982 +giovanny +cody17 +bridgett +fvcnthlfv +lalala5 +arsenal23 +31011982 +masterman +lacrosse7 +crf450r +celtic01 +18061982 +tigger44 +kostroma +14101996 +dutches1 +Elijah +doodle123 +15061980 +060580 +cancer12 +o0o0o0o0 +05091981 +090383 +nacional10 +cheese99 +200995 +270881 +church12 +19841024 +manson6 +roxy23 +joshua26 +olivia04 +sasiska +chris96 +fucklove7 +homer12 +dvd123 +21111982 +february21 +555aaa +renato1 +angel1994 +123698745a +060481 +q1a1z1 +jamest +jenya +whale1 +22061995 +february22 +scooter9 +n2deep +playa13 +snapshot +wer234 +LOVE123 +amigas1 +protector +hampster1 +makarena +tulane +237237 +protoss1 +danser +batman89 +airmax1 +loser07 +kendra12 +011001 +daisy08 +princy +speranta +031983 +lindalinda +carol12 +montero1 +29061982 +nar +yanis +bitches5 +06081993 +2134 +masakra +patr1ck +john55 +potter2 +stthomas +scammer +hunter95 +guest1 +kelly23 +pedro13 +09101992 +ben101 +march123 +qwerty79 +balbes +08071982 +150977 +july1989 +sasha21 +lacrimosa1 +08111985 +wqwqwq +intrigue +1597532 +street2 +oogabooga +nathan24 +icecream. +lakshmi1 +devastator +graveyard +chris007 +austin17 +55555m +23041994 +061193 +04011984 +010169 +09123456789 +giulia1 +travis10 +030284 +toggle +spooner1 +drumset +himitsu +bnm +071280 +16091993 +lookingforlove +nunu123 +abella +praisegod1 +christina9 +1080 +electrician +11041996 +gunit5 +yusuf123 +pussyy +socom1 +yesman +taytay3 +taylor25 +24061981 +1441 +gatt +martin15 +metal69 +30051980 +toymachine +pennies +Molly1 +cattle1 +founder +zulu +23021979 +1dipset +ou812ou812 +181985 +tigger19 +theking23 +goodie1 +30051994 +trezeguet +19021980 +sydney13 +marie94 +demond1 +gazeta +040684 +campion +08101993 +german123 +2481632 +121195 +kissy1 +mokong +panache +biscotto +perfume1 +bassam +U +storm2 +arnie1 +198905 +120976 +casey5 +snickers5 +08121983 +mima123 +123456: +08051983 +21081995 +caboverde +26121981 +1a1a1a1a1a +motorrad +dominga +hello100 +Bradley1 +ra66it +whiteman +oscar14 +maryana +220179 +stjude +123rty +123456asdfgh +capsule +ltybc +handbag +asdqwe12 +fresca +amistad1 +treble99 +cute21 +speedo1 +dave11 +28121981 +Thompson +master45 +251989 +271195 +170294 +langston +pwd +indiglo +cologne +050193 +love72 +pretty101 +codydog1 +queen5 +lastchance +360modena +22071980 +hockey29 +123you +keepit100 +sequoia1 +cnhjbntkm +manny2 +cs123456 +yumiko +vivemoi +mckinley1 +cracovia +110477 +070580 +murdock1 +12345678bj +cheerful +1199 +rohan123 +fuckme23 +50cent50 +06061993 +madisyn1 +people. +091281 +01041978 +kathie +fackyou +142 +evilone +connor08 +sassy22 +m00nlight +Viking +ginger77 +8484 +07021980 +080684 +������������� +��������� +pigdog +babybird +150594 +lowes48 +221002 +dolphin22 +30091981 +bumhole +jujitsu +empty +bobbyjoe +nigger23 +31071980 +dbnzyxbr +10041995 +lynn21 +131993 +saints2 +250977 +sanket +kristall +profit1 +kaczka +bigdad +zsxdcfvg +daniel86 +muhaha +married07 +251992 +zero0000 +02041994 +05051975 +190981 +karena +famous7 +realdeal1 +villamor +nigga9 +nyasha +tanner3 +blowjobs +babydoll3 +16041994 +1234500 +iloveyoufo +sakura11 +stupidbitc +molly8 +305miami +crunchy1 +090483 +bellydance +07101993 +04041979 +16081982 +190781 +1lovebug +goodguy1 +09031993 +1234567812345678 +20121207 +covenant1 +downunder +bball30 +03111985 +200594 +cashcash +dustin11 +truelove12 +breitling +kamini +221275 +brewer1 +monster15 +snickers11 +160180 +ximena1 +wonders +lkjhgf1 +411018 +e65r82mnj2 +111078 +toosweet +coco101 +snowfall +landon12 +bonzo1 +funtimes1 +327327 +21041995 +orlando! +123abc. +23051981 +render +chachou +chapter1 +cyprus1 +westside10 +07111989 +lakers#1 +13111980 +200396 +07081993 +123456789zxcvbnm +houria +james28 +bailarina +190595 +michelle05 +121212121212 +cr250r +060879 +151991 +golf01 +081108 +destiny05 +26031981 +16081980 +ilovemicha +nano123 +burak123 +chante1 +lun +198429 +dazzle1 +ghbjhbntn +zachary4 +sierra7 +annalyn +19121978 +baranova +19111982 +28041980 +isaiah06 +goomba +banana4 +1scorpio +RAFAEL +angel1996 +bukkake +junior! +09031981 +joker01 +panathinaikos +alouette +lupita123 +160595 +Domino +261984 +06062006 +chivas8 +orange18 +fkm +mesha1 +psalm119 +swaminarayan +jamesc +242242 +12191219 +600100 +obama2009 +chosenone +Vanessa1 +da1andonly +200193 +280695 +password80 +masood +julia10 +popcorn23 +molly9 +conair +saints09 +mylastfm +consuelo1 +k.ljxrf +wicked12 +nephew +mexico101 +18071982 +dixie12 +spoons1 +xt +misterx +241990 +joint +tamtam1 +knitter +koolaid2 +Evgeniy +rinoceronte +overtime +200877 +4554 +tamila +christ2 +fuckyou27 +marie03 +brice +ilove... +nfnmzyrf +abbydog +chester4 +dethklok +141994 +mastiff +star06 +071081 +198827 +sandy4 +desiderio +thunder10 +canibal +papasmurf1 +mahusay +140478 +CATHERINE +27081984 +wabbit +grad2008 +hommer +010395 +davide1 +onspeed +15091981 +11071980 +pandapanda +prajakta +omar11 +dr4g0n +happy17 +15081993 +slovenija +angel911 +привет +wumeiyun123 +jag123 +comanche1 +060184 +210778 +aliona +saltlake +210280 +xray +Asshole1 +fender5 +09051982 +levi123 +lilman13 +ritchie1 +playboy08 +akinto +purple92 +18071980 +ch1234 +daisy23 +fishing3 +jesse21 +0102030 +grace17 +brooke23 +141295 +261989 +bby123 +22041996 +15091994 +31071993 +ashes +3l3phant +18061981 +ginger88 +ujkjdf +220379 +ruslan009 +samantha07 +makavelli +neznam +biabia +bitch100 +72chevelle +muhtar +021093 +fuckyou55 +imafag1 +17081981 +231196 +mitchell2 +1american +bvb1909 +linette +farmboy1 +scrappy123 +jamajka +090186 +tiana +555151asd +ilove15 +passwd1 +Angelika +091989 +nightfire +martinha +ravi1234 +198806 +sasha15 +dennis10 +06081980 +taryn1 +wethebest1 +rollercoaster +260694 +danielle18 +super! +17041981 +tink21 +vaz2108 +poptart2 +playboi +muschi1 +promo1 +snowball11 +md2020 +elaine123 +131193 +040593 +anthrax1 +08011989 +tomtom12 +09041980 +private2 +sigaretta +LinkedIn1 +dharma1 +okiedokie +walter01 +cancer22 +wolfteam +090994 +culo +070907 +asdfghjkl5 +febuary +karencita +steve11 +turntable +16101995 +sexxi1 +040581 +andrew89 +011187 +16051995 +qazw21123 +isabella5 +19121981 +zahara +broncos07 +29021980 +stringer +080692 +1greenday +jake09 +guitar666 +zzxxccvv +290793 +victoria9 +mataji +iloveme9 +hifive +drums123 +091181 +scooter69 +raksha +30031979 +steelers06 +getpaid +hello777 +qwas123 +andrew28 +ferrari355 +BIGDADDY +ghjuhtcc +1437 +09041993 +300777 +playboy9 +myspace29 +xbox3600 +290595 +sab123 +leonhart +maiale +anna2002 +asdert +samba1 +algernon +pimp19 +27061982 +werty7 +bunny23 +260896 +5Bhc2V875z +flashy1 +pieisgood +saibaba123 +qwertytrewq +pilot123 +120399 +oldtimer +090995 +lochness +shanae1 +rea +veracruz1 +avanesov +spanky01 +69bitch +ASDF +cretino +scrumpy +weed22 +17011995 +dylan08 +24061994 +8x2h4Eddan +iloveporn +270595 +bulldog69 +28051993 +libellula +america08 +crystal22 +600002 +411015 +123456zxcvbn +Jupiter +johnny14 +240394 +gohabsgo +invu4uraqt +1thing +302017 +MARTINA +jamezerazz +murtaza +mary14 +27081982 +238238 +nixon +mustang5.0 +nightjar +lindsey123 +prowler1 +morgan16 +jacob04 +welcome8 +mommy33 +in2deep +xyz789 +rayray11 +beachboy +finest +michael98 +deuce +nerd123 +hershey12 +max2006 +newlife3 +160676 +jabba1 +underwood1 +palacio +20212021 +140794 +kubicek +19831010 +opeyemi1 +aa12345678 +see +ihatemylife +181986 +bay123 +garnett5 +GARCIA +juan18 +johncena23 +bobby1234 +140278 +monkey007 +philippa +cowgirl2 +lulubell +felton +qwertyz +linwood +654321c +karlson +vanessa9 +gabby3 +01111983 +14561456 +thornton1 +narcis +scotts +romantika +0174426 +080893 +palma +28101994 +sarajane +nurbek +alyssa6 +19888891 +super22 +69dude +selfmade +knuddel +linden1 +media123 +jogabonito +femme +bonny1 +130478 +carlinha +echoes +bubble5 +SyyRRqBe70 +cultura +15081995 +10081995 +300183 +jasonlee +lauren06 +arsenal07 +090285 +lindau +unicorn123 +defcon1 +julietta +savitri +myspace#1 +voodoo2 +150294 +juicebox1 +rajini +lindona +myspace199 +lockheed +liv +13551355 +abcdef. +198026 +vodka123 +dude21 +fuck-off +gulmira +240294 +tree1234 +639374 +airbus380 +0810 +damian2 +271294 +Gloria +masseffect +favoured +tigercat1 +pizza22 +sasha1992 +kursant +020594 +bagel1 +vixen1 +qwe058058a +ragini +sandeep123 +snake3 +fatboy7 +29061994 +111119 +raylewis52 +pokemon100 +003003 +jasper5 +babi12 +sexii123 +marinette +bonus +1234������ +140777 +3pointer +1470 +grandkids7 +masana +breana1 +fortunate +010895 +anusia +210795 +foxy12 +0321654987 +erikerik +111222333444555 +manga123 +ioana +fishing101 +rayban +perfect123 +akhtar +19091981 +celular1 +231096 +loveumom +15081994 +albacete +energystar +199797 +renee22 +28011982 +luvya2 +26071994 +070684 +26021981 +ilovejessi +sergio2 +lastborn +moritz1 +131292 +24091982 +stevenash1 +7142128 +cheeze1 +babygal +barbarossa +us4ever +23091980 +22132213 +rafael10 +GENIUS +alanalan +cody23 +blahkg321 +tyty123 +199417 +chris31 +cinque +26111993 +orwell1984 +g12345678 +zk.,k.nt,z +livelove +bdfyjdbx +babycute +281991 +babys1 +160694 +fuckbitch1 +tassadar +171094 +secret99 +250694 +klondike1 +MELANIE +psalm121 +09011983 +isabella01 +holly01 +zombie69 +11051980 +69pussy +mark08 +james04 +198020 +dulce123 +Diesel +bethann +myprincess +31101995 +berry12 +jojo16 +19111911 +monkey90 +020277 +noumea +140200 +080983 +pimp05 +letitia +missionary +madison21 +Summer1 +mets123 +toocute +olivia09 +12345678x +hannes1 +281078 +1phoenix +3579 +11101981 +machupichu +freetown +198788 +blue31 +eating +27091982 +alamierda +ivan2010 +goodwoman +bulldogs3 +13031995 +famous5 +kelly6 +gangstah +honey17 +23021996 +19861225 +voices +16101980 +anjelika +231094 +mickey88 +models1 +major123 +15261526 +kaila1 +kenzie11 +380006 +27021983 +molly23 +301001 +l1v3rp00l +boss23 +sydney7 +19841016 +19101995 +omg1234 +09051981 +080582 +seabass1 +susieq1 +softball06 +2r97xJ3xEX +connor04 +19051979 +sunshine66 +billybob12 +ajtajt +consulting +meme22 +25071982 +MUSIC +170180 +030580 +eoce59cL9U +dragon98 +brooke07 +111967 +834002 +190680 +2702 +broken! +thatsit +teacher123 +21011981 +usman +27031982 +3345678 +200279 +depression +25212521 +chancho +tecumseh +dance09 +jag +horse11 +DEKALB +cybernet +edu123 +250377 +carter10 +tracie1 +abs123 +sophie06 +bird12 +100696 +herbie53 +123jkl +03071981 +stephany1 +givenchy +bobsmith +naruto100 +khan786 +Sym_cskill1 +sydney2000 +hotpink2 +smiles12 +corazon123 +lilwayne11 +180001 +dakota02 +sue +hailey05 +melendez +samsung8 +vane123 +babilon +150895 +q1w2e3r4t5y6u7i8o9 +eduardo10 +cj123456 +devilman1 +bogdan1 +oralsex +serenity12 +thurman +raven5 +sex123456 +jordi +candygirl2 +computer21 +kosher +montana3 +23011983 +informatique +agent0 +magicaroma +1250 +jamari +vitamin1 +19011994 +bodyboard +06111989 +hailey07 +judson +hunter97 +2809 +ilovematt2 +dodgers99 +redouane +ilovejess +topnotch +hollywood6 +salmo91 +covert +usa1776 +grapeape +how +jak123 +qqqqq11111 +freddie2 +ricardo13 +alina2010 +121010 +grandmaster +tommy23 +1590753 +1986123 +qwerty888 +arcenciel +dance14 +yamaha7 +manuel15 +27041995 +23121995 +alexsandra +190792 +santiago2 +babygurl6 +Schatz +21051996 +dasha1998 +15051979 +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +flanagan +My +chance7 +cameron22 +elaine12 +909 +sasha1991 +oooo0000 +boyzone +28101980 +brandy69 +karkar +88888a +fluffy22 +219219 +411044 +198704 +170495 +198902 +sorry123 +240395 +stapler1 +miska +gr8one +ranran +moocow2 +Hello1234 +lakshya +time2play +chevy03 +chikis +sb1234 +4f51eijViF +hennie +claire01 +daddycool +evelyn12 +spade1 +iop123 +pakistan2 +stars11 +225577 +22081993 +05091993 +azkaban +aprilfool +victor14 +latasha +20121995 +andrea06 +WHATEVER +13051981 +layouts. +28071981 +article456 +11091979 +556556 +west23 +jenny4 +100800 +luv2sing +191080 +300780 +char +salade +charlie77 +hotline1 +Gandalf1 +kalani1 +sh1thead +080282 +080392 +090492 +snitch +26061994 +playball1 +zerkalo +dawgs +soloman +mario21 +270880 +browny1 +euamojesus +130477 +27101981 +Katharina +maharaj +freitas +FLATRON +kasey123 +mikes1 +ortiz +spooks +221171 +1brenda +123456po +lineman1 +vika1998 +061279 +lainey +147456 +090582 +16071981 +total1 +eclipse3 +2709 +020593 +spo +07081980 +200293 +teamo5 +thelord1 +sheree1 +silver4 +batman16 +gtivr6 +buzzy1 +030378 +leroy123 +shah +juanluis +strokes1 +1chopper +jamais +rudenko +barbie9 +limonade +19977991 +051278 +phones1 +21061980 +bennet +kaylee3 +kianna1 +030593 +1doggy +silver8 +rockstar08 +hotshots +190578 +20121978 +040580 +3113 +sarah09 +austin512 +lawliet +ranger21 +stratovarius +pappa1 +dindon +spania +asdewq123 +150179 +����������� +tambok +molly21 +010481 +tiger100 +bacolod +091986 +freya +moe +sweett +goodpussy1 +261078 +hellgate +reiner +121968 +logans +ruby01 +flyaway1 +030192 +turtle23 +perros1 +bella2008 +blacksun +17061994 +loveme19 +18111981 +roofing +baritone1 +jaycee1 +310894 +14091981 +partyof5 +srinivasan +videogame1 +kitty88 +222222222222 +030694 +justinlove +tia +123pink +gone +richard9 +antonio15 +Student +07071995 +070881 +086421 +love1god +zenith1 +03121980 +airbus320 +pax123 +sweater +love80 +140779 +hades +14041995 +654987321 +sticker +michiko +wii123 +BARNEY +Hallombn001 +1patches +01092007 +vergil +lbvekmrf +campana +idspispopd +231295 +candice123 +franklin12 +300793 +060881 +microlad +legend12 +minkia +charlie25 +meangirls1 +160979 +26071982 +18091983 +401105 +10081978 +denver123 +sierra10 +11111j +levent +littled1 +sarasa +1232580 +1bella +rossonero +230378 +ulises1 +1bigfish +4097870 +black45 +green12345 +india1947 +april03 +hannah19 +03051995 +rhtdtlrj +cjdthitycndj +goodmother +blackfoot +stocazzo +assmunch +bruno10 +cute09 +korolev +murano +0309 +fresh5 +251295 +4evermore +music24 +roslyn +191180 +090887 +grahm +dallas33 +bibiana +dfasnewa +bigboy09 +1natalie +andreyka +123211 +123045 +sunset123 +mary21 +joseph02 +kalle1 +04101982 +bikers1 +jessem +165432 +100402 +007james +michelle28 +141990 +asdfgh5 +keke13 +260893 +16081994 +sexy96 +takeda +under0ath +studly1 +sugar10 +1597532684 +capricho +biochem +ramesh123 +nicotine +cimbombom +302015 +121110 +brandy22 +obituary +segura +1821 +dragonheart +Gunner +jasper! +emmanuel2 +roxydog1 +reynaldo1 +power9 +30091993 +01111984 +takataka +010993 +sopranos1 +regis +schastie +02121994 +tiffany69 +julian07 +gabriel06 +mikes +neguinha +mvp123 +joshy +roadstar +spots +sarala +14031982 +proverka +scott01 +brittany69 +19841023 +12342234 +barrios +eagles14 +pollution +bleble +pete379 +IxrHx2Xc87 +quovadis +toomuch1 +151992 +gunner2 +5959 +ingenieria +10121997 +1234567qwerty +19851230 +500049 +wildlife1 +Vikings +03061981 +tilley +gthtcnhjqrf +wilcox +serdce +123312 +19841021 +pankaj123 +westpoint +windowsxp1 +nike15 +260578 +02061977 +07111990 +phone12 +20091980 +popcorn9 +stars3 +cb123456 +camilo123 +JUSTINE +surrey +oli123 +160380 +11081980 +taylor19 +060809 +awesome4 +21052105 +peterpeter +25091980 +twocats +jelly12 +levente +ronaldo11 +jamesh +airbusa380 +200478 +241194 +sat123 +casada +florentino +af123456 +13111311 +focus123 +superdog1 +280594 +sladkaya +cdj: +sexy!! +bolinhas +12081995 +elvislives +fukyou1 +devante +010980 +mason11 +swanlake +tootie2 +1knight +stuttgart1 +raymonde +jesse4 +tab123 +microsoft2 +icecream123 +charlie04 +lagrange +171980 +lisa21 +jollyroger +121100 +trompette +shaney +candy07 +290882 +dranzer +jamshedpur +kumar1989 +300781 +150578 +1525 +30091982 +phenom +windowsvista +annarella +slniecko +toothpick +grapevine +11081995 +kendall2 +wedding07 +cheng +pit +skate08 +pats12 +stefancelmare +sarah9 +240577 +bff4eva +280779 +zsxdcfv +browncow +dresden1 +fishfish1 +louise! +lauren9 +28021982 +alexsander +190593 +haihai +101003 +jaramillo +03051981 +sempron +230977 +200695 +winter13 +lexusis300 +kickboxer +makayla3 +122333444455555 +nenalinda +speedtouch +disney08 +71717171 +199021 +010879 +peter7 +stockings +corvette2 +blazing +carolina7 +flo123 +13121996 +ildiko +karen11 +1stclass +hehe12 +sossina +sharona +hay123 +robots1 +laruku +portocala +2babygirls +sparky! +cooki3 +girls5 +goodnight1 +tarnay1 +noah1234 +240193 +ahojky +tardis1 +trompete +210777 +SIMONE +gallegos +081986 +aa3030316 +sahil +130777 +gracie10 +lampara +06101993 +airedale +222www +140379 +rodel +offroad1 +mannie1 +04031994 +filbert +121245 +toratora +retard12 +Aa12345 +drachen +041985 +jerkin +loveme25 +natalie! +soufiane +25031981 +goon4life +chicken0 +pinkey1 +rangers94 +08011984 +09120912 +heroine +ford99 +t1ffany +11031995 +vijaykumar +pramila +srirama +1q2w3e4r5t6y7u8 +squash1 +marek123 +110276 +honeys1 +dreamer3 +puppyluv1 +241195 +nesakysiu +jenica +augustus1 +chevy06 +booboo99 +280382 +170980 +daisy1234 +230478 +040595 +goldsmith +rigoberto +warior +700020 +96impala +abricot +lorelai +iluvu4eva +04011983 +felicidad1 +kisses5 +borntowin +070778 +sexgod1 +100475 +manutd12 +andres10 +040981 +superdude1 +grandma8 +bitchez1 +00000000001 +06021983 +frankie01 +100575 +thrash +plover +cristina12 +dare123 +slippers1 +25232523 +ricochet +matthew20 +011293 +261990 +1122333 +slowpoke +rfvtgbyhn +oops +041982 +xYQ7Xcewqk +161983 +261988 +denver12 +10point +chunk1 +28041981 +nissan2 +1234567890o +25091995 +nikita2000 +blessed123 +jamilah +juancito +chronos +july1991 +bourbon1 +deuseamor +job314 +casa12 +cerf +030880 +211989 +iamsam +160593 +sammy06 +ilovelisa1 +marlou +hockey91 +masamasa +kuku +ilovemegan +sofie +freak13 +parisparis +251076 +061984 +orleans1 +michelle26 +08021982 +wasd +08101982 +bigdick123 +020879 +gramma1 +19441944 +06111991 +2520 +714714 +l0v3m3 +amiga1 +987654q +1ballin +nerd +110054 +lucretia +cocoloco1 +misty11 +shannon4 +pugsly +bubbie1 +raymon +071080 +flames12 +becky2 +xiaowei +baby30 +password74 +041080 +oneluv1 +hockey07 +colony +music000 +jb12345 +porsha +199615 +cockroach +400008 +140977 +121500 +klo123 +maggie03 +hassan12 +mysp@ce +chloe05 +30101981 +jackbauer +101007 +raven3 +volcom22 +cuteness +ariel12 +brethart +halcyon +171982 +03041981 +gabbiano +222233 +070683 +25111994 +merlin69 +tunde +isaac12 +jasonx +abc234 +loverman1 +120012 +1478963258 +gaby13 +apples23 +sweetie13 +truelove! +slonce +jessie4 +sweety11 +sweetie4 +290576 +vulcan1 +naufal +090792 +relationship +vfvecz +dope123 +whistle +18211821 +c0mput3r +yeayea1 +december06 +colours +ashly +tampan +jenny17 +020305 +301294 +july1993 +livelaughlove +newshoes +300678 +qwaszx11 +madlen +fizzle1 +100294 +veverka +m3xico +sammie11 +5555555tl +050678 +penny01 +110396 +290980 +motion1 +090883 +forget2 +basil123 +05091980 +pazeamor +bell12 +homesweethome +2442 +ray1234 +250894 +brittany08 +180979 +ds1234 +rhyzza +ferrara +recruitment +hooker2 +purple32 +ALYSSA +192837465a +gabby01 +daniel29 +Broncos +newlife12 +poypoy +gladbach +cagiva +cleo12 +190980 +09061993 +mateo123 +melly +gumdrop1 +oviedo +28041995 +090291 +Dublin16 +penthouse +04031984 +jacob101 +cortex +08071984 +wrestling3 +rachel4 +manmanman +liu123456 +lonely2 +ike02banaA +kamikazee +austin18 +thomson1 +080484 +social12 +020184 +senior2009 +omegas +lala09 +09121989 +sasuke14 +travon1 +140678 +18021981 +benjamin5 +12345678as +24021995 +mykids02 +041986 +cross123 +coquin +re-enter +picchio +bulldawg +YfDbUfNjH +Emily +arbeit +ginger15 +brandi123 +musa123456 +cshrc +school23 +redskins2 +100900 +roofer1 +818818 +10051979 +connie123 +lickit1 +tucker3 +118720 +lilmama10 +250494 +cheer21 +codycody +09071981 +poohbear22 +08081995 +11071979 +chelsea17 +junior04 +ltr450 +summer20 +jgordon24 +sourav +888444 +owned123 +21002100 +27071980 +MAHAL +Bushido +honda02 +caliban +uraura +400089 +fischer1 +128 +z1x2c3v4b5n6 +saprissa +wife +tennis5 +samm +danielle9 +liberal +090580 +buckethead +30041994 +010781 +google01 +londoner +21051979 +nose123 +tevin1 +slayer! +070184 +198414 +alyssa21 +blythe +05111989 +zsexdr +rocker13 +26061981 +dorine +ertyui +soloyo1 +annie01 +pimp34 +nikolaevna +15011981 +walther +palawan +112233s +98766789 +pooch +shadow95 +heather6 +17101979 +poopey1 +kayla8 +kanabis +hellogoodbye +animale +mama25 +tiger20 +tender1 +lovemenow +1victor +dragon56 +worthy +bradly +aiden07 +reaper12 +bilal123 +ilovehim08 +dorsey +sheraton +shaine +marlboro20 +16021980 +2wsx +giants12 +ventilador +Beautiful +michelle89 +ginger16 +goodgood1 +aim123 +felony +301277 +cruzazul10 +ivan1991 +252252 +db1234 +holla! +montella +callie2 +savannah11 +demeter +211200 +decembrie +ilove24 +perras +221175 +chinatown1 +a999999999 +pebbles3 +atelier +genius12 +michael95 +sonnyboy1 +peace08 +babyjay +050383 +gudrun +251991 +080791 +19821010 +monkey76 +rednaxela +roulette +tanzen +fam1ly +dennis13 +herring +MARSEILLE +travieso1 +fartman +06121992 +1spider +razorblade +kimora1 +18091980 +z23456 +ruby22 +m123098 +emma05 +marcus7 +03031978 +outdoors +greener +javi123 +shorty25 +ISABEL +31031994 +semsenha +teacup1 +sexybitch9 +holley1 +samiksha +Gateway1 +ktnj2010 +.kmxbr +123212321 +lakilaki +genesis01 +NEWYORK +neighbor +140395 +20021979 +ghislain +06091982 +140000 +125412 +211077 +100875 +samantha17 +Larded +callie01 +01031977 +kaya +monkmonk +gracie4 +gabriele1 +lucas22 +careful +k11111 +emiliana +alexito +amber09 +benedetto +02061994 +27121995 +travelpack1 +malakai1 +03110311 +111111p +tkachenko +score +brosb4hoes +gucci12 +gamboa +nocturne +teacher3 +759123asd +sing12 +andy10 +kinglove1 +jesica1 +cooler12 +ilovesara +vida +FupYuxTa66 +bailey03 +flint +blackops1 +aikman8 +joseph20 +carolina13 +redheads +cookies101 +mazatlan +complex1 +bunny! +13011994 +aaron08 +14011994 +tyler18 +teentitans +israel12 +simbad +meltem +301077 +maryellen +brittany09 +sandrina +loser24 +claudi +jesus99 +456852a +Santiago +16081981 +31101994 +05041994 +banjaluka +alessio1 +ovechkin +smalll +silver25 +freelife +hoosiers1 +matth3w +twilight23 +desi +nastya1996 +corrine1 +zniRpnL744 +080185 +adana01 +nissan01 +bun +monica14 +kattie +031279 +19011981 +25121978 +444111 +charles13 +02071977 +arshavin23 +130795 +ASDF1234 +zombie12 +hope13 +cr +jesaispas +amber1234 +rajan +240595 +lovely25 +080485 +Xavier +240179 +291987 +detroit2 +карина +dpetrucco2 +1qaz2WSX +roflrofl +star2000 +h12345678 +Daisy1 +rocky9 +1gemini +laureen +marcoantonio +500600 +single7 +sexy35 +loveyou09 +lol1 +aliya +girls101 +jeremiah3 +blackadder +kinshasa +abdoulaye +tuesday2 +1qaz2wsx3edc4rfv5tgb +flight23 +kleenex1 +asmodeus +123.456 +147963258 +020994 +280980 +120600 +iiiiiiii +10091009 +tecate +130395 +april2007 +310594 +160978 +briana2 +09071982 +maksat +britney123 +marcello1 +bubbles24 +simon01 +lucky06 +011291 +erenity +monster0 +villalobos +03111992 +28121995 +190181 +11091980 +141194 +0123698745 +2701 +vanitha +PHOENIX +morocco1 +ricky11 +animax +myschool +monkey321 +fedex1 +148814 +karina10 +120108 +babou +150794 +03041994 +18051995 +wiseman1 +crazylady +y6p68FtrqJ +pumpkin01 +samanta1 +blondie13 +trustingod +flowers11 +truffles1 +awesome. +apoorva +ff123456 +8933959 +natasha7 +123321as +weedhead +thumbs +troll123 +050577 +52xmax +ramayana +bailey15 +199015 +vision123 +amp123 +Marley +rosine +lucky111 +aikido1 +vulcano +1jacob +061986 +doug123 +08061982 +cinghiale +nickjonas2 +love214 +dipset7 +merlin2 +deonte1 +tunes +lolo99 +trader1 +random11 +holdem +jimmyd +170881 +600037 +arfarf +lesbian2 +RABBIT +korina +06061996 +fuerte +honest3 +johnnyboy1 +mozilla1 +annie11 +njhyflj +14051980 +101196 +0502 +hello!! +i98xb7sxr7 +jetbalance +snoopy88 +17121995 +nathen1 +boobs12 +lucylu1 +100496 +020809 +flavor1 +666666k +scooby6 +180580 +160780 +25282528 +x2x2x2 +volvoxc90 +kartoffel +slavia +thrice1 +19081994 +110695 +020793 +200977 +welcome10 +ping +beagles +jakey +e65r82mpj2 +delosreyes +doeboy1 +charlotte7 +chrystal1 +sean13 +docent +pink91 +moneybag +19811982 +chinonso +lokaloka +17121979 +topina +zxcvbnmasd +rugby15 +george07 +10711071 +180494 +lovekids +noahsark +babyblue7 +watup1 +maggie. +people22 +23061995 +lera123 +passward1 +botbot +lianna +1515151515 +19861025 +6feetunder +eeeee1 +4xebxR653D +121967 +newgame9 +isabella10 +arsenal13 +hahalol +pickwick +klimenko +pokemon15 +sla +james32 +correa +cheating +breton +bonzo +Tiger1 +deerslayer +skate666 +henson +money89 +animales +dicky +29111993 +zoology +260995 +americas +puto123 +joker4 +XPEYGeh934 +meme23 +hocuspocus +150479 +socute +summer66 +blubber1 +020479 +nigga101 +banana9 +1love4ever +flor123 +picaso +ancient +520521 +25081981 +катюша +13467982 +02041977 +joseph25 +lilweezy1 +bajs123 +john06 +softball. +molly! +redrum187 +deutschlan +shakuntala +karlie +ford11 +sedona1 +newyork09 +130894 +h87va5rtp6 +granat +cane +141983 +faith10 +34416912 +omar10 +alpha7 +slapnuts +010406 +tornade +emolover +nepal +stephen3 +300182 +spirit12 +aku +rebecca! +25081980 +170194 +pincopallino +gratis123 +rachel15 +fresh3 +chevy99 +english12 +gro +barbie. +hello007 +program1 +tingtong +kadence1 +070192 +090783 +beegees +23011995 +hellokitty123 +310379 +hansi +adorable1 +jasonm +prince99 +18071993 +ecko72 +dallas06 +sports22 +yh3hnr4869 +09051980 +britt11 +010594 +nonpayment +190594 +Anne +X +170678 +08011983 +sslazio1900 +retlaw +101103 +1322 +2238qwer +alejandra. +symantec +paul23 +same +231991 +19900991 +prospect1 +fatboy23 +villarreal +160678 +rbhgbx +astrology +sam007 +07091983 +311278 +200011 +daniel84 +katelyn2 +hj +love64 +pidoras +anime13 +guns +ns +safe +060980 +20071980 +arm +fraggle1 +teddybear9 +woodlawn +fripon +1qweasd +edward6 +David123 +300578 +sunnydays +scorpions1 +marcus14 +remember! +04111990 +27111981 +aviation1 +310179 +t654321 +dionis +15111993 +3182 +avignon +andrea8 +colt +1unicorn +raiders09 +sergio10 +leslie13 +icehockey +ladyinred +100675 +fernanda12 +kontol1 +tlc123 +010793 +grange +mama16 +lemieux66 +valami +rocky14 +one1one +160808 +woodie1 +190293 +church123 +beanbag +baksik +chevy22 +srisai +141003 +19431943 +brunomars +heather08 +563214789 +KytFy2xd98 +leelee2 +hood123 +pinky09 +220277 +jabari +110178 +jimmyb +gettysburg +hampster +haruna +dinozavr +eybdthcbntn +16candles +anna18 +joel1234 +060582 +loves123 +arcane +0000000001 +hawaii08 +12345QWERT +ayyappa +tight +050506 +lombardo +yulia +040182 +syafiq +util +abkbvjy +silverback +brentford +goeagles +24031995 +hollister. +090392 +pounce +04021993 +homeworld +456838 +bannana1 +iuytrewq +654321987 +dragonking +05071981 +564738 +qwerty94 +forsberg +230494 +emily69 +class2013 +buster05 +hood12 +militar +fifty5 +rainbow01 +iloveu17 +CHERRY +13456 +hichem +misty01 +211984 +550550 +petasse +akinom +panther13 +kittycat3 +askim1 +0608 +voitures +080191 +rajraj +030594 +09121981 +Pumpkin1 +papagal +boulevard +mickey28 +hairdresser +dothedew1 +lilwayne7 +250678 +kingofpop +14021975 +privs +280380 +dudinha +01021979 +060981 +antonio14 +210294 +aldo +iloveian +guinea +10101997 +291193 +141984 +250677 +twilight15 +raymond7 +2gether4ev +ypfu2vl856 +jenelyn +bill1989 +Roberto +haunted +199898 +dar123 +jellybaby +casper5 +dark11 +08021980 +chrisb2 +3141 +element9 +ashley0 +death11 +x7BktntLEz +marche +280495 +aliali1 +a012345 +james55 +1z2x3c4v5b6n +riverdale +291984 +salon1 +Babylon5 +201111 +margot1 +goodwife +homegirl +supertramp +kangourou +vAl353nxhC +serenella +patato +newyork07 +loser44 +199116 +penis7 +070191 +nnn +rayray3 +mariposita +gokussj4 +03081981 +3651118xun +English +sm1234 +zxc123456789 +31101980 +apaaja +123456789zz +aybaybay1 +321321q +metal2 +capetown1 +steelers3 +ybrjkftd +eliezer +darkangel2 +11991199 +25121979 +Cool +basket2 +bank +09041981 +hibees +otter +qazwsx23 +forgiveme +renton +chelsea99 +robaczek +bemine1 +football47 +07051982 +197819 +titova +22041995 +sistem +owahodarea +29011994 +27031983 +cooper09 +090192 +21081981 +bassguitar +newport69 +MIRANDA +sokol +19861021 +lovelife7 +vladimirovna +09111985 +281987 +goon12 +steven. +160036 +17051996 +260477 +250293 +master18 +xexeylhf +simsalabim +131295 +jennifer24 +srh420 +kswiss +callie123 +wordpass2 +edd +calais +090184 +yellow07 +12asdf +east1999 +kkkkkkkkk +7373 +simba01 +ilovelove +jennyt +server123 +connect2 +goonie +24031980 +alex66 +jujube +atlanta3 +22111995 +butchie1 +040184 +120597 +516888 +240978 +saufen +daniel85 +perola +poohbear07 +03210321 +trebla +141975 +wqer1314 +scoobydoo3 +bismillah123 +marie27 +toosexy +boomerang1 +happytime +angels23 +toobad +emilys +omsrisairam +oreo22 +allstar5 +091083 +spank1 +coolguy123 +paspas +elijah5 +14011980 +1qwaszx +mardigras +dogma1 +123joe +198805 +asdfgh! +bubbles17 +1234rfv +07051981 +01101979 +191279 +tiggy1 +changa1 +hung +suchitra +rhbcnb +life22 +jaimaa +a456456 +savannah10 +131994 +mojo12 +medellin1 +tunde123 +jeep4x4 +101995 +sis +wicked123 +water1234 +530017 +maver1ck +shalom123 +090680 +18021995 +mindgame +pdiddy1 +carter08 +matisse1 +olivares +ranjith +dancer24 +david03 +johnny8 +grendel1 +clarkson +josesito +product +beckham07 +jaden2 +423423 +image1 +tomdelonge +pepere +231275 +webber1 +19061981 +redriver +sonnensche +alex31 +carolina11 +angelfire1 +rasberry +alligator3 +karina11 +030291 +poppers +aleks1 +harding1 +impreza1 +070484 +alex30 +momanddad2 +blackrock +fuckof +mexico619 +123456er +class12 +Aa12345678 +tigger89 +290578 +050284 +198908 +12345656 +vit +charissa +DOLPHIN +240195 +198729 +toby22 +daniel007 +HIPHOP +001990 +megan69 +biochemistry +210293 +421202 +18121994 +nagesh +freddy01 +hippy +carajo1 +22111994 +angelz1 +kenny11 +joshua28 +asshat +marie. +talia +hayes1 +were123 +babacar +the1nonly +brittany23 +guyssuck +roxy69 +041983 +silly2 +dancer6 +lancers1 +pinky6 +elantra +159263487 +glassman +PINK90 +198208 +01012005 +dilshod +showme1 +brescia +290280 +ironman12 +280981 +88552200 +monica5 +21071995 +08051982 +3939 +emily1234 +spacejam +laska1 +Atlantis +Forever1 +f75s83nqk3 +necaxa +19861001 +duramax +floresta +luv2luv +19071979 +siddhant +190793 +13121978 +06091995 +parvati +lahore1 +rosie01 +140778 +honda93 +0709 +11041982 +lizard12 +250177 +bigd +goldy1 +gold44 +sports13 +texmex +qwas1234 +04111983 +200700 +frog22 +eiffel65 +dolphin6 +413413 +25071981 +130576 +suresh123 +rocky08 +hannah96 +wwd100 +trixie2 +jayant +freshman09 +guevarra +kidman +caitlin123 +liefie +kenny5 +04111984 +03021994 +beatka +alyssa8 +sagitaire +29091981 +elmo69 +erlan +morgan04 +jamesp +yukon +anthon +260179 +jamesbrown +ajtgjm +teabag1 +novanova +1camaro +logan05 +t-mac1 +guster +14031994 +021180 +251982 +antoxa +181079 +260260 +positano +987654321123456789 +Savannah1 +weener +27111994 +simo +matthew88 +27031981 +puppy01 +sakartvelo +stickman1 +151982 +chivas1234 +16061995 +08041993 +guessit22 +tima +tiger06 +oscar21 +sop +guimaraes +wulandari +annelies +blackwood +usher8701 +markus123 +chino12 +gideon1 +11121979 +pinetree1 +100606 +010679 +whoopwhoop +ponytail +piedmont +03081994 +allison7 +260979 +mayberry +desirae +texass +wicked69 +clumsy +hubbard1 +01121993 +josue123 +020895 +10171017 +jake2000 +753 +dylan6 +030366 +victoria6 +141992 +CAPA2008 +tellme1 +051095 +300579 +19941995 +231982 +christop +wocao5201314 +goldmember +kb1234 +jaylon1 +111296 +26061995 +ironfist +jellybean3 +02061978 +jack88 +hosanna +sophia07 +bledsoe +hjcnbckfd +manuel7 +sh1234 +260792 +bqLk8kx79U +159357000 +element69 +aguilas10 +poesia +201989 +champy +becky12 +17111980 +mayann +windsong +raisa +220177 +1winter +littleguy +zxcvbnmasdfghjkl +nasrat +kylee +shree +170281 +nugent +bananas3 +ElSalvador +11061994 +020296 +venugopal +punch1 +green777 +400606 +bangor +hotone1 +moneyboy1 +wtfwtf +polpolpol +huxley +dalton123 +101066 +getpaid1 +newborn1 +06081981 +peludo +last123 +careless +larina +funnyguy +mimi09 +021279 +files +07061992 +dragonballgt +swearer +753421 +mjmjmj +baker2 +090393 +harlow +marcy1 +pepperdog +cooper07 +18041995 +23091995 +an123456 +juliajulia +lynnie +zgmfx10a +xenogears +taytay13 +poohbear6 +hemi426 +250395 +knopo4ka +florida10 +gygypyfyyyposhy +Houston1 +goosebumps +yanira +ihave4kids +12ab34 +Stephen1 +podstava +mikail +2903 +jeffrey7 +28121980 +hejhejhej +28081980 +dalton2 +al1916w +618618 +omglol1 +28091981 +ph0enix +06101983 +munster1 +Ab7f23rSV +cavaliers1 +welcome12345 +caitlin12 +250794 +JAVIER +Sarah1 +08041982 +friendss +robert05 +yourmom4 +159635741 +love1982 +calvary1 +eminemd12 +stampy +60crip +black. +bigjohn1 +mike28 +prankster1 +qazqaz12 +bassey +gabriel. +muppets +florida! +caitlin2 +080393 +020509 +max100 +roisin +9512357 +tamara12 +firedog +bridie +84131421 +july1988 +limonada +121314a +030793 +111995 +27071995 +bigboy4 +coolkid12 +030282 +brownsuga1 +radish +230695 +1champ +chococat +dinmamma1 +12081996 +lucas3 +pattinson +120776 +2901 +lmnop123 +290180 +nederland1 +chance10 +co2007 +gestapo +041193 +goldleaf +150878 +08091981 +181177 +66chevy +100978 +emoney1 +lillian2 +02041978 +maddie08 +06111988 +barabashka +love1983 +14022008 +dogtown1 +chris2009 +andrew87 +katie17 +ppppppppp +300400 +passion69 +bundy +мамуля +thomas87 +Lizzie +pokesmot +strand +remont +brian07 +21051980 +vanessa. +cod +nancydrew +ilovemike2 +project86 +brown23 +031193 +rock14 +110202 +cooper21 +tangos +baxter2 +jenny8 +121175 +gjlfhjr +197328 +bebo12 +20091982 +egipto +maus +311077 +chevelle69 +121971 +farewell +02021974 +geetanjali +1000000000 +400103 +toottoot +199115 +senior12 +Mnbvcxz1 +happie +explode +kissarmy +200778 +teamo7 +86248624 +canvas +pimp77 +dragon02 +l0vey0u +clothes1 +adrian18 +sanjar +taylor88 +kobe12 +dawood +califas1 +starlite1 +141296 +21041979 +05121980 +gomez123 +morgan9 +shantell +forever25 +crip60 +01051995 +312 +011279 +angels6 +gracie05 +legioner +Q123456 +moiettoi +1888 +Scotty +Bella123 +050482 +braves11 +qwerty96 +1q3e5t7u +laputa +070491 +warrior13 +131982 +iloveu4eva +generale +angelia +padawan +25051979 +08111988 +130495 +boing747 +branca +Q1W2E3 +zzz333 +jesuisla +viva +willy2 +noidea +090481 +imabeast1 +itsover1 +15021979 +nicolette1 +Zz123456 +gnomes +kazakhstan +080584 +46466452 +socal1 +jake1 +pelicano +americo +asdfghj12 +sarinka +12041961 +daimler +serginho +jazzy5 +aznpride1 +superman06 +blackice1 +wanda123 +maddie! +element. +gandako1 +power99 +jimmy! +chaise +gtnheirf +opennow1 +03081980 +slim1970 +21091995 +mayra123 +phatty1 +nimitz +pepper00 +legrand +trasher +450450 +l111111 +romeo3 +05111983 +kerry123 +rfpfym +kalamata +27111980 +nascar11 +work4me +14051994 +crazy07 +mainstream +Windows7 +nelson11 +777771 +300677 +281984 +temper +gjujlf +24071993 +newmoon2 +dembel +madhu123 +mamana +1skate +inspire1 +080907 +micmac +thomas04 +z000000 +scott3 +01081979 +silverstone +05051979 +sunanda +jasmin13 +3700 +emperador +111111f +brooklyn08 +waikiki +danny8 +pimpin06 +LOVER +000000o +profesora +moonlite +ladyblue +18091981 +bholenath +awesome5 +170894 +pamela01 +aditya123 +lilchris +c1c2c3 +24011994 +elaina +Cherry +lucky#7 +sara10 +fish69 +310793 +football02 +bigmouth +laura3 +ruckus +schatten +robert55 +saraha +chouquette +atkbrc +andrea24 +youare1 +alexsandr +twinss +shay13 +shutter +19841001 +02091979 +jimmy4 +katze1 +panda22 +lovemybaby +skate6 +star05 +buzz123 +060186 +12345678qwe +kanyewest +maciek123 +021194 +money66 +allysa +lucifer6 +depressed1 +june1996 +188888 +katieb +werderbremen +wakacje +tigrotto +160879 +230895 +monkey42 +pipino +siouxsie +22101979 +2times +09071993 +insignia +taterbug1 +tabaco +mylove14 +bia123 +buford1 +1bubble +06011983 +murphy13 +public1 +babygirl87 +gengen +doremon +emmy +booby +19831985 +cintaku1 +420love +02121993 +fire23 +anna2001 +42684268 +150694 +aicha +joseph88 +freaky2 +joyride +03091981 +redhawk +1400 +carson12 +badgirl123 +090681 +031095 +CANTIK +zsxdcf +passw3rd +michael91 +12qazwsx +fleming1 +gaypride +300594 +02101979 +fuckher2 +likeyou +cbvjyf +yonkers +261261 +daybreak +texas69 +homeland +pink66 +Kathryn +cool88 +210281 +337799 +202010 +solar +bronwyn +BLACK +asasas12 +21042104 +jaydon1 +Cheryl +Rosebud +george9 +berkeley1 +may1996 +emily16 +112233112233 +Azerty123 +mallow +030894 +chris29 +moni123 +13051996 +600061 +demolay +teamo22 +canadien +24031994 +nicholas21 +mustang302 +ranger10 +happybirth +15011994 +vanya +pinklove1 +missy6 +jessi123 +29071981 +198824 +020395 +Patches1 +�+���+���� +frazer +09061994 +1nothing +211001 +issac1 +kaka11 +quidditch +bmw745 +z1x1c1v1 +keynbr +andrew92 +190479 +paragon1 +221991 +licorice1 +erasure +spartacus1 +0805 +03121994 +31031981 +melton +25800 +120675 +lifesucks! +carambar +07091994 +010807 +01021976 +fuckers! +150896 +040478 +ppppp0 +ford1234 +07091993 +hinder +narayanan +hk +16011993 +23011980 +jeremy18 +7753191a +cool16 +amar +tonito +100proof +FRANCISCO +031179 +sergik +050695 +8en3dwDXPI +201276 +abi123 +Serenity +17021980 +midway1 +sexyboo1 +191277 +jasmine19 +141002 +121073 +24111993 +1nirvana +littleangel +tavolo +slipknot4 +dopey +sanek +4everurs +vanessa18 +1jimmy +richierich +1flowers +dimple1 +RANGER +lipgloss2 +coral +050781 +r9e8w7q6 +Smith +c0nn0r +10inches +pypsik +chris666 +frenchfry +mine11 +damian13 +135711 +haitian1 +sashaa +fantasy2 +2nqW7A1517 +aitana +charmed12 +andrade1 +panthers08 +18051959 +iamcute +w1w1w1 +198103 +olddog +hotwater +stormy12 +rtyrty +dragonlance +brandy3 +babydaddy +sophie09 +barros +aldrich +ballin8 +300493 +europa1 +chibuike +250477 +nazaret +26031994 +240778 +198021 +nazira +hom +danielle69 +freddy11 +zacarias +4myfamily +diadora +radek1 +01091979 +18111994 +my2cats +1molly +521 +chello +09021983 +haha69 +alisha123 +b11111 +hehehaha +iloveluis1 +there +rosales1 +050484 +1love! +shamus1 +softball44 +altagracia +manofgod +sophia10 +holla2 +bball42 +001992 +19871026 +william05 +150995 +070895 +08081976 +spike22 +80000 +bozena +billy22 +030509 +michel123 +Reggie +100896 +198813 +sharada +ilovesex2 +Phoebe +purnama +kaylah1 +newengland +bikes1 +198304 +sevens7 +250378 +latina12 +19031996 +gtasanandreas +marie101 +100596 +ummagumma +221166 +nikki! +221094 +jacob02 +cozumel +karime +verochka +fussel +290693 +fktrcfylh1 +1955chevy +herpderp +123boo +ivan1996 +appaloosa +ciccino +noonie1 +001968 +09061980 +superm +010101a +jeremy4 +jenelle +05041980 +stuff123 +feet +24071982 +rockyroad +rutgers1 +hanspeter +mona12 +hoboken +060493 +upyours2 +butterflys +single15 +Valentine +chutney +020496 +qq11qq +martin1234 +savitha +12011978 +951 +lmao12 +xkhNmkI633 +selmer +police01 +dakotah +mountains1 +bitch26 +020103 +marley13 +goon123 +1590 +lover99 +MARINE +122015 +cacique +wiggle1 +16091980 +19841123 +marin1 +wawa123 +040509 +1sabrina +lam123 +22121979 +hawkwind +volunteer1 +money1000 +angellove1 +anghel +e12345678 +jackson05 +jomarie +midnight10 +ehlb3c18TW +julianne1 +foreplay +22022202 +winter7 +09061981 +04071993 +270679 +281079 +smile69 +221980 +1985123 +jillybean +ruby13 +english123 +030480 +hashem +babygurl06 +bergamo +willow13 +duece2 +25071995 +198927 +faith21 +tigger04 +aleluia +tomjones +020209 +jesus2011 +jesse22 +2327 +coumba +07111982 +291179 +sunny01 +d-money +attilio +purple420 +delta3 +espejo +090977 +urban +rjhjnrb1 +123rock +jeanine1 +paokara4 +aloalo +dogpound1 +beatit +rfgtkmrf +chris2006 +08071993 +atakan +buick1 +spinoza +margaritka +abidemi +kimbo +dragon84 +140895 +bobble +allin1 +crazygirl2 +carmen22 +2524 +losenord +yyy +101009 +clicker +googly +rangel +acm1pt +beyblade1 +22021978 +jeremy17 +cool25 +rangersfc1 +brandon04 +britt14 +minnie7 +sosa21 +12121976 +oaktree1 +marley7 +nomames +sadiegirl1 +scott22 +rocky99 +arinka +Q +17041994 +tiffanie +30051981 +ashley90 +torres10 +sm0key +gobble +anneanne +poprocks +fr1ends +elementary +gfhfpbn +10031978 +0120 +kartina +totoy +vegas702 +amarnath +socool1 +050194 +martynka +joepie +baboon1 +dillon01 +charlie19 +hacienda +dbrnjhjdbx +halo02 +greenday6 +anakaren +080979 +Uruguay +parris +love48 +princess78 +SjiecJ1A9X +оксана +classroom +sadie13 +jesus00 +19841018 +123443211 +455455 +panacea +juicebox +kissme4 +connor99 +calhoun +050192 +avrill +523698741 +thelegend +rooroo1 +brandon02 +bball31 +woofer1 +proline +sheyla +bosnia +karman +pirulito +merganser +27061994 +badboy14 +pwnage +boxing123 +Snowball +iluvgod +vfhbz +231276 +jimmy21 +antwon1 +muchlove +fergus1 +spammer +mygame +volcom! +clarke1 +tiffany4 +landon01 +cfdtkbq +fishing4 +1raymond +mommy03 +dexter13 +rosetta1 +060979 +mary69 +110975 +29051980 +shivji +silver9 +badboy6 +holliday +animefreak +1234567asd +trolls +obama +asdf23 +esoteric +paris01 +831005 +adesola +eat +210179 +family15 +totalwar +care +daddyyankee +music=life +cutiepie9 +laura69 +52hoover +goncalves +tribes +kimak1 +jumpstart +14101995 +annoying +101973 +batman20 +pothead2 +police11 +siempre1 +farter1 +070682 +tonight1 +katie15 +chica12 +lucario +senator1 +virgie +6cctbbk516 +myspace30 +wetpussy69 +bateman +simone2 +benny12 +dakota23 +29011980 +hideki +alba +daniel2008 +david2007 +bubba9 +1sparky +sorrow1 +070384 +olympus1 +nico1234 +1234567890qwer +vidanueva +dutches +kitsune1 +sweetie01 +ponderosa +michael90 +imcool12 +010405 +servant1 +graciela1 +trivial +08071983 +171278 +quackers +011280 +salma1 +230177 +myspace76 +chelsea18 +misamisa +200820082 +yamuna +porshe911 +1stplace +12111994 +marlon123 +blondie101 +sexylegs +gfhjkm777 +noodles2 +ghetto123 +22101996 +lazyboy +whistler1 +p0kem0n +misbah +gravedigger +brennen +madisyn +13324124 +vanna1 +polonia1 +sarina1 +waddle +eagleone +forgot2 +austin101 +dbrfdbrf +zrjdktdf +leelee12 +belle12 +24011983 +monsoon1 +killer93 +cindy13 +545545 +bowwow13 +harley101 +chanel05 +12051979 +huligan +198102 +rfhbyrf +artichoke +shannon8 +02101978 +golfer11 +deadend +amber8 +14111995 +241276 +faithfull +june2000 +sunshine26 +biboune +puta69 +sweeter +01121994 +benzin +busterbrown +angela5 +pirates3 +slipknot01 +nochance +transport1 +martyna1 +kissme7 +122412 +260894 +3tb9xM42xI +edward08 +09101983 +27021981 +maxou +franek +251276 +mark12345 +ktitymrf +mama2000 +tiffany10 +160877 +200576 +vanila +060486 +munnabhai +human1 +love1980 +10061978 +070893 +mutual +230794 +mychemicalromance +rf +flamengo10 +aerdna +ahfywbz +199423 +dalton01 +ambulance1 +patoche +white23 +jenny20 +freckle +melanie7 +odie +ginger06 +london20 +sunset12 +hai +150575 +iloveyou78 +021078 +boomer3 +renee5 +collector +rent +password71 +kimmer +astigako +380013 +vika1995 +lctstens +kakdela +thousand +infierno +121512 +yeswecan +honda6 +work1234 +03091994 +redrum666 +shitface2 +popcorn8 +gangster6 +22081982 +251990 +finnigan +07101981 +panthers3 +liljohn +05041993 +841025 +arihant +kacey1 +d123123 +sivas58 +120200 +gambino +5zgc2T764B +1qaz2wsX +cody101 +jimmy1234 +dance01 +mamatha +duran1 +spooky12 +08111991 +fucker9 +200910 +haywood +26051995 +gjitkyf +kate1234 +fulmine +zerocool1 +bagdad +mustang. +carrick +cats101 +bethesda +tiger! +161277 +181984 +walmart2 +shorty88 +gateway11 +bellsouth1 +morgan. +Fantasy +ballsdeep +62626262 +realest1 +040471 +secret101 +oyatayo +numero +rose99 +myspace96 +luiscarlos +sophie4 +125800 +telecom1 +jess01 +031194 +techno123 +screwed +12101995 +06031982 +pantufa +demonhunter +contest +45654565 +boilers +lila123 +bleeding1 +Annette +melissa18 +saadia +hartmann +aaron17 +badboyz1 +dancer. +nicole83 +newyear09 +crjhjcnm +19011982 +010577 +261277 +rizal +26101995 +bobert1 +vladislava +Teacher +muffin5 +fresh11 +19111980 +nandan +111113 +anja +orca +vergessen1 +djibouti +26121995 +25021978 +199317 +1christina +frederic1 +wwwwwwwww +jayden22 +198106 +fuck89 +vadim123 +anindita +11441144 +randi +iloveyou31 +abigail01 +steaua1 +tina22 +22love +kaliningrad +070392 +cayank +jesse! +120608 +fishhead1 +king06 +killa14 +silverfox1 +tonio +SHARON +BRENDA +wasser123 +santos13 +824553435ss +dildil +august03 +insane2 +100576 +ronald12 +melusine +arancione +riley11 +charliedog +blacky12 +precious11 +republic1 +laksjd +jojoba +tinashe +05011982 +1monica +c0ffee +mooooo +qwqw12 +lollip0p +ravioli +tigger45 +changer +user1234 +24041995 +ronnie3 +110876 +101175 +1donkey +giraffa +munson +shit13 +cvfqkbr +andypandy +160695 +16011981 +sexygal +290494 +6161 +jeremy16 +Sammy1 +161278 +1cracker +sunny5 +april1990 +theworld1 +hailey11 +s123456s +herald +stubbs +2131 +vortex1 +irock11 +ballbag +123-456 +polo99 +12101977 +dam123 +cc +capello +omalley +04021981 +1300 +greek +mexico24 +risc +jar +alfredo123 +nannan +water13 +781006 +mickey25 +personale +210195 +howareyou1 +alexandra3 +060676 +caiden +04021982 +050609 +brasileiro +070382 +steph69 +ziggy2 +30041981 +821026 +081980 +annecy +honda500 +jasper99 +hiking +deano +1551 +jesusmary +sweet25 +Hamilton +mari1234 +pablo12 +twilight6 +01081994 +proverbs35 +carmelina +allstar23 +7stars +yankees07 +yankees15 +pimp12345 +ionut +zhenyu2012 +06081982 +misericordia +icecream13 +floortje +05021980 +31011993 +123098q +wertyuio +anulka +198024 +fai +221196 +04071980 +unity +����������� +march05 +proverbs1 +240280 +abcdef7 +lovers07 +sabrina01 +19121979 +xavier06 +br00ke +pasuma12 +tillie1 +oceans1 +nenita1 +cheating1 +091983 +ashley86 +1234567123 +4488 +optout +dockers +britt08 +charles22 +LAKERS +shane11 +lordik +dwayne3 +chris2010 +NELSON +shakademous +romeos +300994 +festival1 +m696969 +music25 +love777321777 +vlad1999 +bingo12 +lfytxrf +neverever1 +020808 +hair123 +kicsim +katie08 +chevy11 +159753654 +samsung6 +tinker! +piupiu +ivan11 +2nipples +dick22 +4294967296 +213546 +blood21 +071193 +dangelo +defcon +jaymar +buttbutt1 +560097 +sunshine44 +valerie123 +27071981 +spooky123 +supermax +vfif123 +baby111 +22021979 +SUCCESS +England1 +general123 +419 +220895 +06121994 +cabana +sherbert1 +marmot +11091994 +feride51 +logan4 +4evermine +figure +fucker01 +michelle99 +181077 +060581 +blade12 +0804 +caldwell1 +012012012 +purple05 +elviss +qazwsx321 +poknat +123pormi +.... +pharaon +Georgia1 +zap +helga +18051978 +listen1 +shithole1 +07111988 +fififi +burnside +196767 +071989 +name123 +coolgirl12 +290593 +anakku +010377 +maggie88 +060182 +cancer123 +popcorn10 +krzysiek1 +qscwdv +laffytaffy +school14 +01041979 +210895 +honour +honey9 +03121981 +single14 +iceman3 +15301530 +nick06 +270778 +081278 +reece123 +0password +14061981 +161178 +karina01 +kakaka1 +motorolla +210178 +icecream8 +dancehall +saxofon +frankiero1 +homero1 +cool77 +sexyb1 +janiya1 +starkiller +ryan04 +12091979 +199001 +moustapha +cesar13 +gabriel21 +meli123 +ladyluck1 +cash11 +micro123 +campeon1 +pinky23 +sandrock +010494 +blah13 +blondin +ben123456 +blue04 +051093 +020494 +pinky01 +nokia5320 +sander1 +hahalol1 +masterpiece +ilovemysis +090603 +Ronald +vuitton +pisellino +sexygirl15 +ayurveda +rasputin1 +lemieux +d1d2d3d4 +24081981 +28031980 +30121994 +metalika +lilo123 +11111978 +3iverson +famous3 +orlando13 +ANGEL1 +junkjunk +elijah4 +creampuff +199016 +watson831 +Frankie1 +monkey85 +yjdbrjd +fH1hM1wL +sidorova +kamryn1 +090286 +191992 +dina123 +05061994 +lady23 +cashman +doll +bignose1 +gorodok +dowitcher +051293 +rangers10 +450000 +nataxa +evaristo +music17 +snowey +smiles! +17041978 +281077 +overkill1 +sexonthebeach +07021994 +baklan +Australia1 +Michigan +08061981 +masterblaster +link4me +vivek123 +joel13 +foodie +silverio +281985 +080877 +shakira123 +omegared +fltkbyf +robert89 +221990 +198216 +ar123456 +turbine +241982 +040385 +sandesh +bettyboop7 +110897 +241296 +07041982 +fdfd +homie13 +lupetto +011281 +polkovnik +divagirl +ghjcnjkjk +pentium2 +9111 +redgreen +osorio +ed +saunders1 +1compaq +demarcus1 +marlboro2 +scooter23 +cachorra +Chris123 +rajeshwari +naruto20 +archimedes +icequeen +lover44 +gayfag1 +duke10 +titanium1 +zul123 +nelson01 +ghostrecon +wanwan +nicholas123 +eastside14 +041094 +hightimes1 +booking +hamtaro1 +1yamaha +Asd123 +Hayden +51525354 +20031979 +scrooge +mcguire +dale08 +gustav1 +031276 +1234ABCD +september12 +triple1 +sundae +andre3 +randymoss1 +qwertyasdfg +william20 +thisismypassword +040382 +chloe22 +31051980 +a252525 +shawty2 +07011983 +frank3 +council +030779 +grad07 +110035 +jenny101 +10081980 +hariharan +tiger86 +14101979 +girl14 +jeremy6 +02051977 +ass111 +marinel +sugar22 +gisella +241093 +963321 +cemetery +autism +intouch +isabella08 +dietrich +110476 +gates +aiman123 +ronnie01 +missme +upiter +01091995 +300394 +papasito1 +courtney8 +pok +hockey31 +gibbon +180578 +cadbury1 +tiger777 +oriyomi +xiaoxin +fifa2005 +milka1 +neopets22 +hitler666 +carlos27 +Satan666 +elvis01 +adios +brooklyn21 +0710 +cutiepie09 +20111994 +branko +11121978 +7539510 +1aaron +edwards99 +110177 +lovegirl1 +hihihi12 +120797 +galatea +borracho +ignazio +gsxr1300 +porche911 +180281 +12101979 +Camille +19841015 +030493 +fluffy5 +cornflake +manwhore +ccc333 +1916 +dillinger +ISABELLE +rose17 +07121993 +bhatti +localoca +159357z +holidaysecure123 +qwer13 +ihatey0u +220596 +buddylee +mono123 +1maxwell +181277 +220496 +ghandi +140378 +ability +mcfly +gbjyth +dude10 +07051993 +madeinchina +fuckyou66 +04091983 +31415927 +pelotudo +Brittany1 +abcdef6 +scarface5 +arsenio +evgeni +olaolaola +bobsaget +270879 +mazinger +akasha1 +whitecat +korsar +baby100 +bubbly1 +price1 +mariem +301193 +pussy15 +8point +camacho1 +stas123 +lk123456 +sd1234 +access01 +Winnie +babe21 +engelchen1 +gogiants +oldspice1 +somebody1 +malmal +welcome1234 +babygurl9 +pas123 +miley15 +slingshot +marie77 +army1234 +020301 +bigdave1 +ricardo7 +annalee +becker1 +210576 +faheem +omoyah1 +hawaii01 +felicidades +fuckthemall +p@ssword1 +birthday12 +elite123 +gutter1 +fuckyou78 +12345699 +volvic +onelove420 +pink45 +drugs1 +12071979 +17011982 +198926 +pirates! +password666 +starts +fumanchu +011183 +shithead69 +moonshadow +080284 +fokker +lachen +qwertya +Lol123 +gerard123 +redrock1 +220795 +fermat +toyplanet +couture1 +apfelbaum +newlife2010 +buddy17 +A1b2c3d4 +25202520 +mutley1 +crazy17 +mariajose1 +130778 +fake69 +23081995 +250576 +trouble! +21111994 +26021994 +honeygirl +kontol123 +geometry +beauregard +24051981 +secret1234 +reveal +hallo! +jasmin2 +02061976 +231456 +13051995 +23262326 +luismi +vikings2 +020678 +24071981 +09111982 +90 +120397 +22101995 +scarface11 +juicy12 +teddie1 +kazakova +fluff +coffee! +199113 +280494 +shawn11 +asakapa123 +kinga1 +breakers +number27 +iloveryan! +10021978 +99009900 +118811 +MM744m1 +mittens2 +jkl789 +811010 +amy1234 +anna2007 +300494 +nichols1 +monkeyball +paradise2 +hole +05091982 +hockey28 +miller30 +280993 +pointe +akon12 +zaynmalik +FUCK +volvo123 +melody12 +120276 +poopdick1 +250777 +faramir +198815 +07011993 +julia01 +120975 +angelino +dusty12 +bones2 +stella13 +rebenok +120606 +03011993 +hannah77 +1legend +peaches23 +valdivia +tulipa +14081994 +12345678y +pepper24 +reject +kor +sexymom +voldemort1 +25cent +suriname +elbarto +Philipp +russia11 +chicken44 +estela1 +199226 +pintura +otis123 +chanel12 +torcida +lucky4me +allstar11 +manuel. +dragon67 +11111r +shine123 +151076 +nikita99 +31101996 +lastpass +dukedog +danielle6 +flower08 +cristofer +capri1 +myself2 +pathology +1234567890w +manny13 +kayak +02021975 +23032303 +269269 +charlotte3 +michael85 +luvya1 +golddigger +gabriel14 +pitbull5 +mixtape +tochukwu +300381 +hailey04 +lesbo1 +elijah09 +voland +120674 +blume +sucks1 +natnat1 +kaulitz89 +taller +jason19 +gohogs +ciara12 +thomas92 +451451 +evelyn123 +whales1 +fergis +041093 +montauk +05111984 +yomama3 +iloverob1 +161991 +stonehenge +05051977 +22081995 +booboobear +ne +nemo11 +02081995 +13111994 +110220 +mememe12 +read +friend11 +99889988 +KEVIN +goodwill1 +kravchenko +sonika +glorytogod +lynn14 +dmitrij +allison11 +2p76xG2yHV +210977 +arena +LzuDz2xe98 +230974 +19021981 +794613258 +altec1 +dedmoroz +fuckoff01 +maracuja +becca12 +superman55 +600092 +cheese24 +789551 +shanon +aprilia1 +1315 +16071994 +symmetry +zzz000 +houston7 +tabbycat1 +fibonacci +puppy8 +morbid1 +tanner13 +60606060 +dottore +toby10 +130776 +warfreak +welding1 +dance8 +imperia +19841212 +swallow1 +victoria22 +Beauty +111965 +dogtown +140795 +21121995 +lifesgood +cookie19 +30121980 +josema +srbija1 +moody +123456й +160994 +jeff22 +a212121 +eng +manson69 +280979 +lad +russia123 +pimp55 +drake12 +grad2009 +scarface10 +07041980 +3322 +fastback +spongebob12 +�+�������� +400602 +espana1 +getrdone1 +hate2love +trever +christine0 +060483 +woopwoop +babyjames +1loved +cenicienta +mygod1 +caronte +6uldv8 +201175 +30061995 +youaregay1 +mickey05 +220641 +ashley26 +jazzy7 +jamie14 +iloveyu +softball99 +chingching +filudskou +qpalzm123 +hate13 +wesley2 +monae1 +fdfyufhl +230178 +123456789qwert +25061994 +28021980 +02071996 +wilmington +06091994 +111095 +18101981 +333444555 +stupid6 +magdalene +140994 +221222 +13011982 +18061994 +qazplm123 +230196 +12031996 +imsorry +economic +nelinka +dingbat1 +bombon1 +cazzoduro +steroids +carlisle1 +lazy +shake +senior2008 +17071995 +050677 +miller21 +alexzander +akunamatata +faustina +artem1994 +one2three4 +020309 +londonboy +music99 +72nova +jacob16 +barbie18 +saladin +021980 +bubbles18 +pepper77 +favre04 +joshua27 +pantera69 +playboy. +skittles5 +slaughter1 +angel82 +777vlad +20041996 +lindaa +091985 +alex84 +Natasha1 +616616 +922i4Ddebm +glen +adrian17 +cheer23 +gujunpyo +08111983 +katarzyna1 +damien12 +maggie1234 +purple96 +yellow45 +040192 +yunusemre +braeden +urmine +2807 +15511551 +honden +italia06 +311078 +070183 +chevys1 +kjhgfdsa +jordan55 +mengmeng +ranger7 +vaquero +trent123 +22031981 +02101993 +darko +coral1 +plague +241983 +19861011 +mikola +100995 +honda10 +rapala +babyboy17 +balderdash +myhero +milamila +KR6sjhs412 +lolsmileyf +toad +010609 +kokolo +101005 +gtnhjczy +01041977 +03021981 +258036 +rem +drinks +baller9 +brandon0 +19932009 +1zachary +seventy +051989 +mamipapi +ca1234 +Christopher1 +lettuce1 +fatbastard +1q2w3e4r5t6z +fuckaduck1 +20111995 +@123456 +selassie +24061980 +1toyota +fishface1 +sasha14 +111111g +31081994 +qaz123456789 +cheerio1 +Scotland1 +pass_Rrewq +christ777 +13091981 +carmen10 +23252325 +17081995 +piter +GODISGOOD +300881 +agness +bandit! +010379 +Monique +13041980 +mackdaddy1 +karen01 +superpippo +121264 +emily03 +shane13 +maggie77 +2loveyou +emery1 +12291229 +dannielle +heaven08 +220896 +Daniel12 +gotcha! +10041996 +pangitka +trinity6 +chocobo1 +catdaddy1 +babygurl8 +13061978 +180194 +blessme1 +20081981 +buttercup9 +282001 +200395 +peanut88 +SANTOS +GENESIS +290679 +moskau +123456Z +hardware1 +latrell1 +petanque +lacrosse11 +musica2 +sofresh1 +tokunbo +197719 +170779 +hghghg +sabiha +snacks +sasha111 +198318 +winslow1 +hf: +sophie14 +youtube2 +19011980 +louise7 +1bullet +hiphop23 +27071994 +isaiah08 +pf: +sammy17 +happy2011 +powerranger +25051975 +halo21 +tbird1 +larenga +etienne1 +2blueeyes +ronald2 +2hdq6c9aZV +Pandora +asdf;lkj +jesusrules +fidel +10091994 +hubble +08031981 +dorky1 +vlad1234 +010777 +240878 +031277 +bushman +akeem1 +120203 +pituca +20031994 +penguin8 +abbeyroad +aracely1 +wazup +140495 +maria07 +hotspot +charlie27 +success09 +dinadina +POOHBEAR +isabella11 +perez123 +smiley14 +tolits +florcita +1frankie +satguru +esenin +lollipop13 +pepper06 +aubree +jonson +22101978 +lugnut +zachary13 +050596 +nectar2011 +beyonce12 +barbie6 +david111 +soukaina +050708 +santi1 +love000 +26081980 +cameron99 +4040782as +placement +mexico2010 +vavava +010294 +420high +little11 +2213 +dorita +natalja +toothpick1 +cms123 +Sternchen +fire01 +VALERIA +patou +kerberos +15111978 +skittles4 +michigan12 +nbalive +reddwarf1 +shane3 +29101981 +bubba08 +king666 +06021993 +131983 +pimpin24 +farmgirl +rawr13 +JULIAN +rf: +230278 +asdfghjkl12345 +01121981 +1carmen +olivia03 +reaper2 +1918 +180680 +pupetta +robert26 +adidas21 +dimmuborgir +olympique +pimp100 +boater +090509 +gosling +retsam +annita +gravy1 +mollie01 +sexboy +joe101 +jkmxbr +nexus1 +290396 +mojehaslo +130178 +august02 +botas76 +shipra +23101996 +spencer01 +catdog5 +123456789101 +satan123 +macondo +agostina +starmoon +blackandwhite +ewan +evolve +omega12 +junior00 +elephant5 +18101995 +ilovesos +02081978 +pipetka +brookside +simple11 +matt09 +warrior11 +khattak +011079 +19851012 +drevil +foghorn +gerard2 +ferdinando +master0 +faisal123 +12wq12wq +301195 +1fuckme +rediffmail +appaamma +swampy +gangsta10 +pop101 +cassey1 +redboy1 +snowdog +pinky10 +unloved1 +richard14 +east +26091982 +salami1 +password420 +loader +sadies +miahamm9 +200999 +080384 +260695 +poppop123 +pintoo +19861210 +copeland1 +1A2B3C +26021980 +24081980 +h1h1h1 +1913 +kinjal +ibiza1 +наташа +06041994 +19851025 +idonthave1 +08111992 +emma04 +210176 +iloveboobs +brooklyn22 +htlbcrf +mancini +140296 +mexican7 +shawn3 +gohome1 +560084 +heyyou2 +myboo2 +160101 +290381 +destiny14 +urthe1 +taktak +billiejean +94mustang +saints11 +Liberty1 +setsuna +121212s +yanayana +hakima +blinky1 +21011995 +gunner11 +shelby500 +solovey +jasper21 +Terminator +michelle77 +shiner1 +15951 +03121993 +jaded1 +02041996 +sister5 +JesusChrist +ariana12 +7children +firecracker +sdsadEE23 +gman +93mustang +lincoln2 +aiden08 +1234zx +godhelpme1 +jessica77 +q1w2e3r4t +northeast1 +09041994 +dubois +kluivert +wrong1 +m0nst3r +eatshit! +090809 +79ford +132132132 +789012 +jazzy10 +anneliese +14021979 +amin123 +pink86 +daniela13 +naruto55 +honeycoh +silvina +04011982 +dancer88 +ba +chelita +197510 +0109 +limelight +sukanya +coolio! +elfriede +fatman12 +Honda +131996 +140594 +angel555 +1miguel +26091995 +Molly123 +red222 +1234545 +dolphin! +gjyjxrf +rene12 +13501350 +karatekid1 +040283 +123456787 +sativa1 +love68 +12061979 +freerider +231076 +tubgtn +parazit +jamie22 +krokus +Paladin +allgood1 +17031980 +030182 +kelsey10 +Frank +25081995 +morgana1 +1326 +player16 +29051982 +ela +powwow +gamers1 +bas123 +manuelita +coondog1 +ulyana +ghghgh1 +jessie23 +krysta +wer138 +alina1995 +RAYMOND +squires +ellabella1 +freedom. +bubbadog +steph22 +010396 +150295 +fresh101 +136479 +bradley3 +071180 +buckie +sandra3 +nemonemo +31101978 +frostbite +donjuan1 +13021994 +thuglove1 +sharkey +success01 +lola10 +dreams12 +��+����+��� +fall2008 +baloch +29061995 +cooldog +cocobean +pussy666 +bassline +blastoff +patsy +andra +wasalak +281295 +200694 +billy6 +25302530 +12481248 +chloedog +230778 +777777q +sunnyd1 +caffeine +steve0 +220294 +taitai +lagata +liverpool01 +nokia8210 +0409 +31122009 +010678 +puppies4 +30071982 +06021980 +djtiesto +rivendell +mark09 +198699 +10021996 +PnUfSci218 +laura14 +dodgers123 +floricienta +515051 +136900 +wildwest +02061975 +210995 +severina +angel1992 +gogreen1 +tristan3 +nicky12 +family03 +thunder21 +princesa2 +284655 +201986 +jawa350 +300695 +basketball22 +glenn123 +NOAdmin +n.kmgfy +ashly1 +bosna1 +bitchass2 +29031994 +050509 +hackme +nermin +30051995 +4201 +pass00 +vicky12 +151295 +demonyo +justin97 +babebabe +megaman12 +112007 +ole +sosweet +indya123D +anteater +star100 +234589 +queen7 +gtnhjdyf +vinny123 +sunburst +784533 +cool33 +will23 +housewife +illegal +carson123 +rhfcyjzhcr +grandslam +maxito +killie +sreedevi +dallas14 +md1234 +breakfast1 +threegirls +janela +Phillip +jacob03 +tacobell12 +puppup +boonie +gor +04081979 +lewis12 +13111993 +030980 +nympho +201308 +gwadada +password41 +123456789asdf +3q2w3e4r3t +102288 +purple29 +stratocast +ichbin +anal69 +jason05 +2016 +account123 +dani3l +061079 +walkitout1 +tango2 +waterlily +milla +corona2 +diesel2 +gangster11 +amoree +3Odi55ngxB +carolina5 +twins08 +kaden +111275 +2gangsta +hannan +29101980 +adam07 +06031993 +lavidaloca +sniper2 +riley7 +16111981 +money007 +yukiko +odysseus +frankenstein +harsh +g123098 +fitter +ninja101 +bubbl3s +parade +minty1 +noah11 +myzoosk +alec +hotmail3 +KytFy2xd97 +19031995 +libra10 +021989 +spiderweb +suleiman +12031997 +waiting4u +deusex +repent +alabama3 +110496 +tennis4 +iceicebaby +alyssia +27041981 +lizeth1 +123456jk +150577 +08061994 +Konstantin +rose69 +1outlaw +amelia12 +callan +luk +lee1993 +buttons123 +jack2006 +110999 +happy. +111076 +darvin +189189 +lotus7 +kovaleva +25121994 +chevron +120775 +google9 +kenzie123 +marina22 +180993 +bitch27 +mama07 +badass23 +pumpum +merced209 +green28 +160679 +dogstar +04051994 +123qwe4 +emmie1 +02111981 +gena +bhabycoh +montez +20051977 +123456rr +111111A +loveyou143 +wwe4life +pornporn +13151315 +dane +benedict1 +martin07 +sweetpie +bunny4 +nene15 +6grandkids +princess85 +123456am +19821984 +discreet +pink96 +cholo +carter4 +Sidney +sender +villeneuve +applejacks +zoedog +3355 +niclas +bigdick9 +030495 +eugene2 +mahaveer +11081978 +14061980 +shisha +23111979 +brandon88 +click123 +brianna! +050281 +crabby1 +jelly2 +davenport1 +chocolate11 +arc +martins1 +ram2500 +221993 +kelvin123 +1snowman +grace4 +bananarama +florida01 +everlastin +blakey +020192 +wol +jayasree +oliver14 +11341134 +hermes1 +pavlenko +010277 +lovesexy +to +19841011 +lovehurts3 +peanut03 +31081981 +payaso13 +joseph03 +SPONGEBOB +angely +renesmee +aaron09 +loser00 +16051996 +aristo +volley12 +montydog +thierry1 +Monkey12 +Bulldog +101298 +1358 +ashu +ayushi +norman123 +theone12 +201007 +priceless1 +loco22 +030595 +ceres +20021978 +090493 +1bigpimp +tijger3417 +banana6 +dream5 +punk01 +rachel9 +giants123 +120673 +dbrf +180195 +bighead2 +280898 +1qw21qw2 +halfmoon +taylor33 +130296 +badoo.com +richard. +double7 +yay123 +laketahoe +cookie55 +29031981 +mayotte +vivivi +woodward1 +2bananas +northwood +gemgem +suzuki1000 +4yfb2S753D +19051977 +ayman2008 +121201 +hecfkrf +lotusnotes +abril +czz000000 +hazard1 +198002 +mightymouse +010173 +05111981 +10021977 +playstation1 +jedidiah +simone11 +199614 +soufeliz +georgiy +mooney1 +jumpstyle +kerri1 +darknes +fylhttdf +layouts123 +g76u94prm4 +13031996 +surfboard1 +270379 +12121974 +230396 +silva123 +balla3 +qq112233 +katinas +16061978 +260496 +cowboy5 +pinklover +19021996 +ch123456 +ghgh +wicca1 +Friend +18031995 +martin88 +deedeedee1 +01031976 +07101982 +ricky7 +trustno2 +poop55 +notime +gg1234 +25111978 +secret10 +18101980 +malia1 +shinedown +10051978 +11081976 +13541354 +123258789 +king360 +knight2 +darius12 +love2sing +15041978 +3password +Houston +preston123 +vball11 +assass2 +25041981 +02041995 +daniel0 +funkymonkey +kaylynn1 +salamon +Kelsey +55555d +ghjcnjqgfhjkm +14111993 +bungee +04081994 +jebise +outcast1 +1cheyenne +killed +shadow87 +03101993 +payroll +Zxcv1234 +hppavilion +bongos +2907 +gigino +gohard1 +november05 +coyotes +5monkeys +qwertyuio9 +barrie +Brooklyn1 +qq000000 +fantasy12 +flint1 +1momma +hotboy5 +t4_Us3r +fordham +290894 +dean12 +12inches +07061982 +chakkara +1010110 +23091981 +adivina +gamess +fishbone1 +angel1990 +lovebug22 +a1sauce +king007 +090880 +lokote13 +153045 +genie +wapwap +bloemen +12345ss +suzuki125 +260794 +PRINCESA +sandgrouse +joints +jeremy15 +isabella4 +010607 +warface +2babyboys +bipolar +alltel1 +yellow44 +041178 +141196 +twilight16 +love1999 +socorro1 +fktdnbyf +viktori +trinity07 +yogurt1 +cupcake9 +linda3 +paris3 +sisi +19861012 +america6 +motita +porcodio1 +100876 +a12344321 +stgeorge +haterz +tetete +seba123 +1fireman +trinity11 +sony11 +mama2008 +889977 +cody16 +music77 +rodney2 +101205 +12891289 +vollyball1 +brown11 +elemental1 +afridi +110057 +zodiak +eleazar +noodles123 +1s2s3s +daili123com +effect +regina12 +victoria14 +red007 +keshia1 +trying +polymer +virtus +milind +jewel123 +poohbear8 +brianna07 +paramore! +amani1 +dani10 +16101994 +wolfenstein +jenny18 +bernardino +anarchist +13021978 +270894 +solitaria +kanye1 +britt09 +martin4 +bubbles88 +literature +wizkhalifa +aceraspire +sherin +ginger00 +insomnia1 +23011994 +pieface +081093 +ghetto12 +freeuser +198107 +brett4 +14111978 +nosoup4u +12e3E456 +andrew97 +monsieur +treeman +larrys +cool18 +sunshine28 +chewy2 +love831 +guero1 +an +ciara2 +evgenij +crips6 +45124512 +inform +disciple1 +kelly14 +112111 +15161516 +04091981 +112911 +olubunmi +yukiyuki +523 +180894 +sexyboy13 +11111977 +antara +babajaga +elvin +nokian80 +honda04 +120598 +261194 +09041982 +popeye123 +31011980 +hutchins +palestina +kikou +jin123 +791010 +gal220 +sunnys +w2e3r4 +19841026 +hammy123 +marsh1 +theonlyone +sexual69 +rosanna1 +030895 +soleil12 +kingarthur +andyouone +19031979 +coolcats +wanjiku +macey1 +lloyd123 +16111980 +600053 +19841986 +bobby! +skate01 +gagoako +210877 +13041995 +hector2 +teller +samsung4 +anna17 +niger1 +strikers +�������+�� +564321 +daddyyanke +tinamarie +azalia +260779 +bonaparte +resident4 +nascar01 +110026 +ukulele +lost4ever +green321 +jeff13 +17041995 +texaco +norcal +jukebox1 +gfhjkmrf +richard6 +kisses7 +thumper123 +sussex +dirty30 +181194 +01111982 +400012 +polilla +199105 +mineonly +maintenance +star87 +hardcore. +3bears +ty123456 +24021980 +so +jayden02 +hanako +volimte1 +partridge +cloud99 +ball1n +141982 +starlet1 +bulldog22 +dylan03 +nhoemnhieu +micha3l +051277 +tennis09 +Apples +cynthia12 +120699 +290978 +26041980 +iluvyou! +muaythai1 +dupadupa1 +huracan +yummie +01011964 +jonathan08 +polska2 +911007 +05071994 +buknoy +urchin +oconnor +Peaches1 +11112011 +janiyah1 +birdbird +bigshot +takishima +vlasov +xuanxuan +interiors +truelove7 +raven6 +anshuman +000021 +knight11 +faith06 +qwe123rty456 +marita1 +promotion1 +life13 +bible123 +thundercats +megan21 +bigtits69 +1235689 +rubicon1 +trudy1 +14121978 +shadmoss1 +bundeswehr +040579 +sarah8 +crazygurl1 +pussycat2 +141095 +cantona07 +08111989 +clones +SARAH +oliver07 +conflict +thales +luna01 +danyelle +george. +prudence1 +samuel21 +lilmama11 +050293 +bonneville +260895 +usharani +barrington +668668 +28081981 +131177 +michelle30 +woohoo! +thisisgay +alexis1234 +13666 +28071994 +c0urtney +R5GNqyRr +wembley +peanut17 +dreamworld +01091978 +change08 +123king +260279 +sarah88 +saralee +18121996 +kelantan +beerme +sexii12 +dogboy1 +horace1 +christine8 +acmilan1899 +sandy10 +harley24 +xk45xDxCYR +danny09 +patrick07 +master07 +braceface1 +boylover1 +28051994 +mistydog +krish +27011982 +douglas12 +091081 +cupcakes12 +fucku21 +amanda101 +killer98 +july1985 +16121979 +08121981 +kitkat11 +flor +studentka +dennys +myspace85 +zayzay +sherzod +appelsap +pooping1 +bentley2 +7001850 +200220 +031195 +yahoo12345 +riley07 +hakkinen +braves12 +Love1234 +green32 +singer2 +lovelove3 +wildcats14 +diva23 +17071977 +080895 +struppi +ALEJANDRA +12081979 +sister4 +dustin3 +ihateyou22 +thomas98 +freitag +010172 +g86u94psn5 +159753159 +021295 +lupita13 +fun4all +carlos! +11101978 +werock! +1236987450 +mo +kondom +0902 +prince14 +fevral +blackveilb +1422 +nadiya +�+���������� +19881010 +cycling +lovehurt +6323463 +hacked123 +hunting123 +230808 +bella9 +1wifey +trieste +angel1993 +galindo +220194 +lissette1 +baseball04 +redneck7 +ilove18 +sca +080380 +111197 +tom12345 +ilovelee +qazwsx! +justice4 +raccoon1 +gunot1 +010208 +gfhjkm11 +notengo +cacaboudin +rke: +vika1997 +teddybear! +hip +kel123 +lynn10 +ginger17 +minnie10 +flavour +ferarri +millie11 +lala16 +mmmmmmm1 +snoopy77 +vampire! +sundrop +loveme77 +7896 +punkrock10 +alternativa +democrat +xxx007 +13071995 +1212345 +allen13 +people7 +bear1 +july1983 +marco13 +cessna152 +clarkkent1 +x100pre +18081981 +samuel100 +truskawka +ysabel +hardhead +190893 +heather. +2527 +10002000 +260577 +corona69 +161177 +barfield13 +ashlee12 +12111979 +slainte +check12 +vallejo1 +troubled1 +adam06 +09051993 +fosho1 +199310 +misiu1 +nursery +boyz +butter01 +harimau +kabuto +pepper15 +lmao +basketball123 +zardoz +beast13 +060293 +23031980 +TRUSTNO1 +alekseev +pepite +140978 +july1984 +iseeyou2 +stanger +080283 +rachel99 +dr1234 +february20 +marvellous +vitor +victoria123 +12wqasxz +12101978 +121224 +18011980 +space1999 +ninja6 +sinsin +fakename +castanha1 +kancil +111096 +martinez2 +benjamin4 +akamaru +1tattoo +leeroy1 +mario6 +dreams. +170595 +papino +mexican14 +sundaram +trustno +atljhjdf +rosso +meetme +221095 +jackass22 +victor15 +finn +poilkjmnb +matamata +19861028 +hello18 +160578 +ferris1 +tony88 +04021994 +15101978 +16021996 +missy69 +homegrown +eatpussy69 +15081977 +evildead1 +acb123 +diogenes +talented +nirvana69 +cheeko +gotenks1 +chapin1 +aaliyah5 +deagle +121212m +dragon34 +cracker123 +sugarpie1 +greenday14 +brooklyn07 +QWEASD +commerce1 +pastry +dobber +cows123 +06091980 +chihiro +tati123 +brillo +gary1234 +huanhuan +aaron18 +bronx718 +southside0 +flower88 +naynay123 +hawaii7 +jasmine02 +12071996 +2325 +tuwo4u9 +1piece +143iloveyo +280794 +cabrones +monkey31 +jhonny1 +mondragon +unicorn12 +sunflower5 +123456789zzz +chunchun +sj811212 +bananna +0402 +sexisfun +allaha +aikman08 +segura88 +101108 +hanifa +magelang +cena619 +jess23 +050493 +08051993 +190695 +eltoro +joking1 +tampon +tecnologia +winkle +6666666666EMPULGARA +180495 +mario9 +alo123 +anime4ever +smriti +Wow12345 +fuckoff23 +Aurelie +mikesch +alive +25121977 +bmxbmx +280194 +199710 +150277 +japorms +07091981 +kasper123 +faye +010295 +qweqwe11 +brayan1 +1234567897 +space3 +���+������� +119 +xiaoyao +19911992 +sassafras +nurudeen +26111994 +valeron +2bon2b +160279 +redsox! +baby98 +camera12 +diosteama +Blink1234 +brianna14 +garth +1christmas +maricon1 +skins1 +welcome@123 +27021982 +101972 +chivas22 +0704 +player! +sallie1 +kool1234 +carolina3 +172737 +eminem6 +chan123 +memememe1 +angels. +fakepage1 +lineup1 +farkas +walid +25101978 +angel83 +kapoor +himani +26081994 +170895 +surfer123 +swordfis +aksaray +freewill +Dancer +120303 +cool00 +0077 +GRACE +varela +keparat +trade +rtyuio +fisioterapia +bullets1 +smile8 +elshadai +vika1994 +gameboy2 +hundred +poop77 +gas +my4babies +slayer11 +liver1 +win2000 +goodluck123 +301278 +parkside1 +abdulaziz +balaton +comandante +loveme99 +11031996 +lucio +trompeta +19851218 +stefania1 +sasuke23 +071987 +����������� +198809 +friend7 +magnet1 +mikey22 +161294 +29071980 +playful +15121978 +arthur01 +garry1 +tester12 +changa +020208 +badboy9 +banana8 +ind +bluered +homosexual +garcia2 +05091979 +alihan +giveme +rebelde6 +klasse +shannon10 +n00dles +02081974 +carbone +WINNER +198826 +slick123 +22022002 +canada10 +Little +bigsister1 +maybach +hunter28 +guera1 +mandar +midnight4 +010677 +sandra21 +19899891 +singer12 +joven +britty1 +mikolaj1 +fifa2007 +orange09 +laurab +sierra3 +clo +ybyjxrf +fuckme21 +bagong +judy123 +jason101 +blake01 +freefree1 +mahalkita2 +corsa1 +230373 +mike32 +Love123 +14081980 +16021981 +husain +190579 +19861111 +canada99 +12monkey +stupidgirl +010495 +cooper4 +jojo09 +coochie +katydid +cupcake01 +qwertzu1 +301093 +dallastx +andrea19 +cateyes +bubba16 +maremare +beauty11 +432432 +630630 +frusciante +w2e3r4t5 +sailaja +20011978 +augsburg +1213456 +atenea +sacha1 +lama +rootbeer2 +blackmoon +football38 +1234321a +427cobra +diva22 +030409 +271988 +020595 +angels8 +moomoo3 +nichole3 +1428 +miramira +19081981 +bball9 +prometeo +958506 +sandra15 +metal13 +dolphine +sumner +riddhi +dash +ytrhjvfyn +kisses11 +0509 +rip123 +amc123 +174174 +HOTMAIL +qwert55 +kitten10 +ashley33 +lizard123 +kisses22 +26031996 +mudkip +040293 +280780 +130277 +mobila +mylife3 +y0mama +suka +chucky123 +alleniverson +joker18 +steve-o +23021978 +09061995 +trippy +pussy07 +06061978 +nova123 +lfplhfgthvf +snowflakes +19101980 +towanda +s000000 +diva14 +tw1l1ght +050995 +24021981 +chuy123 +170478 +260178 +alex100 +lancome +maribeth +2monkey +happy2be +srilanka1 +eybdth +patrick24 +3ZibUVmRx6 +finch +grace777 +wwe1234 +abracadabr +230377 +fauzan +131275 +240379 +07121981 +Cristina +081179 +oleg1995 +watermelon1 +ellamae +rellik +littlebit2 +mateuszek +bitchnigga +connor5 +multipla +asdflkj +anarquia +190577 +michael96 +04111980 +18061979 +checker1 +teddy22 +fuckthissh +suburban1 +rocknroll2 +iloveanna1 +casper14 +hardy123 +poohbear9 +100700 +841023 +catchme +gonoles +tou +vote4pedro +backoff1 +osman123 +1goodgirl +vencedor +311095 +131176 +ashford +06101994 +gatonegro +pookie14 +salvaje +avelino +orchard1 +paterson1 +cholo123 +bodyshop +11111l +willi1 +redbull2 +terorist +07081981 +july1994 +181295 +10121977 +15061979 +������-�����������-+���� +magic01 +171178 +199102 +040806 +emily18 +burton12 +280279 +trell1 +missy23 +boopie +gznybwf +harddick +080596 +monique5 +1234678 +102103 +261295 +12340000 +2simple +spawn666 +Johnson1 +headstrong +cuppycake1 +21111993 +reborn1 +algebra2 +080193 +icecream22 +cowboys4 +maluca +chris98 +12345665 +010204 +vulkan +888889 +lia123 +grind1 +16121612 +cathie +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +parrotlet +dinosaurs +HarryPotter +271989 +slickrick +010595 +liu123 +hunnie1 +animals12 +maples +16041980 +determined +ранетки +dokken +020379 +7550055 +lkj123 +superbike +katie1234 +password52 +05031980 +258123 +ichbincool +jesse23 +buffy12 +240478 +Sonnenblume +flaquito +searcher +mahindra +dupa666 +lol123456789 +deep123 +sophie21 +26031980 +angrybirds +lesbo +cobras1 +angela15 +200805 +kimberly10 +skate21 +dan1elle +darkshadow +drago1 +Allison1 +123456789lol +steinway +07011982 +271079 +simba7 +100908 +25061981 +carolina01 +bianca11 +ryan25 +261293 +impression +170707 +rose08 +060992 +4123 +lll123 +lovestar +miguel18 +400094 +malditah +16051981 +180694 +daddio +crazy24 +dakota03 +maxie123 +250396 +nancy2 +sofija +19861214 +qwerty95 +ihateme +19221922 +carrie123 +titanic123 +13091995 +010795 +070878 +qwertasd +aq1234 +jeff23 +08021995 +airwalk1 +Adidas +jgthfnjh +tyler98 +1californi +damian01 +krysta1 +13245 +199505 +kraftwerk +291194 +vissen +fatdog1 +basbas +pascua +2bFiy28byL +uzbekistan +���������� +disney! +houston5 +tigger68 +mizpah +dmband +4horses +nok +pixiedust1 +246855 +bears12 +draken +golosa +020507 +iceman7 +199323 +brandon03 +orange08 +charlie33 +CORVETTE +zzz777 +lesbiana +230496 +89chevy +16111994 +santana2 +olinda +mama77 +pepsi01 +07041994 +shotta1 +15041979 +12589 +drift +190505 +12071977 +raiders07 +lolote +25082508 +jazzy08 +120707 +andrew95 +0301 +paxton1 +password.. +bigcountry +skull123 +270695 +lehman +rjrfrjkf +modern1 +19861026 +seetha +2580123 +kelly21 +24112411 +13thirteen +Tristan1 +Captain +harleyd1 +dolphin69 +MICHAEL1 +kitten6 +281277 +shaner +tristan12 +renee01 +puttputt +parker09 +FUCKOFF +baller! +tampico +260394 +cpt310 +alisia +anil123 +05041982 +Celine +230677 +nagasaki +carl0s +legoman1 +prince08 +aleksik +hernando +07021995 +roddick +murena +motorsport +gogetter +germany2 +0906 +google21 +120404 +mygirl2 +montego +anthony33 +10101976 +tenchu +jackandjill +25071993 +babygirls2 +1rocky +alexis. +karavan +2a2a2a +persian1 +!qazzaq1 +harpoon +27061980 +amonra +zadrot +270194 +zipzip +hfccdtn +190180 +German +230876 +angels77 +131276 +mark24 +198877 +crazylady1 +chinwe +020577 +01031979 +salvador12 +080480 +yankee123 +peppy +221174 +Taylor1 +remrem +04091982 +09071994 +thomas95 +23051996 +198719871987 +gabe12 +balou +muffdiver +lilita +731731 +batmonh +198217 +aiden2 +smokey08 +bhuvana +peanut02 +ahjkjdf +cheyenne7 +1strawberr +10011979 +040594 +damage1 +airborne82 +tgtgtg +29071994 +poop88 +romo09 +10102008 +toystory2 +i<:3you +Shirley +password35 +14041977 +24011981 +23071979 +вероника +09061982 +irule123 +chris44 +260595 +maya1234 +alex1976 +aquinas +130697 +shorty. +america17 +saved +regan1 +chuchi1 +nedved11 +tinka +nathan. +elizabeth12 +trabajo1 +silvana1 +mailme +292513 +jill123 +lz110110 +ilovejen +natalie10 +160606 +963741852 +delta7 +569874123 +money56 +walhalla +020180 +250277 +solecito +mambo1 +1kayla +asdfjkl123 +interdit +abbaabba +polkadots +calvin11 +Flowers +enfermagem +160478 +esponja +markov +pikmin +kikiki1 +500011 +12021977 +fullerton +rebel9 +621621 +safrane +Airforce1 +dontae1 +morgan00 +04031980 +231075 +habitat1 +spencer11 +mnbmnb +vincent5 +emi123 +horse5 +tree11 +shadow03 +mati123 +andrew96 +steph01 +juvenile1 +lemonlime1 +fifty +20062009 +181193 +23212321 +loveyou01 +sammi123 +02091977 +olivia23 +2500hd +idon'tknow +daniela. +missy4 +shawn13 +180576 +bryan11 +fucker23 +maverick7 +love411 +lynn23 +obi4amte +langer +04091980 +andy14 +override +brittany20 +angeldevil +19831120 +170295 +susie123 +24011993 +kristen7 +dancers1 +relation +abby07 +ajedrez +david30 +26051980 +pavlina +cherry07 +bucks +bunny8 +clutch1 +040496 +Default05 +andy15 +fanatik +toohot1 +Elephant +ilovejim +salma123 +increase +260993 +theron +newyork6 +brooke09 +23041979 +Paradise +Cricket +turkish1 +b43n6whifd +alejandro5 +tahira +sweety3 +21121979 +essendon1 +sydney3 +snowman3 +t111111 +193755 +tiny13 +hpotter +198914 +200666 +31133113 +carton +sexygirl7 +akira123 +shitass +macca1 +badtrip +kevin25 +13021981 +270195 +play4fun +6flags +gendarme +whatitdo +offthewall +motherfucker1 +iloveme15 +vegetable +500007 +paracetamol +cutie4life +bobbi +jovan1 +redblood +14081996 +krishnaa +h00ters +140578 +powermax +sammie3 +010306 +nevergiveu +hoping +shitter +babycakes! +charles23 +vixen +120809 +biteme22 +chicago13 +dave01 +grace10 +tits69 +toogood +hack123 +peanut18 +pagan1 +polkaudio1 +2125 +270478 +scorpian +ilovejimmy +qwe098 +bigears +karen10 +yes90125 +karito +fight123 +fever +nanny123 +�������� +derbeder +creature1 +vinay +131619 +1234546 +ujkjdjkjvrf +brian1234 +dodgers5 +connie12 +161990 +557733 +mykonos +crocodile1 +200794 +280995 +gordie +01071979 +167349 +theking12 +qwerty1989 +hamza1 +darkwing +ferrum +pookie4 +ladybug10 +aj12345 +flyers88 +191179 +ricky3 +ilovewill1 +marie87 +salocin +200495 +cutey +ruffus +sniper13 +garcia10 +sabiduria +oscar15 +austin1234 +quarter1 +bullock +joana1 +sarahg +000000aa +21121977 +naruto45 +mariposa7 +success08 +600088 +marcos13 +pussy18 +mcleod +151994 +fuckem1 +samuel99 +123asdfg +chacha2 +lilly11 +boston21 +fashion7 +lulu10 +rainbow14 +lunatik +040782 +16011980 +051294 +chitti +fuck24 +hazmat +meinschatz +ds123456 +lovely101 +020794 +fatboi1 +player8 +marshmello +coco07 +131981 +alannah1 +01200120 +nutcracker +112006 +lplplp +shelbie1 +150696 +matrix21 +010981 +loser4life +912912 +13091996 +ilovemycat +031079 +fashionista +mybabies1 +301293 +kar123 +080186 +100676 +power6 +vanessa8 +bbc123 +katie9 +mexican5 +tupac96 +19861988 +tiger111 +actor1 +03041978 +23love +120297 +801122 +h1xp2z2duk +010205 +emma99 +kyle15 +moonflower +monkeyballs +qazokm +betsie +ktrcec +ybhdfyf +qaywsx123 +latinking5 +cars1234 +terrell2 +k.,bvsq +prapor +iluvmom1 +030181 +isaiah11 +zeratul +199422 +aaron4 +coocoo1 +renee14 +220779 +sandra69 +contender +300893 +ivory +251259a +1vincent +240795 +hadoken +10041997 +samia +honey06 +astro123 +abbas +190780 +lateralus1 +bobbyboy +heart7 +sissie +rossoneri +881122 +puto +demarco +04021980 +asdfzxcv1 +bitch34 +Max +zane +seedsnipe +meadows1 +peanut77 +ryan02 +myword +mike2009 +5324 +worldwar +260495 +manchester123 +03071994 +nrfxtyrj +dublin22 +college08 +brownbear +cbr1100xx +lilwayne10 +land +babyb1 +29051995 +monaco1 +sabian1 +12string +257257 +rawhide +muthoni +bocman +MERLIN +darjeeling +deception +inspired +wakeup1 +01031996 +220196 +hendrix69 +ska123 +111196 +sasha23 +251001 +riley06 +stamper +ranma1 +afganistan +071093 +kaydee +09021994 +30101993 +ytrewq321 +e5FhxkqIBw +heather14 +1234567890l +goldilocks +nokia6610 +110111 +dylan! +digimon123 +BONNIE +teddybear0 +mister123 +bebop +molly06 +040879 +ironhead +kimi +300181 +sikander +badgirl12 +passwordko +hirsch +jackfrost +dontworry +peterpan2 +sunstar +vladka +30081980 +sos +marie28 +monkey111 +curling +dgaf420 +parola33 +googie +2princess +111299 +badboy4 +phish420 +yo123456 +160577 +budda +erikson +honda96 +19851024 +sherry123 +jackman1 +mybabyboy1 +peggy123 +snow1234 +160278 +boss01 +16011995 +teddyboy +king1 +idontknow3 +120500 +242 +31121978 +got +051177 +050180 +coco99 +08051980 +elijah10 +tramp +courier +cthuttdf +lovers9 +123125 +23011982 +1597532468 +13611361 +chidera +iKAa4Kr257 +02071978 +sanju123 +olive123 +081984 +140204 +08111993 +narutofan1 +k1k2k3k4 +kooldude +qwerty1995 +020203 +starbright +samone +hero12 +121966 +shithappen +joejoe123 +fuckbitches +qqqqwwww +disney3 +chevyman1 +yakubu +myspace79 +tupelo +yhj34: +polopo +bailey00 +165165 +hidayat +paper2 +azimut +26071981 +30041979 +0201 +03021995 +pongpong +08031994 +xavier5 +103185 +sonic13 +240496 +maharashtra +decatur +lindsey7 +ethan11 +dolphin01 +barbara12 +nirvana6 +Rascal +Thomas01 +winniethep +junkfood +rambo3 +amigo123 +110497 +otrebor +pato123 +08041980 +01031972 +freemoney +tractors +recycle1 +zachary10 +11031979 +lady10 +wewewewe +jalapeno +renee21 +BABY +230194 +iceman13 +ballen1 +4ever21 +lovespell +WILSON +rockybalboa +coke11 +planner1 +nine11 +28021981 +141193 +73jaGtk4q +061095 +repair +nascar18 +200277 +ramjet +cuteness1 +abc12345678 +thomas26 +onetwo1 +sassy4 +1520 +emelia +sexyback2 +antwerpen +cookies. +warrior5 +cute17 +peligro +henry3 +boogieman1 +19111981 +bigdaddy5 +fafa +samuel23 +0676135313 +angel2011 +lacrosse5 +edhardy1 +abacab +cassanova +abcdefg5 +ashash1 +assmaster +sugarlips +andres2 +040578 +istvan +04081978 +bandit08 +irfan123 +SIMPLE +201200 +rohan1 +25031995 +27101995 +gracie5 +forces +physical +Creative1 +rebus13 +270270 +flash12 +1drpepper +drew13 +grandtheft +kandy +29051979 +kikakika +48151623 +theman69 +iluvsum1 +560002 +557755 +ascension +lilika +011986 +chata1 +lovers6 +cool09 +dalmatian +voldemar +390007 +martin09 +aaliyah4 +10021979 +ittybitty +171294 +sav +cf: +chaching +liver +hannah25 +aaryan +sharpei +eddie11 +velocity1 +28111982 +annabella1 +club +красотка +romeo11 +070594 +3e4r5t6y +10061995 +kikinou +30121981 +ihateschool +07031980 +igromania +090109 +legalize +shannon22 +ilovesteph +crapaud +twotwo +saulito +821126 +dakota00 +11131113 +scooby4 +williams3 +synyster +wow101 +shinoda1 +300593 +andrea77 +sonia12 +thanku +55555b +j3r3my +31081980 +estupida +1cricket +197310 +punyeta +lebronjames23 +16011983 +mikomiko +heloisa +dashawn +anaisabel +lokoporti +bmw530 +sunshine55 +lilac +270795 +gracie! +841010 +��� +supersport +sex111 +america18 +bubu123 +mossyoak +221276 +strawberri +kahlua1 +godblessu +onelove. +jesus05 +chick12 +yoruba +chris86 +ward +westminster +4000 +hester1 +eggroll1 +ktyfktyf +19931994 +janis +phoebe123 +shiver +241241 +123468 +22011980 +myindia +dmitriev +14111994 +050381 +zxcvbnm3 +gnaget +golf72 +18081995 +lfiflfif +omnislash +cartman2 +liyana +4gotten +счастье +lanier +cacat123 +seedorf +28081995 +findjob +iro4ka +gothic13 +2wWerty1 +bigdicks +781007 +badboy09 +brasov +28091994 +rfpzdrf +Hailey +cnhfcnm +19861016 +pikolo +alexandra9 +mistero +04101994 +021294 +nomoney +brooklyn13 +P4ssword +scruffy2 +sammy99 +14061994 +disney07 +030877 +0108 +070770 +sammy18 +player07 +060109 +07081994 +14041404 +medrano +cheese33 +33333a +starbaby +gabriel09 +lame123 +11051978 +mechelle +aekara +347347 +lisbon +Inuyasha1 +aa1234567 +michelle00 +pogime +daddy33 +youth +devious +balmoral +yuki +ciclismo +glitter2 +Matilda +170778 +kessler +07071997 +mama24 +stripped +kenney +sub +brandy10 +flores13 +051295 +highwind +misty7 +justin94 +havefaith1 +socc3r +061295 +lubasha +14031996 +missy21 +saba +17061995 +brooke21 +jackass9 +ineedlove +marinamarina +vinvin +fluffy10 +171077 +northeast +danette +020276 +vball10 +sushant +shadow45 +herohero +carebear3 +ally12 +isabella07 +emma2003 +15021502 +123.abc +millionair +scroll1 +181208q +lionking2 +1234hi +lumber1 +cycle +1doggie +kevinm +unlucky +unlucky1 +baumhaus +abcde5 +baseball35 +tati +meisha +alices +apple88 +wanted123 +thering +scott5 +kaylynn +motorola12 +fishie +heartbeat1 +innovision +280295 +unodostres +281276 +paciencia +2inlove +gang +999990 +ssj4goku +02011979 +050480 +sphere +forzaitalia +dingo123 +kelsea +eminem4 +250877 +direction +09111984 +hayleigh +coaster1 +zacefron14 +thecool1 +macchia +danielle20 +jaguar123 +080793 +miracle2 +24091981 +guevara1 +italia2006 +james2008 +arsenal09 +02041976 +712712 +raine +cagney +080287 +bulldogs7 +x1234567 +Kinder +������+�� +313 +07021993 +73737373 +knopochka +acdc1234 +26111979 +5841314521 +azulazul +west11 +noneya1 +takoyaki +liana1 +welkom1 +killer911 +ipod13 +666425 +pino +Chance +051983 +babybash1 +greyson +adaada +rahul1 +audio +sex247 +blockbuster +sb123456 +permanent +redarmy +djembe +metal12 +jasmine69 +spicey1 +sasha1988 +263263 +kongkong +lexis1 +smeghead1 +kissme13 +master16 +12d8a377 +dragonlady +anastasya +luckyduck +pass4word +321654a +ashton01 +ganjubas +lovebug11 +141995 +southend1 +purple93 +20041976 +razors +clayton2 +loverlover +ewelinka +campioni +hannie +dnangel +25091979 +lasvegas12 +boston08 +120574 +slifer +redzone +butterfing +estrella7 +wolf22 +rfrfrf +789456m +nessa12 +red789 +gourmet +290478 +mason07 +sergant +1236951 +eloelo +210595 +fireandice +03101980 +paris7 +ionel23 +benjie1 +mellon1 +malboro1 +telaviv +jess69 +nobiles +buster. +fiamma +12021997 +happyman1 +21121996 +sonics1 +freedom101 +miami23 +Bethany +sairam1 +hermana +nick1 +johndavid +110066 +busted! +che123 +dolphin23 +summer44 +150779 +2fine4u +14051979 +223456789 +stonecold3 +63impala +babigurl +cintasejat +DEXTER +what1234 +jessica26 +1rocker +260994 +joker1234 +zoosk.com +dome +brianna08 +rosinha +vir +jackjill +010477 +pennylane1 +190394 +shitbag +281989 +hunter27 +omega5 +02011978 +maggie101 +shay11 +babyboo7 +sonnie +miguel5 +dakota69 +clyde123 +gizmo10 +nyknicks +11021997 +macario +glock21 +220395 +jonas15 +cubanita +01011963 +???????????? +saipan670 +050979 +mynigga +norman12 +gangsta15 +niners49 +slammer1 +sveto4ka +171093 +tink69 +310196 +bubba8 +15081978 +element0 +inchallah +quilmes +oficina +pimboli +peaches09 +dakota8 +fuck123456 +ptktysq +isidore +mobius +gman123 +mirabella +goosey +pimps +joshua97 +52105210 +dhtlbyf +noodle2 +zhanghao +marika1 +poopy6 +k7777777 +andersson +lovers101 +270694 +070493 +matilde1 +14091980 +mizzou1 +qazzaq123 +401202 +21031978 +12031979 +kayla05 +scarface21 +bingoo +123ewqasdcxz +goodsex +dragons7 +loveandhate +cutey1 +13101979 +ass123456 +dallas31 +farrah1 +Willie +081193 +mystuff1 +17011994 +091080 +marcus09 +1931 +steve3 +joseph1234 +sanosuke +diandra +30111994 +toucan +walking1 +gabriel05 +stink +sabinka +apple45 +diarra +mike1985 +timtam +119955 +kitten4 +031177 +puppy! +dolemite +reyna +crazyme +171276 +040982 +anduril +GABRIELA +131978 +ricardo10 +fashionist +mahalakshmi +july1992 +rocky15 +poohbaby1 +nigga15 +17101996 +joey16 +cock12 +drywall1 +31031980 +damnit! +vannessa +muzik1 +pressure1 +banana21 +010308 +28081978 +zola25 +surfing123 +1winston +yourself +zakopane +kimberly01 +insider +aust1n +13031979 +mathew12 +william25 +112011 +qweiop +07091995 +205gti +AVMPWD +199125 +outsiders +hollis1 +ktm450 +ecgt +24011982 +straw1 +weyfvb +2kisses +suka123 +marmara +589589 +polonez +061277 +jaishreeram +buddy05 +blacksabbath +goodbye2 +27031994 +emmylou +yinyang1 +777778 +987654321r +1promise +danika1 +angelitos +omg +160294 +law123 +080595 +200111 +a741852963 +mustang24 +softball03 +18051981 +nameless1 +hitachi1 +pisellone +cameron03 +03071978 +0803 +bratty +sparkle123 +arsch1 +pensacola1 +123monkey +230495 +happy33 +redick4 +290881 +030978 +firewood +280694 +lover12345 +151200 +BRITTANY +2224 +stevenash +teamo11 +pirate13 +aruba1 +ziggy12 +121999 +dollbaby +304304 +QDxzC43gba +vanguard1 +200394 +linwood1 +09021981 +vilnius +291077 +barrio13 +01021977 +hogehoge +yannick1 +18071995 +arsenal3 +james44 +14181418 +gg123456 +tagheuer +25272527 +199229 +crystal6 +nikita1995 +gwapo123 +mymyspace +smile99 +170379 +muffin4 +dauphins +pinklove +yahoo0 +gfhfdjp +snoopy15 +fivestar1 +raiden1 +081987 +25041979 +wilfredo1 +tyler00 +620620 +tyson01 +trumpet2 +warhammer4 +dixiedog1 +danielle17 +ilovemax1 +nono12 +racquel +purpose1 +r00tbeer +bandit21 +asphalt +warhol +2314 +prince69 +555555q +cliffy +zz +demetra +popcorn6 +colton12 +09031982 +newmexico1 +diamond. +amanda02 +kiss1947 +199810 +suvarna +msnmsn +happyhour +rayne1 +gitara1 +killacam +krazy +15091979 +200506 +010281 +07011984 +samuel07 +november09 +romans116 +jason77 +bigdog5 +barbapapa +carmen3 +cap123 +eagles15 +3kids +josh1 +parfait +megan23 +cassidy123 +05121993 +26091980 +gators11 +199525 +denise08 +11081977 +tetley +winter3 +lucas1234 +duane +carnegie +xavier05 +220476 +browndog1 +214dallas +wordpass12 +123apple +14111981 +andrea25 +radhakrishna +viper69 +23041977 +joeblack +federer1 +nikka +smilee +spelling +redskins26 +rad123 +abc123# +beats1 +071207 +christo1 +12081977 +24111980 +13145200 +jazmyn1 +online2 +laika1 +demo123 +jesusmeama +hayden06 +15031979 +armando123 +ioanna +carmen7 +smith2 +mariana2 +19841029 +Nightmare +bulldogs09 +27091995 +folletto +tinkerbell12 +w1954a +120697 +grad2007 +keroro +5432 +stephanie. +hopewell +lizardking +lynnette1 +piggy3 +hoodrich1 +loveindia +06021981 +thirdeye +tuntun +100years +benson123 +11081979 +potenza +papier +ryslan +pooper12 +nene14 +ilovehim22 +flaka1 +010196 +120874 +holdenv8 +010478 +needwork +jack666 +love102 +22002200 +satanic666 +lildude +m987654321 +reunion1 +paula12 +swamphen +01011999 +seriously +azul13 +2qefx7T3sY +alina12 +9900 +mickey19 +ramchandra +playgirl69 +think456 +09091995 +vienna1 +не +jawbreaker +crayons +197319 +w9998999 +3452 +smiley101 +nikita2010 +bringiton1 +kiara12 +1vampire +dragonfly3 +selfmade1 +hawaii05 +cookies23 +280478 +12348878 +iloveme01 +runescape3 +190478 +guess2 +sexybaby2 +m1m2m3m4m5 +latin +chaos13 +17071994 +82airborne +memito +kiki00 +tiffany18 +311001 +ducky2 +babyboys +james30 +gail +LOLITA +10071978 +qianqian +verizon2 +lily13 +bandaid +ayodeji1 +290379 +031178 +ilikepie! +drift1 +pom +myspace31 +margareth +medeiros +nbanba +machoman1 +mahnoor +shadow98 +20091996 +divx +01092008 +nikola123 +amirkhan +cal123 +cubbie1 +maggie17 +william88 +141294 +stefan12 +851010 +abdula +django1 +beauty3 +aurelie1 +selena13 +ltz400 +1alabama +sexythang +1011111 +morgan03 +clover123 +ohshit! +chemicals +poohbear18 +garrett123 +rockwell1 +ringostar +vehvfycr +cradleoffilth +jane1234 +0802 +gameplay +star26 +sexygirl01 +needletail +wewe123 +eric07 +1234!@#$ +kailyn +140207 +miranda7 +arnold123 +rover123 +fuzzball1 +hildegard +winter04 +23111978 +pacman2 +restore +815815 +10041978 +shakal +120907 +justme! +maddog12 +bigdog7 +061982 +vfhvtkflrf +novgorod +jesse. +romance! +mylife08 +alejandra7 +limabean +198529 +queen01 +incognito1 +peyton01 +ihateyou5 +lovespell1 +pharrell +battleship +leolion +freya1 +rafita +keineahnung +beatles2 +florzinha +budapest1 +marilynmanson +joaovitor +04071981 +generals1 +08111982 +ngocanh +244001 +alex83 +shooters +loirinha +zif1313 +sweet88 +29111992 +bluetooth1 +12061978 +1atlanta +fulcrum +tigers69 +lildaddy1 +friends15 +sieben7 +231993 +jason20 +11061995 +franchise1 +r26nnxJx7N +single101 +alana123 +121303 +28061981 +tupac7 +bambucha +current1 +bobbyb +16011994 +t1gg3r +2black +chance22 +wave125 +310180 +jesus27 +goofy13 +ruth123 +291989 +110796 +hola22 +ashland1 +SILVIA +rrr123 +lizette1 +360001 +dreamon1 +papaya1 +brille +greenway +156324 +malena1 +farthead1 +archuleta +bamaboy1 +jhkjdf +jopajopa +11031978 +doremifa +250876 +INDIAN +090581 +momof6 +yahoo6 +1april +childcare +marlee1 +f00bar +jacqui1 +billard +sin666 +adr +deleon1 +1903bjk +edge +ZXC123 +clairebear +ursulet +lkjh +11071996 +loquillo +africa123 +sanchez13 +hyperlite1 +buddy77 +27072007 +20042006 +sneha +301095 +fierce +042108 +epa650 +oscar69 +eumesma +55555t +sorciere +pizzapie1 +chichi11 +24071994 +fkg7h4f3v6 +170878 +julieanne +spider4 +zero000 +crackerjack +skully +jyoti +ludhiana +gabriel23 +hannah95 +rtyfghvbn +nose +bighouse +vader123 +packers123 +blessedbe +shonda +obelisk +booger69 +696969j +qwerty28 +monica15 +271278 +holidaysecure123$ +27021980 +14021977 +145353 +simpleman +divina1 +megan15 +sicherheit +s0ftball +49494949 +skittles14 +vertex +failure +charmin1 +shinedown1 +04041978 +slayer7 +031984 +postoffice +notyou +longfellow +310395 +03071995 +112005 +mike666 +05071980 +jemoeder1 +198588 +gomets +mercury7 +oreo10 +casado +600087 +Madonna +Jehovah +kandi1 +197922 +campos1 +catherine3 +lilmama01 +bert123 +scream123 +siciliano +smokepot +25061978 +killa22 +090482 +224 +fuckem +081181 +ABC123456 +homestead1 +winston3 +weevil +314 +tomlinson +030183 +healthcare +julinha +18091994 +allie12 +emre123 +philly2 +gangsta22 +pumper +hay +bearshare1 +rakesh123 +1veronica +dat123 +parrish +123456al +pegleg +backpack1 +cherry24 +adriana13 +1peewee +lachula1 +awsome12 +101111 +steves +giants08 +080382 +ladyred +11091996 +aero123 +bigdaddy23 +bang123 +window123 +eastcoast1 +reggie11 +310378 +eiffel +friday11 +10031979 +padisco +03021980 +tina15 +123456jr +25121996 +19841028 +dauphine +hanhphuc +lolliepop +110505 +m1cha3l +elmo01 +130278 +password777 +jose09 +along +zxcvbn7 +19851123 +bajsbajs +morgan17 +150576 +jamuna +310779 +adam15 +27021995 +ilovecake +198316 +ytyfdb;e +hybrid1 +northside4 +di +chevy57 +0703 +maddux +funnyman1 +viper7 +Dominique +lovely1234 +logan22 +gemini77 +friend4 +smiley5 +sluts1 +0503 +dc123456 +om +kitty18 +backlash +indya123d +gayman +280895 +cytujdbr +jimmy8 +ashley77 +zachary6 +dgkallday1 +robert03 +10081979 +11111b +08061995 +chelsea06 +forevermor +Password0 +lala69 +colombia10 +roland7859 +slava1 +russell123 +cassie21 +blazeit +gwendolyn1 +volcom5 +Valera +5525 +irock101 +putanginamo +220378 +levi12 +nathen +lukeluke +199101 +susanna1 +420stoner +seahawk1 +darkness0 +jobelle +pizza9 +hagakure +iloveme6 +201014 +iloveshawn +cena +brave +00000m +rabbit13 +rocky09 +titania +168168168 +roland123 +Spongebob +10111977 +1danny +roosje +mama99 +jessjess +united10 +gbrfxe +soccer2010 +666420 +cocker1 +hailey08 +061194 +romanroman +greeny1 +tippmann98 +magnifico +shimmy1 +akusayangkamu +quake4 +lilboy +zhimakaimen +linde +heffer +chicago10 +rain12 +december01 +abby10 +68charger +jeremi +021982 +diana5 +arkangel +cutegurl +741085209630 +sadiemae1 +19841022 +bailey9 +sk8terboi +146146 +dirtbike7 +ladygaga12 +15031996 +heather18 +366366 +angelboy +asterlam +dadsgirl +050380 +baby79 +imtheone +AUGUST +drumset1 +betrayed1 +b696969 +yohana +04081980 +ala123 +lucozade +mymama +1montana +maximus123 +tippy123 +stupid69 +p@55word +siddhu +moose13 +jeremy09 +05051996 +cooling +lover88 +backstreetboys +dun +miley11 +carhartt +bluem00n +091278 +lizards +fritzy +ryan03 +kitties2 +198814 +emily04 +crip66 +16031978 +197930 +jaimataki +wsadwsad +159487263 +best1234 +bigsky +kool13 +club2030 +roxy15 +ringring +jamming +fear +12435687 +reaper69 +caught1 +excal007 +yasmin12 +natacion +ilovedave1 +josh88 +1397 +borat1 +thanh +srisairam +bakura +griffen +bk.irf +no1cares +2519 +211002 +wjsswj +lotte +scooty +chacha12 +hookem1 +102100 +Vladislav +060794 +010508 +apple. +purple30 +15201520 +chucky13 +0125 +travis16 +lovemedo +jarell1 +church2 +kashyap +600032 +poisonivy +republica +300976 +bushido7 +dalmata +23081996 +mitali +130876 +march2009 +notyours1 +sean22 +piss +p1mpin +231175 +crime1 +676869 +271194 +mmmnnn +nausicaa +biondo +20111978 +inventor +yearbook +timmy7 +21314151 +dell22 +lemon12 +060183 +21121978 +linking +din123 +17746052 +210794 +bubba07 +20031978 +17011981 +elmoelmo +baylor1 +kfc123 +151195 +amanda87 +jeff01 +zxcvbnmm +bball08 +perempuan +iceice1 +loli +16091981 +120473 +monster17 +040809 +08111990 +sabrina10 +paintball4 +weedweed1 +BLCKD_SA_UNPAIDFEE_OCT06 +kittens3 +�������� +lucette +060893 +27041980 +lenora +170479 +22051979 +4r5t6y7u +smile14 +justin87 +5Ahc2V875z +Rocky123 +bryony +juan16 +ewqewq +lion1234 +xavier7 +larryboy +mercedes01 +palangga +09031995 +1mouse +melissa09 +massacre1 +baseball42 +bronzewing +foxmulder +pesciolino +maddog123 +sadiya +hebrew +nuttertool +amanda77 +rottie +bugatti1 +violet123 +drumnbass1 +art131313 +050501 +311094 +30303 +batman19 +198220 +asdasd2 +brown5 +030979 +10051977 +simcity4 +27081980 +deshaun1 +touche +sabato +lilbear +06051980 +izabel +february18 +happy2007 +bluebaby +iverson23 +coco24 +chipchip +black33 +031294 +raider13 +pappy +carlos26 +emilien +300379 +0604 +201195 +volleybal1 +bijou1 +crystal14 +booooo +fuck16 +panda01 +daman +kellogg +194 +bogosse +titans12 +trouble7 +freakazoid +pimp44 +super1234 +shanghai1 +astoria1 +140595 +cello1 +morgan24 +111111111q +pretty17 +miamor2 +byyjxrf +american12 +171079 +hellyea1 +daniel55 +tennyson +27031995 +1sexyboy +felipe01 +marcus08 +20091979 +delight1 +27031980 +Italia +adidas5 +figvam +inline +smith89 +shane01 +latrell +14021976 +101203 +duffbeer +090691 +james34 +kazumi +Windows1 +parabellum +198105 +t55555 +1spencer +515000 +sexy777 +theory +terminator2 +25021980 +midtown +050696 +06011994 +040383 +primavera1 +271078 +laboratorio +joedirt +261195 +400088 +zdenek +gangsters +urmom12 +alfaalfa +wapiti +06101982 +mad1son +14011995 +honey101 +football03 +february12 +Maurice +evropa +tucker5 +bigd123 +blaziken +110798 +silver17 +savannah5 +05061979 +poodles1 +mark1 +31121979 +jasm1ne +sunflower4 +linda22 +mama111 +flower33 +29041995 +851212 +kingman1 +catriona +galactica +dang +fenway1 +cab +gerome +lilnigga1 +bennyboy1 +02051975 +abstract1 +chicago21 +280177 +star92 +kilgore +blumentopf +sweetthang +199418 +nonudity! +nuo0725nuo +poppins +11061996 +291079 +mitchy +manman3 +03120312 +maddy2 +020979 +101174 +yfcn. +spider99 +getbent +AcTlG728 +pedro2 +armitage +15995123 +pebbles01 +getcrunk1 +821028 +putra +dewdrop +minnette +santeria +20051979 +tower +kostia +cherif +sprite12 +angpogiko +811025 +love7777 +depeche101 +scott7 +wass123 +110708 +power23 +kassy1 +240977 +141993 +hat +wahoo1 +natalie07 +maddog2 +dtown214 +martin! +bankai1 +200376 +virgo123 +pachuca +redwarbike +400060 +031093 +7e9lNk3fc01 +211095 +18121979 +160295 +09091999 +sylvania +deimos +24071995 +moksha +nagendra +angel1997 +armand1 +121300 +28101977 +radiance +k3ZeDhmExs +badman123 +cowboy23 +sadgirl1 +181095 +adrian09 +tyler95 +wsxwsx +198214 +pljhjdmt +monkeys4 +irish13 +20081977 +aradhana +aaron16 +sameena +nagamani +ricardo07 +july1986 +drilling +findlove +pho +air123 +04051980 +120909 +30121978 +shoot +qazwsxed1 +111111aaa +napoli10 +chris0 +louise21 +jack2010 +11121997 +10061006 +700006 +zach13 +nikol +devin7 +170578 +230596 +yx12345678 +ishaan +evette +may1986 +Robinson +superman26 +sus +lakers4 +macho123 +151196 +friends0 +050805 +xxx12345 +priya1 +missydog +suc +hottie0 +billy1234 +123green +sashadog +kiska +ibarra +hapiness +expresso +sexy456 +06121980 +28111981 +181078 +5element +cenation +TFzwF44idb +tommy21 +aqwzsx123 +bc1234 +101060 +0504 +ohmnamah23 +playplay +Alaska +maggie04 +1593572468 +cubby +jasmin01 +husan0890 +wethepeople +vardan +panocha +bigdad1 +atkins +210177 +canelita +16081995 +pinki +zarazara +laila123 +15101977 +gabrielito +jabberwocky +trapstar +12421242 +QWERT +bigsister +123123p +swagg123 +blood9 +babyjoker1 +henry7 +pearce +poseinfopass +learning1 +jasmine04 +happyness1 +b00mb00m +daddy06 +vania +alpha01 +mercurial +82828282 +100400 +sereno +191194 +solidus +singleton +sonny2 +1carolina +jasonjason +jamesw +ska +c44n6vijfc +farheen +slayer01 +duck11 +haunted1 +myspace56 +ladysman1 +javier23 +pedro10 +iluvu13 +spanky11 +teresa01 +david04 +joel11 +03011982 +198329 +mateus123 +bandit23 +290394 +rererere +nate11 +04101980 +ella12 +applepie12 +brayden08 +bellezza +shakila +catdog22 +trujillo1 +27091980 +visa +1mariah +1hockey +impalass +Jerome +ArlingtonP +novartis +mohan123 +03111981 +jeshua +080508 +251275 +loudog +pokemon69 +5qwerty67890 +291985 +qazxcvb +801010 +3boys1girl +Administrator +shaylee +paige13 +blue87 +821021 +210976 +swimming! +azerty11 +castel +ilovedogs2 +chopper69 +shelby8 +cheat1 +tension +hotrod123 +pacsun1 +godchild +peaches08 +1qazxsw23e +madelaine +kala +rayden +minotaur +scouser +indie1 +010296 +140377 +beachbabe +jackass. +dragon42 +251980 +piscina +ziomek1 +lisette1 +peregrine +mortimer1 +001991 +inuyasha5 +yahoo4 +dont +eleven1 +sanpedro1 +22011994 +caleb01 +050877 +Katrin +25011981 +110797 +hostel +lamont2 +zitrone +blood11 +brooklyn6 +jacks0n +eclipse99 +blue90 +kangaroos +150777 +0501 +bigdog22 +pra +merry1 +boobs! +libran +rebecca5 +darla +jack2005 +unbreakable +250279 +goldy +Spanky +anuoluwapo +getmein +261095 +fuckyou06 +alicia7 +markova +richgirl +24422442 +chris100 +Amelia +Brutus +pele +osipova +lexicon +23061979 +tommy1234 +stason +170577 +waqas123 +010979 +051990 +071178 +030879 +beaumont1 +19851987 +icebox1 +mhine1 +adam18 +skeet +olivia6 +greenday123 +rockrock1 +290678 +phoenix9 +debtfree +hitman23 +romanson +db +pharaoh +ELEPHANT +magic22 +jesusloveme +george6 +26041978 +290194 +booger01 +171177 +030679 +argentina2 +110676 +danil123 +Password5 +jackie15 +uzumakinaruto +021178 +20041977 +launch +yellow20 +que-veux-tu +4u2nvme +playa23 +jarda +50505 +anna2011 +batista619 +thi +engenharia +dukenukem +amojesus +judaspriest +music4u +bballer +steven19 +fresh09 +troy14 +moon22 +louie2 +hooker69 +fortuna95 +801212 +007008009 +krystal2 +101107 +081294 +sexyman2 +23101994 +050608 +160179 +dong +rams28 +1manarmy +030496 +tanner22 +zhang +money26 +carman1 +Hardcore +EquityDev +lolo13 +260879 +14themoney +1inuyasha +theone11 +oldlady +BIANCA +estella1 +andover +black12345 +2589 +rachel17 +bulldogs08 +250778 +brazil123 +bigballer +22061996 +boucher +ryan2007 +yankee7 +16121995 +mrmagoo +florida13 +anchor1 +10101972 +overcome +96mustang +196363 +sims2 +bubble11 +220696 +taylor92 +200876 +friday01 +quercus +19851126 +movingon1 +hullcity1 +speeds +123qwe1 +kaitlyn12 +minimax +16061977 +zuzia1 +190195 +rabbit7 +foothill +741456963 +f246865h +09051979 +kamelia +beechwood +halloduda +pathan +blasco +sangria +snitch1 +lost12 +bigdaddy10 +francheska +godman +crappie +231992 +nicole32 +0107 +201076 +january08 +198829 +marypoppins +barcelon +17101978 +blessed07 +chaz +ovation1 +0901 +rangga +booga1 +newlife201 +120671 +18101979 +abbydog1 +boy123456 +lynn69 +pocket12 +13071980 +neuken +tinker23 +190794 +05041981 +stars! +t-money +sniper01 +paul21 +010779 +lindy1 +chase10 +JEFFREY +cuteboy1 +blue222 +100999 +leopards +paints +ghjrehjh +171095 +070282 +ss12345 +viernes13 +moimoi1 +mambo5 +050895 +changepass +checkitout +notmine +23071994 +hello34 +deviljin +goodfella1 +baronn +gocards1 +bailey16 +28081994 +19072007 +13011301 +050282 +bella04 +15051978 +coconut2 +malcolmx +allen23 +300193 +smo +zyltrc +02120212 +killer321 +demain +melanie13 +keebler1 +25121975 +asshole14 +100808 +070981 +bethany2 +iloveluke1 +inlove4 +amouna +tequiero12 +070581 +NASCAR +dolphins7 +963852741a +girl22 +legolas2 +jeep123 +haseena +c654321 +221096 +murphy3 +travis5 +02101977 +rats +e-mail +yamaha46 +blowfish1 +1721k1721 +aphrodite1 +ameera +jerry13 +140202 +justme3 +123690 +monkeys101 +080994 +Enterprise +teddybear8 +kenny01 +balloons1 +geroin +busted2 +maria88 +blackmore +browne +ridebmx +hisgrace +country12 +dogma +FLORIDA +lukino +anhhung +noobnoob +fairfield1 +130996 +adam08 +021077 +bambam69 +1isabella +lauram +fuck17 +130294 +kizzie +291295 +minato +katia1 +821023 +20111979 +davidka +19861121 +cotton12 +dziubek +titimi +27091981 +27061981 +120607 +teen +miamibeach +marina2010 +Happiness +chevy09 +katty +sweety13 +scooby14 +space11 +ferrarif40 +basketbal2 +090976 +ilovealex! +250294 +281195 +WILLIAMS +lightimes +781022 +210197 +roger2 +start12 +wallflower +happy00 +23011996 +LOVERBOY +suffer +ghjrehfnehf +alex34 +structure +scotia +141010 +MURPHY +android1 +120898 +310193 +qazwsx7 +20121977 +tigers6 +16081978 +francis3 +302012 +triplet3 +hottie34 +789456123z +000999888 +amrutha +anthony89 +jessee +punkista +corinna1 +farhan123 +mascot +pokemon00 +lust +advanced1 +vlasta +tootles +jane22 +michael31 +25071994 +radharani +04041977 +amaretto +03101978 +salut123 +valkiria +nightcrawler +word12 +erin11 +maxamillion +herbalife1 +qaz4532 +anatole +henrys +10091979 +superman87 +achiever +101172 +11011979 +carter5 +kippen +fritzi +lover34 +fuckyou32 +emma21 +puggy1 +marley3 +cardenas1 +persimmon +lizzy2 +141075 +rachel. +161993 +dumbdumb +twinkletoes +reallife +janedoe +rootbeer12 +pendragon1 +nicholas14 +scimitar +001905 +533533 +50cent123 +cammy1 +plumeria +schach +panther4 +lebron6 +harley66 +trotter1 +dick101 +bakker +11223366 +fyz +pieman1 +november06 +okcomputer +sebastian9 +blockhead +trythis +1234567890r +elaine2 +01100110 +020495 +pennydog +qwe123zxc +636234 +local1 +lanalana +artem1996 +mason08 +11091995 +shumaila +purple02 +dallas! +osama +fdcnhfkbz +1QAZ2wsx +coco09 +coolhand +narutokun +jobros1 +asas123 +19871120 +jessica92 +hello20 +hotbox +080483 +1emily +bass1234 +flyhigh1 +191079 +anjani +experiment +leg +misia1 +mark17 +lasher +killme666 +shagufta +892892 +jazzy09 +1255 +amande +peanuts2 +football49 +sa12345 +020607 +landser +universita +raven01 +2908 +claret +carter23 +linkedinlinkedin +14021997 +giangi +200575 +star94 +100796 +goddey +bb12345 +isaiah05 +251274 +transform1 +08021994 +02101976 +781024 +dossantos +dupablada +gabriel15 +down +13111978 +pimaout +телефон +aaa111aaa +monkey777 +060897 +30111981 +19861023 +20041978 +greentree1 +29111980 +marialuiza +14061979 +justin31 +198218 +26011995 +jupiter5 +poczta +spider8 +199322 +maman123 +nov1988 +181278 +05011980 +miguel17 +22882288 +pink04 +rickross1 +08011982 +monkeys13 +cat666 +gallo +1cooldude +daniel101 +itachi123 +jakubko +1688 +inuyasha10 +not4me +sandy22 +aaron! +anhyeu +boston07 +jarjar1 +JESUSCHRIST +080783 +310895 +gwapo1 +190679 +rose101 +coolkids +070481 +200178 +302016 +maverick12 +sg +rainbow24 +angel79 +jason99 +151993 +271277 +pogi123 +bach +jasons1 +dickinson +mommy69 +06021982 +maitre +figueroa1 +libertas +220594 +ballball +nautical +502502 +30051993 +gizmo5 +lovergurl +buster16 +jamrock1 +modeling +PEACHES +luchino +boricua123 +haha23 +riccardo1 +blue78 +051079 +jamesa +600014 +beanbean +modified +keane16 +scorpio21 +jesus2000 +angelyn +palmier +diplomats1 +redrider +theblock +passwort! +sarinha +medic +mydog +redneck! +090283 +tab +brennen1 +ichich +billions +15021978 +babygirl78 +zanzibar1 +diana14 +sorella +pooh06 +202030 +190707 +lightyear +sanchez12 +280577 +begonia +bloodrayne +playhard +pointer1 +george15 +noknok +sexxx +cyrielle +121518 +30111980 +Carrie +211193 +disney10 +199225 +17051981 +maddy12 +darragh +meninblack +271990 +261982 +Kelly +killer87 +291983 +twoboys2 +13041978 +theflash +alejandro8 +95959595 +buttcrack1 +shawn23 +sambuka +Pikachu +blume1 +wilson3 +mathews1 +hoilamgi +multipass +04011981 +lolo90 +nodrog +1kisses +musico +smokey09 +jason88 +01121995 +penang +matr1x +johnston1 +correia +161094 +muckel +lurdes +191177 +03101994 +theman23 +4eternity +porkypig +hi123 +ali110 +jenny08 +jasmine03 +1278 +xxxpass +poochy +mommy30 +n1n2n3 +180676 +11011995 +sn1ckers +armada1 +newport123 +28071995 +wwweee +pratiksha +6699 +harry1234 +191294 +joshua96 +sofly1 +336336 +peaches9 +luzifer +211194 +dotty1 +sixflags1 +sebastia +2q2q2q +desiree2 +0403 +bebita1 +117 +shelby67 +cuoricino +duality +kyokushin +austin20 +marco2 +ronin1 +niggaplz1 +201985 +flower09 +anna99 +201009 +101204 +220178 +surenox3 +fuckth1s +040282 +09091978 +aur +170994 +ilovegreen +outlaw2 +230976 +loveangel1 +tommy4 +daddygurl1 +12021978 +asd1234567 +111276 +lavigne1 +dancingqueen +cassie16 +1lovemusic +nappy1 +eltigre +mrkitty +baller4lif +esther12 +mc9Ad9w2ux +CANCER +23051978 +mark07 +blazed1 +ballin01 +04071995 +monique11 +� +swag123 +june1983 +258963147 +mohana +portfolio +ghjcnjz +160878 +newport12 +hardcore13 +miniman1 +Chris1 +bigben07 +lfc4life +thebigboss +831010 +alenushka +SAMSON +pocoloco +beck +kopretina +heart13 +juster +ivana1 +machina +20061979 +olawunmi +17081980 +jabalpur +040284 +040281 +golden7 +ladiesman2 +ilovemywif +140178 +nick12345 +gohawks +220576 +07061994 +05011981 +15031978 +CLAIRE +1boston +music18 +alukard +anushree +bluewater1 +nurse2 +helloma +jessie16 +staticx +200177 +1bigman +jojo08 +gldfzPY +peckerwood +22051978 +rewq1234 +1fluffy +zz1234 +dizzy123 +asusasus +moron +0721 +matthew98 +melkor +111077 +wZQ8Xcfxqm +shukla +itsover +dick23 +saumya +susann +ryangiggs +tebogo +0209 +dolphin21 +javier11 +241176 +39393939 +230101 +sexy420 +pothead69 +rusty5 +babyblue13 +buffys +magodeoz1 +180777 +040384 +ikbengek +kasandra1 +020878 +cool100 +zandra +mercedes7 +matlock +poopy11 +pooop +murphy10 +steven06 +renee16 +harmonica +dustydog1 +20111996 +jake2008 +Kristen +Sammie +080784 +micha1 +woshishen +kodak +200278 +vans13 +160895 +colorado2 +nicole31 +rangers1873 +nich0las +XBOX360 +claudia7 +alastair +777555333 +wildcat2 +googles +sassari +lucius +bufalo +angel67 +florida4 +19861216 +angel81 +040895 +warren123 +crazychick +11021996 +internet. +fate +mario69 +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +praktikum +28111993 +jessie15 +joseph04 +ptybnxtvgbjy +211276 +12011996 +laflaca +screwu +david29 +koolsavas +imogen1 +analsex69 +lilboosie +aaron69 +driftwood +sami12 +hearts7 +single4 +asad +hotwings +erwin1 +warped +jack55 +prince1999 +federation +bulacan +Muhammad +198514 +19942009 +aquario +09051995 +06071981 +00123456789 +angers +sarah06 +xh248zHHTM +matt00 +batman45 +20121979 +29091979 +sunset2 +euronics +171194 +120506 +170494 +sydnee +17121977 +lilflip1 +ruchika +sparky99 +eragon123 +cameron21 +babyko1 +!q +riley5 +guarana +170694 +dragon96 +aaaddd +bulldog9 +passrett222 +getsilly1 +29121980 +courtney6 +201275 +forever0 +scholes18 +informatika +197822 +youngbuck +199120 +panthers7 +fukoff +promote1 +redbull12 +230675 +tapper +ganondorf +nutsack1 +coco16 +19401940 +Wolverine +grove1 +steven24 +blbjnrf +joshua95 +02031976 +12101996 +olivia02 +pepsis +211983 +panthera +kennedy123 +turtle6 +minnow +romanenko +pfqwtdf +111108 +aga +sabita +petewentz +Arizona +Whatever1 +14031995 +1cooper +aiden06 +ivan1994 +031094 +lovelife3 +clover12 +snoopy24 +dominos1 +2229 +wwwooo1234 +martell +01071978 +4vdaxP542G +freshmen +22021981 +coolchick1 +27011994 +olimpo +toocute1 +bennington +santa12 +autumn13 +68chevy +deus +050382 +amanda27 +jimmypage +jettavr6 +1eastside +midnight6 +Qwert12345 +cooper23 +116 +sandy1234 +06041995 +1beast +km1234 +23021977 +badass21 +konnichiwa +1jesus1 +kuning +allegro1 +bmw328i +toro +20061996 +1blondie +261991 +kisses01 +honda300 +junito +nickjonas! +pimpc1 +cody69 +jonas14 +cpPzfRC933 +���+����� +250795 +291294 +toyota11 +fifa2002 +drumstick +mariah7 +julie13 +connor03 +25051976 +giggles123 +shorts +101208 +omnamahshivay +mila123 +kitkat13 +dance23 +rambo12 +terenaam +barrow +240876 +cali14 +snipes +060281 +hamradio +020676 +halo10 +23091979 +240994 +sexmeup +110776 +flaming +liline +letmein0 +vangelis +100975 +mrs.brown +vjzgjxnf +chava1 +southsid3 +030377 +dustin! +njdevils +1miller +coco08 +dimabilan +123456go +accenture +171195 +111997 +080583 +30111995 +050182 +27011995 +191278 +250196 +travel2 +miller23 +lorna1 +verbal +pinnacle1 +barbora +241075 +james92 +linkedinpw +noodle123 +Business +mystikal +skyler2 +kucingku +june1981 +100497 +wezzy1 +george27 +cooldog1 +tiger2000 +zozozo +victory2 +yonkers1 +sanson +220894 +king00 +natty +kofola +akril2442 +gfccdjhl +intimate +alwaysandf +ecureuil +and125 +nnanna +55555z +judge1 +partha +devera +rikki1 +111966 +01111992 +prasanth +skyking +x123456x +03011980 +bcrich +4422 +123iloveu +evenflow +24091980 +anna07 +jianjian +batteries +080993 +28021978 +Qwertyu1 +teagan1 +161980 +gg +02071994 +carolina. +16011982 +nichelle1 +171078 +melissa07 +112004 +210999 +jun123 +ololade +kaleb123 +vlad1994 +120897 +110043 +omarion21 +001967 +anna1983 +hansen1 +a7CkuntLDy +denis1997 +berserk1 +arizona123 +regal1 +134 +china13 +angel1991 +411019 +123789852 +mike02 +181992 +MARCUS +28031979 +emma2009 +lazyboy1 +201202 +dx1234 +billygoat1 +parekoy +Giovanni +ESTRELLA +crickett +all123 +sargento +peace1234 +canguro +mr1234 +jayne +mimi08 +rockon11 +20081979 +chijioke123 +miracle7 +wy1000000 +supercar +blind123 +sparhawk +torben +casting +ancient1 +ruicosta +pumba1 +mapleleaf +mybaby09 +susmita +lilj123 +britain +25031996 +121071 +molly09 +ilovejosh2 +21101995 +serfeliz +claire2 +johnnycash +PORTUGAL +james45 +gerard12 +020977 +marajade +blocked +268268 +�+����+������ +nfyznfyz +271077 +13579135 +vojta +dfcz +02011975 +pdbDfby2xx +180379 +isaiah7 +phuket +800008 +anna08 +buttonquail +20101997 +marietta1 +000webhost.com +lawnmower1 +july1982 +stooges +151176 +preety1 +charli3 +111295 +qwerty82 +furby1 +333777333 +argentine +bigbad +emmagrace1 +160494 +maxwell5 +101006 +220475 +l0veyou +rocksteady +lop123 +florida8 +19861123 +suzette1 +dima1999 +котенок +110297 +311093 +casper4 +021409 +sactown916 +peter22 +budala +rollie1 +19871988 +060494 +28031995 +31101993 +timbaland +candy25 +lisa10 +babe15 +oscar4 +bai +max2005 +paintball5 +13101978 +audrey123 +katherine3 +01011997 +repytxbr +nishizhu +110299 +10051996 +bobrik +july1997 +packman +falcon69 +10091995 +billy4 +28121978 +monkey30 +tmac01 +291094 +gem +tigers9 +123123g +cvbn +123456www +101206 +121097 +gavroche +martha2 +olivera +imkool1 +q1234q +821025 +199128 +bastille +makemyday +denpasar +12356790 +03101982 +goduke +25051978 +masaka +blue96 +peluso +rebecca10 +euzinha +ANDREI +197801 +laura16 +sparrows +Abc123456! +5588 +pendeja1 +gfh +20022004 +190280 +cuatro +03071979 +bhabyq +muttley1 +ricardito +latitude1 +sayang90 +schoolbus1 +01041995 +oakridge +07031995 +gay4life +zero666 +alanya +justintime +foosball +musica. +okay12 +forzatoro +cooler123 +18121978 +jenny1234 +hazzard +raiders99 +section1 +matthew0 +honeydip1 +chiquito1 +300479 +board1 +prince4 +learn +deadmeat +061179 +eueueu +23081979 +ancona +06091981 +dragonman +TGzvF55idb +19841027 +austin94 +marissa3 +sakamoto +speeder +malvern +pierluigi +vallejo707 +payment +2708 +hiroko +lunanueva +sdfg +070593 +momsgirl1 +gfhjkm2 +fuckface2 +olayinka1 +asas1212 +RAIDERS +pimpman1 +xfhkbr +blossoms +catty +done +wobble +aurevoir +fuckmyass +ptcruiser +19850101 +gracie22 +karnataka +panda101 +05031994 +chowchow1 +cvbnm +crying +anatoli +133001 +victory123 +24091994 +girly123 +yfcmrf +music2010 +antonio18 +melon123 +karate2 +alex1977 +05011994 +mokona +coaching +tomwelling +reddy123 +dishant +mikey69 +apolon +140479 +momndad +17051995 +powerman1 +Alabama +firedog1 +jeremy06 +sonu1234 +290378 +270995 +121108 +tekken1 +jazzmin +secret77 +natureza +030577 +London123 +executor +bulldog23 +nokia1600 +22031978 +04041996 +081194 +ar1234 +ca123456 +zxzxzx1 +kurczak +putas +smiling1 +061988 +2514 +angel1987 +asdf00 +bella2007 +rotterdam1 +miguelange +jimmy9 +trouble13 +gators2 +hugoboss1 +samone1 +mybusiness +17151715 +121198 +23051979 +freedoms +ilham +puma12 +satchel +april2006 +burgess1 +yellow00 +veronica7 +080293 +livelife2 +spartak1922 +lilly13 +petruska +steven9 +caca13 +assman69 +365214 +@@@@@@@@@@ +chr1st1an +donald01 +ap1234 +1239875 +1234567889 +cookies8 +cece12 +juanpablo1 +Asdfghjkl1 +gabriel6 +tiger34 +redshoes +rodnik +deloitte +bandit6 +bahadur +macias +holly5 +walker01 +�����+������ +140995 +victoria. +4649 +14081979 +skank123 +qwerewq +stasia +soloman1 +angels02 +baranov +780504 +luver1 +zzzzzzz1 +alicia10 +vasilina +number99 +bananas7 +mariahcarey +graduate08 +clear1 +samir21 +neronero +stocking +boylover +vikas123 +franklyn +951951951 +kazuma +nephilim +clements +peaceman +thatha +friskie +den1ska +lynn15 +030578 +lesego +kisulya +dakota15 +26091993 +peanut33 +aaron6 +123456zxcv +sereda +jayden7 +weight +goldflake +black0 +220976 +angela! +wigger1 +bluegill +14031978 +12121973 +a134679 +1bobby +london44 +diablo6 +kenny23 +boggle +puffdaddy +sharkboy +robertina +imaloser +nini12 +scamp +cleaning1 +180279 +58565254 +ranma +hottest1 +jhane +ivan1989 +25222522 +colchester +barborka +jamie10 +12122008 +jewelry1 +tammy12 +727727 +090782 +tyshawn1 +nessie1 +130575 +25101995 +pollen +25011980 +jay-jay +`````` +20041979 +shianne1 +nate23 +madden12 +cocodog +chimchim +forreal1 +phillies08 +gfdkeif +jackson. +bigdaddy13 +kaskad +123654789q +CRISTIAN +110475 +loco69 +andre11 +papapa1 +ashley97 +161295 +bonsai1 +nana06 +lj: +pretty07 +cheer8 +master89 +enomis +010608 +2mylove +lindsey3 +al1716 +alicia22 +stomper +mummy2 +0213 +savana1 +250994 +pakistan47 +totoybato +george8 +toyota99 +29081994 +12345654 +8686 +rom828 +clover4 +allyssa1 +24685 +hottie25 +scout2 +loveit2 +charlie03 +nokiax2 +stank1 +singsong +tiger321 +julius123 +miriana +30011982 +inlove07 +RED123 +minotauro +19101979 +luis123456 +robert93 +eatshit69 +pirata1 +shaddy +290694 +01051976 +19001570 +allthat +0106 +dima1986 +anything2 +Ryan +oioioi1 +1469 +йцукенг +Horses +131195 +100375 +ненавижу +poiu1234 +1235678 +27091994 +memorial1 +ads123 +honda03 +pavel123 +15091978 +140394 +mala +jack16 +270278 +silentium +121199 +710710 +fuckyou111 +adrian06 +davidr +flower77 +badass11 +felino +221978 +primary +211075 +3310 +060994 +bulldog4 +210296 +qwe123! +678900 +dollie1 +197619 +0921 +newyear08 +molly99 +dios777 +musicrocks +timoshka +askim123 +dunamis +15051975 +guillaume1 +general2 +payton12 +diva21 +25101979 +rawalpindi +ihateyou4 +300694 +458458 +mikey6 +03061979 +king19 +dartagnan +240277 +jessica03 +sebastian5 +dodge2 +forlife1 +199419 +flower18 +2662 +benjamin! +ariana123 +beemer1 +12051996 +791127 +jamesr +behappy2 +Winter2011 +150476 +south12 +24051996 +vika1996 +2244668800 +2people +jolly123 +051982 +barmaley +basketcase +060282 +myspace86 +comp +hottie19 +pusssy +madison200 +holly13 +198007 +cocacola7 +skyline12 +1q2w3 +guyver1 +doorbell + +040794 +cayman1 +ernestine +gerber1 +150495 +bunny14 +211991 +jelena1 +tink16 +imsohood1 +560103 +030396 +softball32 +dudu123 +redneck21 +03061995 +180478 +poopoo0 +balla123 +golfer69 +yeller +bailey98 +karim1 +logan6 +200596 +21062106 +mnbv +02081976 +21021996 +lidia1 +amour100 +sasha007 +deliver +danecook1 +call +kitty55 +snoopy07 +roxas1 +00990099 +red234 +georgy +rfybreks +Smiley +whitefang +may1985 +sniffy +yilmaz +19851011 +diamond24 +charles21 +09121993 +xfk3bxEZQJ +mickey1234 +newyourk +honda89 +011980 +loser12345 +18021978 +JOHNSON +ares +chris85 +phoenix01 +sarasota1 +181994 +lulu01 +2906 +malachi2 +gold11 +floripa +casetta +winnie11 +oguzhan +mama1970 +04061994 +number34 +beograd1 +fuller1 +michele2 +creatine +p000000 +nimisha +weymouth +polo00 +granger1 +27091979 +03031996 +qweewq1 +201983 +all4god +sooty123 +120772 +eagles9 +amor16 +hotbaby1 +jack007 +040894 +lilly3 +abbygirl1 +superstars +oliver09 +samboy +joinme +qazxdr +041177 +15041995 +lev +donna12 +cagnolino +polita +1police +frank69 +22081996 +040877 +redder +bball6 +gangster4 +8123 +1967gto +19861218 +240178 +12081978 +011094 +bigworm1 +1hotrod +ted123 +2hot4tv +blood69 +falcao +mustang92 +jordan29 +37217086 +070393 +beto13 +ball22 +thumper12 +3377 +soccer35 +08081996 +07081978 +foofighter +jeff69 +yummy69 +wilderness +1indian +cfkfdfn +iceage1 +100775 +rhbcnz +henry11 +pineapple! +080896 +michael55 +2333 +barca123 +hotpants1 +pequena +lasvegas2 +bro123 +brody123 +rooter +bradipo +silversurfer +kiki99 +loveyou15 +lilman23 +miamore +meandme +1819 +celery +rofl +sizzle1 +280195 +diciembre2 +1inlove +1138 +crafter +killer91 +rayados +hawaii! +cestlavie +alyssa16 +maddie5 +jacque1 +surrender1 +hugo1234 +james2010 +280379 +06031981 +brutus123 +bella88 +austin88 +1357911q +rfkbybyf +fcbayern1 +longhorns3 +cherrys1 +03091980 +romel +070494 +haselko +serpent1 +mama1960 +myspace* +11111975 +789789a +confused2 +babs +wonderful2 +Charmed +icecream9 +stadium +redstorm +51535759 +180179 +29061980 +03111980 +j666666 +vazquez1 +zahira +dear +140896 +compaq13 +sys64738 +baby86 +robert02 +venkata +24041979 +saraba +pickle7 +120873 +ladybug9 +ellehcim +197555 +malta +28071980 +richard07 +delta4 +mattman1 +andruha +lilolilo +bonefish +23071996 +babygirl44 +balthazar +blood101 +marvin11 +franks1 +callas +080493 +claudia13 +george24 +imahoe1 +3ub9xM53xI +super14 +27081981 +megryan +ataris +sir +haha101 +iloveu18 +02031974 +erika13 +dhananjay +internet11 +grande1 +peace9 +15121977 +confirmed +singlelife +smetana +250496 +a246810 +1718 +septembe +joejoejoe +jujujuju +mamaypapa +091979 +cedar1 +bandit4 +dollhouse +197830 +ilovemom! +pepper16 +jonasbros1 +jacklyn +yamaha69 +senhasenha +22031979 +perroloco +skyline7 +lilwayne4 +pokemon98 +vincenzo1 +17021977 +101273 +sophie23 +27011981 +golfman +197212 +1424 +maurice3 +precious5 +15021996 +hellboy666 +acevedo +frufru +dickhead69 +steven20 +Mario +GHBDTN +199129 +asesino +26091981 +fynjyjdf +eric09 +mama1964 +zhangyu +06021994 +daddy#1 +iloved1 +steelers#1 +111075 +kisumu +291278 +triada +iamtheone1 +thesun +17011980 +inuyasha15 +199911 +ploppy +412 +cneltynrf +dakota98 +cancer2 +27111978 +neger123 +x1x1x1 +mostaganem +040609 +757757 +jake00 +iloveblue +141176 +01234561 +chubby123 +splender +jayboy +maveric +adg123 +Redskins +luxeon +3horses +050777 +10101968 +1lovechris +christina! +WIBsH56kec +letras +asdfvcxz +jesse15 +dayang +wildcats11 +petroleum +lilmamma1 +solaris1 +11101995 +tony25 +071984 +010207 +lawton +robert28 +scorpio123 +abdellah +MAXWELL +letmein9 +15935728 +adebayo1 +super15 +tragedy +askimbenim +anneso +1771 +14121977 +sarah99 +rand0m +bumhole1 +jkjk +surbhi +shoes2 +070980 +chinedu1 +juggal0 +elijah04 +110875 +greggy +nissan300 +Holiday +ibadan +holiday123 +qwerty1993 +pinkness +carter22 +diddlina +24011980 +loserface +matrix10 +821015 +aldana +masloboinikova1987 +1november +jellybean7 +hahaha5 +guitar15 +tina69 +remilekun +sammyjo +741230 +31011979 +princess81 +Godzilla +050694 +ilove1234 +100398 +19871024 +bashful +gregory3 +twins3 +cats22 +serenity3 +zxc098 +120300 +spike1234 +epsilon1 +iloveu88 +00000000000000000000 +tailor +18031996 +1asdfghj +woodbine +aaa888 +gonzalez12 +36912 +100396 +220195 +33443344 +aaprintbb +santaclara +maggy1 +customs +patapouf +dread1 +samual +22111978 +predator2 +dcltabih01 +060894 +cricket7 +4rfvbgt5 +jaja12 +tooth1 +MAMAPAPA +888111 +cupoftea +250295 +anthony00 +319319 +0602 +humans +mara123 +jess10 +sanchez2 +nenene +310877 +1turkey +coach123 +010696 +wolves2 +bellatrix +092 +classof99 +mooses1 +030478 +poepen +chimera1 +kleine +51286700 +160779 +123123123123123 +25051977 +mylove15 +badboy15 +westside11 +liverpool05 +1Q2w3e +goodwin1 +billy23 +tropicana1 +lovecats +rosewood1 +suave1 +tyrone79 +24061978 +sarafina +nicholas. +alitalia +431001 +cookie06 +ueptkm +020409 +anais1 +aslan123 +camp +stairway +rowley +scoobyd00 +071293 +19851030 +161982 +05081994 +tvinktvink +kyle16 +diva08 +06011993 +heybabe +ziomek123 +monument +portugal17 +191980 +17121996 +queeny1 +050878 +culinary1 +alison12 +bassie +jumpman1 +manola +020206 +21101979 +pierre123 +bailey77 +sensesfail +faith77 +rio123 +kartal1903 +kimora +wood123 +140396 +falcons07 +03051979 +781003 +sixkids +panino +worms +121102 +fallen3 +kevins1 +referee1 +barry20 +pw1234 +ginger101 +rko123 +password47 +runner2 +audis3 +shanae +codyboy +priyaa +trek +210295 +nicklas +master12345 +passion3 +babi1234 +password_1 +bailey17 +whittier +19051978 +150877 +barrel +blood22 +240377 +asd123321 +shadow04 +south3 +france2 +kissable +athlete +navyseals +snuggles2 +24101978 +noviembre2 +peugeot406 +deadeye +080580 +bmwe30 +light12 +bitchbitch +submit123 +cdtnkzxjr +chelsea88 +RONALD +killroy +bronze1 +18111980 +jesse69 +sqdwfe +050492 +tha +90107142a +danielle07 +drugs +john05 +zagadka +zxc123123 +seniors06 +svoloch +norwegen +twin12 +gallo1 +billy10 +shemale1 +010408 +loser16 +080807 +show +dementor +kobena +ballard1 +jea +qqqaaazzz +kollol +231981 +pa44word +surgery1 +dixon +college09 +heaven22 +kirstie1 +02051995 +bigpun1 +1cassie +qwest123 +Sammy +counter123 +benbenben +140575 +maryj420 +frances2 +25352535 +manner +020608 +02041974 +blazed +101270 +blubb +lbyjpfdh +061989 +coolbaby +denise14 +Jacob +200894 +midnight22 +060283 +121197 +5678dance +260294 +180477 +bas3ball +lolnoob +shorty20 +06121981 +231978 +gazprom +nupe1911 +violet12 +bigworm +051094 +vivian123 +pussy6969 +will22 +final123 +bear07 +bloodgang +1rooster +999999999999 +110376 +19061979 +julia7 +hottie94 +panther10 +151094 +Money +sassy14 +solutions1 +600005 +abcdef5 +5starbitch +chois777 +mike123456 +preppy +deuce22 +puccini +02051976 +19021995 +jeffrey3 +sylwia1 +12091978 +199025 +kukuruku +livinglife +morenita1 +14081995 +oneshot +271991 +rocker101 +10011978 +120305 +skate9 +californication +plant1 +iloveu0 +cody21 +tribe1 +Freddie +samuel5 +07041981 +spagna +wedding09 +19081978 +dima1989 +mittal +player17 +3128 +26111980 +felony1 +badcat +leon13 +chipper2 +shelby07 +godisgood! +michael86 +goodboy123 +cat123456 +victoria08 +18011995 +Vqz6QyO294 +duhduh +171277 +Britney +august123 +domain123 +ak1234 +whatsup123 +5522 +vfuflfy +rockstar. +jon101 +dragon30 +american2 +abcdefgh12 +040193 +camila01 +waldorf +milani +cassie23 +spit +mementomori +280678 +solitario1 +soup +qwerty112233 +hadiza +thissucks2 +213546879 +abarth +080482 +071179 +15091995 +bondar +tobeornottobe +9090909090 +r654321 +dayday2 +elijah03 +michelle03 +qweasd11 +22091996 +zak +laney1 +011295 +deidre +chris90 +rollingstones +crochet +asdfzxc +27071977 +crap12 +rekbrjdf +25021977 +05091978 +jacquie +29081993 +musicbox +bigdogs +261076 +eyeliner1 +watitdo1 +09101981 +polo13 +lady21 +asians +qqqqqqqqqqqq +050181 +bubba101 +blueline +password43 +cocacola! +24111994 +lagbaja +treytrey +werwer1 +billy! +k.,k. +architetto +090595 +pershing +drunk +gshock +31051979 +djibril +Brandi +kalifornia +coffee22 +ain123 +10041977 +jongjong +tears +friendofYOUCANMAKE$200- +kevin99 +whitley1 +paige11 +198929 +Marines1 +sexymama10 +paloalto +gustavo12 +honda00 +olivia21 +bills +brentwood1 +piccione +sk8mafia +eltonjohn +071983 +rowan +christiano +050900 +malyshka +dakota6 +alfa123 +jazz01 +diplomat1 +sunshine05 +150396 +jazmine2 +olivia8 +14371437 +lovebites +123132 +020709 +february16 +bigballs2 +qqq123456 +paulwall1 +ash101 +marykate1 +codigo +yellow08 +10121975 +jeancarlos +matt06 +qwerfv +1q21q2 +jade23 +bulldog6 +pivoine +grzesiek +estudio +666667 +kagandahan +060382 +tbs13 +09111992 +bachata +kk12345 +pfhbyf +25412541 +loverz1 +kayaking +010479 +panthers! +121210 +zachary8 +rothmans +spicy +honor +21081979 +muskie +vikingo +22041978 +19881212 +Bobby +pelusita +14031403 +sandals +14071407 +26051994 +doggy11 +ithaca +04101993 +30041978 +271982 +catsmeow +oyindamola +121262 +castellano +ipodtouch1 +12345zzz +twingirls +newlove12 +lp123456 +loco11 +closer1 +gemini06 +miami12 +boulet +031995 +surfing2 +190693 +shivan +cgtwyfp +2528 +mpc2000 +zinzin +kiley1 +allochka +c123123 +morgan98 +555566 +308308 +dookie2 +joycee +overcomer +199023 +paige01 +megan4 +010307 +sexygirl23 +harley55 +peyton12 +jdq4j8Lu3A +iloveanna +06051982 +141070 +7891011 +vickey +jordin +iheartu2 +dragonage +Champion +rowena1 +live12 +monkeyman2 +201194 +2515 +25021995 +Susanne +thecrew1 +metropol +cosmo2 +chloe09 +180577 +shines +160178 +120499 +rocket01 +caiden1 +gandaako +sebastian8 +chrissy123 +filip123 +22021997 +240378 +171994 +c111111 +bobby14 +elloco1 +dfktynbyrf +25081979 +lovesloves +childofgod +180476 +luis69 +nfhfcjdf +hoopla +cameron23 +11011978 +teddybear6 +29081980 +49ersrule +bitch02 +110275 +2q3w4e5r +moonriver +0523213511 +220676 +payne1 +1288 +sexygirl9 +gucci2 +2518 +readme +ser123456 +reymond +shantell1 +310578 +postal2 +jessica93 +15061978 +untouchable +caden +zx12cv34 +galileo1 +along1 +maulwurf +andrea1234 +that +edward8 +456abc +110675 +funkytown1 +jayden21 +09021995 +771177 +21061978 +vaches +080982 +alegria1 +noname123 +sdsdsdsd +chester22 +callum01 +howard2 +scared +armenia1 +mireia +532532 +120400 +mark25 +clarinette +kokotko +ghostface1 +060677 +isaiah5 +fatouma +palmtrees +happening +200878 +anna2003 +iloveu07 +1524 +teejay1 +cdjkjxb +showbiz +124589 +subwoofer1 +diaper +sweets12 +3219993xx +040696 +21061996 +redfire +iamme +Leonie +200608 +myspace001 +iloveme101 +1two3four +purity1 +valleyforge +06071995 +250793 +bigbob1 +cac +23142314 +191095 +16121976 +030293 +lovehina1 +antonio6 +sexycani +051383 +shelby08 +chicago6 +carey1 +tweety19 +197929 +drummer12 +lovie1 +17091995 +68chevelle +espinoza1 +betmen +drink7up +kurdistan1 +getmoney11 +chidinma +196464 +bianca10 +201208 +MUFFIN +jorge10 +jamieson +funk +hater2 +octave +kangen +webbie1 +carlee1 +haribo1 +katika +dolphin10 +ily101 +08071980 +etoiles +record10 +love1010 +schnecke1 +420420a +dominic7 +taliesin +PASSION +martin99 +georg +qazplm1 +davinchi +28101995 +06101980 +79camaro +hometown1 +walter11 +23041978 +20021997 +cora +olaolu +ender1 +marocain +010279 +vj +eleonor +kiki21 +jabbar +ilovenick2 +winter2009 +firewater +cin +tony19 +040381 +iniesta +hgf4h3fhf +13271327 +gamer12 +granny12 +fisher2 +robroy +silverwolf +master66 +5544 +07061981 +ilovejorda +jd123456 +rosebud123 +o1234567 +123_123 +999998 +Antoine +831013 +allison5 +co2008 +lipton1 +cabelo +coolkids1 +13051978 +fuckoff88 +30101995 +hitler123 +110028 +karina15 +17012003 +vanessa6 +020575 +dagmara +Jiang520 +colima1 +24kobe +nepal1 +jhajha +kiesha +grumpy13 +20101977 +cristiane +devin3 +260195 +dasdasdas +fahbrf +09111991 +vigilante +pontus +030307 +edw +11aa22bb +harrydog +unlucky13 +mgoblue +gillespie +barcode +778866 +abdullahi +olga2010 +24021996 +study +19951996 +Montana1 +geoff1 +musashi1 +restart1 +didi123 +boomer10 +worksucks +sandra5 +160977 +gloves +dork12 +04071979 +ktyecmrf +amamam +270293 +frankreich +my1stlove +1905gs +040474 +chick3n +SEX +090893 +ladybug6 +sinead1 +ujhjljr +pokemon88 +tinker9 +141096 +kirstin1 +fiftycent +hardcore7 +reserved +redneck08 +robert30 +�+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+�����+���� +ye123456 +hotie1 +1530 +oct +moose3 +151515a +samsung69 +michelle02 +ihateyou11 +brian08 +juggalo123 +060698 +pierpaolo +nick92 +040294 +babykitty1 +q000000 +maryna +240895 +erica13 +8marta +dakota9 +150808 +CHOUCHOU +n2XcFgjCvr +sexybitch7 +meomeo +bro3886 +genesis3 +apple17 +johncena! +hantu123 +mygodisgood +ninja69 +flblfc +2manykids +lakers88 +wingwing +rocket22 +countdown +babiigurl1 +271196 +123456R +Dan +charger06 +01081977 +cheese44 +27101979 +ensenada +p8ntball +gertie1 +steve22 +papyrus +300577 +muffin10 +270179 +01021997 +schoolgirl +041195 +ddd333 +olajumoke +wondergirl +altec +27121979 +brooklyn09 +Josephine +pontiacg6 +camile +bono +skippy11 +diable +stoffel +hitokiri +neopet +wichita +marten +nikitosik +dancer17 +capitaine +chrischris +antwerp +123e123e +raiders9 +juggalo6 +040695 +1421 +theman22 +EXCITE +password64 +martin24 +ameena +judas +linkedpass +lovinit +vanessa16 +jonathan17 +silmaril +55255525 +741852963q +bailey69 +shelby4 +blessed! +tropic +custodio +198928 +usg242 +240279 +150676 +ballin6 +1toomany +123456pa +motherwell +antigua1 +winter2008 +lovemonkey +19851015 +201075 +marruecos +myspace84 +always123 +311294 +ghjcnjghjcnj +1359 +akucintakamu +64chevy +acrobat +rayray7 +gaara12 +5262499 +171295 +a123654789 +jujubean +reynald +poop111 +Kristin +gamlet +kamari1 +666666g +melissa24 +justin95 +viridiana1 +juggalo13 +27051994 +heybabe1 +yahoo99 +27111979 +asdasda +molly69 +blinker +chokolate +berry2 +littlered1 +vasili +snoop2 +Tdutybq +ilovebryan +lucifero +johnson4 +dinner1 +xiaozhu +myjobs +08081977 +88488848 +841028 +network123 +martin17 +samdog1 +villas +bronte1 +pauljohn +12041976 +february17 +phelps +bobby9 +123killer +mabait +020795 +sucker2 +19831020 +ginagina +rancher +qwerty987 +65impala +blake3 +ghostman +0331 +chicano13 +bandit77 +laptop12 +allister +021079 +daddy16 +200496 +jack04 +vfhbyf123 +loveu! +abi +mexico06 +adrian4 +buggie1 +wiktor1 +090193 +eddie23 +Beckham +privet123 +198803 +spalding1 +melanie! +29121979 +allblacks1 +tdubdub05 +mexico25 +040679 +helena123 +111106 +ass101 +whyme? +05021994 +boys2men +yeahboy1 +smoke12 +cagada +555666a +harlie +gratis1 +deadlock +smokey99 +olivia14 +precious13 +redsox8 +tutifruti +esmeralda2 +lightfoot +199228 +Buddha +magic6 +lola23 +cinthya +081279 +170795 +201102 +marybeth1 +120100 +kim12345 +lol100 +26061978 +3bitches +panda23 +creole +07101994 +sundin +happyfeet2 +dragon52 +091193 +142434 +secret00 +091293 +3foZaqb33Q +bigbang123 +180778 +radmila +djerba +rajawali +oran31 +lfieyz +escapethef +gavilan +hannah88 +wolfy1 +cousins1 +loveisgod +jennifer07 +mafalda1 +hotaru +2dragons +121069 +19861015 +04091979 +iamlucky +ksenija +kayla17 +alucard666 +street123 +welcome22 +280394 +qwerty1986 +easyeasy +srivastava +strongbad +rotciv +ulster +school07 +xavier21 +babylove3 +charmer +jr1234567 +p0k3m0n +dimo4ka +dylan04 +noel12 +daisy15 +w8aGc47klA +may1988 +05061978 +hummerh1 +040576 +heather07 +animal11 +della1 +diana22 +mollygirl1 +oracle123 +kevinb +270994 +04111982 +79137913 +021983 +kirsche +bhabyqoh +ema +130396 +220272 +040180 +smi +tanja1 +elena12 +mariac +19851020 +toshiba2 +sexydiva +ana123456 +webkinz12 +gotrice +yunita +280707 +pizza6 +jayjay01 +170278 +123456ff +zebra2 +system2 +035690 +number55 +Pookie +cameron14 +jade10 +bebop1 +nastusha +051980 +toughguy +denis1994 +omonoia +chris82 +jeopardy +198586 +portugal12 +partyhard1 +110974 +08031979 +1loveher +121265 +toyosi +maha +jovan +qqqqqq11 +landon123 +210175 +shawty123 +black55 +071277 +fuckit7 +mkvdari +littleman3 +Madeline +surround +0903 +fabric1 +alltheway +doom12 +chargers13 +scouting +gay1234 +bandit99 +1stoner +tennis21 +specnaz +13031978 +1xxxxxx +hanka +bart12 +jorge2 +poop45 +16121978 +scooter6 +britany +dome69 +travis199 +katelin +flocke +Holland +@yahoo +1lovebaby +forty2 +biggay1 +212224236 +ammaamma +redman2 +fktrcf +lilly5 +trousers +allegria +strongbow1 +mamuka +tenor1 +matt633 +estudante +calilove1 +06051994 +citroen1 +estrella10 +brenda14 +jade08 +27081994 +tay-tay +sea123 +jiji +210575 +122123 +r1r2r3 +stuffy +sunshine32 +08011981 +damian11 +soldier2 +Honey +disney5 +def +191981 +28081996 +ticotico +leighann1 +cjhjrf +webcode1 +angle12 +icp666 +wwe.com +111007 +smurfy +katy12 +nitram1 +action123 +andre23 +jenn5366 +qwerasdf1234 +makimaki +monkey68 +mirka +mackdaddy +store +olalekan1 +nasrin +200001 +190379 +chechen +rugbyman +salvacion +180695 +123741 +031077 +erica11 +mylove24 +13771377 +sandra14 +031078 +120974 +24111979 +rockstar16 +vegeta2 +beauty! +andre10 +virgen +magda123 +elenaelena +penny7 +momo10 +calender +drumming +gago +tope123 +hobiecat +doggies2 +310178 +masons +pickle! +dodgers11 +fyfnjkbq777 +overseas +skittles10 +bocephus1 +katyusha +28972323 +rocky12345 +quinto +denise09 +22031996 +120603 +226622 +chevy98 +bombom1 +ismail1 +pietra +furniture1 +lolcats +rollins1 +sunday7 +poplar +meatman +factory1 +211195 +30071980 +fishing7 +281076 +b1teme +jazmin123 +password65 +metoo +300977 +ilovenikki +23071977 +emma2000 +jimmorrison +030677 +pageup +sexybeast! +suhasini +redlight1 +�������+����+����� +goldengate +010896 +dates +290479 +kalbo +dude15 +tomasz1 +902860 +6shooter +rishi +rebel4life +lolada +pakalolo +chivas16 +youngluwe +02031975 +pes2010 +dreday +fyyf +balling +evette1 +29041981 +raver1 +425425 +rankin +alluser +morris123 +lolek11 +nd4spd +jobert +siopao +ryan2006 +nanna +devilz +212121q +rapstar1 +oluseun +jktu +lilmama15 +sarah19 +young23 +113114 +84728472 +ezequiel1 +gromit1 +yahooid +lollie1 +iloveu101 +nate1234 +18041996 +1618 +28061980 +aelita +212321 +adithya +prezident +143000 +mitchie +1kelly +disney7 +babubabu +hawker +sodomie +grandpa2 +Fuck +p3anut +ronaldo77 +buster25 +06071994 +08041981 +060993 +kailua +ivan1992 +marijo +jay101 +poopey +cherep +rusty3 +shutup12 +iloveu24 +snoopy17 +asdf13 +240177 +115 +nicky2 +portman +230708 +rockstar123 +june2002 +textile +goobers +pimpette +nokia6020 +myspace03 +sunlight1 +imsexy2 +darkn3ss +sorina +19861024 +290895 +shona +pippy1 +martin08 +november01 +montano +allahhoo +myl0ve +041984 +13061306 +30011978 +helenka +Loveyou +motdepasse1 +25051996 +140876 +duran +shakthi +monica. +ilovealex2 +lauren05 +taxidriver +666665 +password001 +12121313 +08021981 +22121977 +queensland +bratz9 +lov3ly +youyouyou +killer100 +classof2011 +Ashu1992 +13121977 +corey11 +shelia +swisher1 +camaro2 +houston23 +chicken24 +100275 +anastas +prince07 +vb[fbk +251294 +carranza +loverboy7 +maddog69 +god101 +loris +vojykGi959 +145623 +281983 +07101980 +seo123 +070193 +lovelove123 +bigguns +snoopy16 +willow3 +19861226 +02111993 +fresco +whitesox05 +061983 +bball09 +harry10 +hotmail11 +buddy18 +1jasper +bambam01 +Aragorn +angelheart +stryper +04061996 +31121995 +ambre +titties2 +foxglove +phobos +bogie +1234tt +hartnett +777777s +1fucku +tallman +Greatday1 +teamoo +100176 +chevy04 +tiffany15 +1fender +1coolguy +miyavi +sashimi +6655321 +220975 +pass55 +batman666 +computer20 +guthrie +19851111 +josh20 +saxaphone +pitbull69 +dolphins3 +19851125 +sweettea +lamalama +hailey5 +angie11 +patty12 +krystel +19871023 +1balla +elisa123 +19011996 +aga123 +sharma123 +scorpion12 +gabby5 +221075 +080408 +310878 +08091980 +001007 +jamie21 +gonefishin +sandman2 +shrooms1 +ilove16 +pakkness +fredom +onion +110400 +cleaner1 +100776 +sanjay1 +becool1 +280894 +060309 +barchetta +1q23456 +h0llyw00d +17111979 +malade +041293 +tobacco +cdbymz +180895 +gisselle +ida123 +080494 +cerveja +pepsi69 +misty13 +05071979 +281176 +197710 +14101978 +qwerty1994 +shahnaz +michael97 +kayla18 +flatland +Warrior +05111993 +kiki15 +swat +grace22 +olga1987 +lips +720720 +1xavier +230303 +tosca +refillmotives +ruslan123 +lovely19 +stiletto +anjaneya +index +06111982 +angel999 +kissme5 +growth +19841017 +qwerty1988 +emily02 +eeyore12 +nigga10 +210894 +masala +LORENA +Apple +animal69 +011294 +111274 +spirits +friendofEveryEmailyouproc +booda1 +021981 +slipper1 +yodayoda +peugeot106 +armin +danny9 +311276 +famous11 +janganlupa +snowstorm +31071995 +qw1212 +mistake1 +deano1 +alberto13 +google6 +luna22 +underpants +pouncer +m121212 +26071995 +joshua89 +kikumaru +grigri +kaikai1 +loveyou08 +sexy36 +highbury1 +snooper +18081977 +Sephiroth +Ashley1 +brandon98 +henry01 +cancer13 +hottness1 +angel1989 +free4ever +fakespace1 +131413 +090282 +powerfull +16041978 +821018 +password57 +march2008 +app +180278 +cubs1908 +444455 +private123 +141981 +stupid101 +lovebug13 +david00 +Julie +dukedog1 +4561 +celebration +dukester +furman +hunter96 +peekab00 +sparky5 +forsberg21 +741852963z +stressed1 +1239 +1lilman +andrusha +ficken666 +03041979 +28111994 +milady +pickle11 +cinco +606606 +tugboat1 +120507 +dick13 +player09 +Qwerty11 +simpsons2 +pooping +260877 +07031993 +dementia +1boomer +hellhound +blowme! +iloveyoujo +needmoney +xavier09 +southport +babygirl56 +labirint +615615 +07081979 +version +marley22 +nando123 +cd1234 +turandot +creep +200809 +oso123 +alexandra0 +1236987456 +jayjay22 +practical +lalala22 +30111979 +mommy16 +tennis07 +iloveyou42 +fuck07 +fucker8 +tito13 +qqqqqqqqq1 +legal +spiderma +unhappy1 +welkom123 +290879 +ilovehim5 +sonicx1 +010908 +221074 +master20 +naynay2 +orange19 +jab123 +lucas23 +111169 +choose1 +playgurl +wesley01 +kimmy12 +guapa +room101 +dukes1 +tete +chantell +23011997 +rebound +ssssssssssss +15061977 +fullerton1 +morris12 +060594 +komodo1 +17011996 +luiza +cookie00 +110896 +parent1 +0421 +sac123 +iloveliz1 +cowgirlup +050993 +pietje +college123 +cipollina +martin. +paintball0 +massari +fenerli +suck1t +Compaq +30101979 +vtx1800 +guitar9 +croatia1 +11061979 +12121970 +159357258456 +dragonfable +sunshine02 +gonzo123 +031988 +yggdrasil +melimelo +kmdtyjr +morgan18 +p1ssword +preview1 +cocacola3 +lyts123 +19021979 +051981 +141312 +horse7 +matt88 +anna09 +159874123 +colocolo1 +momo22 +MNBVCXZ +carota +bharat123 +346100 +02121979 +sunflower8 +shafiq +1jayden +03011981 +21091979 +fuckit420 +290395 +080780 +angler +jasond +07071979 +camara1 +sara23 +tyty12 +400020 +funny5 +mexico88 +muse +051179 +tomoyo +bac +artem1995 +lilmama5 +lichking +11061106 +100874 +sean23 +northside2 +akbar +naruto19 +rinrin +bethany123 +keisuke +deedee11 +25091996 +townsend1 +0908 +gillou +123466 +sowjanya +198315 +laural +stakan +stayaway +29091978 +lazaro1 +linked1n +07051994 +ficken69 +160995 +sana123 +valeria2 +741456 +243243 +shadow28 +krayzie +sandra18 +pussycat69 +ontheroad +hoover74 +1234432 +hellohi1 +colten +fucknut1 +qpwoeiru +adaaja +wilson23 +shawn22 +wilbert1 +denise5 +ट: +masato +gershwin +heartland +03051994 +equilibrium +lonley +23031978 +loo +adam16 +sasha1987 +george06 +camille2 +nargis +JAGUAR +ride +wu-tang +jessica94 +123music +07011981 +199523 +mutter1 +apa123 +kundan +wZR8Ycfxrm +virginia2 +darion1 +Eugene +7732844 +francis12 +december05 +pot123 +fishbowl +chivas07 +rwanda +24121979 +307307 +310778 +159258 +soleil123 +bellavista +florentin +0024657 +29111981 +cupcake15 +andrew94 +5555566666 +sara7272 +19952009 +friends06 +bigmoney2 +wyatt123 +radhekrishna +orion2 +fas +04011993 +153 +0987612345 +198006 +1qweqwe +warriors2 +07031982 +marlen1 +080782 +kurt123 +jamie4 +rostov8888 +james29 +101199 +cello +spicer +geordie1 +harley96 +rbceyz +g-unit1 +060194 +ololo123 +james00 +210676 +041988 +radiant +tiffy +paparazi +196200 +david2000 +tayla1 +spawn123 +july1980 +billups1 +03101995 +thetwins +oioi00 +kyle69 +florida22 +nitro123 +nofx +tweetie1 +broken3 +020596 +bass11 +781020 +7777777c +1949101 +231994 +030803 +Panther1 +chrono1 +frank5 +jh5thrwgefsdfs +talleres +pacman12 +Jayden +hulagirl +1change +123kkk +tata11 +emmajean +bootleg1 +darkone1 +qwerty02 +COCACOLA +scales +020609 +window2 +megan16 +february15 +260777 +agatha1 +keira +beowulf1 +100dollars +wenyin12 +19851228 +drugfree +victoria23 +dancer9 +prieto +07021981 +05041995 +Monkey123 +fifa2011 +shahrukhkhan +fireball2 +orochi +01061977 +christ11 +kingdomhearts2 +maryjan3 +198008 +020477 +sugarfoot +heaven13 +nbibyf +87chevy +travis15 +anatomy1 +05051997 +george77 +peaches6 +julio10 +h0ller +lashae +trusting +vitinho +080593 +boondock +football101 +single16 +motoko +edmonton1 +sexybitch4 +reaper123 +wanderers +taruna +bmwe36 +951753852456 +curry +ryanjames +20051976 +24041996 +skeletor +anna2005 +131400 +alaska11 +Maximus1 +legend2 +loco1234 +29051994 +chucky12 +saracen +blond1 +vball7 +081277 +shanda1 +imsohot1 +link123456 +yousuck3 +000000k +lala101 +198104 +291991 +richie123 +aotearoa +ianuarie +Cleopatra +vagina12 +bonita13 +mish777 +asd654 +gemini88 +mycats +30031977 +incorrect1 +rustik +flower17 +250776 +travis09 +stroker1 +smudge123 +clock123 +oddworld +oxygen1 +010506 +brian4 +04031981 +2bitch +k55555 +ms +100299 +rosendo +240896 +r00tb33r +26101996 +july1995 +badcompany +cbhtym +teach +123asdzxc +271095 +brandy23 +mypassphrase +26041995 +szymon1 +1q1a1z +shetland +renren15 +713houston +reload1 +eatmyshorts +boragud02 +nanay +lynn16 +ste123 +zwinky1 +14061996 +13511351 +allen11 +imcute1 +abcd2244 +tassie +0124 +chulita +muff1n +160000 +dynomite +07041993 +rabbit3 +mex123 +ccc111 +monkey79 +gearhead +texas06 +inferno666 +forzalecce +Potter +��+������� +nikki06 +2gether4ever +zaqwert +nascar38 +arista +040694 +livelove1 +alyssa9 +no1234 +010909 +woody12 +waverly +lover56 +aaron8 +13795 +iluv +raducu +291988 +01041996 +jasper23 +junker +fdsfds +181993 +305001 +valeria12 +jaredleto1 +15011995 +sexygirl09 +jimmy14 +0702 +04051979 +guilty1 +21011997 +freedom2010 +qwertasdf +jessica28 +aranha +261983 +030878 +nastya1995 +mamula +janita +ryder +sandberg +hotdog01 +maguire +bobmarley2 +Andrew01 +michael32 +pelon123 +iamlegend1 +mee123 +123kat +dvddvd +fender3 +co2010 +smashing1 +azizbek +theone123 +280778 +shadmoss +concept1 +200194 +General +bahalana +tyutyu +parsons1 +lolliepop1 +02011977 +shorty#1 +241076 +slimthug1 +199223 +guitar14 +money05 +embassy1 +tal +sniper11 +lcv7bry1cf +starwars9 +laura18 +fernand0 +Fallout3 +hottie99 +GIOVANNI +panther21 +17031978 +carolina22 +jaguar12 +159159a +Stacey +ilovechad1 +маруся +gala +lucy07 +poopoo3 +151096 +radford +19851215 +071278 +z1z2z3z4z5 +maddie7 +201984 +lilmama07 +coronado1 +darlin1 +teamo23 +jazzy101 +mascota +ninja250 +motorola2 +simplegirl +kitty06 +elise123 +zakzak +julian7 +tazz123 +wilson10 +1793 +dino1234 +bogdanova +fluturas +mother03 +buttercup0 +piggie1 +0603 +billiards +ven +sadie5 +acdcrocks1 +bastion +valentinorossi +idriss +Redskins1 +linda15 +nene16 +madison14 +zhangyan +compusa +soso123 +kotova +821212 +400701 +mavipies +180978 +skylark1 +moneyy1 +abigail4 +fybcbvjdf +jonny12 +paris2010 +bgt56yhn +400095 +010978 +westend1 +jordan0 +31121977 +mata +delta12 +monique23 +petula +mohit +006900 +fuck55 +brains1 +tomi +skipper123 +191979 +young5 +brianna23 +10401040 +zonnebloem +joey15 +godislove2 +ford2000 +anchorage +pussylips +girlss +23071995 +santo1 +Jeremiah +Antonio1 +sunshine29 +pimp2006 +slickrick1 +lucilla +star777 +izzit +nikki4 +dsa123 +audirs6 +righteous1 +limegreen2 +191078 +45678910 +Avatar +sims123 +mimi16 +justine123 +paprika1 +05101994 +bebe21 +112003 +12011979 +gay101 +16071979 +eric16 +carlos05 +280877 +billy27 +casio123 +05081995 +logan09 +lihenan +jhgfdsa +nettie1 +Deborah +roanne +september23 +gocards +pumapuma +mustang77 +22061978 +110374 +jamie! +mama1995 +oceans12 +tits123 +babby +summerland +heather09 +352352 +carlene +011235813 +040109 +february10 +fredperry +199106 +oreste +0330 +mimi07 +beto12 +hello2me +291279 +dollar123 +1ilove +290495 +bailey33 +elephant11 +dexter10 +horse4 +05071995 +gizmo22 +prenses +iceage2 +myloveone +1blessing +mybaby07 +recife +tarragon +1elijah +22091978 +amylou +180377 +bethel1 +ghost5 +poesje +mareike +02071976 +rover75 +logos +barbi +hotchicks +07051995 +01092009 +archie12 +ecaterina +inmortal +sexy007 +darrius1 +121263 +seb123 +forest12 +manuel18 +hotcakes +01092006 +yasmeen1 +voronin +eagles33 +desi123 +080977 +allblack +pumpkin4 +blue75 +cowboys14 +fresh08 +071988 +lokita13 +16081979 +balbina +thenewme +123ddd +201296 +junior28 +zoosk2010 +���+�+��� +20031996 +ghjcnjrdfif +180378 +121174 +troyboy1 +spacer +199713 +boone +monkey84 +mandy13 +1mountain +rachel8 +melissa08 +ethan5 +kalambur +patryk123 +paper12 +spruce +sandler +alan11 +sparten117 +flemming +kawasaki7 +4569 +230296 +290377 +197909 +120374 +shakeit1 +08121980 +jackson06 +kbkbxrf +020193 +rose09 +diabetes1 +formation +velazquez +280477 +merda1 +751001 +0401 +troll0 +mysp4ce +071294 +malenka +максим +20081995 +120997 +04121980 +sassy08 +cole11 +nath +konvict +mama2011 +nia123 +diana1998 +23041997 +winston7 +sprite2 +sep +trinity08 +three33 +112233d +rabbit5 +55558888 +54565456 +dedede1 +antone +princess84 +haley01 +blackknight +christine9 +181294 +only +1620 +59blood +231123 +kamenrider +jeanna +ch3ls3a +charlie20 +123456mn +jonathan09 +197825 +270578 +wishing +13021979 +follar +abundance1 +24101977 +vikings12 +061177 +0522 +liferocks +220470 +199109 +090293 +sixty +05071977 +malaria +30071981 +iloveausti +080694 +060280 +08041994 +ad1das +yahoo21 +181276 +bigred123 +peace77 +16101978 +ellie12 +benton1 +newme09 +1430 +weed01 +Oliver1 +purple03 +ternopil +shawn01 +19851022 +230676 +brutus01 +08121995 +foxyroxy1 +blonde123 +nicko +dragon82 +500005 +steamer +timmer +89631139 +radmir +chennai123 +131979 +anabelen +newguy +151214 +carlos06 +extrem +safety1st +thatguy1 +metatron +ironman3 +hitsugaya +03041976 +steven1234 +spirit2 +sergent +13801380 +jennifer88 +track123 +197011 +davila +suzuki123 +150778 +suhani +elgordo +smokeyjoe +27061995 +jack02 +baby31 +1215225 +gangrel +martin8 +dick01 +fedcba +animal6 +rojo123 +021278 +laredo1 +iluvu22 +playgames +dragon100 +patanahi +poke +lollipop69 +hellhell +angelica13 +coeur +10061976 +280896 +oliver06 +ghj123 +mommy#1 +sebastian. +sexymama! +1hotstuff +dead13 +austen1 +604604 +khalid123 +walgreens1 +160477 +sk8r4life +990990 +771122 +23101978 +jojo24 +lacrosse13 +220575 +lifeless +finster +dylan8 +batman55 +soda +damien2 +bmw750 +pepete +shitter1 +28091979 +redneck09 +loaded1 +junior27 +ikickass +cieloazul +12071976 +smooches1 +gateway5 +hayden05 +78910 +birba +rockstar24 +07061995 +whitman +jose07 +26071980 +091101 +jess15 +rahrah +hotstuff10 +crazy666 +mauro1 +soumia +cicciolina +mine4ever +natsume +12071978 +030407 +temppass1 +forlove +love2013 +spuddy +ihateboys1 +mo123456 +Joshua01 +puffpuff +parvathy +bernard2 +natasha11 +jannis +rachell +mchammer +thesame +kiki88 +hockey. +blacktiger +charles10 +104 +monkey80 +honey1234 +conner2 +lamina +181096 +121267 +qazpl +martello +16051979 +280178 +knulla +weed666 +hiromi +858877108aop +asadasad +pooooo +headphones +102300 +kottayam +bebe16 +fishing69 +mydad1 +alexa2 +matt1 +29101979 +retina +stella22 +sydney07 +160696 +hershey3 +jayden13 +iron666 +yjwfn73j +corporal +estrela1 +shadow90 +ekbnrf +191093 +300377 +gbemisola +231297 +vball13 +wakaflocka +250995 +sangohan +31011996 +mikie1 +nikki17 +133333 +cisneros +saregama +august89 +tackle +260395 +BESTFRIEND +freinds +lover77 +gophers +13041979 +821012 +011181 +quan12 +travis07 +16041997 +albert13 +cbr929 +softball05 +301276 +221981 +101400 +kundera +lovin1 +hapkido +28091995 +doggie3 +roxy07 +dkflbckfdf +fuckyouass +legia1916 +neversaydie +saints10 +lovely77 +lucky05 +dolphins! +tiffany16 +gundamseed +bumblebee2 +432100 +membership +chevy89 +sunny6 +jinx +flower0 +010596 +123453 +piratas +surfergirl +PIONEER +goody2shoe +gfghbrf +ronnie10 +starchild1 +199516 +maria27 +ultraviolet +1nikki +sesshoumaru +donotenter +loriann +25061977 +godjesus +orange07 +tramonto +abramova +skyler12 +conner123 +pika +rach123 +stephon +1norte4 +victim +sunnyboy1 +130378 +1vision +111008 +gizzie +anuska +escalante +antioch +lulubelle +ginger24 +tristan7 +1kittycat +steven88 +jaylynn1 +1472580369 +notrust1 +cinthia1 +mike2000 +crunk +09081994 +kelly4 +fucklove21 +palani +william19 +198005 +Sandy +thewall1 +123456789789 +sentry +catgirl1 +raman +suckmyass69 +solito +foreman1 +b123098 +ifiksr +abab1122 +ace12345 +210975 +220376 +001964 +veronica3 +dig +seventeen17 +trans +teflon +aspen123 +tutu123 +fender. +cece +carlinhos +batman0 +nene10 +081096 +310596 +schweini +123aaa123 +tapioca +yamaha13 +1040 +dumpster +04051978 +19091978 +joey666 +july2004 +angelina3 +CINTA +rooney08 +12031978 +natalie08 +sheila123 +blackie123 +1hotmom +backyard1 +crosby1 +madman123 +horizons +mamasgirl1 +damian666 +160194 +greenfrog1 +mommy77 +george1234 +171981 +000010 +crhbgrf +bartbart +denis1995 +02101994 +stacks1 +anniedog +159000 +cricketer +teamomuxo +hope4me +sk123456 +mb123456 +poli +ricola +february11 +nena14 +0315 +skizzo +300779 +bullet13 +fiction1 +masquerade +nene11 +yoselin +leticia123 +1324354657687980 +20032006 +marissa7 +jeanie1 +z00sk +stang1 +020178 +david89 +230776 +31101977 +look12 +smokey77 +initialD09 +lkjhg1 +iwashere +20042007 +serg123 +311200 +asbestos +climber1 +danyel +080502 +smokey07 +q55555 +lethal1 +mike04 +Playstation3 +sabrina5 +tpxerxjmp +110206 +11234 +paleta +sing123 +31101979 +741023 +requiem1 +john101 +miranda9 +1brooke +180879 +dg123456 +moh +edward1234 +alive1 +taylor77 +lala24 +19831212 +moron1 +26102610 +flappy +king32 +section +jennifer25 +born2die +bycnbnen +vbif +YeGbpltw2012LOl +louise14 +marijuana420 +danielle123 +moeder +cheyenne11 +marine13 +06051995 +vikusya +19861018 +ghj100 +suckit. +16071980 +oliver88 +thanksgod +fen +evolution7 +nothing3 +main +310577 +Sascha +jaqueline1 +edward9 +marcus4 +makati +Predator +20032005 +asshol3 +shrink +78951230 +11051977 +amo-te +rclens +giratina +14061406 +gavin2 +210279 +987654321c +300395 +wanksta +0415 +ninja666 +cabowabo +Tanjiang999 +blue97 +63256632 +geogeo +3223 +mam123 +27011980 +foresight +benson12 +rayallen +1starwars +kenzie12 +emmarose1 +140404 +shoebox +Justice +TIGERS +xlf65b6666 +010378 +polgara +myplace +mw0720 +starwars22 +blitzen +elpaso1 +aaron1234 +rancho1 +makeit +clocks1 +barbie17 +high123 +1234567890qwert +boloto +chicago9 +rrrrr1 +melissa17 +trecool1 +05071996 +bigpenis +prettyinpink +821125 +tigger26 +pappa123 +chevy05 +maxwell01 +260177 +030778 +13061979 +ranger3 +19861220 +199221 +mah +golden01 +Eric +040980 +rooney9 +actarus +120698 +jemma1 +angel1985 +leslie11 +08071981 +prima +lthmvj +crosscountry +071279 +azteca13 +07111980 +santosh123 +justicia +freund +28121979 +199108 +perfect12 +passover +andrea9 +tiger74 +br5490 +FBi11213 +bassin +gopal +goofy12 +keke14 +kendra2 +converse12 +usa777 +mandarino +YKDpJ67mgd +muffin21 +112233m +fulham1 +olateju +nina22 +090381 +squish +yildiz +09121980 +qwertz1234 +ruthann +banjo123 +crapper1 +jade22 +aus +1364 +yamaha85 +aggarwal +114455 +UzBJNEi451 +starlight2 +plumbing1 +21041978 +pinky! +flamme +09101982 +17081977 +brooke15 +feelmylove +boobooboo +willows +nikita10 +page +130896 +070380 +sadman +5blood +1artist +staff +luckylucky +marcos10 +julie01 +austin. +mama17 +081988 +samuel14 +22071995 +phialpha +maddie07 +suhail +09011982 +disorder +161194 +190909 +marijke +bib +dana1234 +290995 +traxxas1 +lena11 +sargodha +andris +assfucker +55555k +kevin05 +010507 +!@#$%^&*( +dennis22 +19121977 +10021976 +everclear1 +221173 +kswiss1 +just12 +fk +hotmom +400019 +Amanda1 +mumu +justynka +a33333 +090579 +teamo17 +cityhunter +22011979 +20121996 +11101976 +leon11 +mm123123 +green100 +star95 +docdoc +bay +evasion +14001400 +camaro95 +290777 +sweety23 +estonia +06051981 +19841124 +19061996 +fkmabz +alpaca +nicholas16 +elyssa +the1ilove +270979 +powerball +heynow1 +ohiostate2 +beautifulg +vfyxtcnth +alpha5 +sublime69 +kacper123 +mangesh +jeric +aaasss1 +blondie69 +monique21 +13061996 +hello999 +dingus +Herbal +matthardy +marisela1 +blazer12 +181275 +simon3 +icp420 +10071979 +ryan88 +030995 +05101980 +maneater1 +kulet +the2ofus +option1 +141888 +alexandrea +0801 +010878 +likeme1 +bambam7 +201204 +princess66 +wolfdog +darkness5 +shithead3 +domino2 +kenyan +denis12 +15love +yourmom8 +fishing5 +hunter66 +hummingbir +jorgito1 +caddy +K. +dance21 +170794 +vitamine +`12345 +nicodemus +daxter1 +Monday +hotmail7 +candy77 +reb +melodi +lovesit1 +haley11 +36903690 +monaghan +111111v +280595 +dickey +nikky1 +brownie3 +johnny18 +HESOYAM +Kerstin +HPG2N89qif +herve +19861022 +aaaa123 +huguito +steve7 +anjelik +081208 +april69 +150795 +jehovah7 +16041995 +jenny09 +cookie0 +kaydenlee +2232 +billyb +102589 +179324865 +mrkitty1 +amazing2 +bluesky2 +abhimanyu +2124 +randomness +kos +sebastiao +21051995 +eagle11 +andrew91 +matt99 +baker4 +sexy2006 +bradly1 +z123321 +inteligente +tocool +12345az +missingu +230000 +peace8 +stasstas +Newlife1 +kakashi12 +montre +harbour +whitney12 +xanadu1 +terrific +ehlbcTW +070709 +02021970 +69lover +pbyfblf +06061976 +brenner +0701 +lovely88 +Shadow01 +rajneesh +misio +qwezxcasd +rose88 +planete +10111975 +italia10 +edgardo1 +dak0ta +tranny1 +dressup +milanello +helpme11 +znt: +190378 +rubydog +adnan123 +frontech +havoc1 +.adgjmpt +funnygirl1 +tobias12 +13751375 +godfrey1 +destiny15 +lastchaos +lovestruck +020478 +tiffany09 +arjona +tambov +dewitt +hornet01 +sierra5 +worm +wilson22 +youkofa569 +090882 +guerra1 +1122330 +197901 +max1997 +rukhsana +estrella5 +poop44 +Grace +cirilo +197803 +horst +saturn01 +regiment +sexesexe +03121979 +clark123 +811028 +darion +110046 +woodside1 +p2WcFfjCvr +2muchlove +project123 +kris1234 +mike2010 +contrasea +kelsey14 +14211421 +02031996 +abcde3 +green26 +12061977 +21092109 +martas +carlson1 +jeremiah7 +hase +sixpack1 +miller13 +jasmin11 +30051979 +mike2007 +angcuteko +billkaulit +199126 +123qwe456asd +021979 +pitchou +xt97794xt +saints01 +55555l +ayamgoreng +07031981 +grace07 +voltron1 +warlords +buick +silver00 +eclipse7 +jason26 +office123 +sassy21 +la123456 +nena11 +ashwani +buterfly1 +marcie1 +bedtime +harry22 +otilia +125478963 +joanne123 +travis4 +02121978 +santillan +mama45 +30101994 +fordf100 +qayxsw +010709 +adegoke +santi123 +pintail +maggie18 +iloveyou30 +dripik +affection +nate13 +cj12345 +987654321n +1alicia +31051981 +anything12 +sarah101 +faggot6 +xterra +24011995 +jamaica7 +123321b +212325 +osipov +220874 +skater24 +jaquan +vampiro1 +firstlove1 +sycamore1 +rjhjyf +090900 +YAgjecc816 +300477 +texas254 +phantoms +akademia +djkxbwf +h4HgAipGzu +reanimator +Angelica +shrikrishna +mifamilia1 +lobo123 +joiner +spaces1 +overit1 +holyshit! +170377 +134625 +reyes7 +19801981 +jason27 +lilli1 +041294 +exotic1 +24011996 +16101979 +hardhead1 +Darkness1 +Danny +baruch +170797 +30101978 +pup +bilabong +witchy1 +june2004 +020978 +lilbear1 +041095 +whysoserious +loveisreal +qwerty777888 +talula +sexyman123 +firstlady +amber9 +09101993 +mskitty +petra123 +enjoy1 +23091978 +far123 +001200 +021978 +brenda3 +schatz123 +dogeatdog +vjhjpjd +oneblood1 +jew123 +241294 +123as123 +191993 +iluvu3 +512 +050978 +truelove3 +QWERTY123456 +jurassic5 +102800 +mother69 +bullhead +davidp +band101 +159753s +ika123 +tinker21 +february24 +vegeta11 +abcde6 +korn1234 +070293 +12345qwertasdfg +getjob +jg1234 +111964 +30061978 +1478963a +internet7 +mybaby13 +Winner +linkedin69 +alexis25 +kimikimi +popstar123 +zhangqiang +pinky8 +030180 +tyskie +jjjjj5 +penny11 +billyray +laurens +jordan91 +shana123 +fatpussy +bigdog10 +anna1 +19861223 +bluenose1 +wsky0o0o0o +man2man +20102007 +assassinscreed +mhaldita +11113333 +20121976 +selma1 +nick25 +cowboy! +chris1990 +654321123456 +gondon +hanicka +folashade +xtkjdtrgfer +bradley01 +rollsroyce +Manchester1 +pipers +romawka +bumfluff +qwerty333 +steph14 +everytime +poodie +saw7139 +1317 +pedrito1 +rana123 +costa1 +7inches +anna2006 +311296 +MONIQUE +mustang14 +rj1234 +anywhere +280393 +ilovesocce +warrock +789456qwe +0316 +123god +01081996 +travis14 +karla13 +reymysteri +firestar1 +ingenieur +christina5 +stepashka +120275 +lukinhas +hellion +bulldozer1 +080910 +blacklab1 +chickie1 +240196 +j123098 +abc123@ +110077 +daisygirl +canton1 +petronas +satchmo1 +sexyboi1 +radius +yahoo01 +199227 +19841014 +220796 +lilwayne09 +302019 +namnam +huyhuy +flamenco1 +19821212 +jimi +lime +147258963 +golftdi +andrea05 +120899 +susannah +wolf1 +varitek33 +ticket1 +sexytime69 +power01 +angusyoung +psycho69 +110575 +angela14 +Hilary +cjxb2014 +Golfer +22061979 +qwerty12345678 +future12 +22021977 +19871212 +james2007 +saucisse +amina123 +chevy24 +notagain1 +stupidass +charlie02 +hepburn +07041995 +sexymama69 +010877 +barb +cheater123 +torres12 +myking +hanshans +jessica04 +MAHALKO +alex1974 +bloodred +jenalyn +ducados +310575 +gaia +LOL +Ou171423 +verite +3puppies +daisy9 +lenicka +chandler2 +250996 +barbie08 +24051978 +ADRIANA +33663366 +emilly +newyork14 +21081994 +spencer4 +marley10 +casper99 +zzzzxxxx +aretha +havingfun +crystal18 +thekiller1 +rjdfkmxer +realtime +500045 +mono +adeshina +knicks33 +camelo +190477 +nimbus2000 +germany123 +pleaseme +19381938 +pissant +timo +slippy +maksim123 +drummers +091981 +12021976 +power22 +andrew93 +goodtime1 +300676 +xxxxx6 +240576 +021177 +goahead +mushka +19871012 +191293 +cocktail1 +caserta +марина +diva1234 +kiss23 +20071977 +030795 +mainstreet +sasha99 +20021976 +leigha +665665 +stooge +cb +ambition1 +blueprint1 +dennis23 +swimmer2 +erick12 +july1996 +280576 +february27 +09101980 +podarok +order +17021978 +140194 +lynn1234 +arbonne +asshole24 +24111995 +puck +falcons12 +venganza +jordan89 +02091974 +Walker +devina +chickenbutt +199009 +cable +riverrat1 +lopez2 +benjamin13 +babyboo3 +131075 +loveisblin +Qw123456 +neophyte +romina1 +mommy25 +tommy9 +marilin +gloucester +destiny. +101272 +jetlee +h3llokitty +198924 +kyle18 +bloger01 +0564335 +buttsex69 +elpapi1 +rugged +sunfish +ondine +teddy23 +cabbages +127 +060393 +17711771 +171993 +locker1 +pseudo +feliz +dog100 +calendar1 +251978 +1bambam +22012201 +10061979 +babygurl24 +pinina +d7777777 +winnipeg2612 +05041977 +700075 +cableguy +030294 +tribute +Simon +dayanara +waheguruji +secretaria +schwimmen +marlies +jerry01 +24101979 +010203q +lapierre +boricua7 +nan123 +steak1 +natalie9 +23111995 +yahoo8 +millencolin +moorea +anaheim714 +1love4life +pompino +brindisi +adrianita +locutus +sommer07 +bitch87 +261096 +zxcvbnm5 +miguel. +100599 +070181 +paris07 +bestmom1 +22032203 +calibra1 +london05 +tiffany08 +knight01 +03061996 +maryjean +owned +nirvana9 +yojimbo +.kbz123 +february28 +njhnbr +common123 +23061978 +010778 +carebears2 +lilith1 +supremo +hiphop4 +takeme +always12 +balboa1 +runescape! +18101977 +20052009 +linda7 +240474 +002233 +apples6 +dustin69 +290179 +stjoseph +dima007 +160495 +sweety01 +101002 +jason143 +pinky21 +theanswer3 +ffffffffffff +kaycie1 +lolli +winters1 +2022 +����������� +27021994 +29011981 +surf12 +grazie +180395 +cornelio +19101977 +13101977 +cthuttd +ftw666 +lhbjkjubz2957704 +usmarines +290676 +fatass13 +synyster1 +200795 +192 +july2009 +tape +friends16 +daddygirl2 +class04 +005005 +catcat123 +u2u2u2 +yoyo22 +malice1 +muchacha +06021996 +gee123 +raqdc4ml +Tigger1 +babu123 +rats12 +3388 +scorpion2 +davidk +19870111 +iamgood +415 +buster02 +831004 +19881989 +piscine +raiders34 +cowbell +14071979 +gregory7 +sammy77 +shannon9 +pimpollo +eiknon11 +7777777j +bigdogg +passenger +boy12345 +augustine1 +bread123 +qaz789 +freeport1 +manoka +overlook +blaze13 +polina1 +walters1 +srinivasa +rocket3 +010994 +aderonke +synapse +yv3bcdaq +giveit2me +tyrone12 +theresa2 +270377 +mybaby7 +01011998 +081982 +1rosebud +laracroft1 +STEPHEN +21031977 +friends4me +asdfghjkl456 +mayhem666 +CONNOR +jerry3 +shianne +ray-ray +harmony7 +mythreesons +bayarea510 +1williams +02101996 +hidalgo1 +chibuzor +april92 +10071977 +screwed1 +bienvenu +lorenzo123 +24081979 +jasmyn +111998 +19871029 +luv4me +everton11 +produce +6453 +patches7 +riley13 +iamme1 +pinkpig +horse13 +335335 +cowpie +freebee +895 +bunga +27061993 +neumann +l00ser +monsta +tigger66 +011989 +020896 +godswill1 +residentevil4 +riyadh +happiness! +thisis +vjcrdbx +speedy7 +7414 +thereds +liljoe +ilovemyspa +666666z +playa5 +180994 +031982 +811118 +cammie1 +061178 +pokemon09 +michael44 +ededed +oleg1992 +frdfvfhby +mavrick1 +manuel5 +1001wdst +05081980 +200179 +fresh21 +wilmar +wrinkle1 +lovemy +140696 +03041975 +indianajones +decent +cocopuffs +230975 +fidel1 +23022302 +svetasveta +bibou +still +11021979 +goodwood +tucker7 +nutsack +isabel13 +belmar +sportsmen +nastya12 +10031977 +rascal13 +250278 +bandung1 +281196 +31081995 +tamia1 +labebe +w123456789w +32113211 +drunken +larson1 +Valeria +21031979 +redbirds +faith6 +011982 +zumzum +dum +kerwin +841226 +varghese +141618 +shalom7 +palencia +Stephanie1 +���������� +anna24 +brian6 +02021972 +rs2000 +phoenix! +animals3 +newport7 +moviestar +leverkusen +florida9 +mistic +twojastara +summoner +wisdom12 +29071995 +4sunshine +060380 +dantist +zaqxswcdevfr +olvido +azerbaijan +blowme123 +squeek +elena2010 +mille +cokecoke +ghjuhfvvbcn +230897 +fireball12 +11111c +lisbon67 +akash123 +123123zz +m123456m +d41d8cd98f00b204e980 +blackbear1 +cartoon123 +samsung! +lwxlwx +811811 +97979797 +lala18 +poolshark +chumchum +rouges +198003 +beatiful +bitch2009 +vondutch +coldwater +bouddha +090382 +paulina123 +theIigE4x2 +preston3 +luckyone1 +baptist1 +barunka +frytol +atleti +1jehovah +555550 +051077 +bruins77 +grasshoppe +170193 +08011994 +ruffryders +holly3 +shaker1 +05021995 +160296 +april1991 +english3 +20051978 +leafar +Jeffrey1 +brandy5 +250696 +090182 +minidisc +GLORIA +011984 +fluffy69 +gotribe +0.0.0. +black00 +pinkflower +tromba +mariann +withyou +ciao1234 +starwars01 +raptor350 +adaeze +041079 +NUL +imsosexy +scorpio9 +giadina +assass123 +shadow32 +blue4u +19861224 +000789 +19861017 +bigfoot2 +oigres +letmein22 +getmoney21 +shanta1 +imalone +ilovebobby +anna1982 +beijing2008 +ewankosayo +swetik +BqkTrqN844 +carl12 +mistie +magic9 +bacchus1 +270177 +091982 +cupcake6 +nylons +#1stunner +love1004 +love112 +bear99 +renee7 +131196 +boobies12 +bull123 +carmen23 +may1984 +200896 +williams11 +lover20 +santiago123 +2fuckyou +bedrock1 +2qwerty +snoopy99 +mimamima +240695 +catcat12 +babies123 +spokane +juice2 +greeneggs +yz450f +superman34 +142356 +GOLDEN +timmy3 +summerfun +popokatepetl +10121976 +anastacia1 +what2do +fener1 +dylan99 +junkyard1 +tony77 +chadreed22 +emmanuella +17091979 +jodeci +plummer +vasco1 +majeczka +071295 +li +speedy3 +23051997 +andreea1 +angela18 +buheirf +ninja! +dudule +1manuel +death3 +30011981 +19861013 +060381 +horosho +251208 +davidl +08031978 +sinful +samsung0 +ashley85 +corona123 +52013140 +alejandro123 +mahina +jessie69 +enterme +bonner1 +unique123 +090693 +minniemous +boomer5 +possible1 +moonman1 +Bentley1 +462016 +120472 +bhagya +artemida +diana01 +20051996 +maraton +caregiver +kristina2 +560072 +heaven5 +12345zz +charcoal1 +rambutan +vandread +superman28 +020677 +Nikola +24041978 +03101979 +lynnlynn +lamar2 +army11 +taipei +150496 +fake13 +a123123a +arsenal5 +notnot +samsung09 +14051977 +elijah13 +samogon +mango5 +210874 +bornfree +twostep +210876 +bookitty +getrdone +091294 +270678 +april2010 +sammy111 +12051977 +cookie44 +09111993 +super21 +nicole82 +101299 +vasilenko +miraflores +34563456 +nagano +rjgtqrf +zachary9 +ankit123 +krish123 +lovemebaby +kasabian +freedom0 +doris123 +nike01 +177777 +rachel08 +underscore +revenge! +19861126 +040795 +amooti +iamthebest1 +classof2012 +mizuki +270396 +111963 +courtney9 +19851220 +travis08 +enrique123 +65stang +waltdisney +denise69 +fktyf +timon1 +03061978 +251196 +hank123 +reference +manolete +rere12 +pokers +holsten +schmidt1 +1356 +post +london00 +FQI3P8arjg +vonvon +841020 +17051979 +21AINIYAN +COURTNEY +super007 +philippe1 +tbird +a9999999 +nasdaq +pinuccio +gangster14 +jackass01 +babygril +ladykiller +brooklyn01 +Liverp00l +gangsta8 +lori123 +myman1 +cubs12 +moriarty +fattie +nicolas10 +280795 +pikachu25 +faraday +841012 +myspace83 +katie18 +qwaszx1234 +jayjay5 +bubble7 +anna2004 +love2me +roses12 +pfqxtyjr +bloodgang5 +guo150 +260677 +basspro +19861124 +110375 +austin25 +zenit +jamil +pumas12 +davina1 +pumpk1n +mimita +gigant +niceboy +28031996 +400003 +25091994 +marriott1 +poohbear20 +leothelion +lollypop! +120398 +140275 +toriamos1 +45874587 +luisa123 +sherlyn +ghjcgtrn +passw0rd! +gogetit +march01 +350chevy +ina123 +11021977 +smiles4u +04121981 +summer19 +Fuckoff +birthvillage +240477 +1azerty +suleman +uekmyfp +olympic1 +fff123 +cancerian +redblack +missy1234 +151981 +190994 +som +1cheer +jakester1 +extremo +mypassw0rd +sofia12 +razvod +morientes +jordan34 +diana7 +music2008 +uyjvbr +sexlover +rock77 +26101978 +krishana +realman +baller45 +aggro1 +13701370 +getlow +170477 +29111994 +654321p +100996 +quicksilve +paolo123 +153486 +lolo22 +kopytko +198531 +david2006 +ricky01 +cooper14 +checho +140505 +24121978 +june1997 +diebitch1 +practice1 +passion4 +royston +pierina +bowwow11 +aud +30003000 +eurogunz +utvols +ANDRES +activa +15051505 +rangers7 +my_komp_777 +j00000 +breebree1 +elvis11 +faktor +seductive +chiquitin +09071980 +ag1234 +basket10 +houghton +hottie44 +cheese15 +daddy'sgir +bibibibi +211096 +akinsanmi +gorman +my3dogs +creator1 +deadman8 +bmw325is +23031977 +saulute +jessica00 +55554444 +vball3 +ghostdog +zbyszek +230276 +concorde1 +2113 +bookbook +evybwf +198904 +getmoney22 +551976MS +tony06 +050794 +carlos28 +841024 +diedie1 +bowers +polo90 +02081975 +vincent13 +Olivier +199302 +christiaan +t11111 +mg1234 +jambon +150296 +raul12 +mylove18 +anhmaiyeuem +1september +nou +theduke1 +please11 +stefy +shippuden1 +240575 +197928 +462001 +sasha17 +money2007 +cosmos0901 +kolejorz +dearmama +valerian +020796 +chameau +dashing +01121979 +20081975 +moejoe +maddie09 +reyes123 +2530 +dylan09 +oneway1 +bonghits +lilies +01051977 +laspalmas +khongnho +mendel +enrico1 +cameron02 +19733791 +james666 +xuliang +philly123 +leyla +breanna123 +123dima +bomba1 +10081976 +camera123 +02091994 +kleiner +cutie95 +jeff21 +nyuszi +nick19 +rhodes1 +Scott +excaliber +minimum1 +destiny99 +fang2008 +lewis2 +19734682 +bignasty +lovekills1 +downhill1 +030994 +shannon6 +821020 +110707 +hottie93 +26121979 +lakers15 +00000q +tiff12 +qazqaz11 +251995 +anna25 +06081994 +thatbitch1 +zxasqw123 +allsaints +chuleta +angelo2 +22101997 +fish10 +1buttercup +101201 +punkie1 +truckin +battlefield2 +qqq333 +reddog123 +tinkabell1 +anarkia +rafter +181982 +hiphop10 +pillow123 +7891235 +hotmama123 +110775 +fartman1 +080695 +samuel12345 +23121997 +791111 +tiktok +zara123 +28021996 +bengal1 +emreemre +gerbil1 +melchior +011111 +bolleke +050795 +180779 +gabriel17 +26041981 +moomoo! +attorney1 +markjoseph +lollipop. +25292529 +blake11 +198229 +mallari +19791980 +donavan +28071976 +anagha +Logitech1 +Blizzard +winter98 +water21 +kyle07 +smiley69 +linkedin8 +sarahjane1 +amberlynn +fatkid +shabby +200296 +628628 +jean1234 +guitar77 +onelove4 +171977 +24081996 +eyeshield +aguacate +12345610 +math12 +14041979 +willy12 +wolfy +1tennis +310777 +driftking1 +Babygirl1 +victor69 +findme1 +norcal1 +darkness66 +199421 +ramrod1 +nicolle1 +egshm1 +barcelona8 +duckhunter +groupd1 +megadeath +steelman +test99 +567567567 +flyer1 +Gabrielle +v3URIAh1 +Dreams +twat +karan123 +wildcats10 +love209 +198109 +ledzeppeli +panda14 +krizia +lalala4 +22081979 +realsim07 +killer96 +flower45 +020578 +darkorbit +vanessa17 +torana +Autumn +lefthand +oliver8 +america16 +sarmat +joejoe12 +130875 +suckit3 +adc123 +ahovbipw +95civic +matthew77 +1436 +1052 +cobra12 +qwerty911 +102500 +the1andonly +mewtwo1 +warcraft4 +060878 +femi +30011979 +2321 +mainman +198129 +united2 +rahima +halo3rules +26081995 +color123 +shifty1 +888888881 +daddad1 +pelle +boulou +123123123z +homey1 +05051976 +sasha2011 +manika +charl0tte +vlad12345 +yahoos1 +bubba99 +7nc4lqW7tO +03031998 +80959002443 +asdfqwer123 +aqualung +asd098 +dirty12 +myfamily5 +mikey10 +s696969 +shelly2 +duran2 +jamboree +tony101 +anillo +041179 +Julien +13111979 +contra1 +vaseline1 +123456ru +06011981 +wi11iam +chantilly +assmunch1 +130676 +52255225 +skater88 +tuan123 +140576 +scorpion7 +210496 +chloe6 +197210 +linton +dell10 +Fktrcfylhf +240596 +duke33 +iiiiiii +21love +06071980 +041078 +copain +kailee1 +alabaster +charlotte0 +kornelia +270976 +agapito +savannah4 +czz224466 +po +heyhey11 +fidelio1 +phoenix8 +alyssa15 +1adgjmptw +21061979 +andrik +granny5 +forsale +tippie +landon05 +16051978 +borland +dorota1 +1minnie +addison2 +nuages +jaymie +13081979 +peanut101 +111156 +qwerty0987 +fuckyou321 +040779 +1jamaica +RAND +heaven4 +020696 +boobie2 +fuckyou187 +chickboy +blue54 +vt +rammstein6 +jekjek +090679 +shane69 +surfer69 +02041973 +beaner2 +sorpresa +lions123 +nji90okm +klingon1 +emotion1 +borderline +121070 +060479 +mexican4li +annarose +sarah24 +mommy34 +040777 +23121978 +111111n +strawb3rry +dfy.if +wsxcde +kitty. +limestone +kuuipo +fefefe +victoria20 +ninjaman +23042304 +1google +rol +280578 +earth123 +red911 +7jokx7b9DU +oliver77 +jersey2 +jhjhjh +hailey03 +gokil +butter13 +marina23 +matveev +righton1 +shade45 +slobodan +fatal1 +niewiem1 +bigjake +199519 +ipod11 +199224 +asking +251296 +coolcat2 +abby08 +chimie +12111978 +jessica90 +rajababu +2426 +onelove69 +katrina12 +shambala +482001 +fgh123 +mobius1 +jodie123 +����������+����+�� +single2010 +igetmoney2 +disney13 +Kennedy +buster44 +jjjjjj6 +jellytots +20091977 +s1mple +cheezy +120304 +NISSAN +05061995 +26121977 +979899 +azerty10 +486255 +weezy12 +09081981 +ilove9 +050576 +Alessandro +199555 +45544554 +14061977 +d55555 +08101980 +fuckyou100 +110597 +banda1 +811225 +lauren02 +tristian +zero01 +frenchkiss +nownow +filemon +sierra117 +gilbert2 +DEBBIE +bansal +01101994 +rayman1 +831024 +paresh +abhi1234 +24121996 +chris97 +eduardito +180396 +198317 +123321qaz +06021979 +08061980 +peanut00 +pinky4 +24081977 +eagles8 +ASDFG +ybrjkm +florida06 +bayview +sexylexy +23121979 +spotlight1 +lagnaf +WINSTON +yfl.if +madhumita +orange27 +dancing123 +pudge +jaelyn +naruto91 +101968 +lindsay123 +160195 +mine69 +delbert1 +230376 +baller16 +x870624X +170596 +05061996 +xxxxxxxxxxxx +inglewood +123568 +paperboy1 +rebelde3 +monster08 +19861030 +shelbie +rikardo +lordvader +amor25 +Tatiana +2money +bhopal +mafille +jesusito +hope01 +iubireamea +beast3 +13071307 +smokey15 +frends +nokia3200 +woodman1 +amanda05 +weezyfbaby +random13 +xthysq +55555j +musa +060697 +spongecola +nasaud +alliyah +dru +thomas55 +060181 +122221 +10011975 +snowball7 +chloes +gateway200 +112800 +mko0nji9 +leandro123 +peace4all +ufptkm +finale +9191 +eagles69 +bowwow5 +140877 +drugsty +time12 +780405 +teddy101 +mckayla +wildcats7 +65432 +pimpin15 +model123 +fuckme420 +ihatemyself +lorella +familia10 +sharkbait +jacinta1 +star34 +freedom88 +010200 +bypass +callie11 +music2009 +meeeee +bobo22 +gators123 +lalala6 +jackblack1 +barney13 +basketball10 +realbetis +house3 +airline +0069 +yomom1 +StarWars +malathi +191094 +asshat1 +21101978 +781025 +cheezit1 +anton1996 +allmeu112 +pas100 +angel2004 +pink100 +a951753 +penguin4 +jenn12 +1poopoo +132639 +zxcvb6 +mommie2 +copper22 +cool17 +melodie1 +elbert +dingle1 +02041975 +19871225 +ANGELINA +danielito1 +webmaster123 +southside8 +44gatti +cristin +snails +amenamen +hjcnjd +deathcore +ghost7 +290178 +sophia08 +tygferrfddss +lakers33 +success4me +socialwork +10011997 +244 +chances +palesa +111166 +simply1 +megamega +capella +17091980 +internet! +mike66 +iloveemma +apple55 +131977 +valentinka +happiness7 +290878 +booty5 +114 +1477 +rockstar18 +chaplain +nirvana11 +rekha +ana12345 +poop15 +richy1 +harsh123 +puss +blackhole1 +ddzj49nb3 +pur +katie09 +01011962 +avengedsevenfold +trouble69 +12081976 +drinking1 +whiskas +jaimie1 +password37 +rjycnbnewbz +creat1ve +soundwave +junior26 +daftpunk1 +roxas13 +02111980 +bella99 +brainiac +evermore +aline123 +stormy123 +javier3 +time2die +wiener +0905 +nayarit1 +sanandres +bruder +chase13 +broke1 +yasin +199303 +geppetto +midas1 +nicole44 +reymisteri +130496 +0904 +catherin +kaitlyn123 +Nikolay +crystalsaga +291078 +081178 +freccia +muggsy +bryan01 +jackson14 +honda85 +snoopy25 +costantino +kimura +rockstar17 +balazs +theghost +fatboy21 +icewater +theway +jade07 +artem1997 +freunde1 +0425 +sakura7 +11031977 +justincase +30041996 +preston12 +dragon83 +lokillo +freak! +bloomfield +hhhhhh7 +diddy +westside! +bunty +1truck +judgement +aleksandra1 +rushhour +tomino +patrizio +elvis69 +watchout +yxcvbnm123 +kritika +billings +SHORTY +shea +akuganteng +gerald123 +260795 +raymart +2p76xH2xHV +p1p2p3 +123a +lollipop10 +1350 +mixmaster +puffin1 +mcnabb +nad123 +yeuemnhieu +intan +beata1 +fatboy10 +tara1234 +hubertus +contractor +moliere +Gordon24 +18031979 +sammyd +marino4ka +cheese88 +sodium +lindsay7 +lib +porfavor +nichol +gigglez1 +lunette +1593572486 +210476 +mainz05 +greenlantern +ilove17 +vbnvbn +jamielynn +15081996 +redsox4 +Kitty +9797183185 +giggsy +purelove +junior420 +hazeleyes +manman11 +ragdoll1 +19216801 +flowers22 +irish12 +ponorogo +dalia +newport01 +denis1991 +charles! +bella25 +barby +9788960 +gfyt63gd +tigereye +021195 +sunset7 +190300 +30103010 +bekasi +harleydog +chico11 +Nick +zxcvbasdfg +love1981 +anorexia +dima1988 +ryan20 +tink3rb3ll +amor17 +westfield1 +0525 +zuzia +celeste2 +uglybitch1 +oscardog1 +james87 +sasuke01 +liuyang +jenny07 +account2 +dragon79 +007911 +ponce +d1bd6bc58c1d74df41a957489c9942f5 +memphis2 +030373 +dmx123 +yousuck. +22081978 +1360 +plenty +cachorro1 +joker88 +123haha +emporio +fucker21 +kocicka +11111974 +thu +chinois +01101978 +cfvfzkexifz +bitchplz1 +phillip123 +lilla +iloveyouf +bitch111 +james2009 +rocky24 +sweetpea7 +farmhouse +edmund1 +290677 +261993 +sanluis1 +gingerale +roma1927 +199005 +2120 +010199 +1281 +151095 +Password99 +sparkplug +772324 +grace23 +schoko +rosie11 +themis +afghan1 +140474 +HOCKEY +easier +55555555555 +montesa +7546 +4545454545 +yellow27 +boogie01 +15051977 +davidt +Alison +chyna +kayla1234 +chicago22 +dirty123 +21111995 +124365 +2357 +vance1 +armine +nastya2010 +giorgina +ilikepie123 +skater09 +massi +121214 +potapova +amanda92 +cassie69 +lesbians1 +kelly17 +ravenna +050494 +190993 +babyg123 +17111995 +19851023 +25081978 +chi-town +26061979 +dumbfuck1 +pooh24 +newport20 +thaddeus1 +2536 +hulk12 +paska123 +oluwadare +others +misty5 +beautifu +071177 +nallepuh +261276 +586586 +virendra +cellphone3 +dad101 +126 +intruder1 +dvorak +youbye1231 +donkey7 +samsam12 +19051996 +228228228 +colorado12 +thistle1 +murat123 +sketch1 +12101974 +showdown +19851217 +s0mething +090280 +ashton3 +197926 +199420 +86026403 +honda80 +calvert +ranger75 +060978 +220474 +17071996 +13041304 +tanning +polniypizdec0211 +123abc123abc +krystian1 +280677 +biker123 +cholito +volcom23 +beauty21 +bigdogg1 +gang123 +elmo15 +puspita +110674 +rock15 +7v8bv5TeoW +pebbles7 +kiki07 +1business +jamie08 +19971998 +adrian05 +nutcase +1344 +rfrfitxrf +imani +30121996 +w0rdpass +1237 +denis1996 +rfn +naiara +20021977 +jason28 +pandita +66chevelle +07061993 +molley +131072 +paris5 +andrea89 +sebastian12 +06041981 +040408 +12091996 +kaylee06 +14121996 +diva07 +050280 +chris1991 +15101975 +1teddy +lele12 +vlad777 +120199 +eclair +falcon5 +mjordan +Alexandra1 +horsepower +301094 +02071995 +concours +number1son +ping123 +080183 +jessie08 +211296 +24021976 +chhaya +12781278 +gabriela2 +210277 +cassiopea +26031979 +shanky +coolbuddy +winthrop +domino11 +170378 +boxerdog +turtle8 +spence1 +123456gh +1hotbitch +160378 +elieli +1�����2������ +sugar69 +030695 +homegirl1 +amoeba +savage23 +conard +pekmabz +1oscar +angelo01 +crapola +madness7 +kondrat +260396 +050508 +111222333q +linsey +ABIGAIL +carrie2 +110200 +wowowo +jana123 +190194 +bilgisayar +toby13 +uuuuu +mistycat +Barbara1 +11122 +221108 +angry1 +03031976 +nhf +sloeber +13577531 +rockwood +rihana +penny3 +011077 +mister2 +080294 +11071978 +oliver15 +Diamonds +sexy86 +25021979 +ordinary +h0td0g +199626 +1234567896 +22052205 +helado +160794 +tiago123 +wedding65 +19861125 +06031978 +sureno1 +whatever09 +pumbaa +coastal1 +osasuna +wildhorses +wahyu +24111978 +devon11 +19861213 +sc1234 +howhigh +ammulu +pantera12 +FISHING +Bailey01 +joeboy +147159 +tomwaits +pueblo +stupido +dragon75 +poroto +denzil +bubblegum9 +38253825 +290893 +080281 +081983 +presto1 +here +chicony +connolly +newport3 +azules +12345�������� +carita +ilovejenny +ladida +pow +salah +ivy123 +champa +leonardo2 +sugarbabe +ff +bracelet +shannon21 +160022 +do +olawale1 +10061996 +if6was9 +fairy123 +07021982 +15101995 +savannah13 +cebucity +dragon31 +19091995 +quijote +04081995 +020272 +blissful +19851016 +17011977 +0313 +hello98 +miriam123 +horton1 +browser +060180 +juancamilo +delapan +a12345b +petro +030308 +suckers1 +oranges2 +antonio17 +adekunle1 +eyecandy1 +xavier04 +pokora +arthur2 +wifey +20101996 +ashton11 +austin19 +compac +453 +beatle1 +pizzeria +logan21 +01091977 +FLORENCE +141977 +16021978 +020377 +cass +kyla +751010 +bea123 +123456dj +linkedin77 +jamie15 +090181 +amanda26 +241992 +271980 +hope23 +050977 +170296 +Ac3SG728 +bestie +dalibor +casey10 +carlos88 +04061995 +bartosz +519519 +pokemon1234 +beegee +151275 +13101976 +qwe12qwe +vampire11 +24101996 +tomaszek +freedom200 +myfamily4 +lilbro1 +199305 +airjordan23 +1bigcock +tee +melvin123 +tamara2 +25041977 +boulanger +amanaman +000099 +130796 +hitchcock +060709 +19021977 +lacrosse9 +skippy01 +dct: +�������+�������� +hardcore4 +psp71835 +cangrejo +woofie +silver16 +nokiae65 +mike31 +c7777777 +peter69 +ilovegreg +tangerang +clown123 +260377 +cth +chen +boyz123 +200195 +02061974 +130895 +dalmation1 +idontknow. +monterey1 +adm +.. +123012301230 +lauren24 +161077 +mylove16 +theman3 +xh247AHGUM +getmoney24 +xxxxxxx1 +isabella09 +doraemon1 +travis. +busterdog +mari15 +trixie01 +iso9001 +schmoo +700084 +snake13 +backbone +07121980 +test2 +nowitzki41 +winxp +jambo +thequeen1 +fucklove23 +nascar6 +123dan +vanish +michelino +happy321 +120274 +13011977 +letmeout +handle +qwe987 +15081976 +080280 +silvia123 +;tytxrf +egitto +17041977 +091277 +latinos +SIERRA +bulilit +illusions +steph23 +babyboom +MOHAMED +perdana +hellosimon +091179 +bruce2 +daniel2007 +alternate +mis3amores +mike2006 +5string +jerkface +200895 +twins07 +casale +050409 +timbuktu +santoshi +M123456 +kevina +1brown +salut1 +doctor12 +700059 +vaz2112 +vanilla123 +Hannibal +hutchinson +invent +dus +mirana +gotti +ladybug08 +jonathan07 +sk +lucky26 +aceshigh +cntgfyjd +tytyty1 +080680 +elephant123 +case +Jamaica +300808 +31337 +emmalouise +scorpio12 +bdfyeirf +030295 +revenge2 +atienza +krusty1 +happylove +velosiped +приветик +031275 +wayne13 +gxtkrf +27021996 +081989 +ghtdtl123 +goducks1 +samaya +tanner7 +patates +rjhjdf777 +brutus11 +azsxdcf +puppies5 +beastly1 +1sabella +jasper08 +doit +24091979 +iloveme16 +katica +microwave1 +jackel +120906 +shields +52545658 +221272 +199319 +babyboo! +hansol1 +loyal1 +04091993 +yyyyy6 +thunder23 +hawthorn1 +30091995 +bobby101 +lucious1 +dragons3 +2loveu +joker9 +1122qq +lilliput +karolcia +nazar +qwaszxqwaszx +canuto +liverpoolf +061296 +maddie22 +maggy +swisher +hohohoho +mysterio619 +08091979 +jessie07 +a420420 +qavcx411 +������+��� +zxcv12345 +dimples2 +men123 +a753951 +green34 +erika2 +det313 +131194 +kobold +pepsi22 +sdf123 +19851210 +07061980 +102088 +aeiou12345 +sophia13 +shelia1 +mini14 +dashit1 +rina +0121 +brian! +duval1 +farrell1 +konakona +halibut +wigwam +oscars1 +251993 +140596 +nutty +270294 +841026 +danzig666 +eee333 +jonas10 +03111993 +010496 +Motorola +vacance +basketball13 +smolensk +gn9gu44s +incase322 +slovan +cocacola11 +201030 +kolton +della +flyleaf +cbvcbv +richbitch1 +oneday1 +marie02 +bitchass12 +789456123b +241980 +Q12345 +limoges +myface +blue47 +23111977 +dangermouse +111297 +08051981 +brice1 +Chloe +13671367 +denise07 +sasuke15 +sinaloa13 +plastik +zeenat +alex82 +profissional +bikini1 +13081308 +jack33 +dj4life +divagirl1 +y3llow +300378 +291992 +iminlove2 +love38 +nounoune +anime2 +12123456 +milkshake2 +dungeon1 +miley10 +dododo1 +boys101 +23091977 +1915 +tweety20 +melvin12 +regan +charlo +tarelka +sk8tergirl +rocket21 +yyyyyyyyyy +minous +kthfkthf +Ingrid +26111978 +2kids4me +killall1 +poohbear69 +190779 +17081978 +20061978 +lvbnhbtdf +eastpak +marduk666 +Athena +121072 +istina +grad2006 +muffin23 +cesarin +danny06 +Vikings1 +runescape9 +mammas +tahlia +sunshine87 +23031979 +150177 +ahmed12345 +wicked! +topspin +softail1 +samoan +335533 +duluth +nogueira +Skyline +tootall +19861119 +guild +movado +krypto +backhoe +zukunft +blake13 +gregory123 +11011996 +786allah +110599 +caledonia +0325 +green66 +helikopter +import1 +17101710 +secret0 +stokecity1 +mercedez1 +callofduty2 +macho01 +lana123 +sixsix1 +wassa12345 +sallad +elo +56 +philly3 +weldon +muratti +280475 +11071977 +18041978 +hannah20 +060977 +espanha +Esther +00114477 +manda123 +821011 +jerryg +perico1 +tweety25 +29081995 +081990 +201176 +21072107 +poohbear17 +choucroute +ASDFGHJ +friends33 +october05 +godwin1 +pimpim +240995 +annieb +fengfeng +1299 +01101995 +sexyangel1 +traci1 +pimp02 +kharen +06061975 +588588 +kayley1 +19831015 +02081996 +mama1963 +lilbitch +15111979 +boston69 +honda8 +bonanza1 +wakana +queen4life +270496 +extasy +petardo +010601 +16021979 +babypink1 +cameron15 +040993 +pi31415 +cute07 +freemind +110274 +rose25 +120872 +987654321g +mark06 +raider11 +spanky13 +ismail123 +111555999 +bunnyhop +themoon +19851121 +jamie6 +mommy18 +hezekiah +lisaann +uuuuuuuu +monkeyass1 +13579246810 +Mary +promise123 +louis12 +rose77 +060395 +030678 +vallarta +winfixer +18041979 +julian22 +241096 +051194 +281175 +sudarshan +propel1 +aswang +haley3 +death2u +smile09 +08090809 +thepassword +rinat +patriots2 +19271927 +elunico +fluff1 +nikita98 +jembut +roar +ryan19 +spider! +yellow19 +snipper +sm123456 +longhair1 +051078 +721721 +micron1 +Ronnie +eddies +loh123 +090281 +lilboo1 +29121978 +spider6 +091279 +1marley +020201 +thankful1 +4beatles +11041976 +shorty1234 +minka +amazinggrace +040807 +10021997 +236589 +199406 +123456789ma +rosa1234 +dron +karina14 +mivida1 +bye123 +kiler +spike10 +03091979 +badboi1 +emily2005 +willie22 +robertito +150875 +199006 +natalie8 +2121321e +kennys +102489 +swordsman +eazye1 +p0pcorn +13071978 +14151617 +repmvbyf +besiktas1903 +letmesee +honeycomb +hihihi3 +pinecone1 +rocky111 +ilusion +yousmell +latina123 +marine11 +25091978 +iamcool! +focused +123156 +10toes +edward24 +jabari1 +kingsway +258456a +11041978 +isabel11 +hellboy123 +precious! +elizabeth123 +shubha +drexel +iris123 +cezar +trustme2 +lady14 +purple78 +jeep95 +sunshine45 +tintin123 +09091977 +renaldo +crazy8s +070596 +atlas123 +dfg123 +120805 +200008 +Moneyme56 +060778 +citroenc4 +linkin12 +17041979 +cassie09 +daniel2000 +skater18 +sasha1990 +723723 +barata +toast123 +purple04 +271296 +angel4u +71chevelle +grace05 +danelle +123456ABC +23132313 +19061978 +aaa444 +yuiyui +sweethart +magic69 +636332 +Broncos1 +djhvbrc +09031994 +25071978 +01031975 +patria +the1man +02091976 +251075 +mindanao +kaylyn1 +minoucha +hotchicks1 +april1994 +brianna06 +pooper123 +a22j5Bffci +540000 +tarifa +has202020 +mama18 +211174 +barreto +jaydog +lacrosse21 +whitley +10081975 +19021902 +cereza +198631 +babar +losers2 +240278 +fucklove10 +cali11 +091177 +vrushali +654321w +vanilla12 +wildcats3 +zverev +chelsy +redskins12 +191178 +victoria07 +14111979 +03081977 +roach +hotmamma1 +diana3 +aniani +100499 +igot5onit +maddie06 +clover7 +company123 +muzaffar +opus +girly12 +20032008 +indianer +ethan03 +1wilson +1godisgood +gentle1 +barnaby1 +cassie08 +jl1234 +killer27 +meriam +charles69 +minime123 +wayne11 +echelon +4everluv +smoky +wehttam +031278 +211994 +1december +06081979 +123spill +07011980 +loller +durham1 +loko12 +supercross +riogrande +hotboi1 +blue2222 +250676 +1qwerty2 +moose11 +asshole420 +221296 +denisov +pelota1 +airbag +energy123 +110105 +fatbitch +25101977 +magic10 +myprince +berlusconi +aaaaaaaaaaaaaaaa +acinom +professionaltools +hanover1 +slime +glover1 +putaputa +emily101 +100397 +101067 +jor23dan +123456mama +help4me +gracie09 +misael1 +ashokkumar +226012 +free2beme +faggot12 +poop24 +sweeti +biblioteka +kok +fizika +midnight9 +021102 +condorito +neha123 +sandpiper +babycakes7 +987654321t +sunilkumar +response +mercedes11 +jaydee1 +qwerty123321 +123321v +sprinter1 +luckyluke +hottstuff +skyline3 +bella77 +140676 +ariel2 +thegreatone +bubamara +208208 +slalom +taugammaph +albino1 +123210 +ilovejuan1 +fotograf +corey8 +ilovedj +brigida +reynold +fuckemall +Joanna +123456�� +07071978 +crypto +bandits1 +bigboy8 +811024 +assumption +1wayne +mehran +123mike +x8AxspuMEz +mayfield1 +vinicio +lovers14 +macy +100175 +1340 +01092000 +05091995 +linda23 +577191 +suman123 +london4 +ineedu +joeboxer +mysterio61 +chode1 +adam12345 +sophia3 +encounter +14051995 +23052305 +07051980 +flameboy1 +brazzers +tophat1 +rodney123 +alicia23 +01111980 +monique4 +batch +123103 +rossie +11051996 +solange1 +olivia15 +david55 +playboy17 +meshmesh +edwardo +baby2004 +dst1913 +marmelade +heat32 +66996699 +outsider1 +mischa1 +darkmanx +180977 +july2005 +VALERIE +�����+�� +cupcake09 +lynn09 +sydney22 +hemanth +jojo101 +Lj352d1ib31 +celtic12 +14221422 +daryll +xi345BIFVN +hanna12 +600089 +asdfg11 +20041889 +kittens12 +051178 +xyxy159753 +сашенька +amherst +badmus +encarta +troopers +руслан +elliemae1 +julian14 +4weaxQ642E +1adgjm +step +10011977 +basket5 +betterdays +311275 +single18 +buba +15091977 +Kenzie14 +aA123456 +22011995 +300878 +nolase +kadence +11121976 +loulou22 +testme +130276 +ha1234 +tennisball +rudi +26021979 +32143214 +debbie69 +jenner +cindy01 +jairus +puntacana +eqes606898 +3e3e3e +password73 +year2007 +customer1 +singapur +mary18 +natasha13 +dillon2 +190279 +woodbury +876876 +desdes +1katie +19091977 +sd1904 +bubba09 +comander +140195 +tasnim +880505 +admin2 +ginger33 +water10 +828828 +porridge +bigmama2 +ford88 +Sam +snoopy. +09011993 +awesome8 +asscrack1 +Alenka +abby22 +gerlinde +moto123 +6435 +03kids +mary16 +fairydust1 +andre13 +0919 +kotik +bubba24 +dipika +lastfmpass +sheba2 +beerbeer1 +nina10 +pointbreak +rjktcj +ashlee123 +bloodbath1 +misbebes +hawaii09 +Skorpion +deathwish1 +venividivici +orlando5 +houston281 +121171 +4454708 +barber24 +jessica91 +090907 +06101981 +03051996 +hahaha6 +420024 +100109 +sandra. +lauris +trystan +theboys3 +198030 +twiglet +jakeman +19871989 +Damien +crazy4life +mater1 +dodge99 +sloane +steve5 +massena00 +30041997 +freaky12 +robby123 +maravilhosa +viking123 +megusta +teardrop1 +211275 +west49 +eddie7 +hallow +greenday9 +dispatch1 +achraf +130775 +sayang87 +allinone +buster17 +06071996 +monkey83 +sexybabe12 +1sugar +monster33 +ciera1 +p1p2p3p4 +emopunk1 +irland +friendz1 +jndfkb +dorotea +dhiraj +blacklist +tiffany9 +211076 +28051995 +01041975 +zxcv0987 +marshall3 +smallboy +673kobby +bosshogg +0314 +prince09 +100296 +120102 +toma +morado1 +886688 +schultz1 +Martinez +bubbagump1 +never2 +twinturbo +171296 +19841013 +yuri +slayer66 +sms123 +alpha3 +impretty +ernest97 +antihero +w1ll1ams +coolwhip +touch +355355 +saliva +diablo01 +julian5 +789512357 +nognog +nicolas01 +goodfriend +monkey911 +132313 +redred12 +18121977 +130303 +ivan1993 +norma123 +sasusaku +Voyager +120471 +kalafior +mommy15 +161195 +21071978 +les123 +nomads +weasley +time2fly +chikis1 +diamond06 +justinbibe +roofing1 +03081995 +mexican10 +panganiban +270677 +560052 +hummer69 +jake2006 +16181618 +moonlight7 +SHOES +221994 +nora123 +composer +060196 +28121976 +troy11 +17051978 +1gracie +kosmos1 +axe123 +mommygirl1 +sammie13 +rhtfnbd +21021978 +050478 +duke08 +15061995 +150196 +l33tsupah4x0r +basketball3 +20081996 +300778 +ittybitty1 +1433 +19841019 +02121977 +20031976 +Kayla +pinky14 +faisal1 +pampers1 +sasha2001 +redzone1 +cooper! +piper2 +shawn21 +asdfg456 +trees123 +angel1988 +11101979 +1sebastian +GvqZvxUb76 +kiki16 +bunda +thedark1 +101271 +Ybrbnf +100574 +tiger98 +bella03 +jetson +cherry25 +18811938 +05121994 +122005 +reserve +ashely +080181 +290794 +albachiara +free4life +nehemiah1 +kader +opium +pierrick +25452545 +lorie +198677 +524524 +pepper02 +1password2 +rachel88 +allstar13 +meghan12 +sosososo +130897 +party5 +mc +axel123 +shay14 +greats +sabastian +0705 +hand +heatwave +mama00 +chase5 +a123321a +wrestling7 +mentiras +daisy06 +youness +serena12 +��+������� +030676 +10011996 +softball02 +199522 +rosie3 +weener1 +tinktink +1linda +elrey1 +gabgab +04051977 +rossi1 +staple +monkey82 +chopper3 +younger +05111980 +poopoo9 +ilovethisgame +dctdjkjl +kickass! +230176 +samtheman +Morris +renan123 +snowshoe +jasper09 +040793 +334433 +motorka +golf22 +23101977 +dime10 +04011994 +mangala +labas123 +lasvegas7 +1434 +artemisia +mummum +getoff +myspace81 +160596 +born2kill +821228 +teresa11 +opelastra123 +mandee +telefonino +denden1 +wetwilly +himom1 +marcus99 +hamdan +lol1lol +xoxo12 +14031979 +gorillas +pengpeng +joejonas2 +414414 +jackie08 +brooklin +malgorzata +bowbow +life21 +nigga01 +tonitoni +29031980 +mahimahi +brad1234 +303132 +gopnik +flatout +solara +lukaszek +angie3 +superbee +abigail5 +micione +mwangi +Henry +vasara +canaan +197519 +jaejoong +sone4ko +hokej +tpain1 +jktctymrf +i1234567 +020779 +108 +aa5201314 +sister11 +sexii +rtyuiop +7grandkids +271992 +dodges +TAURUS +shelby15 +lincon +07071998 +iloveumummy +xdl65b6666 +13121976 +lemondrop1 +feranmi +pazzainter +779977 +tosha1 +crazyass1 +crazykid1 +ashley28 +mimi21 +lynn08 +06121979 +daniel2009 +noble +heygirl +guacamole +1dennis +bmw540 +hayden09 +31081979 +thegame12 +golgo13 +biscuit2 +12347 +auction1 +24061995 +im2cute +tatianna +bizzle1 +booboo07 +fucku9 +autumn08 +Tommy +morena13 +cxzcxz +bobbys1 +040577 +fister +120208 +gwiazda +crumpet +qwerty1981 +30051978 +iwantyou1 +21082108 +linked01 +ginger02 +15011996 +louis14 +andres01 +lovebug! +flamengo1 +MANCHESTER +minnie4 +carter13 +291990 +ellarose +190678 +12031977 +freak666 +hjlbntkb +heroes5 +divadiva +pumpkin9 +secretos +zzzzzzzzzx +starr123 +13011979 +1257 +minhamae +070994 +madrid10 +r111111 +torchwood1 +cookies10 +eric18 +tucker! +01071995 +iamrich +precious10 +zinnia +love73 +tess123 +firenze1 +JASON +capricorni +tupac12 +gunshot +babyblu3 +crownvic1 +takedown +charmed! +inuyasha. +milligan +l654321 +piggies1 +suckmyballs +558855 +26031995 +qingqing +22031976 +fishing! +��������� +downloads +gatogato +goodpussy +12qw34as +missy14 +14071977 +300979 +1234! +soccerman1 +19912009 +westside69 +kaylee07 +molly15 +fattie1 +fruitbat +120672 +19871028 +102345 +hotchick12 +brazilia +cricket11 +jackie09 +10121972 +cerveza1 +xxxx1234 +bambam23 +zoey11 +gage123 +bear08 +wizard01 +streetfighter +060295 +1122aa +callista +anglais +041992 +blackness +jasmine29 +teddy14 +fatamorgana +bente6 +rubberband +neviem +050481 +nathan19 +grammar +yoyoyoyo1 +isaiah4 +181178 +tipperary +moocow123 +postit +210375 +200377 +kurnia +cali1234 +melissa19 +luke13 +ainara +lsu123 +c11111 +lynda1 +liyah1 +u8u8 +7008 +renee15 +29041996 +super01 +bear101 +020405 +niyah1 +alysia +tennis08 +hotpocket1 +erzurum +19071978 +WIZARD +261173 +aaa147 +dean11 +anika1 +4mygirls +220876 +QOXRzwfr +070381 +texas4 +gypsie +230996 +300476 +2grandkids +nay123 +dylan02 +211176 +21081978 +notforyou +prettyme1 +gammaray +22071977 +291195 +baby420 +4pussy +lilrob +trusty +maria26 +king44 +flowerpot1 +121965 +111171 +080995 +lesedi +uiop +london2009 +harley33 +180794 +loveme0 +plombier +tracer1 +esp +180795 +longview1 +05121995 +cheeseman +lovelyday +seguro +greatday +sofie1 +dima2009 +211990 +wwwwwww1 +darkness3 +cheri +stone5 +christmas3 +babe16 +06111981 +bitch93 +angel72 +kfx400 +blb +piston1 +yellow66 +110899 +hunterx +21101976 +elgato1 +tinchen +super17 +27031978 +brooke06 +emerald7 +garfield7 +Infinity +durand +doolittle +jacob17 +baseline +31071979 +01111981 +nikita2001 +george18 +chiqui1 +boricua21 +lovelyboy +colorful +jafjkshf7y6w34rjd +bluemonkey +smiley22 +scouse +catrina1 +fishboy +volcom8 +def123 +nathan1234 +badass! +irenka +avondale1 +cookie20 +anupriya +ghjcnj123 +pword +1029384756a +aj +fairlady +260977 +jellybean! +blue789 +connor4 +ilove$ +brooklyn! +banking1 +tumble1 +pashtet +yahoo.com1 +alexx +marines12 +oldies +020995 +Kimberly1 +peeps +040678 +tiggers +marie90 +opanka +music12345 +manju123 +kaelyn +199013 +markjohn +19111979 +smiley23 +140476 +mmm333 +sandbox +kenjie +fuckthis12 +260778 +st1234 +eman +india321 +spliff1 +skills12 +harley9 +sub-zero +brianna09 +09021980 +acosta1 +schatzie +kaley1 +keshawn1 +5angels +rip2pac +sex777 +210278 +122805 +alumni +11061978 +tony1 +11051976 +20011977 +cellular +CASSIE +13451345 +m1space +qazwer +twilight8 +dance15 +alexis97 +ivor631996 +leafs +105 +270895 +cheer6 +icecream6 +raymond5 +email123 +greendog +YANKEES +grandma! +highheels +101064 +futsal +vbkkbjyth +sucette +monkeyz +070608 +fiatuno +29101995 +15101976 +vfktymrbq +08091995 +girafa +homie3 +aaron24 +babyboss +malik2 +romani +380008 +crystal08 +paradise7 +honey19 +sierra99 +stiven +scranton +rachel07 +001970 +adidass +besiktas1 +kittygirl +busola +20071979 +poiuy123 +goats +wan +sprinkle +albita +123987a +copyright1 +blessed11 +james31 +poetic1 +336688 +flip12 +11121975 +njqjnf +alexis20 +vJS9Zdgyrn +playb0y +marvin13 +sammy24 +blackeye +goal +01041976 +junebug2 +30011994 +friend! +hahahehe +159630 +331133 +shrek3 +omolade +xxx123xxx +kenneth7 +199107 +numbers123 +diapers +enteng +199424 +veleno +19052005 +hayden3 +seasea +220674 +889889 +integer +160597 +weapons +luvme +britt16 +thuglife3 +12345hi +nkechi12 +px6gcr51 +burns +fernie +1water +fatcow1 +110697 +love4him +05081979 +sanasana +1linkedin +wade23 +beast11 +nothing11 +tierney +1x2x3x +rockers123 +harrison12 +stupid22 +18111995 +annamaria1 +razorbacks +winter23 +021196 +miller7 +leslie3 +puerta +quita1 +cheena +170576 +w1952a +cookies9 +08041978 +Aaron +bball07 +imapimp +celestin +matrix00 +futbol7 +18091979 +ownage123 +sugarcane +wooden +inception +siemens123 +iphone123 +corrie1 +16899168 +010901 +london24 +1albert +101269 +Torres +fritz123 +13011980 +diamonds12 +salford +summer67 +player18 +280277 +120508 +yfgjktjy +lunch +donvito1 +innov8510 +mascotte +loner1 +migrationsandeep +Titanic +great8 +27111993 +hdfcbank +1boricua +31031978 +thunderstorm +rodzina +skylight +FRANCE +boriss +18081978 +oliver69 +erwann +vagarsh +11061976 +210101 +stephane1 +kathleen12 +torrey +sonyvaio1 +hershey7 +89 +3323 +simple01 +tulpan +dalailama +towtruck +schranz +jaxson1 +nefertari +teddy4 +allme1 +1qweasdzxc +vegemite +kucing123 +schizzo +fenwick +vainilla +whatthehel +rayray23 +fiddle1 +gonoles1 +jazzmin1 +102400 +youaremine +house11 +luis19 +inspector1 +sexi101 +sexygirl16 +spencer! +sublime7 +reptiles +nagato +170977 +leblanc +12061997 +jimmyjimmy +britt07 +dylan15 +30063006 +beba12 +pink321 +patrik1 +khushbu +03031997 +bambam! +270978 +busterboy +160377 +elmwood +madi +whatever14 +ilove! +101173 +090793 +seabreeze +P455w0rd +slyfox +chigger +110806 +matt77 +ftbfrvlg17 +422422 +ernestina +burnout3 +mercy123 +kyle08 +moxie1 +REGINA +2n6ezl7XhP +200295 +ikke +1q1q1q1 +torment +eminem313 +carrillo1 +snickers13 +panico +william03 +241275 +abucanda +130196 +??????????????? +lee12345 +schuster +vfvfif +hardman +250375 +babyboy24 +24061979 +yahoo69 +fuckme6 +080108 +Shelly +cangri1 +belmonte +allie2 +autobots +hottie55 +110872 +as0000 +210674 +ranger6 +caca22 +s39jWbw5iA +kaczor +sora123 +anggun +566556 +9021090210 +141996 +space5 +luisalberto +newbie1 +Daniil +CHEESE +badass22 +1824 +blessing123 +augusto1 +crusade +beetlejuice +raiders15 +tiger2010 +chopin1 +cirillo +300600 +123789abc +hardwork1 +yummy12 +summer96 +sideshow +090678 +1cor13 +maimaiyeuem +runner11 +28051979 +viki +asswhole +duncan12 +zoey1234 +27051977 +boriqua +a42904290 +christmas7 +nopasaran +ivan1995 +batman27 +joker007 +teamoamor +041194 +eminem15 +301176 +grade6 +caddie +marie86 +donita +romnick +frank21 +cintaq +25011979 +bs1234 +fernando. +coolguy2 +27011978 +125001 +juicy69 +whitewater +buddycat +231072 +medion123 +madoka +lovedetoi +toshka +fernande +sureboy +strawberr1 +young3 +091194 +rach86 +password40 +zxcv123456 +amb123 +satriani1 +150375 +555555555555555 +London12 +1388 +patient +270295 +niania +19871025 +collect1 +123951 +85207410 +love1313 +funny3 +090309 +fresh14 +booboo18 +usuck123 +fred1994 +felix13 +ronnie11 +iloveyou98 +rmz250 +04101981 +abel +clubber +colombiano +arun123 +pawelek1 +vicenza +fairplay +menmenmen +milkbone +18061996 +200378 +carter09 +wkgMmjH623 +myhumps1 +noah06 +cheese0 +alamo1 +011278 +kelly1234 +poopstain +santodomingo +tara11 +lop1346781 +kepompong +loveu7 +perro12 +19081977 +21021979 +15051996 +bonnie3 +bettis +Garfield1 +treats +090694 +030608 +peanut1234 +cassidy12 +210376 +killa4 +london! +erection +69camero +melanie01 +lollipop8 +07091980 +kikelomo +cheer9 +Penguin1 +loneliness +casper! +dorothy2 +28121977 +132456789 +darklight1 +lakers! +2266 +nichole123 +bunnies2 +hillview +john27 +yourgay2 +kiakia +841022 +password1. +24031979 +loveyu +blanchard +sexybum +april89 +110303 +mattew +zebras1 +150876 +198488 +chargers2 +03021977 +twenty5 +nostress +joelito +dirtbiker1 +timothy5 +golfer2 +198731 +foshizzle1 +11111995 +09041977 +love1love +score1 +renee09 +johnny16 +covergirl +195900 +studman +Raymond1 +gothic12 +john26 +qeadzc +STEELERS +getatme1 +26091994 +gfhjkm12345 +samana +callum12 +bullshit3 +sportage +16111978 +daniel2010 +johnmayer +ora +southside9 +Romans828 +manu4eva +blonde12 +5demayo +onemoretime +chicago8 +adrian16 +bubbles99 +250695 +sona +pink32 +delvalle +plato1 +fuckuall1 +mamie +Hunter01 +ABCDEFGH +snoopy08 +priest1 +070194 +football04 +minty +acqwah +crystal09 +walker11 +bluerose1 +cheater! +иришка +mario4 +13071979 +j121212 +jeep99 +sexyblack2 +anycall123 +bella19 +greygoose +11091978 +corkey +Justin1 +ranger88 +newlife2011 +scooby08 +hash +Soccer10 +rose07 +bodensee +spaceballs +london55 +020777 +801225 +children7 +happines +afghan123 +230874 +New +dude77 +diksha +babyt1 +submarine1 +Hevhk43n9J +a7758521 +070694 +crazy111 +180596 +20021975 +120272 +15031503 +gampang +emma09 +tyler. +1234567890A +01121978 +beirut +chicken99 +magic21 +george17 +20031997 +1234567891234 +chopper7 +maddi1 +149149 +06121995 +13051979 +19061994 +821210 +filippo1 +phantom7 +potters +spellbound +mama1961 +frosty12 +bruno01 +neymar11 +w1953a +justin91 +ellie2 +hokuto +alquimia +pallas +922j5Cefcj +040498 +tyler97 +india12 +peaches10 +costas +macduff +greshnik +raiders20 +140298 +414200 +9119 +091295 +gege +523252 +lolman123 +thebible +1brian +oleg1998 +zxcvb1234 +doughnut1 +amoah2010 +65 +qwertyuiop789 +jamesy +mykids04 +swab123 +ladybug22 +magdalo +angel1998 +Hannah1 +shanes +kaylee11 +howard123 +minger +alexander11 +32 +orgazm +KRISTINA +14121976 +801123 +Caitlin +George1 +303 +dawkins +balanar +12345678963 +admin01 +messy1 +sagopakajmer +imissyou! +mmouse +sadness1 +231296 +cavaliere +261275 +12051976 +toasty1 +saintseiya +fairytale1 +090409 +grissom +129 +nigger420 +belgarion +phalanx +20011996 +lac +061979 +Vegeta +hunter666 +lafrance +240996 +thuylinh +tem +fishfood1 +azerazer +flowers. +bruxinha +030503 +05021978 +mattmatt1 +123abc1 +babybash +1potato +nikki24 +bookmark1 +hedimaptfcorp +8x2h4Fccap +karen15 +penguin22 +19111996 +lucy08 +marley08 +wmtmufc1 +catseye +fall2007 +skater99 +v123098 +16021977 +19841121 +06071979 +camry1 +01051996 +29101978 +234649 +ferndale +bubububu +21212 +grunge1 +louise23 +muffin14 +bk4life +09021978 +cowboyz1 +021296 +dalila1 +mandy11 +BOOMER +codybear1 +viking12 +orange66 +130377 +ha123456 +181983 +boredom +cowboy9 +hunter94 +suplada +buxton +21051997 +anthony29 +20081978 +massey1 +kmdbwf +oreo01 +boss22 +02071975 +281095 +djkrjd +dragrace +tema +hamster3 +atown1 +backdraft +elzbieta +deltas +babyfat1 +patricio1 +210505 +house5 +05021996 +automotive +noworries +thatguy +kenny69 +sexygirl! +fireboy +250476 +0923 +donkey3 +memere +camisa +hotmama12 +kenz4u +fuckyou90 +198013 +hotmail5 +music06 +jackie6 +oreo14 +pimpette1 +riding +zaira +fourier +160376 +cookie02 +britt15 +bigboy08 +Lucas +toni12 +galatasara +28082008 +fire10 +210574 +pirates12 +atlanta123 +iloveyou.. +lovebug10 +27051995 +sumeet +notme1 +2bhappy +26101979 +kkk999 +murphy7 +211006 +1alejandro +sarahann +reject1 +longhorns7 +140299 +06061977 +030477 +snow22 +kissme23 +masha1998 +carrera4 +timmy01 +102001 +eros +buttercup5 +falcon13 +homeslice1 +bunny21 +rimbaud +mickey27 +redtruck1 +badazz2 +polinochka +sssaaa +cuddle1 +k1mberly +Katie +useruser +19861110 +ilovehim10 +steph21 +cutiepie23 +fishing01 +panthers5 +spike69 +crayons1 +ps2ps2 +damien123 +olga12 +deaddog +snowman7 +smartone +ghjcnbvtyz +brunswick1 +pepsi23 +PRINCESS1 +gazebo +thorpe +asd147 +2513 +source1 +25111995 +kekette +thommy +andrey1996 +latifah +faithy +linger +mason5 +redsox14 +awesome101 +booya +gonavy1 +manomano +23031996 +orlando11 +pejsek +ohmygod! +jackson24 +antiflag1 +080681 +jenny24 +dr.dre +ingegnere +cowboys33 +11121977 +161994 +ego +slipknot22 +ricardo22 +kroger +hulkhogan1 +25031978 +kisskiss2 +11031975 +getit +killer777 +maddux31 +bettylou +400091 +green00 +31051977 +boarding +fire21 +welcome0 +30081995 +260278 +atenas +Digger +daddy25 +dreads +kobra11 +310794 +potter13 +jess16 +turnip1 +19851223 +mushrooms1 +abcdefg3 +7399 +Kingdom +jamie07 +monkey81 +bf1942 +slipknot14 +powerplay +snowbird1 +07111992 +markovka +alex76 +caleb3 +Janine +stormers +170496 +ramboo +19860214 +2joints +sharron +bidadari +mari10 +liberate +281980 +fhbyjxrf +010166 +honda1234 +dascha +spike5 +2q2w3e +ilovesoccer +pw123 +200609 +1barbara +030281 +nadine123 +tommyg +scrappy13 +251175 +beverley1 +17091976 +101510 +jameslee +2jab4x2c +jbaby1 +institute +yygjmy333 +sss777 +080182 +heinz +28101978 +victoria15 +29121995 +larissa123 +zenobia +sodiq1 +1313131 +keanu +c0c0nut +harvey2 +02091975 +tete123 +emma14 +whi +poligon +confident1 +16081977 +dub +freefood +123car +hug +money888 +1234567ab +beast5 +scoobydoo7 +mike92 +050572 +110573 +backflip1 +120700 +qaz147 +diamond18 +1617 +kandi +1christine +10101973 +joselyn1 +linkedin23 +pragati +protege +mentira1 +america07 +517501 +fuck1 +wacker +savannah08 +samuel09 +george16 +warrington +jesse18 +gipper +line +ch1ck3n +kakka1 +helloall +fatass3 +jordan90 +carmen69 +jessie09 +080394 +longdick +310576 +fuckyoutoo +der123 +hola12345 +eliza123 +power8 +p00000 +chevy2500 +1orlando +brn521 +truffle1 +diversion +jayme1 +070309 +1qazxsw23 +kurgan +Dmedcn23sd +manunited7 +hunter89 +hodges +innainna +bab123 +smile4ever +natalee +raj12345 +kolesnik +berkshire +fandango1 +computer69 +200275 +131296 +diletta +simon13 +aaliyah08 +7412 +quiero +193746 +08081973 +barney10 +serafino +Xhh787qpcD +7117 +foxxy1 +hopscotch +ketrin +Password7 +3tb8xL42BJ +poekie +marissa13 +abcdef4 +821024 +cheetah12 +poiuyt123 +headbanger +102578 +fuck66 +913913 +c6DjvmsKCx +jalaram +lilly08 +kobayashi +marco11 +fender! +xochitl +130373 +joker45 +goldie2 +001966 +090593 +Lwf1681688 +koalabear +polinesia +lambo +11223345 +john0316 +spaceball1 +p1assword1 +dallas05 +#1nigga +hockey89 +417417 +10071996 +daughters3 +alicia21 +19032003 +corrina +329329 +angie23 +bilal1 +stpaul +111198 +021992 +theone01 +nanner +kissm3 +gummy +20032007 +19831022 +jourdan +jc12345 +System +prince! +rebecca4 +ramada +whitegirl +15041996 +11121996 +3311 +821225 +uhbujhmtdf +7355608 +kelly15 +superman30 +whoami1 +matt25 +micael +mistyblue +190895 +27071978 +kupa123 +brandy21 +g00dluck +11041997 +150475 +110574 +04071996 +2214 +crusaders1 +ras123 +remember7 +soccermom1 +0601 +Dylan +raider2 +bovine +roxyroxy +16011996 +1244 +cream123 +werewere +jonathan69 +abcde2 +charlyn +andrew86 +life09 +hadassah +ricky4 +Jake +wo123456 +blue91 +find1234 +Alejandro +luis20 +821022 +munkey1 +alejandra3 +lovesex69 +hjlbjy +poirot +061078 +1cocacola +333aaa +120107 +n00dle +1patricia +hossam +panda! +repeat +gemelas +brenda15 +66 +south2 +melo +att123 +myspace.1 +11794591 +sadie07 +idinahui +010597 +dandan123 +genuine1 +parker13 +ilovebritt +things1 +toto22 +310775 +QWASZX +tipsy +muzica +sliders +emmanuel123 +marge1 +autumn3 +Angelo +emily17 +070280 +prince33 +october01 +crazyone +awdrgy +120569 +85chevy +poke123 +mojo69 +sunray +kahuna1 +123456sd +silver18 +skripka +rock88 +fucknut +gegege +hap +280377 +wasdqe +metall1ca +25011978 +daisy09 +071982 +guru123 +princess82 +locos1 +tigers84 +terter +504boyz +september22 +airplanes +jilipollas +valval +rocks123 +19870101 +199124 +norita +jirafa +allison13 +fuckl0v3 +january09 +deadfish +alex32 +faisalabad +090183 +verynice +gurl123 +asdfasdf2 +krasava +wilson5 +barabas +neisha +121261 +jigglypuff +setting +qazxswed +300877 +201100 +landon3 +fuckyou45 +froggies1 +thing +110197 +emoney +sommer123 +2345678z +warthog1 +tigger67 +13121975 +z7895123 +sharon11 +sereja +demented +rocknroll! +papang +bogdana +cvbcvb +new-york +sofias +pooh69 +hotdamn +paradigma +almita +198630 +natasha3 +tiger27 +eddie5 +ferrari01 +lafamilia1 +27051978 +eddie4 +phoebe01 +alejo +selvam +nidhi +123m456 +mirabel +biking1 +19051997 +5point +shahida +monster16 +justice01 +garrett3 +fire101 +sampson2 +tanktank +smokey8 +310197 +junior33 +33221100 +inlovewith +пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ +yelhsa +babydoll7 +041296 +february26 +09081980 +lounge +22041997 +pragya +14241424 +tysons +boomer4 +120774 +vanpersie +allen21 +cocacola13 +080581 +athena12 +espero +smile24 +ripped +galahad +behemoth1 +guntur +rafferty +1corona +cfdxtyrj +brijesh +02091995 +270279 +7777777n +15031977 +120198 +chronic2 +emachines2 +kenny6 +myspace82 +desiree12 +20111976 +twilight9 +green111 +010165 +robert44 +190694 +15092007 +frank7 +115533 +alican +ams123 +230796 +motherhood +crystal16 +2020202020 +index0088 +angela. +1147 +khan12 +040979 +031990 +golf4fun +jackaroo +nikki1234 +hallodu1 +lovelove! +050403 +00123 +alley +halo12345 +samuel4 +omar23 +22071979 +bookert +coop +nichola +milo11 +4thofjuly +asshole99 +lala07 +trippin +zafiro +z19721226 +parkur +25071977 +silas +19011977 +28041979 +500 +fourfour +cooper06 +sliver1 +25132513 +denizli +qwaszxqw +poczta1 +monika11 +09051994 +amiramir +kisame +detroit7 +021202 +money321 +montel +apolonia +190179 +muggle +Money1 +joker8 +bella02 +kandice1 +mason06 +sunny1234 +zachary! +ybrbnby +pinarello +damon123 +coco1 +821013 +091093 +197219 +sweety22 +pollo12 +190278 +241994 +zizou10 +bitch56 +makeme1 +pollop +nokian81 +nigger8 +200696 +Deniska +mundial +gate13 +piglet01 +bulaklak +ilovewill +hello456 +honey27 +110474 +jDnazp972X +munchen +��������� +tobby1 +loverboy3 +210275 +22031975 +peyton08 +parker10 +Special1 +13111995 +rosebud7 +sercan +lindsay12 +mooo +pickle13 +descent +041278 +09111981 +300596 +myhope +dabulls +jake18 +julio11 +23082308 +westbrook1 +connie2 +332 +tequiero2 +finestra +cntkkf +shammi +chancey +loveme4ever +twilight123 +teamomiamor +yosemite1 +marcus15 +vfvfvbz +lover06 +java123 +pirate12 +120497 +ryan2005 +sanyika +summer45 +140276 +sports21 +c54p7uikgb +nivram +sandydog1 +boo1boo +25142514 +heaven10 +bobs +0000aa +redsoxs1 +21041996 +231074 +sonson1 +98chevy +christine5 +04121994 +brandon00 +attila1 +bask3tball +tyler12345 +deadman2 +bikerboy1 +simon7 +money2011 +Doctor +pebDfcz3yx +delatorre +lillies +acid +maryjane. +opopopop +30101996 +813813 +luvya +athletics1 +tinker8 +fuckyou44 +hs16Andi3Z +19851203 +golden22 +ilovemike! +20101975 +brittney2 +camaleonte +kulikova +15935789 +mayito +adele1 +020476 +password51 +chad1234 +benji12 +maksmaks +01101977 +hotels +qq123000 +fucku. +warhead +16041977 +FRANCESCO +cr125r +rebelde10 +acc123 +110100 +namaskar +homestar1 +29061996 +lapine +excel +chuck2 +kingme1 +david87 +121068 +waterwater +aziza +Emma +flipper2 +abigael +197722 +ballen +brigadeiro +brandee +lamar123 +1kenneth +blondie01 +salad +circuit +were12 +180898 +29081981 +454 +lambretta1 +pink!! +199325 +tallyho +indian12 +sarkis +julian23 +kirankumar +horse10 +uranium +marcus06 +bigboy! +sheckler +team123 +21252125 +deepsea +apple08 +sun2shine +iloveyou56 +200009 +goons1 +macie1 +199405 +kari123 +urmomma1 +pa88word +sarvesh +eee123 +fcinter +funkytown +Bernie +unitedkingdom +141979 +19101978 +fishy2 +malaguti +7777777k +onlyyou1 +1213141516171819 +Nemesis +watch1 +16121977 +22051996 +doublej +dic +nancy13 +cruz123 +madremia +goggles +811020 +ravshan +lilmama4 +199014 +klaus1 +19932008 +house4 +keyshawn +glenwood1 +27121978 +040709 +190879 +pacute +henry13 +010168 +5550666 +nicki123 +mohitb123 +020307 +135qet +fredy1 +connor02 +icefire +beepbeep1 +95camaro +superman45 +angel2001 +sammy05 +jack25 +drifting +absinthe +teeth1 +16121996 +maggiedog +061980 +canarino +ghjgecr +pasta123 +17071978 +18031978 +suck123 +bitch321 +558899 +love63 +minime2 +kesha +14jesus +mexico90 +newfoundland +q2w3e4r5t +justus3 +ou812345 +blessings7 +karibu +b-ball1 +yo12345 +010278 +garance +nunu12 +oleg1996 +arbiter +200406 +lerolero +bicth1 +loveydovey +diva4life +lisa15 +16101610 +sexybitch5 +dfhtybr +wunderbar +19861215 +ilovezac1 +bitch90 +bljS2v85pT +Nirvana1 +mima +hjvfyjd +dontask +Master12 +saturn12 +lovebug69 +alberto10 +kirill1998 +cheyenne13 +21031996 +cheyenne01 +myself123 +kristo +ch3cooh +papucho +07111981 +dallas15 +deion21 +140675 +198018 +girl69 +luluzinha +0807 +tampa813 +ADGJMPTW +851125 +star93 +claremont +131980 +joseph00 +kocka +killa9 +lammas +instructor +phatboy1 +cars11 +Kenneth1 +ncaBeax2vx +schaefer +290779 +petshop +sudha +19841224 +angels69 +midnight69 +568568 +290477 +star28 +amor20 +outlaw69 +rodney12 +123david +braeden1 +princess83 +hmfan1 +heavy +singleagain +articuno +sylvan +mantis1 +290695 +78917891 +031076 +sixtynine6 +rocky25 +seronoser +gamaliel +500076 +tylerd +insect +olivia16 +storm11 +���+��� +12101975 +carson2 +wolf01 +maremma +franka +eyeballs +stupid0 +donnelly +chester8 +241097 +alexie +veczhec +rattle +Diana +170696 +надежда +alone4ever +742617000027 +harold123 +mariapaula +251981 +170976 +slippery1 +29091977 +2turtles +231200 +100374 +1corazon +dantdm +1sexygurl +robert66 +hellyea +gallito +internet3 +05051971 +miranda11 +dildo69 +wilson13 +lolomg +alf123 +27121977 +1tucker +04041974 +dibble +famous21 +lemons123 +240675 +britton1 +02061972 +zaneta +steelseries +0246813579 +hfcgbplzq +swami +11121974 +julia3 +superduty +08101981 +stming4 +ghazal +making +COMPAQ +mexican15 +fred20 +21081996 +elektra1 +edward25 +vincent01 +060195 +2letmein +919919 +DlNVHvu492 +chem +coolblue +pebEfcz3yx +ethan09 +19111994 +limanlly +hunting12 +froggy01 +121600 +vin123 +navara +�+����+��+� +panther9 +trener +28101979 +roby +251979 +renee23 +eastside23 +imbecil +willwill +omarbravo9 +level +rebelle +10091978 +tweetypie +jack17 +bulldogs13 +slim12 +nokia5 +winter02 +Louis12345 +Wolves +hardbody1 +221022 +cortland +albano +bunny9 +sumit +mathers +ahmedahmed +mali +060506 +camaro01 +matrixx +educate +f76t94prm4 +ricky5 +wendy2 +irock13 +trouducul +singlemom +ethan10 +suzuki250 +821017 +030494 +woainia +fishlips +ransom1 +chris84 +chitchat +250397 +27041977 +rdfhnfk1 +darya +bobster +bebep2x +bobcat12 +bubulle +m123321 +leopard2 +121256 +silver14 +COOPER +monchi +nirvana5 +jujubee1 +l123123 +Pegasus +411 +modeling1 +cirebon +brayden3 +pizzaboy +elton1 +kelly! +allegra1 +030696 +rayallen20 +24081978 +87651234 +tHTaJehzsp +199991 +sabrine +010708 +anniversary +grandma11 +qwsxzas +21011979 +teepee +croquette +escargot +cartoon10 +nikkisixx +bear15 +mikala +eljefe +1peter +ireland3 +jeremy8 +gosiaczek +huntress +wizard13 +jkz123 +shadow26 +nigg3r +03011995 +billou +prasad123 +bombshell1 +felix11 +chris1993 +711 +090594 +lalla +nuncamas +JysGy2Yd87 +gig +132123 +toosexy1 +satheesh +512345 +thong +jess18 +denis1992 +babicka +121388 +ट +westwind +toothfairy +datuna +julian05 +asskicker1 +iamcrazy +02011995 +lfc1892 +tiger66 +kentavr +lifestyle1 +bluecat1 +linux1 +makanan +cracker12 +tkfkdgo0 +231274 +12051997 +flexible1 +angel76 +teamare +cipher +hunter26 +jyotsna +Sahhas1221 +chris4life +1sucker +ruby10 +dare +cheerbabe1 +chula12 +burton123 +sasuke101 +boateng +ermakova +thomas44 +barnyard +sonusonu +outdoor +18011981 +oakcliff1 +joseph77 +pamela11 +03121996 +sidorenko +vagina. +09081993 +guitare1 +horseshit +sweetman +nata12 +mcr666 +jordan44 +3369 +twentysix +02051972 +ALESSANDRO +christine! +pingu +19391939 +silver24 +marmeladka +only14me +balto1 +renee08 +pilchard +hello2u2 +redneck5 +16051997 +ninenine +desiree123 +blarney +nugget12 +19871020 +sudden +retriever +821226 +282002 +jackass101 +skate420 +fred10 +equity +johana1 +1316 +heart14 +tinker15 +rusty13 +12111995 +verdao +yodude +12091977 +landon09 +stormy2 +sweet90 +Jesusis1 +Indian +alyanna +191295 +199007 +teamomama +lucy23 +19801982 +horny4u +sumsung +eddy12 +gennadiy +jhonjhon +papermate +tippmann1 +stepup1 +juli123 +june1979 +d0023500 +omg12345 +werken +170196 +michelle29 +england10 +Arnold +Linked1 +BUL5Tacumi +flipside1 +199621 +bibigon +chris83 +bayarea +loka12 +18021996 +corgan +sherwin1 +123.com +grinder1 +balla2 +06041979 +foxracing2 +hiphop! +chato +le_den_ec +aron +fashion! +yourmom6 +carolin1 +bitch92 +230476 +ihatemen1 +apples10 +meme10 +wanker123 +120871 +try123 +Mathilde +220776 +meloman +861229 +19901991 +lolazo +matthew26 +hanger18 +colts21 +fallou +smores +195000 +SZGd4eY287 +weeds1 +taburetka +bachir +cashmoney5 +19021978 +79transam +teacher5 +lilflip +superdave +eminem1234 +cleocat +060995 +handel +06041980 +22091979 +flatline +amber06 +oleg1997 +300478 +liljoe1 +icecream23 +mamimami +tiwari +18081979 +14041978 +300500 +18071979 +maddie05 +cry +chica13 +october03 +redneck16 +0806 +dhillon +michaels1 +hello56 +alessandro1 +963123 +400009 +fhtylf +000022 +01011910 +198118 +mistico +incoming +michal12 +merrick1 +310795 +18031997 +owner@hr.com +rocket69 +cordova1 +campanile +максимка +marist +1366 +biggie2 +hotdog23 +bestbuds +az123456789 +hashish +32615948worms +multik +loveisall +663366 +1remember +joselito1 +thomas97 +layne1 +mailliw +marijuana2 +simple7 +forza +shaniqua +s987654321 +2222ww +AmerikanBlend +r11111 +211003 +20091975 +20012003 +fuck50 +janet12 +natalie06 +john5646 +Techno2009 +vaughan1 +22101977 +rafael01 +secret08 +Naruto123 +chelly1 +ash12345 +04120412 +z223856 +bananas11 +simon11 +jablko +artem2010 +daniyar +june1998 +perkele1 +indore +karpova +210896 +P@55word +kool23 +sweetie8 +12521252 +17021997 +281978 +andreu +arabian1 +141276 +310377 +augie1 +2300 +29091976 +ivanovich +xavier4 +25011996 +samuel15 +donkeys +1738 +kyllian +ha +dimepiece1 +fishpond +purple87 +k.,bvfz +iloveluis +qecEgdA3zx +bluesman1 +280378 +agency +hailey7 +hotmale +26021996 +breanna3 +jack2009 +robertpatt +zaqxswcde123 +nfvthkfy +19021975 +student12 +21011977 +070680 +danville +24121995 +tinydancer +doggy4 +261980 +swastik +moosey1 +west14 +chuck12 +zxcv4321 +castor1 +wer123456 +251994 +roma2010 +Damian +ws123456 +hellya1 +141000 +batman44 +ninochka +bluegirl1 +loveu13 +pontianak +kamogelo +london2008 +281992 +bryan5 +24031977 +peach12 +statistics +miranda5 +earnest +nick05 +19861115 +felix01 +pelayo +050909 +110102 +vova1997 +ihateu12 +heather17 +racecar2 +logic1 +thomas28 +tidbit +789523 +gamestop1 +zimmerman1 +qazxcdews +pink143 +juan17 +vtkmybr +galvez +doggy6 +842655 +120469 +qwerty1985 +abc123def456 +maadurga +pp +division1 +bitch!! +b1b1b1 +jeanlouis +dcba4321 +redbul +tegan1 +mantha +gateway2000 +kj1234 +freedom55 +totenkopf +201212 +7thward +mandy01 +ranchero +uloveme +kisses69 +richard18 +rasta420 +thomas91 +martes +19041978 +felixthecat +197925 +monster18 +timothy01 +sephiroth7 +bepositive +fatcow +yXP7Wbewpk +050778 +destiny69 +sepatu +minnie5 +angga +godsson1 +no1butme +medtech +yomomma! +nitrous1 +oceanic +smile9 +harris123 +megaman3 +qazwsx13 +mayo +harley. +chinenye +tyler2000 +beaner13 +mona1234 +05101978 +tatita +georgia01 +darkdevil +socom +berto +19041979 +lotto +lord1234 +bloodymary +cole13 +Daisy123 +freddy! +reymark +stalin1 +devin13 +rebell +1cowgirl +l11111 +060675 +stayout! +ytrewq123 +elijah23 +toontown1 +hardaway +melvin2 +lawlaw +MOTOROLA +S123456 +197419 +azerty77 +fuck111 +dominator1 +sean14 +asdzxcqwe +seanjohn1 +kissit +11021998 +life23 +3three +noah07 +aubree1 +070195 +amoremiotiamo +28091980 +murphy22 +dedication +jayjay6 +littlelady +r1r2r3r4 +singel +lacrosse4 +259758 +brown22 +scrappy12 +roro123 +train123 +���������� +130013 +hiphop5 +jumpoff1 +new2me +payton01 +imsofly1 +fucklove09 +loveable2 +171995 +silver! +1surfer +hotboy7 +jannet +Bulldog1 +thug13 +pinky69 +trabzonspor +dune2000 +kzktxrf +cameron04 +16081996 +klausi +tantan1 +1jenny +21011978 +801020 +Aa111111 +29041979 +195700 +fancypants +stella! +fellini +300575 +rencontres +100871 +malhotra +mauri +oneman +fresh10 +120498 +peanut04 +mj12345 +merino +chester10 +charles8 +Big +XAVIER +097531 +mickey00 +booger13 +difficult +22061977 +0zero0 +19851001 +27061979 +bigdick7 +oliver9 +special123 +arusha +12sexy +1louise +funny7 +rdfpbvjlj +asdfgh3 +110506 +badalona +peppone +menmen +dasha1996 +gillingham +pirates123 +831022 +yendor +girl15 +mitsou +13091309 +ladonna +19861103 +fuckyou02 +emma23 +mama19 +110309 +200675 +purplelove +oliver6 +dinesh123 +black26 +140894 +revathy +brenda69 +jackie18 +ctvtyjd +241098 +cutie69 +sweetstuff +tinotenda +march1993 +040280 +punjab1 +cuddles12 +malala +duhast +kittycat! +cby +bossss +antonio69 +france12 +kathy2 +chiquis1 +mama1997 +theused2 +hailie1 +bojana +surfin +voltage1 +CELINE +gurunanak +juana +pieface1 +romano1 +ethan4 +mackay +hustlin1 +panocha1 +14011401 +16101977 +bluelight +fractal +hello66 +xiaobai +7890uiop +Manuela +0912345678 +18041977 +112369 +lilone13 +papako +lynn07 +gil123 +joel23 +0xzryx +260196 +kitty25 +melena +janay1 +southgate +230795 +811228 +tobi123 +kisses23 +diamond17 +05101979 +iloveyouja +dragonballz1 +belen1 +texasmade1 +pussy. +downey +soulfood +hotbabes +Tootsie +181995 +steph15 +dylan23 +nathan98 +811018 +sara15 +grandma01 +olioli +deanna12 +track12 +bigal +skittlez1 +04011980 +whatif +cyt +midnight8 +30061979 +luisteamo +kriska +209209 +150276 +taniya +jax123 +duhduh1 +dachshund +eeyore2 +stella10 +wanderlust +loveworld +stayoff1 +1277 +261174 +scrapper1 +carlotta1 +porcinet +271172 +th +mexico00 +080194 +fatty5 +nabilah +asilas +wonder123 +12381238 +surfen +terriers +ginger18 +hitman11 +fuckit5 +jason420 +zombie2 +sensation1 +daniel83 +matylda +Sophie1 +coconut12 +851123 +teeth +crissangel +s112233 +dinamita +231000 +debora1 +15121975 +12457896 +tomahawk1 +hearts11 +sugarsugar +bobbyd +getdown +liza12 +bandit14 +sn0wball +patman +poet +mysoul +gallant +hardcore3 +7895123z +kingss +sabertooth +beauty101 +ilovezack1 +relax1 +dalia1 +bribri123 +rjhjkmbien +mildseven +twins06 +love210 +gizmo69 +08121994 +shotta +omg999 +180196 +torpedo1 +rubyrose +lincoln8187 +joker99 +newlook +larisa1 +iggy +sawsaw1212 +reminder +0521 +digger12 +anna06 +parrish1 +frenchfrie +aqq997 +shanell1 +26061977 +andrey1997 +sassydog +YtQ9bkR +deicide666 +thesame1 +banana14 +ballas +shayshay12 +bassfish +margarette +faygo1 +henkie +190495 +anatolii +benoit1 +22121996 +ra1ders +jalisco13 +andrew55 +senior04 +christ3 +cocacola10 +myspace999 +1580@welca +200404 +sidekick08 +sergserg +Frosty +phat +priyanka1 +199428 +meeka1 +bengbeng +13031977 +johncena8 +zermatt +251975 +000911 +balla22 +surface +041989 +go49ers +jenna3 +stephen11 +lamar12 +eric08 +maxmax123 +muggins +buffalo2 +dianaa +221172 +mia1234 +lisa25 +azerty78 +842001 +101970 +jeetkunedo +624624 +justin92 +suspect +7samurai +volley11 +jepoy +safety123 +060480 +2882 +javier7 +jeanny +yourgay! +0423 +natalie23 +110298 +testes +pavlin +04061977 +01021974 +katena +sparticus +pulguita +11111118 +130574 +olumide1 +kolakola +pekanbaru +24021978 +judge +karebear1 +apple111 +220775 +151175 +ratona +alfa33 +12081975 +cocomero +together2 +ich123 +jamesl +jmc123 +viruss +married06 +26071979 +wlafica +cowboy8 +hobie1 +070894 +gabriela7 +tecate1 +yousuck69 +050109 +ryan2000 +abuela1 +nokia3120 +dragster1 +240000 +23081978 +300179 +karim123 +alejandra9 +jake77 +0822 +myband1 +qxVbGfiBuq +frank1234 +antonanton +wales +916916 +chess123 +boxter +16041979 +reset12345 +nicolas7 +beth11 +perlas +guesswhat1 +030197 +3630000 +woogie1 +17121978 +sonofabitch +mousetrap +alarcon +dakoda1 +011095 +tester! +sydney! +kissa123 +291175 +brown7 +tanner5 +ronja +station3 +wroclaw +031296 +jairam +bigboi2 +Christine1 +070693 +gator12 +197906 +280978 +hendrix2 +666666j +571632 +011983 +pointjor +551155 +darkness11 +potter11 +pheobe1 +cowgirlup1 +ilovemary1 +charles9 +270178 +060795 +borntorun +011078 +dora11 +080309 +loveandpeace +anna19 +lavelle +se +q1w1e1 +25041996 +rockland +21121976 +1babylove +17071979 +cc12345 +witcher +020306 +170000 +r00ster +281274 +ginger1234 +luis24 +status1 +khanna +aubergine +444422 +snickers4 +meteora1 +nikita2 +tink1234 +246789 +12121972 +duncan123 +marinho +sabrina! +0000000000o +gretta1 +152436 +dancing2 +cass123 +fou +bebe18 +rachel09 +oluwa +relientk1 +harley95 +17021996 +fiat +martina123 +sevenseven +chicago08 +skynyrd +112511 +14071997 +chumley +wet +mustang500 +cody07 +hottie05 +1wordpass +1derrick +rocky17 +astonvilla1 +akinsola +cro +freddurst +281296 +159753m +080876 +eagle01 +delphine1 +puppy22 +maimuna +03cobra +luv2fish +chabela +netwerk +malibu2 +Douglas1 +18wheeler +30111978 +199619 +victor4 +lauren19 +drpepper7 +teamo100 +Lightning +kilo123 +chipmunks +ihatehim +nirvana8 +ferrarif430 +twinkie2 +icross +whorebag1 +246891 +gangster23 +rock99 +rocky007 +021977 +wilfred1 +gaspare +homo12 +131096 +reset1 +brigade +hatelife +160677 +jerry11 +chaochao +srilatha +kevin27 +daniel82 +21222122 +karenina +snake7 +mygirls4 +120599 +091276 +lajolla +horny2 +sable123 +081275 +240976 +kjkszpj1 +creations +myspace121 +primetime2 +gungrave +19841125 +454545a +k3ZeChmExt +dance16 +231995 +220675 +09031980 +lasttime +465465 +pingouin +18101810 +78 +hailey13 +121588 +harvick +varshini +goodrich +mario18 +iluvmymom1 +thegr81 +highspeed +angels07 +hd764nw5d7e1vb1 +toohot4u +frog69 +adgjmptw0 +09111980 +sugarfree +happy06 +useless1 +evelyn2 +nikita2002 +xavier22 +654321abc +manuelito1 +bodega +marsmars +26121996 +hottie88 +kimberly5 +redman123 +1721 +lollipop5 +060179 +snowangel +usmarine +mahmoud1 +rebel3 +pinkrose1 +yamazaki +hottie95 +jared2 +241993 +startup +turntable1 +3.141592654 +sk1234 +jefferson2 +poepie +270797 +suki +110698 +260675 +199425 +080897 +chaitu +070480 +010381 +carlos99 +03041996 +051176 +04121993 +13531353 +collie1 +missthang +budweiser2 +______ +22031977 +011192 +melnikova +punk1234 +andre5 +Lorenzo +566566 +fatime +romeo01 +06111980 +spokane1 +gfyfcjybr +0605 +91919191 +bratwurst +noregrets1 +luckys1 +dandandan +fernandotorres +Avalon +success8 +kevinn +outreach +lowlife +01061975 +eminem17 +al3xand3r +921921 +busted123 +timber2 +020207 +sehnsucht +jennjenn +imanuel +staycool +26091979 +lollipop00 +021096 +250976 +stars4 +prairie +290976 +ceylan +satsuma +041295 +123qwe,./ +dream13 +199114 +myyolo +16091995 +honey20 +12011977 +derfderf +110472 +23692369 +primrose1 +mohanlal +teenie +2heaven +ilovemary +cordero1 +rhino123 +brittany07 +cvbn123 +dreamweaver +peeps1 +whitney7 +23081977 +ilovebrad1 +mapache +Archie +jiushiaini +stern1 +shahbaz +hj: +mike87 +titty1 +guitar8 +200211 +felipe13 +24121977 +kingston12 +aurelia1 +231979 +27021978 +tisha +berta1 +23041995 +sutter +shellie1 +cody08 +produce1 +198804 +klubnichka +0987654321z +shesthe1 +040977 +ghbdtngjrf +meriva +ilovelaura +jessica95 +london88 +280977 +m1i2k3e4 +roxy08 +adrian28 +cityboy1 +070495 +090695 +metal! +snoopy9 +naples1 +050396 +killers2 +101198 +220597 +star2006 +alcatraz1 +kwame1 +coffee4me +boston4 +e7yvsskj +123_abc +killer78 +yvonne123 +m1911a1 +soraya1 +197826 +tampon1 +110673 +Fall2011 +pohoda +23121977 +vishakha +redapple1 +1sexy1 +darius123 +zoidberg +settle +samuel08 +retard! +buddy88 +robrob +19821028 +connecting +boss13 +poprocks1 +sibelius +chenjian +patricia3 +nokia6210 +325 +kleber +hubba1 +goodtogo +mylife11 +220497 +195800 +jesusislove +qwqwqwqwqw +elenas +121800 +hotdog6 +grandmom1 +lupe13 +passwordd1 +bradley4 +beaner123 +chubby2 +capitol +memphis901 +teacher12 +entrada +3321 +jake88 +viv +profeta +kimera +leandra1 +lovebunny +31011997 +rock24 +49erss +19860101 +ronan +thelaw +fastball1 +190778 +beauty08 +blessyou +hoppy1 +br123456 +05071978 +21051978 +monsta1 +northshore +xavier14 +laoboi. +window12 +31051996 +panda4 +sukisuki +220673 +pr1nce +an1234 +oakdale +kakka123 +09041979 +skate88 +iheartyou2 +destiny04 +oliwka +06011995 +herbst +110372 +Harris +holden123 +410000 +19821209 +smartest1 +190277 +amanda03 +black89 +sk8ter1 +ma12345 +71310615 +231977 +253253 +hiphop01 +30123012 +r0b3rt +pepper1234 +thesecret1 +110973 +karpenko +rainbow15 +05121978 +merve +honeybabe +12122000 +18051979 +elmatador +anwar +ndubuisi +tyrone123 +Teddy +mireya1 +watchtower +210996 +26121978 +package +060996 +tester2 +numero10 +martin25 +hottie00 +honey88 +passerotto +vitamina +vonnie1 +spookie1 +flutes +241175 +vesna +johnny55 +anoushka +iluvgod1 +candela1 +sexyt1 +qweasdqweasd +thisis1 +280196 +02051974 +connect123 +7cr2guBVMG +unnamed +qtpie1 +trademark +20071996 +mike29 +carmen5 +SPARTAK +17101975 +1missy +pimpin16 +emmalou1 +14101976 +061981 +10051976 +tendai +abc666 +boavista +matarani +hermann1 +lilman11 +mike4ever +skaterboy2 +pusspuss1 +aaronc +cdflm: +kurenai +stage1 +136913 +11011977 +emerica2 +2qaz2wsx +Ginger1 +Voting +vbitkm +iloveny1 +280696 +frogs2 +21111978 +isiah1 +23011978 +02081973 +darkness! +11551155 +6thgrade +0323 +maryanne1 +hrenota1 +15041977 +wankers +locksmith +hockey35 +william02 +181176 +zzzaaa +ervin +alma12 +play69 +nbuhbwf +l00000 +vtufgjkbc +ilikeeggs +bratva +012589 +idlewild +a520520 +recipe +chaney +zack13 +16051977 +071194 +ariella +yorktown +kakaska +03091977 +holyholy +010906 +jesus89 +god111 +akindele +21051977 +banana88 +daniel31 +lindsey! +08051994 +19851211 +mermaid2 +jaya +bitch32 +aline1 +07051979 +100203 +Alice +lonley1 +hockey00 +food1234 +aramis1 +smoochie1 +robert101 +porker +blessing2 +chevy10 +roflmao123 +theo123 +diego11 +alfred123 +3333331 +kendra123 +bryan22 +ananth +5963 +louis2 +dave22 +ambrosio +02041971 +bytheway +jchrist +15011979 +joebob1 +nicegirl1 +papusa +19851018 +gemini17 +poznan +kamil12 +tiatia +elie3173 +199103 +gordon123 +drummer3 +saddle1 +czekolada1 +bosox1 +missy08 +hotmamma +hawaii06 +70000 +max1994 +bobbin +flavien +p2ssword +lucky44 +b43m6xhife +trytry +selvaggia +Iverson3 +deathnote2 +swamisamarth +getsmart +sexyma +22081977 +123456789ok +sangha +semaj +freddie123 +Courtney1 +5005 +panthers23 +20061997 +150178 +daisy69 +Madrid +americanpie +wayne5 +ded +nur +10121974 +mamasha +daquan +johnny. +dajana +koko11 +riccio +020876 +cagayan +swanny +kaitlyn3 +jake02 +ohio123 +azul12 +usausa1 +fedor +sunshine30 +adam88 +teddy6 +scooby8 +turtle14 +hochzeit +hotrod12 +26021995 +pulsar180 +mariquita +chanel11 +sanika +freeman2 +adelle +shavon1 +guatemala2 +nastasia +flash5 +friendship1 +oliver16 +Francisco +details +disney22 +2516 +070180 +april1987 +instant1 +230575 +291979 +bonnie13 +lucycat +02030203 +broncos12 +280596 +bobbob12 +ringer1 +211981 +tinker09 +17071997 +candide +xandra +summer2005 +skopje +ricorico +197333 +pumas13 +matthew95 +allison! +tool123 +mattingly +ribena +4wdaxP642F +bogota1 +nazanin +grad06 +waynerooney +fregna +sidharth +dillon11 +g0ldfish +ilovey +O67l2xzfvN +66667777 +sophie05 +sweeet +jorge23 +560050 +pokemon12345 +CORAZON +100272 +sanfran49 +45214521 +whitehead +janeth1 +mike03 +starz123 +14131413 +mickey20 +211112 +shane22 +chito1 +777777777777 +chiamaka +federica1 +william77 +jess08 +cochise1 +alianza1 +fucku09 +moumita +chocha1 +myspace67 +pakistan12345 +fuckyou86 +monisia +basketbol +120369 +09121994 +020802 +george25 +jammers +sheepy +javi +1stephen +kiss100 +shameless1 +lineika +suganya +frodon +james143 +roma12 +marie99 +endlesslove +risingsun +12021974 +08061977 +peter10 +shakeit +giacomo1 +442244 +110397 +chibi +jealous +jacoba +regulator +101004 +drowssap12 +1raider +090295 +septembrie +031989 +single5 +020708 +ratata +19841002 +lester123 +131200 +jesse1234 +andrew29 +audrey01 +trecool +lame12 +toto90 +sweet92 +musiclove1 +sdfsdfsd +denver2 +firewire +08081974 +ciaociaociao +mybitch +soda123 +lfybkjdf +dragon97 +mazsola +130675 +19902000ttt +loser99 +vball14 +121172 +123344 +123... +Asdfgh1234 +shawty13 +florida6 +pokerstar +leelou +london66 +kennedi1 +lacie1 +150976 +251174 +April +Xchange +pooo +killers123 +140179 +kelly16 +kookai +jesus2006 +linkedin2012 +kiran1 +car0line +Lorraine +sora12 +123123n +njkmrjz +kickball +fairbanks +vwjetta +GIUSEPPE +lora +hernan1 +aksaray68 +loco23 +blaze3 +bubuka +oriente +825825 +diesel69 +angels9 +10091977 +phoenix69 +beibei +060595 +29111978 +camaro123 +hfvd3425f +3rdeye +veronica10 +boggie1 +aerial +momndad1 +conan123 +020968 +capitan1 +sara14 +jazmin12 +musica10 +tanglewood +20101976 +enter7 +abababab +lowlife1 +callofduty1 +rockon7 +thought1 +jussi69 +kuningan +050779 +cracka1 +savithri +tigerboy +55225522 +nicole34 +julia5 +guilherme1 +ajalaa +God12345 +ottoman +badlands +011193 +041978 +gorams +laura! +mickey02 +bowwow4 +bobbob123 +poiuyt12 +29011996 +penshoppe +haha12345 +harrison2 +zdenka +fuckbuddy +danang +Bulldogs +Adgjmp +blister +benni +32123212 +dasha2010 +byakugan +rassvet +fuckall1 +lenina +may1998 +30051996 +knockknock +talented1 +golfer123 +rayray14 +d00kie +281982 +020308 +Dominic1 +whatever08 +06101979 +vflbyf +121964 +06091979 +29101996 +azsxdcfv1 +africa12 +085213 +abramov +120298 +MADONNA +102008 +salad1 +facial +03011994 +tigger87 +pepsi21 +kashmoney1 +realist1 +lutheran +1natasha +cardigan +andre22 +salim123 +howdy123 +monkie +vincent11 +noddy1 +cassidy3 +booty3 +v12345678 +fusion12 +longboard1 +781012 +ema123 +chasseur +david45 +pollack1 +elinor +jumpjump +19041977 +0531 +241981 +01091976 +abkbgg +camer0n +its +zapatero +drowssap2 +261196 +110031 +stickers +Isaiah +jaylee +mariaisabel +ihave2kids +1435 +jasmine20 +mysons +cherrys +doodah +sydney08 +j1j2j3 +991199 +21041977 +15061996 +charlotte9 +hackthis1 +mnbvc1 +adrian24 +200976 +necro666 +apple09 +hulaanmo +slurpee1 +bball! +1233321 +myplace1 +daffodil1 +04091994 +martin20 +204204 +LALALA +catarina1 +030375 +821014 +ihateyou6 +eTravelmoleOptin +serega777 +jersey12 +555555s +mikey21 +04051996 +suhana +barbarita +lynda +breonna1 +#1chick +Bella1 +130874 +mexico77 +1238 +octagon +030596 +none12 +gavgav +wayne22 +nikos +10101998 +vivalafica +dgkallday +4079 +18021977 +bursaspor +051978 +225500 +01071976 +romeo22 +brian15 +allens +nanito +241196 +140776 +julio2 +lavern +froggy101 +char123 +tanuja +johnny15 +cambria1 +bienvenido +20012007 +player08 +janjanjan +999123 +amor2009 +130476 +batman66 +max1998 +minority +corvette69 +2813308004 +angles1 +HAHAHA +penis666 +marge +suffolk +queen10 +innamorata +245678 +grindcore +10011976 +april88 +dcwdcw +07121979 +mohamed12 +ViewSonic +121223 +karolinka1 +charles. +murdoch +realty +dude55 +201206 +arjun123 +emma03 +160496 +Campbell +Charlie123 +mamapapa123 +nagaraju +lovepussy1 +2221 +justblaze1 +101055 +120470 +marla1 +06031996 +skincare +auburn12 +brook123 +butter8 +mast3r +sasha16 +290877 +david666 +201196 +darius2 +241295 +greg11 +27041978 +robbie11 +frank10 +nbvjityrj +bushido123 +lastname +internet5 +jmjmjm +animal13 +kmg365 +avantika +cupcake. +iiiiiiiiii +asdfghjk12 +frijolito +naruto33 +WILLOW +propane +martin77 +logan23 +1georgia +alskdjfhg1 +Maureen +������+���� +bryan3 +bryan23 +phoebe12 +killa69 +blahblah123 +waterh20 +kristen3 +120670 +gamble1 +snowflake3 +13091979 +321654987a +blinkblink +andras +j3ss1ca +19121996 +nurses1 +112002 +mariah10 +playful1 +notreal +koala123 +111170 +charlie200 +jakeyboy +forum123 +12091976 +skunk2 +03101996 +25312531 +gringa +seashells +estrella13 +3u7wrkaA8J +12111977 +reddog12 +505 +daylight1 +eman123 +fake08 +anna777 +star2010 +make +meli +sports101 +ilovejc +pumpkin22 +realmadrid7 +0099887766 +aminlove +lintang +iscool +20031975 +boots12 +535535 +bitches01 +madhukar +booboo1234 +fagboy1 +120998 +30011995 +280179 +wolverine7 +baby777 +logan04 +khuljasimsim +mariarita +signup1 +zsazsa1 +frannie1 +stmarys +powerslave +smile07 +hottness +thor123 +zw5A1u5eVw +yousuf +whale +01061976 +229229 +19871021 +071195 +demarcus +allen20 +2mndonaaa +748748 +game11 +7777777v +13021977 +fatboy99 +retraite +rolland +facebook11 +accident +prince1234 +15021977 +super100 +mouse11 +quatre +Sniper +scruffy123 +001965 +454454 +sassy07 +qazxswe +richa +jadensmith +canabis1 +meow1234 +tigers33 +nastik +pipi1000 +sweetpea! +redsun +lovesu +treats1 +dctulf +mybaby4 +joelmadden +310876 +pr +billy21 +roseann1 +161276 +peachie +kenzie2 +lover89 +tamilan +autobot +050479 +20091978 +sergio01 +trevor13 +filsdepute +270878 +number1dad +001995 +privet1 +birdies +1monday +pazyamor +pup123 +190294 +cool56 +91mustang +hamsters1 +rockstar19 +1860 +karelia +nikito +sirocco +plovdiv +19821020 +alexdelpiero +091298 +mammam +zabuza +hearts5 +jess5377 +antonio16 +pagani +maddie4 +anhthu +grafton +grunt1 +010161 +man111 +soltera +baller17 +campari +483483 +deyanira +ewqdsacxz +hanakimi +sassy09 +291277 +1foryou +ble +ljxehrf +320000 +hawaii99 +Lucifer +gavrik +ilovecheese +rosebud12 +villareal +140274 +gizmos1 +llama2 +mommy32 +varun +asiamarketing +leon01 +bertone +chris1989 +redsox05 +wardog +dozer123 +raven69 +ert +guerreiro +jayde1 +misspriss1 +rocky06 +brandon27 +Jimmy +marsha11 +farcry2 +gonzaga1 +jos123 +doremi123 +dimon1 +pwisdiwhs +little5 +09051978 +matt19 +081200 +morenike +bluearmy +pulsar1 +tommygirl1 +dumbshit1 +runfast +2225 +21101977 +kisslove +BULLDOG +30031978 +karlee1 +abigail11 +katter +pusinka +kokanee +mistica +loveme4eva +221200 +people9 +060777 +sivasiva +mercer1 +maslo123 +janajana +04121977 +dianita1 +560058 +wingzero1 +121316 +2539 +28061979 +jenni123 +06121978 +marlboro12 +connor7 +farted +tanika +derf +manofsteel +090881 +marie91 +020274 +100102 +jacob18 +unilever +1jellybean +marius123 +trickster1 +crocus +12021975 +18031977 +sarah. +sidney12 +justin0 +081991 +cubs123 +051991 +tasha01 +peter23 +1johncena +5254 +1327 +vtkmybrjdf +j54321 +masini +5566778899 +shorty77 +270378 +barcelona5 +iloveaj +amanda95 +220574 +monkeypoo +gaurav123 +claudie +brasilien +kingmaker +marina88 +islander1 +duckduck1 +0159753 +185185 +daniel1994 +vitoria1 +appels +denise15 +helmet1 +123wert +potential +iloveyouu1 +zgmfx20a +18191819 +nanda123 +danny20 +ilovebeer1 +coffee7 +Patriots +16071978 +124680 +depressed +melanie11 +1froggy +manita +123asdqwe +chicken15 +foobar1 +casey21 +jamal2 +kaylas +luvu4eva +inuyasha6 +aseret +20061977 +311208 +sammyjo1 +02051996 +scoala +223300 +jkz +190295 +antibes +021990 +antifa +katrinka +solana +15071977 +16011978 +catdog13 +flipmode1 +abacabb +401101 +penny5 +littled +archie01 +noodle12 +cinta123 +smokey101 +08031977 +dominic5 +kayla03 +08031996 +kylekyle +123456** +nick88 +kill11 +101207 +23061996 +bashful1 +200276 +topless +bulldog21 +kisskiss12 +please3 +materia +allison4 +enamorada1 +chrisc +hotlove +432 +Howareyou123 +schecter1 +ford2001 +0813 +26011979 +oskarek +neopets13 +milan22 +ensemble +eugene12 +tuncay +akucinta +sureshot +sucram +noobie +mylove6 +cl +crippin1 +nokia3650 +motocros +111105 +sancarlos +lalala13 +lovers8 +19851122 +041980 +120900 +motown1 +nick33 +warhawk +wayne21 +15071996 +bitch2008 +wtf +drpepper3 +popop +gumbo1 +watergate +cicciona +janice123 +cashmere1 +buttercup! +110176 +120807 +100276 +sevillafc +charger2 +disco123 +ryan12345 +bonghit +ramsay +primo +chico3 +8383 +bubluk +endeavour +richard08 +1bradley +don12345 +june88 +Miriam +schaap +123321e +gd4life +30071994 +black27 +lilmoney1 +myparents +258012 +lxgiwyl +lovers10 +161096 +3dognight +scott10 +laur3n +sexyangel +ilusha +franz1 +guwahati +project8 +blake10 +qwedcxz +dixie3 +15081508 +pimp92 +bol +kaylan +makaroni +johncena01 +wassila +harshini +kool101 +181981 +edgard +nada123 +kathrina +robvandam +rantanplan +NN +valmont +izumrud +hola10 +luke22 +lucy14 +dogfight +eddie69 +110300 +noah2007 +22041976 +blue4ever +11235 +britt5 +gofuckyour +hulkster1 +1725 +affinity +barnaul +nastygirl +maslova +armyof2 +11111976 +25111979 +14301430 +florencio +missy8 +22051977 +azerty59 +kiesha1 +takamine1 +jaffa1 +chaka +seller +1retard +chelsea05 +armando2 +i5sTWf1rCX +yamaha135 +joeyboy +05041979 +22041979 +makana +robert00 +060896 +dm1234 +06081977 +140603 +250596 +orthodox +isabella13 +spiegel +mika12 +123456jb +lilly09 +230576 +197505 +chance5 +95279527 +sie +londyn +aa456852 +09021977 +darth +Joanne +viking11 +cougar12 +bhabyko +pleasant1 +appleseed1 +180995 +5200 +meiling +johnny77 +lilypad1 +bouvier +hadouken +13041996 +sonyericss +alan13 +Warcraft1 +piknik +berkley1 +brother4 +hotbitch +sansiro +060908 +bebe17 +marissa5 +skyliner +chander +designs +1light +fatass69 +28051978 +16111979 +HELLOKITTY +04061978 +reena +annie13 +eric24 +asda123 +cognita +Aurora +marvelous1 +fiorello +199527 +bubba! +zoegirl +cindys +czarna +p2XcFgjCvr +meonly1 +5455 +1bighead +090480 +060279 +nastygirl1 +javier15 +170177 +ranger23 +fisher12 +0111 +georgia11 +santas +narusegawa +banana77 +Garcia +FLUFFY +freaky123 +pepsie +bigwill1 +amorino +katherine0 +19871111 +lixiang +260876 +201274 +mario8 +25032503 +turtle9 +йфяцычувс +azbest777 +madonna2 +220011 +vivera +wolverine3 +shabbir +cassie15 +andrey1995 +madura +vorobei +t090571 +95chevy +marylin +braves95 +michael50 +chatter1 +eagles25 +luzmaria +sensei1 +bizzle +collin12 +pepsi10 +gasparin +ultimatum +magdeburg +kopilka +lovers4eve +hottie27 +laura1234 +board +Sunflower +rally +5577 +301987 +811029 +10111976 +m2g7U6O397 +anima +pendeja +25002500 +frosty123 +700040 +lolitas +20012005 +jerkface1 +benji2 +1192296 +texas14 +lovesick1 +clemente21 +kismat +7344555 +36987 +1q2w3easd +kopernik +28061977 +21031997 +120372 +jojo18 +savage3 +blondie11 +yannou +haley6 +vfvfxrf +snickers22 +william0 +morenito +tranquil +lovebug101 +happyfamily +heriberto +taco11 +pastorius +chase4 +waynes +hggih +qweewq123 +trans1 +pearl2 +dreday1 +PANGET +050994 +milkdud1 +faithingod +dude33 +rafael13 +bunnyrabbit +sasuke1234 +lucky02 +kenny10 +181175 +1212qq +charlieb +cookies6 +robert87 +munchy1 +tanner4 +threesome3 +shepard1 +821224 +micheal3 +future123 +22011996 +windows2000 +3830182 +tristan01 +964123 +chrisp +0825 +445566a +witchy +thickness +020181 +polk +sexyback12 +ihateyou9 +nate01 +vivayo +alex1972 +mimi88 +JENNY +01071975 +235 +akoako +zztop +courtney22 +01011959 +punk14 +loser17 +applejack1 +18111976 +spencer13 +841015 +meeko +becca2 +rockhopper +skyliner33 +amanda86 +071198 +iloveyou97 +bullshit7 +homie12 +djeter +chick2 +gupta +cowboy88 +22041977 +mxyzptlk +arsch123 +dsadsadsa +11111p +chinaman1 +sparky101 +holly22 +panthers13 +michael84 +arcticcat +mcbride +poopdick +200375 +170876 +richman1 +acuario1 +jayann +30091978 +nguyen4 +COWBOYS +ttt111 +milan7 +bigbutts +loveday +TINKERBELL +utythfk +15011977 +kieran123 +bike4life +3690 +lisa14 +nicolina +duke07 +199308 +internet01 +851210 +usher2 +burnley1 +170376 +akmaral +811023 +charing +nene23 +jesus03 +252526 +parker22 +nirankar +saving +hawaii3 +dhanya +evolution2 +maksimov +a741852 +verdun +uiuiui +000321 +miley16 +shrek123 +motivated +felisa +bulgakov +muthafucka +christina4 +160277 +fireman12 +bigdaddy11 +kristyn +pokemon90 +mossberg +03081979 +panther6 +foshizzle +momma12 +leonardo10 +shay16 +131313q +rfhlbyfk +koller +061196 +merlin7 +boss74 +louisvuitton +james94 +honey05 +fierce1 +240777 +qwert67 +199205 +anisoara +misiek123 +modernwarfare +20022007 +poodie1 +18021979 +shock +0blivion +trtrtr +Alex123 +diana23 +capricorn7 +lili1234 +newsletter +business123 +puff +lilcutie1 +071421 +541788 +luna10 +070605 +060906 +angel2003 +cool20 +australia0 +beatbox1 +lover#1 +ricky23 +sexymama11 +shoelace1 +nininini +13081996 +artem1998 +control2 +snickers01 +kyuubi +logical1 +iforgot! +FATHER +Chrissy +200676 +rosegarden +heather15 +horseshoe1 +willyou +andi123 +zavala +cegthvty +diva16 +yeager +pantera3 +080874 +adidas777 +19851127 +hondacr +070701 +victor16 +210875 +ab12345678 +amazonia +fuckyou26 +nena23 +123aye +301070 +1lesbian +calhoun1 +851023 +biggdogg +marley09 +BITCH +haze420 +kulkarni +7000 +millsberry +3l3m3nt +leyton +paintball8 +bassoon1 +smiley10 +looser123 +Sergei +�+������ +aka +kaila +czarny +kiss01 +angeldog +chicago4 +8657 +22011997 +04111993 +tomtom11 +hairball1 +samsung14 +ocean13 +monique01 +kenyatta1 +goddamn1 +culture1 +flowers8 +020302 +amaya +463395727 +piotrus +april1988 +letmein99 +bandit07 +woaimama +170277 +jkl456 +mickey33 +petey123 +monomono +volcom9 +121170 +19851224 +070979 +denver07 +22051997 +Soccer11 +omgomg123 +88chevy +gothika +fifafifa +dupeczka +831018 +cowgirls +bellisima +milonga +pritam +rocky! +070775 +jhon +14061976 +20031977 +sasha98 +north123 +naima +passer1 +buddy12345 +1pebbles +laura17 +300894 +fraud +naruhina +blacky2 +firestone1 +750750 +perumal +100772 +richelle1 +040677 +purple76 +patata1 +pappas +gfhjk123 +leafs1 +casey22 +01091996 +hafida +lily07 +britneys +cupcake69 +14theroad +queen14 +regenboog +102030q +21111977 +James007 +12401240 +julian09 +overflow +bitch2010 +track2 +hihihihi1 +purple90 +arriba +tiddles1 +fhutynbyf +bernie01 +shadow420 +14051996 +khadija1 +shakey1 +imortal +ctht:f +11031997 +julian15 +200206 +bonethug1 +maddog11 +20011975 +bear16 +gundam123 +sarrah +ski123 +bootylicious +19861002 +210775 +aviator1 +marquette1 +miller10 +cyberman +may1980 +0.123456 +froglegs1 +143256 +thomas0 +shane7 +121314z +shravani +040475 +15051976 +bubblegum5 +lawless1 +family#1 +delmar1 +kozlik +thomas30 +giggity1 +sweetie22 +wildcats! +121009 +june1999 +197805 +bellsouth +taylor27 +781021 +20022006 +0908070605 +wilkinson1 +686686 +fatfuck1 +cubs23 +Green123 +falcon10 +1bigred +160476 +pointers +vendredi13 +green42 +EAGLES +snoopy09 +q3538004 +imgay12 +aluminum +pepsi24 +draper +ITALIA +Jesus4me +madison. +viernes +80baby +1234rr +pigman +4always +yyyyyy1 +qwewq +MONEY1 +infante +forget12 +bulldog8 +google8 +sabrina22 +nonnie1 +zolushka +spy123 +rjn`yjr +killer12345 +recruiter1 +27041979 +freddy7 +heidi2 +suckit5 +harekrsna +qazwsxedc2 +PA +170679 +jjjjjjjjj +johnny07 +barcelona3 +dragon81 +sword123 +201003 +30121979 +ivancito +afshan +dugong +melodia +tadashi +emanon +onelove13 +loco10 +cappy1 +madalyn +jackie16 +abrikos +isolde +romaine +east12 +blonde! +109 +edmond1 +hottie20 +dexter22 +25121976 +energizer1 +190894 +poppop12 +quake1 +ric123 +culiacan1 +cascada1 +AA3030316 +19851028 +841027 +23071978 +21342134 +space01 +christian12 +16101976 +lilsaint +spider21 +Cracker12 +taufik +lucky100 +jumpin +#1diva +tigger28 +detroit3 +barbie1234 +q1q1q1q1q1 +london9 +wipro +moomoo7 +chinchin1 +escondido +joey07 +elettra +15071979 +p0rnstar +21011996 +sealteam6 +banned +161275 +03071996 +Tinker +brasil12 +gohard +2215 +zsolti +goldcoast +mrbear +anna89 +197806 +12345sex +0000oooo +justice11 +xfactor1 +trevor10 +fitch1 +1234567890f +1theman +lady08 +1lilwayne +gemini18 +5609867 +trinity8 +milan4ever +mccormick +sassy1234 +29081979 +football46 +bodie1 +120609 +eritrea +power12345 +trindade +king34 +211995 +qwedcxza +aldwin +a7xrocks +cossie +hickey +siegheil88 +king420 +APPLES +mateusz12 +vova1998 +qwerty31 +fulvio +199622 +24262426 +qwerty06 +123695 +happy2bme +lizard2 +thumper3 +suntan +07041978 +080395 +260296 +yourmom22 +brucewayne +tyler2006 +lexy123 +megan6 +adidas01 +13021997 +stang +sonny12 +198283 +jai123 +rebel10 +101171 +bigtits2 +cookies01 +anadolu +rose19 +monster77 +newyork. +hemi +barbie07 +poppoppop +190178 +philip12 +dc +famous! +Q1w2e3 +06011980 +2n76xG2yIU +kenmore +199427 +papermate1 +choosen1 +071077 +freeland +100674 +shaniya1 +haller +komarov +equinox1 +sophie15 +diego01 +raiders6 +jeremy24 +canada13 +will11 +patches11 +080184 +saibot +lilmama7 +123401 +12steps +21091977 +mangusta +noranora +sanguine +*star* +andre01 +playas1 +devilish1 +dexter5 +badger123 +chipster +120572 +sara21 +pirate123 +2ofakind +a88888 +hassen +chico01 +flyer +skidrow1 +150796 +31031979 +001996 +carlino +13171317 +ficker +180575 +popcorn. +giresun28 +succeed +darkangel6 +kappa1911 +1.2.3. +davidbeckham +28071977 +murder666 +mafiawars +maria05 +cutes +madhura +toot +john44 +nounette +w3lc0m3 +THE +18101996 +timurka +sixteen1 +21011974 +sugarlips1 +truelove13 +echoecho +55555lvl +kamron +sachiko +dragons5 +25071979 +04041997 +yellow02 +g00gl3 +050309 +agrawal +ewunia +dipali +capcom1 +jayar +9595 +122800 +pitagoras +peddler +orellana +icarly1 +hehehe123 +adeoye +020906 +Aa1234567 +12345678qwertyui +061077 +tyler25 +080781 +ahmed12 +granny3 +meanie1 +buthole1 +lalito1 +nfyz123 +sadie! +dima2002 +pantera6 +perseus +lynwood1 +marysia1 +yankee11 +AAAA +14051997 +musick +190377 +02061996 +mom4life +fargo1 +sixela +noshit +270996 +elvis13 +FUCKER +chatnoir +cupcake24 +dragons13 +s123321 +1ninja +zniQpnK733 +detroit12 +durant35 +steelhead1 +wilhelmina +pies +26041979 +muffin6 +gfhjkmm +lovelove7 +grandmom +��+���� +rawrrawr +twisted2 +element14 +float +734001 +myspace98 +didou +1187 +juanmiguel +ilovericky +angeleyes2 +boomboom2 +30081981 +september13 +minnie22 +guardians +yfdctulf +minh123 +papaye +22312231 +7770777 +monkfish +shailendra +alex1973 +tyrone3 +kociak +glo +manboy +olga1234 +grinding +millard +black92 +asd159 +google69 +12play +29031979 +03121976 +29111979 +grady +mayita +amanda0 +voodoo13 +31081977 +ALEXANDRE +yamaha6 +kodabear +expensive +121345 +silverado2 +cena11 +joseph89 +del123 +19841120 +maloney +may1982 +241074 +piggy5 +5million +priyam +15031975 +snoppy1 +sideways +urbano +dominion1 +apple44 +24081995 +dante12 +johnnyb +redred2 +chappy1 +Buster01 +20111977 +150376 +ayomide1 +verdade +joaopaulo +07061978 +202002 +asd777 +cowboy24 +memyselfi +trevor3 +801124 +1lollipop +nudist +shay15 +apple18 +iloveyou4ever +say +dog123456 +jacksonville +diogo123 +imran1 +19861211 +nikita1999 +13051976 +08121979 +top100 +cutie19 +werule1 +shadowman1 +zxcasd1 +gatsby1 +buenos +26061997 +666beast +3698 +bitches13 +290496 +taylor56 +charles6 +solveig +102102102 +glass123 +141076 +music45 +green89 +07101995 +dave23 +239239 +dadang +heyjude1 +trinity05 +jose27 +11223344556677889900 +sunnepa1 +impulse101 +princess56 +anton1995 +kings2 +batgirl1 +master777 +munna +chloe23 +ricky10 +1907fener +lilman07 +851120 +koston +pluisje +520999 +katie06 +jerbear +mybabyboy +emma02 +donavan1 +tamagotchi +14041997 +polki +200776 +20102000 +tatung +kata +fylhttdyf +borabora1 +adidas88 +piesek1 +broucek +nodnarb1 +bobo13 +selena11 +123456qa +opossum +260378 +ceilidh +peniss +1417 +royalflush +carol2 +awesome22 +110898 +19851213 +dumbbitch +chamois +03071977 +cuttiepie1 +valdes +201203 +kaylee08 +froggy22 +c9p5au8naa +tonkpils +amilcar +kayla101 +redrover1 +buddyholly +starsky1 +920920 +simbacat +asdfqwer1 +200796 +mafia13 +punkrock! +1234mm +100199 +210774 +2bigballs +Maxime +warranty +cowboy09 +shanika +waffles2 +3663 +maria2010 +galaxia +kangaroo2 +LAURA +zzr1100 +060895 +28071979 +honey28 +cbcmrf +abc777 +manu11 +751002 +ferien +jamestown +spanky7 +morenaza +kittyy +400098 +linda69 +nomorerack +go4itnow +roses2 +pakistani1 +2q87xI3wGW +destiny02 +ford351 +bassboat +05021979 +intuition +samuel1234 +toybox +197828 +roxy18 +floyd123 +saxena +jesse16 +123698547 +vball2 +freight +kehinde1 +Kennwort +belka +dfg +purple97 +falcon3 +babe10 +1truluv +samadhi +dolly12 +2dollars +kakka +951753654 +mz.sexy +corner1 +77779999 +speed12 +vishwa +1mnbvcxz +zxcxz +08091977 +050305 +novice +nisse +moustic +110598 +tyson11 +266266 +babyoneone +trinacria +261296 +encule +harley17 +hunting101 +volcom14 +plumes +15021976 +31031977 +eatadick +1dance +matt20 +1w2e3r4t +blue420 +applebees1 +guyssuck1 +Hannah01 +chris1988 +Sammy123 +freak11 +199624 +albert3 +klk123 +samosa +26011996 +gougou +sweet77 +wildcat7 +tumelo +amanda93 +fghfghfgh +ardian +htt//members.cumfiesta.com/ +gaffer +samuel02 +nana18 +nx74205 +301275 +elway07 +liljj1 +stevenson1 +147890 +kokito +28051996 +1sunday +flex +��+������ +poiuyt5 +sniper69 +gracie03 +250574 +wilson21 +asd123zxc +hiphop. +hearts13 +manjit +butta1 +sorellina +DRM199019902323 +daisuke1 +actionman +002211 +buddy02 +adalberto +wolves11 +dur +junior77 +Nicole1 +latina2 +giggles12 +qwerty30 +280777 +bryant08 +kasablanka +nokian90 +lesnik +cokacola +bowwow7 +hospice +ilovebill +250376 +feb +watts1 +05101995 +110911 +07121994 +2455 +kelly101 +jaleel +wrexham +watchdog +britni +intense1 +725725 +markis +100376 +songs1 +100866 +06071978 +shradha +2040 +terezinha +0714 +desmond123 +28041977 +247001 +821121 +821218 +teamo! +19081995 +tiffany17 +1zyYbyt82A +25041997 +1little +ginogino +bulldogs5 +elnegro1 +pfuflrf +pes2009 +jayjay14 +antares1 +123456jc +maggie55 +rayhan +cornhole +insight1 +playmaker +beyond1 +makayla5 +040596 +smokey88 +pimpin0 +success! +shaka +mollie2 +squadup1 +21111979 +alinuta +18061978 +buster18 +painislove +soboleva +fresh22 +saloma +fyzfyz +zxasqw1 +green06 +16111995 +bellavita +onyebuchi +rocky77 +pipe +Hellsing +oliver00 +061206 +141175 +lawrence2 +Alabama1 +ask +desiderata +250807 +popcorn101 +lovebug5 +300995 +050898 +jonas7 +09091088 +condition +lucky888 +george09 +stop12 +refresh1 +megabyte +roper1 +micheal7 +scorpion13 +151174 +keksik +01021973 +julian06 +standup +o8lhE2z7bO +yCEI62p395 +psytrance +taco1234 +king66 +grace06 +sparky23 +starla1 +fifnfy +super88 +27101977 +vwpassat +�+������+ +aol +gizzy +hotgurl +angelle +18111978 +latinoheat +donald356 +andriana +cadeau +07111993 +gjkzrjdf +sh0pping +mother8 +yankee3 +sangam +un4given +tanya12 +220907 +spartan7 +251206 +azertyuio +newgirl +dani22 +alcool +benjamin22 +jackryan +Jones +1abcdefgh +300496 +skikda +hermitage +freddy3 +heaven09 +05031996 +skyler123 +nichole7 +badfish +johnson11 +godgrace +matter1 +dessie +brenda7 +lucas5 +bear24 +lofasz +brian18 +keanu1 +badoo2012 +chinacat +kkkkkk6 +mcafee +rafael2 +040778 +shyamala +unleashed1 +951753123 +usasf1234 +081094 +15111995 +aisha123 +slk230 +11vote +angela4 +gfdkjd +addie +flores12 +nevaeh06 +101268 +emma1 +cash23 +270776 +sophie6 +251106 +20121975 +sexyguy1 +lilman08 +noah08 +ilmiocane +lilliana +jk +dustin23 +carolina15 +adeade +joker17 +13281328 +kupukupu +irish3 +qwert! +dodgers3 +puddy1 +fafnir +lazareva +ANTHONY1 +Charlie01 +21051976 +1212aa +james93 +estetica +cacahuate +/.,mnb +papa10 +sexygurl2 +japierdole +newyork69 +199203 +oldfart1 +donnas +bribri12 +100273 +ilovesam! +fidelidade +decade +chaparro1 +231097 +luisluis +mini1234 +samantha06 +alain1 +haley13 +dogbreath1 +17021979 +azsxdc12 +07071976 +dragons11 +140976 +Leonard +maxine123 +timmy5 +chase22 +joselo +calore +salvador2 +little4 +verizon123 +201070 +5152535455 +britbrat1 +sarath +nick2000 +millhouse +jackie17 +sadie10 +penguin9 +17061978 +kissmebaby +01061996 +101169 +ra1234 +1234kids +12061976 +1estrella +bobik +1sassy +200476 +bandito1 +diller +chesca +tedesco +31081978 +outubro +eight88 +91camaro +eagles99 +pizza21 +199207 +18101978 +homie2 +25061996 +choupinou +170877 +hawk12 +griselda1 +1grandpa +arabella1 +hacker2 +mari11 +hasina +tuning1 +jaimatadi1 +vbvjpf +shokoladka +789741 +robert04 +tiamotanto +psppsp +010475 +aiaiai +milamber +120173 +mugwump +zxcqwe123 +courtney16 +sn0wman +03081978 +080875 +mister12 +jasmina1 +z7777777 +emma2010 +w1950a +wonderboy1 +210196 +brutus2 +punkers +piapia +199404 +811026 +licker1 +123bnm +agung +chicana +miami11 +resist +150907 +dustin7 +19961997 +campinas +mikaella +jamesk +z1z1z1z1 +thrash1 +210675 +142753869 +niklas1 +251273 +vegas2 +021076 +000000b +azazello +ilovezach +14041976 +smoove1 +lampada +BIGDOG +basket13 +thermo +angie21 +harley15 +ak +16031977 +eastside4 +kiki89 +necronomicon +mommy27 +h36js3gGoF +03121995 +07041979 +liar +thelast1 +030794 +suger1 +crazzy1 +199327 +virginia12 +102498 +starfleet +040181 +01021975 +oddjob +310176 +kennedy12 +legend01 +naledi +qazwsxedc12345 +gordo2 +dannyb +rc. +198113 +suicidal1 +rainbow16 +iloveyew +chinky1 +10041974 +pappagallo +qwerty121 +07011994 +19871016 +01011900 +deedee13 +doozer +230475 +yourspace1 +devin23 +tiffany. +150596 +levski1914 +COWBOY +waiting1 +dolina +mcgrath +Alfred +Popcorn1 +niki12 +manchitas +corazoncito +841018 +talitha +hirondelle +18091978 +hutch +chaddy +3syqo15hil +soinlove +kingjames23 +hottie4u +bunky1 +tennis14 +maplewood +nevets1 +rushrush +love444 +smile08 +daniela10 +qwerty97 +creek1 +ferda +father12345 +29061979 +030194 +saturnus +fishing11 +hari123 +95123 +joejonas! +1231235 +smokey16 +emokid123 +fffjjj +Alex1234 +13071977 +imback1 +maggie25 +lululu1 +compound +candy55 +consumer +001212 +601601 +dinosaurus +ratten +tarasenko +blue74 +cool98 +754321 +y6p67ftrqj +vfkzdrf +brittni +12031976 +kush +rosa11 +star03 +banana33 +shawn69 +dustin14 +salento12 +killerbee1 +03111976 +sweet33 +samson10 +ctcnhtyrf +230597 +19861106 +woodduck +13081977 +maltese1 +jiujitsu1 +08071994 +l0vel0ve +ilove143 +donna2 +prdel +100472 +willpower +ilovekate +19821023 +sasha1989 +handoi +caprisun1 +sexy40 +naty123 +199407 +27021979 +cherry88 +197802 +130808 +harley97 +alania +march2007 +pirate2 +30071979 +rochdale +JANUARY +21071977 +timmy9 +bethany12 +whodat1 +pizarro +anita2 +dedicated +roma1996 +021277 +corsica1 +april1992 +slipknot21 +25061979 +jessica33 +qwaser +FupYuxTb66 +1w2q3r4e +ishika +winwinwin +miyamoto +20051975 +cornelis +london2011 +annoying1 +retamozo +blazer01 +canes +lizzie01 +nagrom +fucklove4 +robert45 +garant +amanda33 +blue62 +rainbow08 +jimjones +lafleur +taylor26 +666666t +youknowit +eric17 +120604 +super99 +animal3 +campeones +stockholm1 +harbor1 +sergio11 +moments +apurva +061990 +exitos +amoreco +coke45 +gaygaygay +08061979 +sapato +050209 +penis22 +zacky1 +lucy101 +bluebird2 +stokrotka1 +truelove08 +gogetta +987654321w +poochie2 +TRINITY +bomberos +111298 +katelyn12 +molly24 +coco77 +102201 +camomilla +18001800 +14031977 +butthole2 +337733 +purple67 +kfkfkf +7419635 +lf +ayanda +c0raplok +193193 +0424 +123456ms +luthien +lovedad +andy16 +kiki101 +jerry5 +123456ass +docker +svitlana +paramon +mounika +lifehouse1 +mexico2009 +johnny9 +25041978 +donttouch +20021967 +rosy +shelby99 +190876 +22772277 +madhouse1 +shelter1 +sasha2002 +monmouth +15011978 +star7827 +ancora +22101976 +xxx555 +dunno1 +skittles69 +gibson01 +lo +030777 +baghera +savannah07 +19031997 +jaymark +katherine7 +090477 +CHANEL +06101978 +uuuuuuu +budlight3 +hampshire +gator2 +fuckoff09 +adrian1234 +qwe123321 +pookie08 +inl0ve +iluvhim! +manina +bigwill +020183 +161995 +110498 +rednose +fuckit11 +1337ness +420blaze +lytdybr +198655 +mimimi1 +codyboy1 +1365 +star02 +melissa25 +groceries +2315 +chicco1 +jessie. +248624 +besitos +Marco +22061976 +123fake +christen1 +hareram +tooter1 +151976 +pablo10 +280875 +angela08 +michael34 +koenig +jason30 +hastalavista +1christoph +Rooster +nonna +kalpesh +timmy11 +ilovemyboo +sambuca1 +lovebug4 +braves25 +700027 +chicago01 +jansport1 +barney! +pannekoek +kidskids +deathtoall +lovely20 +lunar +pass23 +120571 +elaine01 +terra123 +nursing08 +gordon12 +hott123 +261978 +gthdsq +misspriss +yabloko +23061976 +20252025 +glacier1 +vilma +261992 +timmy69 +alsace +ivan10 +mommy143 +92camaro +1wildcat +kaitlyn7 +12011976 +berlin12 +chupala +2341 +deputy1 +198566 +1freeman +29051978 +hangman1 +19821012 +thepower +wheeling +03041977 +197904 +04041975 +deardear +east123 +fritzie +7fperlangel +thegreat12 +hijack +yvonne12 +lacroix +panda21 +bradley11 +theforce1 +16041976 +arsenal22 +oksana1 +denise18 +mike30 +1234jk +over +shelby06 +scrap +viper13 +pass420 +almaz +valerie12 +21071979 +crawfish1 +316 +zazaza1 +130375 +1carter +manmohan +holly23 +147852369q +altamira +greengirl +brontolo +potato12 +baller03 +yuriko +keke09 +vans +hockey97 +dana11 +music666 +POOKIE +superman78 +091178 +1131 +rolyat +billy07 +19841225 +nokia95 +lauraa +xzibit1 +chevy55 +pavankumar +24121976 +tyler2008 +dima1984 +pitbull23 +bulldogs! +sydney00 +sapfir +41234123 +alexis96 +karen22 +1nurse +nickle +jerrod +lolo00 +caroli +thomas94 +boston04 +telkom +gefccgag +noxious +secret24 +chevere +emmanuel7 +adidas14 +120869 +ilovehim23 +cherrytree +camaro99 +volcom21 +panda6 +Indiana +181296 +myspace75 +zanessa1 +asdfqwer1234 +scania1 +october02 +keely1 +blackpanther +27011979 +lonsdale1 +fishy12 +dmwdmw +mariz +sun1shine +folks6 +optiplex1 +maksim1 +jeans +april420 +PIERRE +redneck11 +honeygirl1 +netscape1 +trudy +060178 +shadow007 +diesel11 +071094 +scotty01 +puppies7 +fergie12 +my3loves +bradley5 +anubhav +nopasswo +Password@123 +freefall1 +winston01 +ilovepat +p00per +12345me +shadow777 +ferrary +blue43 +meneses +08081998 +beb +myfriend1 +czesio +ker +sabrina9 +789987789 +10081977 +glorious1 +tigers. +fefe +0000123 +parker08 +contour +1wetpussy +Kevin123 +18011979 +finite +kubus +optical1 +dino11 +ber217an +123one +calimero1 +lauren00 +choctaw +tina10 +mickey. +keke10 +richard15 +7700 +ganja123 +180277 +crossroad diff --git a/users/password.go b/users/password.go index d7ef250a..2e355ad4 100644 --- a/users/password.go +++ b/users/password.go @@ -1,9 +1,27 @@ package users import ( + "crypto/rand" + "encoding/base64" + "golang.org/x/crypto/bcrypt" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" ) +// ValidateAndHashPwd validates and hashes a password. +func ValidateAndHashPwd(password string, minimumLength uint) (string, error) { + if uint(len(password)) < minimumLength { + return "", fberrors.ErrShortPassword{MinimumLength: minimumLength} + } + + if _, ok := commonPasswords[password]; ok { + return "", fberrors.ErrEasyPassword + } + + return HashPwd(password) +} + // HashPwd hashes a password. func HashPwd(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) @@ -15,3 +33,15 @@ func CheckPwd(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } + +func RandomPwd(passwordLength uint) (string, error) { + randomPasswordBytes := make([]byte, passwordLength) + var _, err = rand.Read(randomPasswordBytes) + if err != nil { + return "", err + } + + // This is done purely to make the password human-readable + var randomPasswordString = base64.URLEncoding.EncodeToString(randomPasswordBytes) + return randomPasswordString, nil +} diff --git a/users/storage.go b/users/storage.go index f9b3aa80..fe66ecac 100644 --- a/users/storage.go +++ b/users/storage.go @@ -1,20 +1,34 @@ package users import ( + "errors" "sync" "time" - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" ) // StorageBackend is the interface to implement for a users storage. type StorageBackend interface { GetBy(interface{}) (*User, error) + GetByScope(scope string) (*User, error) Gets() ([]*User, error) Save(u *User) error Update(u *User, fields ...string) error DeleteByID(uint) error DeleteByUsername(string) error + CountAdmins() (int, error) +} + +type Store interface { + Get(baseScope string, followExternalSymlinks bool, id interface{}) (user *User, err error) + GetByScope(scope string) (*User, error) + Gets(baseScope string, followExternalSymlinks bool) ([]*User, error) + Update(user *User, fields ...string) error + Save(user *User) error + SaveProvisioned(user *User, derivedScope bool) error + Delete(id interface{}) error + LastUpdate(id uint) int64 } // Storage is a users storage. @@ -22,6 +36,10 @@ type Storage struct { back StorageBackend updated map[uint]int64 mux sync.RWMutex + + // provision serializes the scope-collision check and the save of newly + // provisioned users, which must not interleave. See SaveProvisioned. + provision sync.Mutex } // NewStorage creates a users storage from a backend. @@ -35,26 +53,33 @@ func NewStorage(back StorageBackend) *Storage { // Get allows you to get a user by its name or username. The provided // id must be a string for username lookup or a uint for id lookup. If id // is neither, a ErrInvalidDataType will be returned. -func (s *Storage) Get(baseScope string, id interface{}) (user *User, err error) { +func (s *Storage) Get(baseScope string, followExternalSymlinks bool, id interface{}) (user *User, err error) { user, err = s.back.GetBy(id) if err != nil { return } - if err := user.Clean(baseScope); err != nil { + if err := user.Clean(baseScope, followExternalSymlinks); err != nil { return nil, err } return } +// GetByScope returns the first user whose scope matches the given one, or +// ErrNotExist if none does. The user is returned as stored, without setting up +// its filesystem, as it is meant for existence checks rather than serving. +func (s *Storage) GetByScope(scope string) (*User, error) { + return s.back.GetByScope(scope) +} + // Gets gets a list of all users. -func (s *Storage) Gets(baseScope string) ([]*User, error) { +func (s *Storage) Gets(baseScope string, followExternalSymlinks bool) ([]*User, error) { users, err := s.back.Gets() if err != nil { return nil, err } for _, user := range users { - if err := user.Clean(baseScope); err != nil { //nolint:shadow + if err := user.Clean(baseScope, followExternalSymlinks); err != nil { return nil, err } } @@ -64,7 +89,7 @@ func (s *Storage) Gets(baseScope string) ([]*User, error) { // Update updates a user in the database. func (s *Storage) Update(user *User, fields ...string) error { - err := user.Clean("", fields...) + err := user.Clean("", false, fields...) if err != nil { return err } @@ -82,27 +107,67 @@ func (s *Storage) Update(user *User, fields ...string) error { // Save saves the user in a storage. func (s *Storage) Save(user *User) error { - if err := user.Clean(""); err != nil { + if err := user.Clean("", false); err != nil { return err } return s.back.Save(user) } +// SaveProvisioned saves a user that is being provisioned (via signup, proxy +// auth or hook auth). When its scope was derived from the username, it first +// rejects the save if another user already owns that scope, so that distinct +// usernames cannot silently share one home directory. +// +// The check and the save are held under a single lock. Performing them as two +// independent operations lets two concurrent provisioning requests both observe +// a free scope and both save, leaving two users sharing one home directory. +func (s *Storage) SaveProvisioned(user *User, derivedScope bool) error { + if !derivedScope { + return s.Save(user) + } + + s.provision.Lock() + defer s.provision.Unlock() + + switch _, err := s.back.GetByScope(user.Scope); { + case err == nil: + return fberrors.ErrExist + case !errors.Is(err, fberrors.ErrNotExist): + return err + } + + return s.Save(user) +} + // Delete allows you to delete a user by its name or username. The provided // id must be a string for username lookup or a uint for id lookup. If id // is neither, a ErrInvalidDataType will be returned. -func (s *Storage) Delete(id interface{}) (err error) { +func (s *Storage) Delete(id interface{}) error { switch id := id.(type) { case string: - err = s.back.DeleteByUsername(id) - case uint: - err = s.back.DeleteByID(id) - default: - err = errors.ErrInvalidDataType - } + user, err := s.back.GetBy(id) + if err != nil { + return err + } + if s.IsUniqueAdmin(user) { + return fberrors.ErrRootUserDeletion + } - return + return s.back.DeleteByUsername(id) + case uint: + user, err := s.back.GetBy(id) + if err != nil { + return err + } + if s.IsUniqueAdmin(user) { + return fberrors.ErrRootUserDeletion + } + + return s.back.DeleteByID(id) + default: + return fberrors.ErrInvalidDataType + } } // LastUpdate gets the timestamp for the last update of an user. @@ -114,3 +179,15 @@ func (s *Storage) LastUpdate(id uint) int64 { } return 0 } + +func (s *Storage) IsUniqueAdmin(user *User) bool { + if !user.Perm.Admin { + return false + } + + count, err := s.back.CountAdmins() + if err != nil { + return true + } + return count <= 1 +} diff --git a/users/storage_test.go b/users/storage_test.go new file mode 100644 index 00000000..21a9e337 --- /dev/null +++ b/users/storage_test.go @@ -0,0 +1,117 @@ +package users + +import ( + "errors" + "strings" + "sync" + "testing" + "time" + + fberrors "github.com/filebrowser/filebrowser/v2/errors" +) + +// Interface is implemented by storage +var _ Store = &Storage{} + +// slowBackend is a minimal StorageBackend whose scope lookup is deliberately +// slow, so that an unsynchronized check-then-save reliably interleaves. +type slowBackend struct { + mu sync.Mutex + users []*User + delay time.Duration +} + +func (b *slowBackend) GetByScope(scope string) (*User, error) { + time.Sleep(b.delay) + + b.mu.Lock() + defer b.mu.Unlock() + for _, u := range b.users { + if strings.EqualFold(u.Scope, scope) { + return u, nil + } + } + return nil, fberrors.ErrNotExist +} + +func (b *slowBackend) Save(u *User) error { + b.mu.Lock() + defer b.mu.Unlock() + b.users = append(b.users, u) + return nil +} + +func (b *slowBackend) GetBy(interface{}) (*User, error) { return nil, fberrors.ErrNotExist } +func (b *slowBackend) Gets() ([]*User, error) { return b.users, nil } +func (b *slowBackend) Update(*User, ...string) error { return nil } +func (b *slowBackend) DeleteByID(uint) error { return nil } +func (b *slowBackend) DeleteByUsername(string) error { return nil } +func (b *slowBackend) CountAdmins() (int, error) { return 0, nil } + +// Two usernames that normalize to the same home directory must not both be +// provisioned, even when their requests are handled concurrently: checking the +// scope and saving the user has to be a single atomic step. +func TestSaveProvisionedRejectsConcurrentScopeCollision(t *testing.T) { + back := &slowBackend{delay: 50 * time.Millisecond} + store := NewStorage(back) + + errs := make([]error, 2) + var wg, ready sync.WaitGroup + ready.Add(2) + for i, username := range []string{"teamone-x", "teamone/x"} { + wg.Add(1) + go func(i int, username string) { + defer wg.Done() + // Only start once both goroutines are actually running, so that an + // unsynchronized implementation is guaranteed to interleave rather + // than to pass by scheduling luck. + ready.Done() + ready.Wait() + errs[i] = store.SaveProvisioned(&User{ + Username: username, + Password: "pw", + Scope: "/users/teamone-x", + }, true) + }(i, username) + } + wg.Wait() + + saved := 0 + for _, err := range errs { + switch { + case err == nil: + saved++ + case !errors.Is(err, fberrors.ErrExist): + t.Fatalf("unexpected error: %v", err) + } + } + + if saved != 1 { + t.Fatalf("VULNERABLE: %d users provisioned into /users/teamone-x, want 1", saved) + } + if len(back.users) != 1 { + t.Fatalf("%d users stored, want 1", len(back.users)) + } +} + +// A scope that was not derived from the username (explicitly configured by an +// administrator or returned by an auth hook) may legitimately be shared, so it +// must not be subject to the collision check. +func TestSaveProvisionedAllowsSharedExplicitScope(t *testing.T) { + back := &slowBackend{} + store := NewStorage(back) + + for _, username := range []string{"alice", "bob"} { + if err := store.SaveProvisioned(&User{ + Username: username, + Password: "pw", + Scope: "/shared/team", + }, false); err != nil { + t.Fatalf("saving %q with an explicit shared scope: %v", username, err) + } + } + + if len(back.users) != 2 { + t.Fatalf("%d users stored, want 2", len(back.users)) + } +} diff --git a/users/users.go b/users/users.go index 1df0a89b..09db995a 100644 --- a/users/users.go +++ b/users/users.go @@ -2,13 +2,11 @@ package users import ( "path/filepath" - "regexp" - "github.com/spf13/afero" - - "github.com/filebrowser/filebrowser/v2/errors" + fberrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/rules" + "github.com/spf13/afero" ) // ViewMode describes a view mode. @@ -21,18 +19,23 @@ const ( // User describes a user. type User struct { - ID uint `storm:"id,increment" json:"id"` - Username string `storm:"unique" json:"username"` - Password string `json:"password"` - Scope string `json:"scope"` - Locale string `json:"locale"` - LockPassword bool `json:"lockPassword"` - ViewMode ViewMode `json:"viewMode"` - Perm Permissions `json:"perm"` - Commands []string `json:"commands"` - Sorting files.Sorting `json:"sorting"` - Fs afero.Fs `json:"-" yaml:"-"` - Rules []rules.Rule `json:"rules"` + ID uint `storm:"id,increment" json:"id"` + Username string `storm:"unique" json:"username"` + Password string `json:"password"` + Scope string `json:"scope"` + Locale string `json:"locale"` + LockPassword bool `json:"lockPassword"` + ViewMode ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"` + Perm Permissions `json:"perm"` + Commands []string `json:"commands"` + Sorting files.Sorting `json:"sorting"` + Fs afero.Fs `json:"-" yaml:"-"` + Rules []rules.Rule `json:"rules"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + AceEditorTheme string `json:"aceEditorTheme"` } // GetRules implements rules.Provider. @@ -52,8 +55,7 @@ var checkableFields = []string{ // Clean cleans up a user and verifies if all its fields // are alright to be saved. -//nolint:gocyclo -func (u *User) Clean(baseScope string, fields ...string) error { +func (u *User) Clean(baseScope string, followExternalSymlinks bool, fields ...string) error { if len(fields) == 0 { fields = checkableFields } @@ -62,11 +64,11 @@ func (u *User) Clean(baseScope string, fields ...string) error { switch field { case "Username": if u.Username == "" { - return errors.ErrEmptyUsername + return fberrors.ErrEmptyUsername } case "Password": if u.Password == "" { - return errors.ErrEmptyPassword + return fberrors.ErrEmptyPassword } case "ViewMode": if u.ViewMode == "" { @@ -89,12 +91,8 @@ func (u *User) Clean(baseScope string, fields ...string) error { if u.Fs == nil { scope := u.Scope - - if !filepath.IsAbs(scope) { - scope = filepath.Join(baseScope, scope) - } - - u.Fs = afero.NewBasePathFs(afero.NewOsFs(), scope) + scope = filepath.Join(baseScope, filepath.Join("/", scope)) + u.Fs = files.NewFs(afero.NewOsFs(), scope, followExternalSymlinks) } return nil @@ -102,20 +100,5 @@ func (u *User) Clean(baseScope string, fields ...string) error { // FullPath gets the full path for a user's relative path. func (u *User) FullPath(path string) string { - return afero.FullBaseFsPath(u.Fs.(*afero.BasePathFs), path) -} - -// CanExecute checks if an user can execute a specific command. -func (u *User) CanExecute(command string) bool { - if !u.Perm.Execute { - return false - } - - for _, cmd := range u.Commands { - if regexp.MustCompile(cmd).MatchString(command) { - return true - } - } - - return false + return afero.FullBaseFsPath(files.BasePath(u.Fs), path) } diff --git a/users/users_test.go b/users/users_test.go new file mode 100644 index 00000000..87171aaf --- /dev/null +++ b/users/users_test.go @@ -0,0 +1,43 @@ +package users + +import ( + "path/filepath" + "testing" + + "github.com/filebrowser/filebrowser/v2/files" + "github.com/spf13/afero" +) + +// TestUserCleanFs verifies that Clean builds the user filesystem according to the +// followExternalSymlinks flag and that FullPath resolves correctly for either +// implementation. +func TestUserCleanFs(t *testing.T) { + base := t.TempDir() + want := filepath.Join(base, "data", "x") + + t.Run("default builds a symlink-confining ScopedFs", func(t *testing.T) { + u := &User{Username: "u", Password: "p", Scope: "data"} + if err := u.Clean(base, false); err != nil { + t.Fatal(err) + } + if _, ok := u.Fs.(*files.ScopedFs); !ok { + t.Fatalf("expected *files.ScopedFs, got %T", u.Fs) + } + if got := u.FullPath("/x"); got != want { + t.Fatalf("FullPath: got %q, want %q", got, want) + } + }) + + t.Run("followExternalSymlinks builds a bare BasePathFs", func(t *testing.T) { + u := &User{Username: "u", Password: "p", Scope: "data"} + if err := u.Clean(base, true); err != nil { + t.Fatal(err) + } + if _, ok := u.Fs.(*afero.BasePathFs); !ok { + t.Fatalf("expected *afero.BasePathFs, got %T", u.Fs) + } + if got := u.FullPath("/x"); got != want { + t.Fatalf("FullPath: got %q, want %q", got, want) + } + }) +} diff --git a/version/version.go b/version/version.go index 0564cd57..84277efe 100644 --- a/version/version.go +++ b/version/version.go @@ -1,8 +1,9 @@ +//nolint:revive package version var ( // Version is the current File Browser version. Version = "(untracked)" - // CommitSHA is the commmit sha. + // CommitSHA is the commit sha. CommitSHA = "(unknown)" ) diff --git a/wizard.sh b/wizard.sh deleted file mode 100755 index 2f1d87b8..00000000 --- a/wizard.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env sh - -set -e - -untracked="(untracked)" -REPO=$(cd $(dirname $0); pwd) -COMMIT_SHA=$(git rev-parse --short HEAD) -ASSETS="false" -BINARY="false" -RELEASE="" - -debugInfo () { - echo "Repo: $REPO" - echo "Build assets: $ASSETS" - echo "Build binary: $BINARY" - echo "Release: $RELEASE" -} - -buildAssets () { - cd $REPO - rm -rf frontend/dist - rm -f http/rice-box.go - - cd $REPO/frontend - - if [ "$CI" = "true" ]; then - npm ci - else - npm install - fi - - npm run lint - npm run build -} - -buildBinary () { - if ! [ -x "$(command -v rice)" ]; then - go install github.com/GeertJohan/go.rice/rice - fi - - cd $REPO/http - rm -rf rice-box.go - rice embed-go - - cd $REPO - go build -a -o filebrowser -ldflags "-s -w -X github.com/filebrowser/filebrowser/v2/version.CommitSHA=$COMMIT_SHA" -} - -release () { - cd $REPO - - echo "👀 Checking semver format" - - if [ $# -ne 1 ]; then - echo "❌ This release script requires a single argument corresponding to the semver to be released. See semver.org" - exit 1 - fi - - GREP="grep" - if [ -x "$(command -v ggrep)" ]; then - GREP="ggrep" - fi - - semver=$(echo "$1" | $GREP -P '^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)') - - if [ $? -ne 0 ]; then - echo "❌ Not valid semver format. See semver.org" - exit 1 - fi - - echo "🧼 Tidying up go modules" - go mod tidy - - echo "🐑 Creating a new commit for the new release" - git commit --allow-empty -am "chore: version $semver" - git tag "$1" - git push - git push --tags origin - - echo "📦 Done! $semver released." -} - -usage() { - echo "Usage: $0 [-a] [-c] [-b] [-r ]" 1>&2; - exit 1; -} - -DEBUG="false" - -while getopts "bacr:d" o; do - case "${o}" in - b) - ASSETS="true" - BINARY="true" - ;; - a) - ASSETS="true" - ;; - c) - BINARY="true" - ;; - r) - RELEASE=${OPTARG} - ;; - d) - DEBUG="true" - ;; - *) - usage - ;; - esac -done -shift $((OPTIND-1)) - -if [ "$DEBUG" = "true" ]; then - debugInfo -fi - -if [ "$ASSETS" = "true" ]; then - buildAssets -fi - -if [ "$BINARY" = "true" ]; then - buildBinary -fi - -if [ "$RELEASE" != "" ]; then - release $RELEASE -fi